diff --git a/.gitignore b/.gitignore index 8f76e8dd..2f1ce971 100644 --- a/.gitignore +++ b/.gitignore @@ -28,6 +28,7 @@ test/dialog test/string-operations test/hello test/watch +test/menu test/input-dialog test/mandelbrot test/keyboard diff --git a/ChangeLog b/ChangeLog index 181b16bd..acf60fa2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2015-12-08 Markus Gans + * Add "menu" example to demonstrate the behavior from FMenuBar, + FMenu, FMenuItem, FCheckMenuItem and FRadioMenuItem widgets. + * Show status bar messages, if no keys are available. + 2015-11-29 Markus Gans * Better handling of empty strings in FLineEdit and FButton * Add a sub-menu to the "ui.cpp" example diff --git a/src/fapp.cpp b/src/fapp.cpp index 0e71a190..c6ebcca6 100644 --- a/src/fapp.cpp +++ b/src/fapp.cpp @@ -976,12 +976,15 @@ void FApplication::processMouseEvent() menu->hide(); menu->hideSubMenus(); menu->hideSuperMenus(); + if ( statusBar() ) + statusBar()->clearMessage(); // No widget was been clicked if ( ! clicked_widget ) { // activate previous window FWindow::activatePrevWindow(); + FWindow::raiseWindow (FWindow::getActiveWindow()); FWindow::getActiveWindow()->getFocusWidget()->setFocus(); FWindow::getActiveWindow()->redraw(); if ( statusBar() ) diff --git a/src/fdialog.cpp b/src/fdialog.cpp index eeeb8f70..ce3d9a1d 100644 --- a/src/fdialog.cpp +++ b/src/fdialog.cpp @@ -233,7 +233,8 @@ void FDialog::drawTitleBar() print (' '); // the title bar text - print (tb_text); + if ( tb_text ) + print (tb_text); // fill the rest of the bar for (; x+1+int(length) < width-1; x++) diff --git a/src/fmenu.cpp b/src/fmenu.cpp index aa3ca8dd..c2a5a1ae 100644 --- a/src/fmenu.cpp +++ b/src/fmenu.cpp @@ -123,6 +123,12 @@ void FMenu::init(FWidget* parent) if ( mbar ) mbar->menu_dimension(); } + else if ( isMenu(parent) ) + { + FMenu* smenu = dynamic_cast(parent); + if ( smenu ) + smenu->menu_dimension(); + } setSuperMenu(parent); } menu_dimension(); @@ -174,11 +180,11 @@ void FMenu::menu_dimension() while ( iter != end ) { (*iter)->setGeometry (item_X, item_Y, int(maxItemWidth), 1); - + if ( (*iter)->hasMenu() ) - { - int menu_X = (*iter)->getX() + int(maxItemWidth) + 1; - int menu_Y = (*iter)->getY(); + {//(*iter)->setText( FString().setNumber(itemlist.size()) ); + int menu_X = (*iter)->getGlobalX() + int(maxItemWidth); + int menu_Y = (*iter)->getGlobalY() - 2; // set sub-menu position (*iter)->getMenu()->setPos (menu_X, menu_Y, false); } @@ -227,7 +233,8 @@ void FMenu::openSubMenu (FMenu* sub_menu) // open sub menu sub_menu->selectFirstItem(); - sub_menu->getSelectedItem()->setFocus(); + if ( sub_menu->hasSelectedItem() ) + sub_menu->getSelectedItem()->setFocus(); sub_menu->setVisible(); sub_menu->show(); open_sub_menu = sub_menu; @@ -865,6 +872,7 @@ void FMenu::onKeyPress (FKeyEvent* ev) { hideSuperMenus(); activatePrevWindow(); + raiseWindow (getActiveWindow()); getActiveWindow()->getFocusWidget()->setFocus(); getActiveWindow()->redraw(); } @@ -1031,7 +1039,7 @@ void FMenu::onMouseUp (FMouseEvent* ev) openSubMenu (sub_menu); else if ( open_sub_menu ) { - if ( open_sub_menu->hasSelectedItem() ) + /*if ( open_sub_menu->hasSelectedItem() ) { FMenuItem* sel_item = getSelectedItem(); hideSubMenus(); @@ -1042,10 +1050,11 @@ void FMenu::onMouseUp (FMouseEvent* ev) updateTerminal(); flush_out(); } - else + else*/ { open_sub_menu->selectFirstItem(); - open_sub_menu->getSelectedItem()->setFocus(); + if ( open_sub_menu->hasSelectedItem() ) + open_sub_menu->getSelectedItem()->setFocus(); open_sub_menu->redraw(); if ( statusBar() ) statusBar()->drawMessage(); @@ -1154,6 +1163,7 @@ void FMenu::onMouseMove (FMouseEvent* ev) focused_widget->redraw(); if ( statusBar() ) statusBar()->drawMessage(); + // sub menu handling if ( (*iter)->hasMenu() ) { FMenu* sub_menu = (*iter)->getMenu(); @@ -1236,9 +1246,15 @@ void FMenu::onMouseMove (FMouseEvent* ev) if ( focus_changed ) redraw(); - + if ( show_sub_menu ) { + // close open sub menu + if ( open_sub_menu ) + { + open_sub_menu->hideSubMenus(); + open_sub_menu->hide(); + } // open sub menu show_sub_menu->setVisible(); show_sub_menu->show(); diff --git a/src/fmenubar.cpp b/src/fmenubar.cpp index 4f48d521..d1890387 100644 --- a/src/fmenubar.cpp +++ b/src/fmenubar.cpp @@ -566,22 +566,22 @@ void FMenuBar::onMouseDown (FMouseEvent* ev) FApplication::queueEvent(focused_widget, &out); (*iter)->setSelected(); (*iter)->setFocus(); + if ( focused_widget ) + focused_widget->redraw(); (*iter)->openMenu(); setSelectedItem(*iter); focus_changed = true; - if ( focused_widget ) - focused_widget->redraw(); - } - if ( (*iter)->hasMenu() ) - { - FMenu* menu = (*iter)->getMenu(); - if ( menu->hasSelectedItem() ) - { - menu->unselectItem(); - menu->redraw(); - focus_changed = true; - drop_down = true; - } + + if ( (*iter)->hasMenu() ) + { + FMenu* menu = (*iter)->getMenu(); + if ( menu->hasSelectedItem() ) + { + menu->unselectItem(); + menu->redraw(); + drop_down = true; + } + } } } else @@ -728,11 +728,11 @@ void FMenuBar::onMouseMove (FMouseEvent* ev) FApplication::queueEvent(focused_widget, &out); (*iter)->setSelected(); (*iter)->setFocus(); + if ( focused_widget ) + focused_widget->redraw(); (*iter)->openMenu(); setSelectedItem(*iter); focus_changed = true; - if ( focused_widget ) - focused_widget->redraw(); if ( (*iter)->hasMenu() ) { diff --git a/src/fstatusbar.cpp b/src/fstatusbar.cpp index 4a84d0bf..82ded7ca 100644 --- a/src/fstatusbar.cpp +++ b/src/fstatusbar.cpp @@ -221,7 +221,10 @@ void FStatusBar::drawKeys() ypos = lastLine; if ( keylist.empty() ) + { + x_msg = 1; return; + } setUpdateVTerm(false); gotoxy (1, lastLine); @@ -565,7 +568,7 @@ bool FStatusBar::hasActivatedKey() void FStatusBar::drawMessage() { int termWidth, lastLine, space_offset; - bool isLastActiveFocus; + bool isLastActiveFocus, hasKeys; if ( ! isVisible() ) return; @@ -576,8 +579,9 @@ void FStatusBar::drawMessage() termWidth = getColumnNumber(); lastLine = getLineNumber(); space_offset = 1; + hasKeys = bool(! keylist.empty()); - if ( ! keylist.empty() ) + if ( hasKeys ) { std::vector::const_iterator iter = keylist.end(); isLastActiveFocus = bool( (*(iter-1))->isActivated() @@ -598,14 +602,17 @@ void FStatusBar::drawMessage() { if ( text ) { - x += 2; if ( ! isLastActiveFocus ) { x++; print (vstatusbar, ' '); } - print (vstatusbar, fc::BoxDrawingsVertical); // │ - print (vstatusbar, ' '); + if ( hasKeys ) + { + x += 2; + print (vstatusbar, fc::BoxDrawingsVertical); // │ + print (vstatusbar, ' '); + } int msg_length = int(getMessage().getLength()); x += msg_length; diff --git a/src/fwidget.cpp b/src/fwidget.cpp index e5739152..755c1049 100644 --- a/src/fwidget.cpp +++ b/src/fwidget.cpp @@ -685,7 +685,8 @@ bool FWidget::focusNextChild(void) { if ( hasParent() ) { - if ( getParent()->hasChildren() ) + FWidget* parent = static_cast(getParent()); + if ( parent->hasChildren() && parent->numOfFocusableChildren() > 1 ) { FObject::object_list children; FObject::object_list::iterator iter, end; @@ -746,7 +747,8 @@ bool FWidget::focusPrevChild(void) { if ( hasParent() ) { - if ( getParent()->hasChildren() ) + FWidget* parent = static_cast(getParent()); + if ( parent->hasChildren() && parent->numOfFocusableChildren() > 1 ) { FObject::object_list children; FObject::object_list::iterator iter, begin; diff --git a/test/Makefile.am b/test/Makefile.am index 2f6cfacb..5bd3e913 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -15,6 +15,7 @@ noinst_PROGRAMS = \ watch \ keyboard \ timer \ + menu \ ui hello_SOURCES = hello.cpp @@ -26,5 +27,5 @@ calculator_SOURCES = calculator.cpp watch_SOURCES = watch.cpp keyboard_SOURCES = keyboard.cpp timer_SOURCES = timer.cpp +menu_SOURCES = menu.cpp ui_SOURCES = ui.cpp - diff --git a/test/Makefile.in b/test/Makefile.in index f330ad18..a1fbbceb 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -85,7 +85,7 @@ host_triplet = @host@ noinst_PROGRAMS = hello$(EXEEXT) dialog$(EXEEXT) input-dialog$(EXEEXT) \ string-operations$(EXEEXT) mandelbrot$(EXEEXT) \ calculator$(EXEEXT) watch$(EXEEXT) keyboard$(EXEEXT) \ - timer$(EXEEXT) ui$(EXEEXT) + timer$(EXEEXT) menu$(EXEEXT) ui$(EXEEXT) subdir = test DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp @@ -123,6 +123,9 @@ keyboard_LDADD = $(LDADD) am_mandelbrot_OBJECTS = mandelbrot.$(OBJEXT) mandelbrot_OBJECTS = $(am_mandelbrot_OBJECTS) mandelbrot_LDADD = $(LDADD) +am_menu_OBJECTS = menu.$(OBJEXT) +menu_OBJECTS = $(am_menu_OBJECTS) +menu_LDADD = $(LDADD) am_string_operations_OBJECTS = string-operations.$(OBJEXT) string_operations_OBJECTS = $(am_string_operations_OBJECTS) string_operations_LDADD = $(LDADD) @@ -171,12 +174,14 @@ am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(calculator_SOURCES) $(dialog_SOURCES) $(hello_SOURCES) \ $(input_dialog_SOURCES) $(keyboard_SOURCES) \ - $(mandelbrot_SOURCES) $(string_operations_SOURCES) \ - $(timer_SOURCES) $(ui_SOURCES) $(watch_SOURCES) + $(mandelbrot_SOURCES) $(menu_SOURCES) \ + $(string_operations_SOURCES) $(timer_SOURCES) $(ui_SOURCES) \ + $(watch_SOURCES) DIST_SOURCES = $(calculator_SOURCES) $(dialog_SOURCES) \ $(hello_SOURCES) $(input_dialog_SOURCES) $(keyboard_SOURCES) \ - $(mandelbrot_SOURCES) $(string_operations_SOURCES) \ - $(timer_SOURCES) $(ui_SOURCES) $(watch_SOURCES) + $(mandelbrot_SOURCES) $(menu_SOURCES) \ + $(string_operations_SOURCES) $(timer_SOURCES) $(ui_SOURCES) \ + $(watch_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ @@ -334,6 +339,7 @@ calculator_SOURCES = calculator.cpp watch_SOURCES = watch.cpp keyboard_SOURCES = keyboard.cpp timer_SOURCES = timer.cpp +menu_SOURCES = menu.cpp ui_SOURCES = ui.cpp all: all-am @@ -403,6 +409,10 @@ mandelbrot$(EXEEXT): $(mandelbrot_OBJECTS) $(mandelbrot_DEPENDENCIES) $(EXTRA_ma @rm -f mandelbrot$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(mandelbrot_OBJECTS) $(mandelbrot_LDADD) $(LIBS) +menu$(EXEEXT): $(menu_OBJECTS) $(menu_DEPENDENCIES) $(EXTRA_menu_DEPENDENCIES) + @rm -f menu$(EXEEXT) + $(AM_V_CXXLD)$(CXXLINK) $(menu_OBJECTS) $(menu_LDADD) $(LIBS) + string-operations$(EXEEXT): $(string_operations_OBJECTS) $(string_operations_DEPENDENCIES) $(EXTRA_string_operations_DEPENDENCIES) @rm -f string-operations$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(string_operations_OBJECTS) $(string_operations_LDADD) $(LIBS) @@ -431,6 +441,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/input-dialog.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyboard.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mandelbrot.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/menu.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/string-operations.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/timer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@ diff --git a/test/menu.cpp b/test/menu.cpp new file mode 100644 index 00000000..5efcefe5 --- /dev/null +++ b/test/menu.cpp @@ -0,0 +1,283 @@ +// File: menu.cpp + +#include "final.h" + +// You have chosen "Cola". + +//---------------------------------------------------------------------- +// class Menu +//---------------------------------------------------------------------- + +#pragma pack(push) +#pragma pack(1) + +class Menu : public FDialog +{ + private: + Menu (const Menu&); // Disabled copy constructor + Menu& operator = (const Menu&); // and operator '=' + + public: + explicit Menu (FWidget* = 0); // constructor + ~Menu(); // destructor + void onClose (FCloseEvent*); + void cb_message (FWidget*, void*); + void cb_exitApp (FWidget*, void*); + protected: + void adjustSize(); +}; +#pragma pack(pop) + +//---------------------------------------------------------------------- +Menu::Menu (FWidget* parent) + : FDialog(parent) +{ + // menu bar + FMenuBar* Menubar = new FMenuBar (this); + + // menu bar items + FMenu* File = new FMenu ("&File", Menubar); + File->setStatusbarMessage ("File management commands"); + FMenu* Edit = new FMenu ("&Edit", Menubar); + Edit->setStatusbarMessage ("Cut-and-paste editing commands"); + FMenu* Choice = new FMenu ("&Choice", Menubar); + Choice->setStatusbarMessage ("Choice menu"); + FMenuItem* Window = new FMenuItem ("&Window", Menubar); + Window->setDisable(); + FMenuItem* Help = new FMenuItem ("&Help", Menubar); + Help->setStatusbarMessage ("Show version and copyright information"); + + // "File" menu items + FMenuItem* New = new FMenuItem ("&New", File); + New->addAccelerator (fc::Fckey_n); // Ctrl + N + New->setStatusbarMessage ("Create a new file"); + FMenuItem* Open = new FMenuItem ("&Open...", File); + Open->addAccelerator (fc::Fckey_o); // Ctrl + O + Open->setStatusbarMessage ("Locate and open a text file"); + FMenuItem* Save = new FMenuItem ("&Save", File); + Save->addAccelerator (fc::Fckey_s); // Ctrl + S + Save->setStatusbarMessage ("Save the file"); + FMenuItem* SaveAs = new FMenuItem ("&Save as...", File); + SaveAs->setStatusbarMessage ("Save the current file under a different name"); + FMenuItem* Close = new FMenuItem ("&Close", File); + Close->addAccelerator (fc::Fckey_w); // Ctrl + W + Close->setStatusbarMessage ("Close the current file"); + FMenuItem* Line1 = new FMenuItem (File); + Line1->setSeparator(); + FMenuItem* Print = new FMenuItem ("&Print", File); + Print->addAccelerator (fc::Fckey_p); // Ctrl + P + Print->setStatusbarMessage ("Print the current file"); + FMenuItem* Line2 = new FMenuItem (File); + Line2->setSeparator(); + FMenuItem* Quit = new FMenuItem ("&Quit", File); + Quit->addAccelerator (fc::Fmkey_x); // Meta/Alt + X + Quit->setStatusbarMessage ("Exit the program"); + + // "Edit" menu items + FMenuItem* Undo = new FMenuItem (fc::Fckey_z, "&Undo", Edit); + Undo->setStatusbarMessage ("Undo the previous operation"); + FMenuItem* Redo = new FMenuItem (fc::Fckey_y, "&Redo", Edit); + Redo->setDisable(); + FMenuItem* Line3 = new FMenuItem (Edit); + Line3->setSeparator(); + FMenuItem* Cut = new FMenuItem (fc::Fckey_x, "Cu&t", Edit); + Cut->setStatusbarMessage ("Remove the input text and put it in the clipboard"); + FMenuItem* Copy = new FMenuItem (fc::Fckey_c, "&Copy", Edit); + Copy->setStatusbarMessage ("Copy the input text into the clipboad"); + FMenuItem* Paste = new FMenuItem (fc::Fckey_v, "&Paste", Edit); + Paste->setStatusbarMessage ("Insert text form clipboard"); + FMenuItem* Line4 = new FMenuItem (Edit); + Line4->setSeparator(); + FMenuItem* Search = new FMenuItem (fc::Fckey_f, "&Search", Edit); + Search->setStatusbarMessage ("Search for text"); + FMenuItem* Next = new FMenuItem (fc::Fkey_f3, "Search &next", Edit); + Next->setStatusbarMessage ("Repeat the last search command"); + FMenuItem* Line5 = new FMenuItem (Edit); + Line5->setSeparator(); + FMenuItem* SelectAll = new FMenuItem (fc::Fckey_a, "Select &all", Edit); + SelectAll->setStatusbarMessage ("Select the whole text"); + + // "Choice" menu items + FMenu* Color = new FMenu ("&Color", Choice); + Color->setStatusbarMessage ("Choose a color"); + FMenu* Style = new FMenu ("&Style", Choice); + Style->setStatusbarMessage ("Choose a Style"); + FMenu* Border = new FMenu ("&Border", Choice); + Border->setStatusbarMessage ("Choose Border"); + + // "Color" menu items + FRadioMenuItem* Color1 = new FRadioMenuItem ("Red", Color); + Color1->setStatusbarMessage ("Set text red"); + FRadioMenuItem* Color2 = new FRadioMenuItem ("Green", Color); + Color2->setStatusbarMessage ("Set text green"); + FRadioMenuItem* Color3 = new FRadioMenuItem ("Yellow", Color); + Color3->setStatusbarMessage ("Set text yellow"); + FRadioMenuItem* Color4 = new FRadioMenuItem ("Brue", Color); + Color4->setStatusbarMessage ("Set text brue"); + FRadioMenuItem* Color5 = new FRadioMenuItem ("Black", Color); + Color5->setStatusbarMessage ("Set text black"); + Color5->setChecked(); + + // "Style" menu items + FCheckMenuItem* Bold = new FCheckMenuItem ("Bold", Style); + Bold->setStatusbarMessage ("Set text bold"); + FCheckMenuItem* Italic = new FCheckMenuItem ("Italic", Style); + Italic->setStatusbarMessage ("Set text italic"); + + // "Border" menu items + FMenu* BColor = new FMenu ("&Color", Border); + BColor->setStatusbarMessage ("Choose the border color"); + FMenu* BStyle = new FMenu ("&Style", Border); + BStyle->setStatusbarMessage ("Choose the border Style"); + + // "BColor" menu items + FRadioMenuItem* BColor1 = new FRadioMenuItem ("Red", BColor); + BColor1->setStatusbarMessage ("Set red border"); + FRadioMenuItem* BColor2 = new FRadioMenuItem ("Blue", BColor); + BColor2->setStatusbarMessage ("Set blue border"); + + // "BStyle" menu items + FString line(13, wchar_t(fc::BoxDrawingsHorizontal)); + FRadioMenuItem* BStyle1 = new FRadioMenuItem (line, BStyle); + BStyle1->setChecked(); + BStyle1->setStatusbarMessage ("Set border 1"); + FRadioMenuItem* BStyle2 = new FRadioMenuItem ("-------------", BStyle); + BStyle2->setStatusbarMessage ("Set border 2"); + FRadioMenuItem* BStyle3 = new FRadioMenuItem ("- - - - - - -", BStyle); + BStyle3->setStatusbarMessage ("Set border 3"); + FRadioMenuItem* BStyle4 = new FRadioMenuItem ("- - - - -", BStyle); + BStyle4->setStatusbarMessage ("Set border 4"); + + // Menu function callbacks + Open->addCallback + ( + "clicked", + _METHOD_CALLBACK (this, &Menu::cb_message) + ); + Quit->addCallback + ( + "clicked", + _METHOD_CALLBACK (this, &Menu::cb_exitApp) + ); + Undo->addCallback + ( + "clicked", + _METHOD_CALLBACK (this, &Menu::cb_message) + ); + Cut->addCallback + ( + "clicked", + _METHOD_CALLBACK (this, &Menu::cb_message) + ); + Copy->addCallback + ( + "clicked", + _METHOD_CALLBACK (this, &Menu::cb_message) + ); + Paste->addCallback + ( + "clicked", + _METHOD_CALLBACK (this, &Menu::cb_message) + ); + SelectAll->addCallback + ( + "clicked", + _METHOD_CALLBACK (this, &Menu::cb_message) + ); + Help->addCallback + ( + "clicked", + _METHOD_CALLBACK (this, &Menu::cb_message) + ); + + // Statusbar at the bottom + FStatusBar* statusbar = new FStatusBar (this); + statusbar->setMessage("Status bar message"); + + // Headline labels + FLabel* Headline1 = new FLabel(" Key ", this); + Headline1->ignorePadding(); + Headline1->setGeometry(3,2,5,1); + Headline1->setEmphasis(); + + FLabel* Headline2 = new FLabel(" Function ", this); + Headline2->ignorePadding(); + Headline2->setGeometry(15,2,10,1); + Headline2->setEmphasis(); + + // Info label + FLabel* Info = new FLabel(" Activate menu bar\n" + "+ Exit", this); + Info->setGeometry(2,1,32,2); +} + +//---------------------------------------------------------------------- +Menu::~Menu() +{ } + +//---------------------------------------------------------------------- +void Menu::onClose (FCloseEvent* ev) +{ + int ret = FMessageBox::info ( this, "Quit" + , "Do you really want\n" + "to quit the program ?" + , FMessageBox::Yes + , FMessageBox::No ); + if ( ret == FMessageBox::Yes ) + ev->accept(); + else + ev->ignore(); +} + +//---------------------------------------------------------------------- +void Menu::cb_message (FWidget* widget, void*) +{ + FButton* button = static_cast(widget); + FString text = button->getText(); + text = text.replace('&', ""); + FMessageBox::info (this, "Info", "You have chosen \"" + text + "\""); +} + +//---------------------------------------------------------------------- +void Menu::cb_exitApp (FWidget*, void*) +{ + close(); +} + +//---------------------------------------------------------------------- +void Menu::adjustSize() +{ + int pw = parentWidget()->getWidth(); + int ph = parentWidget()->getHeight(); + setX (1 + (pw - getWidth()) / 2, false); + setY (1 + (ph - getHeight()) / 4, false); + FDialog::adjustSize(); +} + +//---------------------------------------------------------------------- +// main part +//---------------------------------------------------------------------- + +int main (int argc, char* argv[]) +{ + if ( argv[1] && ( strcmp(argv[1], "--help") == 0 + || strcmp(argv[1], "-h") == 0 ) ) + { + std::cout << "Generic options:" << std::endl + << " -h, --help " + << "Display this help and exit" << std::endl; + FApplication::print_cmd_Options(); + exit(EXIT_SUCCESS); + } + + FApplication app (argc, argv); + + Menu main_dlg (&app); + main_dlg.setText ("Menu example"); + main_dlg.setGeometry (int(1+(app.getWidth()-36)/2), 2, 36, 5); + main_dlg.setShadow(); + + app.setMainWidget (&main_dlg); + main_dlg.show(); + return app.exec(); +} diff --git a/test/ui.cpp b/test/ui.cpp index f399a9f6..c88b86dc 100644 --- a/test/ui.cpp +++ b/test/ui.cpp @@ -221,7 +221,7 @@ MyDialog::MyDialog (FWidget* parent) FMenuItem* Open = new FMenuItem ("&Open...", File); Open->addAccelerator (fc::Fckey_o); // Ctrl + O Open->setStatusbarMessage ("Locate and open a text file"); - FMenu* Recent = new FMenu ("System files", File); + FMenu* Recent = new FMenu ("&System files", File); Recent->setStatusbarMessage ("View text file"); FMenuItem* Line1 = new FMenuItem (File); @@ -315,17 +315,20 @@ MyDialog::MyDialog (FWidget* parent) File1->addCallback ( "clicked", - _METHOD_CALLBACK (this, &MyDialog::cb_view) + _METHOD_CALLBACK (this, &MyDialog::cb_view), + dynamic_cast(File1) ); File2->addCallback ( "clicked", - _METHOD_CALLBACK (this, &MyDialog::cb_view) + _METHOD_CALLBACK (this, &MyDialog::cb_view), + dynamic_cast(File2) ); File3->addCallback ( "clicked", - _METHOD_CALLBACK (this, &MyDialog::cb_view) + _METHOD_CALLBACK (this, &MyDialog::cb_view), + dynamic_cast(File3) ); // Buttons @@ -635,7 +638,7 @@ void MyDialog::cb_drives (FWidget*, void*) } //---------------------------------------------------------------------- -void MyDialog::cb_cutClipboard (FWidget*, void*) +void MyDialog::cb_cutClipboard (FWidget*, void*) { if ( ! myLineEdit ) return; @@ -645,7 +648,7 @@ void MyDialog::cb_cutClipboard (FWidget*, void*) } //---------------------------------------------------------------------- -void MyDialog::cb_copyClipboard (FWidget*, void*) +void MyDialog::cb_copyClipboard (FWidget*, void*) { if ( ! myLineEdit ) return; @@ -653,7 +656,7 @@ void MyDialog::cb_copyClipboard (FWidget*, void*) } //---------------------------------------------------------------------- -void MyDialog::cb_pasteClipboard (FWidget*, void*) +void MyDialog::cb_pasteClipboard (FWidget*, void*) { if ( ! myLineEdit ) return; @@ -662,7 +665,7 @@ void MyDialog::cb_pasteClipboard (FWidget*, void*) } //---------------------------------------------------------------------- -void MyDialog::cb_clearInput (FWidget*, void*) +void MyDialog::cb_clearInput (FWidget*, void*) { if ( ! myLineEdit ) return; @@ -723,11 +726,12 @@ void MyDialog::cb_activateButton (FWidget* widget, void* data_ptr) } //---------------------------------------------------------------------- -void MyDialog::cb_view (FWidget* widget, void*) +void MyDialog::cb_view (FWidget*, void* data_ptr) { FString file; - FMenuItem* item = static_cast(widget); - if ( item->getText() ) + FMenuItem* item = static_cast(data_ptr); + + if ( item && item->getText() ) file = item->getText(); else file = FFileDialog::fileOpenChooser (this);