I am not sure if this is a bug so first I will ask.
I have program 1. It hides the menuBar when pressing on F9 key and statusBar 
when pressing F10 key. Also when I hide one of these widgets the tabsGroup gets 
resized. It does the job right but when I change the window size it resizes the 
tabsGroup as if the menuBar and statusBar must be drawn.
Please, try to compile and check it. Tell me if it is a bug or I am doing 
something wrong.

Thank you!

Program 1:
#include <fltk/Button.h>
#include <fltk/Divider.h>
#include <fltk/InvisibleBox.h>
#include <fltk/Item.h>
#include <fltk/ItemGroup.h>
#include <fltk/MenuBar.h>
#include <fltk/TabGroup.h>
#include <fltk/Widget.h>
#include <fltk/Window.h>
#include <fltk/events.h>
#include <fltk/run.h>

#include <stdlib.h>
#include <stdio.h>


using namespace fltk;


class EditorWindow : public Window {
        public:
                EditorWindow(int w, int h);
                ~EditorWindow();

                MenuBar         *menuBar;
                Widget          *toolsBar;
                Widget          *statusBar;
                TabGroup        *tabsGroup;
};

EditorWindow::EditorWindow(int w, int h) : Window(w, h) {
        begin();
                menuBar         = new MenuBar(0, 0, w, 28);
                toolsBar        = new InvisibleBox(UP_BOX, 0, 28, w, 34, 0);
                statusBar       = new InvisibleBox(DOWN_BOX, 0, (h - 28), w, 
28, 0);
                tabsGroup       = new TabGroup(0, (menuBar->h() + 
toolsBar->h()), w, (h - (menuBar->h() + toolsBar->h() + statusBar->h())));
        end();
}

EditorWindow::~EditorWindow() {
        delete menuBar;
}


static bool menuBarState = true;
static bool toolsBarState = true;
static bool statusBarState = true;
static bool fullScrState = false;
static int windowX      = 0;
static int windowY      = 0;
static int windowW      = 800;
static int windowH      = 600;

void buildMenuBar(EditorWindow *windowMain);
void buildToolsBar(EditorWindow *windowMain);
void buildStatusBar(EditorWindow *windowMain);
void buildTabs(EditorWindow *windowMain);
void cbMenuBarToggle(Widget *, void *window);
void cbStatusBarToggle(Widget *, void *window);
void cbFullScrToggle(Widget *, void *window);
void cbQuit(Widget *, void *);


int main(int argc, char **argv)
{
        EditorWindow *windowMain        = new EditorWindow(windowW, windowH);

        windowMain->begin();
                buildMenuBar(windowMain);

                buildTabs(windowMain);

                windowMain->resizable(windowMain->tabsGroup);
                windowMain->size_range(700, 400, 0, 0);
                windowMain->callback(cbQuit);
        windowMain->end();
        windowMain->show(argc, argv);

        run();

        delete windowMain;

        return(0);
}

