I actually had a handle() override in the original example, but I took it out because I was having trouble making it reliable. That is, don't forget to capture the event where the user activates the menu via shortcut.
It was a fun little puzzle. H. On Oct 12, 2009, at 1:42 AM, [email protected] wrote: > Aha!! Thinking about why the draw() suggestion failed suggested > something that does work! > > Thanks again Harvey! (and Ian and Matt) > > /////////////////////////////////////////////////////// > #include <FL/Fl.H> > #include <FL/Fl_Double_Window.H> > #include <FL/Fl_Menu_Bar.H> > #include <FL/Fl_Menu_Item.H> > #include <unistd.h> > > char const* const filename = "file1.txt"; > > Fl_Menu_Item theMenu[] = { > {"View", 0, 0, 0, 64, FL_NORMAL_LABEL, 0, 14, 0}, > {filename, 0, 0, 0, FL_MENU_TOGGLE | FL_MENU_VALUE, > FL_NORMAL_LABEL, 0, 14, 0}, > {0,0,0,0,0,0,0,0,0}, > {0,0,0,0,0,0,0,0,0} > }; > > class MyMenuBar : public Fl_Menu_Bar { > public: > MyMenuBar(int x, int y, int w, int h, char const* label = 0) > : Fl_Menu_Bar(x, y, w, h, label) > , view_file1_(&theMenu[1]) > { > menu(theMenu); > view_file1_->clear(); > } > private: > Fl_Menu_Item* view_file1_; > int handle(int event) > { > if(event == FL_PUSH) { > if(!access(filename, R_OK)) { > view_file1_->activate(); > } > else { > view_file1_->deactivate(); > } > } > return Fl_Menu_Bar::handle(event); > } > }; > > class Window : public Fl_Double_Window { > public: > Window(int w, int h) > : Fl_Double_Window(w, h) > , menu_bar_(0, 0, w, 30) > { > end(); > } > private: > MyMenuBar menu_bar_; > }; > > int main() > { > Window win(300, 500); > win.resizable(&win); > win.show(); > return Fl::run(); > } > > _______________________________________________ > fltk mailing list > [email protected] > http://lists.easysw.com/mailman/listinfo/fltk _______________________________________________ fltk mailing list [email protected] http://lists.easysw.com/mailman/listinfo/fltk

