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