The BlackHole Desktop Environment Home Page

We now have a channel on irc.openprojects.net, #bde.

This is just another temporary page until we make something more elaborate.

As usual, you can find the project page  here . And you can find the BlackHole homepage l here .
I have to warn you, the BlackHole homepage has not been updated in about 6 months, so the information
about the project is pretty much out of date.
 

BTK- The toolkit of the project

BDE is based on one of the lightest toolkits around, my very own BlackHole Toolkit( BTK )
If you want some screenshots, here's one with almost every usable widget.

Links to other parts of this page:

And this table shows the current status of many objects in the toolkit:
 
Object Status
bObject Pefrectly usable
bApplication Usable, pretty much complete
bWidget Complete, Usable
bWindow Complete for the most part.  Usable
bPushButton Pretty much complete.  Usable
bCheckButton Complete, Usable
bRadioButton/bRadioGroup Complete, Usable
bContainer Complete, Usable
bGroupBox Complete, Usable
bFrame Complete, Usable
bEdit/derivatives Incomplete, segfaults, UNUSABLE!
bMenu/bSelector Incomplete, segfaults, UNUSABLE
bMenuBar Doesn't segfault anymore, somewhat usable
bMenuItem/bSelectorItem Uncertain, segfaults when adding children to the selector
bListBox, bComboBox Untested
bScrollBar Almost Usable
bProgressBar Usable as far as I can tell
bScrollView Untested
bPixmap Incomplete
bList Complete, usable
Anything else I missed Untested

The main function in the toolkit is the overloaded drawButton() function, which can, or should,
draw any size/shaped button-style object in the style of Motif.  The plain rectangular one works
perfectly
 

Quick BTK Tutorial

since BTK is very similar to Qt and FLTK, there is very little to explain as a quick tutorial.
I will write an elaborate one when I finalize everything, but right now, here's a quicky:

The steps in the creation are as follows:

Step 1. Create the Application Object.
            THIS MUST BE THE FIRST OBJECT CREATED IN THE PROGRAM!!!
            I did this because the entire program is in a tree, with the Application object as the root of the tree.

Step 2.  Create the windows.
            Usually, you would subclass off of bWindow or bMainWindow in order to use custom signals and slots
            Here's an example of a bWindow subclass:

            class foo    :    public bWindow
            {
                public:
                    foo( int x, int y, int w, int h );
                    ~foo();
                    SIGNAL_DEF(mySignal )
                    void a_slot();
                    TYPE(foo);
                protected:
                    bPushButton *quitButton;
            }

            foo::foo( int x, int y, int w, int h ) : bWindow( x, y, w, h )
            {
                quitButton = new bPushButton( "Quit", 0, 0, 50, 30, this );
                connect( quitButton, SIGNAL(clicked), bApp, (bMember)&bApplication::quit );
                connect( this, SIGNAL( mySignal ), this, (bMember)&foo::a_slot );
                quitButton->show();
            }

            int main()
            {
                bApplication a;
                foo b( 0, 0, 300, 200);
                b.show();
                return a.run();
            }

            As you can see, ANY function can be a slot, as long as you can match the arguments.  Right now, you can have
            at MOST 1 argument in a signal, using SIGNAL_DEFA(signame, datatype).
            This gets by the moc that Qt uses, although it may be just a little messier.
            One important thing, if you want your fancy new widget to be known, use the TYPE macro.  This isn't necessary,
            and should not be used unless you are going to make a brand new widget that doesn't use conventional styles.

            Oh, and every widget, windows included, needs to be passed a geometry, but windows don't get passed a parent.
            For a list of member functions, check the header files, they have the class prototypes, and the function names are pretty
            self-explanatory.

Step 3.  Create an instance, and run the app, using app.run() or app->run(), depending on how you created the app.

Step 4.  Debug, debug, debug.  Since right now BTK is pre-beta, not everything is tested, and I know for a fact that it segfaults
                when you quit the app successfully.

And if you want to know sizes, the toolkit takes about 5 minutes to compile on my intel Celeron 500MHz, with 256 MB RAM running KDE,
and only about 3-4 minutes running IceWM.  The TK compiles into 865k with debuggin symbols, and stripped is about 474k.  So, it is a pretty small kit.

Have fun coding, and please report ALL bugs/patches/wishes to me at jhibbits@hotmail.com

 SourceForge Logo