void buildMenuBar(EditorWindow *windowMain)
{
        windowMain->menuBar->begin();
                windowMain->menuBar->box(UP_BOX);

                ItemGroup *file = new ItemGroup("&File");

                file->begin();
                        file->textsize(18);
                        file->add("New &Window     ", CTRL|'n', 0, 0, 
0)->textsize(18);
                        file->add("New &Tab        ", CTRL|'t', 0, 0, 
0)->textsize(18);
                        file->add("&Open           ", CTRL|'o', 0, 0, 
0)->textsize(18);
                        file->add("Close &Window   ", CTRL|SHIFT|'w', 0, 0, 
0)->textsize(18);
                        file->add("Close &Tab      ", CTRL|'t', 0, 0, 
0)->textsize(18);

                        new Divider();

                        file->add("&Save           ", CTRL|'s', 0, 0, 
0)->textsize(18);
                        file->add("Save &As...     ", CTRL|SHIFT|'s', 0, 0, 
0)->textsize(18);

                        new Divider();

                        file->add("Print Pre&view  ", CTRL|SHIFT|'p', 0, 0, 
0)->textsize(18);
                        file->add("&Print          ", CTRL|'p', 0, 0, 
0)->textsize(18);

                        new Divider();

                        file->add("&Quit           ", CTRL|'q', cbQuit, 0, 
0)->textsize(18);

                file->end();

                ItemGroup *edit = new ItemGroup("&Edit");

                edit->begin();
                        edit->textsize(18);
                        edit->add("&Undo           ", CTRL|'z', 0, 0, 
0)->textsize(18);
                        edit->add("&Redo           ", CTRL|'y', 0, 0, 
0)->textsize(18);

                        new Divider();

                        edit->add("Cu&t            ", CTRL|'x', 0, 0, 
0)->textsize(18);
                        edit->add("&Copy           ", CTRL|'c', 0, 0, 
0)->textsize(18);
                        edit->add("&Paste          ", CTRL|'v', 0, 0, 
0)->textsize(18);
                        edit->add("&Delete         ", DeleteKey, 0, 0, 
0)->textsize(18);

                        new Divider();

                        edit->add("&Find           ", CTRL|'f', 0, 0, 
0)->textsize(18);
                        edit->add("Find A&gain     ", CTRL|'g', 0, 0, 
0)->textsize(18);

                        new Divider();

                        edit->add("Prefere&nces    ", 0, 0, 0, 0)->textsize(18);
                edit->end();

                ItemGroup *view = new ItemGroup("&View");

                view->begin();
                        view->textsize(18);

                        ItemGroup *toolbars     = new ItemGroup("&Toolbars      
      ");

                        toolbars->begin();
                        toolbars->textsize(18);

                        Item *menu      = new Item("&Menu Bar       ");

                                menu->type(Item::TOGGLE);
                                menu->shortcut(F9Key);
                                menu->callback(cbMenuBarToggle, windowMain);
                                menu->textsize(18);

                        Item *status    = new Item("&Status Bar     ");

                                status->type(Item::TOGGLE);
                                status->shortcut(F10Key);
                                status->callback(cbStatusBarToggle, windowMain);
                                status->textsize(18);

                        toolbars->end();

                        new Divider();

                        ItemGroup *zoom = new ItemGroup("&Zoom                
");

                        zoom->begin();
                                zoom->textsize(18);
                                zoom->add("Zoom &In        ", CTRL|'+', 0, 0, 
0)->textsize(18);
                                zoom->add("Zoom &Out       ", CTRL|'-', 0, 0, 
0)->textsize(18);
                                zoom->add("&Reset          ", CTRL|'0', 0, 0, 
0)->textsize(18);

                                new Divider();

                                Item *zoomText  = new Item("Zoom &Text Only ");

                                zoomText->type(Item::TOGGLE);
                                zoomText->textsize(18);
                        zoom->end();

                        Item *fullscreen        = new Item("&Fullscreen     ");

                        fullscreen->type(Item::TOGGLE);
                        fullscreen->shortcut(F11Key);
                        fullscreen->callback(cbFullScrToggle, windowMain);
                        fullscreen->textsize(18);
                view->end();

                ItemGroup *help = new ItemGroup("&Help");

                help->begin();
                        help->textsize(18);
                        help->add("&Help Contents  ", F1Key, 0, 0, 
0)->textsize(18);

                        new Divider();

                        help->add("&Updates Check  ", 0, 0, 0)->textsize(18);

                        new Divider();

                        help->add("&About          ", 0, 0, 0)->textsize(18);
                help->end();
        windowMain->menuBar->end();
}

void buildToolsBar(EditorWindow *windowMain)
{
}

void buildTabs(EditorWindow *windowMain)
{
        InvisibleBox *boxInvisible      = new InvisibleBox(100, 100, 500, 400);

        windowMain->tabsGroup->begin();

                windowMain->tabsGroup->resizable(boxInvisible);

                Group *tab1     = new Group(0, 29, windowMain->tabsGroup->w(), 
((windowMain->tabsGroup->h()) - 29), "Tab 1               ");

                tab1->begin();
                        tab1->labelsize(18);
                tab1->end();

                Group *tab2     = new Group(0, 29, windowMain->tabsGroup->w(), 
((windowMain->tabsGroup->h()) - 29), "Tab 2               ");

                tab2->begin();
                        tab2->labelsize(18);
                tab2->end();
        windowMain->tabsGroup->end();
}

void buildStatusBar(EditorWindow *windowMain)
{
}

void cbMenuBarToggle(Widget *, void *window)
{
        EditorWindow *windowMain = (EditorWindow *) window;

        if(menuBarState) {
                windowMain->menuBar->hide();
                windowMain->toolsBar->y(0);
                windowMain->tabsGroup->y(windowMain->toolsBar->h());
                windowMain->tabsGroup->h(windowMain->tabsGroup->h() + 
windowMain->menuBar->h());

                menuBarState = false;
        } else if (!menuBarState) {
                windowMain->menuBar->show();
                windowMain->toolsBar->hide();
                windowMain->toolsBar->y(windowMain->menuBar->h());
                windowMain->toolsBar->show();
                windowMain->tabsGroup->hide();
                windowMain->tabsGroup->y(windowMain->menuBar->h() + 
windowMain->toolsBar->h());
                windowMain->tabsGroup->show();
                windowMain->tabsGroup->h(windowMain->tabsGroup->h() - 
windowMain->menuBar->h());

                menuBarState = true;
        }
}

void cbStatusBarToggle(Widget *, void *window)
{
        EditorWindow *windowMain        = (EditorWindow *) window;

        if(statusBarState) {
                windowMain->statusBar->hide();
                windowMain->tabsGroup->hide();
                windowMain->tabsGroup->h(windowMain->tabsGroup->h() + 
windowMain->statusBar->h());
                windowMain->tabsGroup->show();

                statusBarState = false;
        } else if(!statusBarState) {
                windowMain->tabsGroup->hide();
                windowMain->tabsGroup->h(windowMain->tabsGroup->h() - 
windowMain->statusBar->h());
                windowMain->tabsGroup->show();
                windowMain->statusBar->show();

                statusBarState = true;
        }
}

void cbFullScrToggle(Widget *, void *window)
{
        EditorWindow *windowMain = (EditorWindow *) window;


        if(fullScrState) {
                windowMain->hide();
                windowMain->fullscreen_off(windowX, windowY, windowW, windowH);
                windowMain->show();

                fullScrState = false;
        } else if (!fullScrState) {
                windowX = windowMain->x();
                windowY = windowMain->y();
                windowW = windowMain->w();
                windowH = windowMain->h();

                windowMain->fullscreen();

                fullScrState = true;
        }
}

void cbQuit(Widget *, void *)
{
        if(event_key_state(EscapeKey)) {
                return;
        }

        exit(0);
}

_______________________________________________
fltk mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk

Reply via email to