DO NOT REPLY TO THIS MESSAGE.  INSTEAD, POST ANY RESPONSES TO THE LINK BELOW.

[STR New]

Link: http://www.fltk.org/str.php?L1758
Version: 1.3-feature





Link: http://www.fltk.org/str.php?L1758
Version: 1.3-feature
#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Menu_Bar.H>
#include <FL/Fl_Button.H>

// Exercise STR#1758 additions -- erco 04/08/10

Fl_Menu_Bar *menubar = 0;
void my_menu_callback(Fl_Widget*,void*) {
  char name[80];

  Fl_Menu_Item *item = (Fl_Menu_Item*)menubar->find_item("File");
  menubar->item_pathname(name, sizeof(name)-1, item);
  printf("ITEM PATHNAME FOR 'File' MENU IS '%s'\n", name);

  item = (Fl_Menu_Item*)menubar->find_item("Edit/Preferences");
  menubar->item_pathname(name, sizeof(name)-1, item);
  printf("ITEM PATHNAME FOR 'Edit->Preferences' MENU IS '%s'\n", name);
}

void show_menubar() {
    printf("--- MENUBAR IS NOW %d\n", menubar->size());
    for ( int t=0; t<menubar->size(); t++ ) {
        printf("%d) '%s'\n", t, (menubar->menu()+t)->label() ? 
(menubar->menu()+t)->label() : "---");
    }
}

static void insert_cb(Fl_Widget*w,void*data) {
    static int count = 0;
    char s[80]; sprintf(s, "Insert Item %d", ++count);
    menubar->insert((int)data,s,0,0);
    menubar->redraw();
    show_menubar();
}

static void append_cb(Fl_Widget*w,void*) {
    static int count = 0;
    char s[80]; sprintf(s, "Append Item %d", ++count);
    menubar->insert(-1,s,0,0);
    menubar->redraw();
    show_menubar();
}

static void clear_recent_cb(Fl_Widget*w,void*) {
    int index = menubar->find_index("File/Recent");
    printf("--- CLEAR File/Recent submenu: index=%d\n", index);
    if ( index >= 0 ) menubar->clear_submenu(index);
    show_menubar();
}

static void add_recent_cb(Fl_Widget*w,void*) {
    printf("--- ADD File/Recent submenu\n");
    menubar->add("File/Recent/Aaa",0,0);
    menubar->add("File/Recent/Bbb",0,0);
    menubar->add("File/Recent/Ccc/c001",0,0);
    menubar->add("File/Recent/Ccc/c002",0,0);
    menubar->add("File/Recent/Ccc/c003",0,0);
    menubar->add("File/Recent/Ccc/CCC Submenu/0001",0,0);
    menubar->add("File/Recent/Ccc/CCC Submenu/0002",0,0);
    menubar->add("File/Recent/Ccc/CCC Submenu/0003",0,0);
    menubar->add("File/Recent/Ddd",0,0);
    show_menubar();
}

static void find_index_cb(Fl_Widget*w,void*) {
  Fl_Menu_Item *m;
  int index = menubar->find_index("File/Recent/Aaa");
  printf("--- FIND INDEX: [NAME] File/Recent/Aaa: %d '%s'\n", index, 
(index!=-1) ? menubar->menu()[index].label() : "NOPE");
  m = (Fl_Menu_Item*)((index!=-1) ? menubar->menu()+index : 0);
  index = menubar->find_index(m);
  printf("--- FIND INDEX: [ITEM] File/Recent/Aaa+0: %d '%s'\n", index, 
(index!=-1) ? menubar->menu()[index].label() : "NOPE");
  m++;
  index = menubar->find_index(m);
  printf("--- FIND INDEX: [ITEM] File/Recent/Aaa+1: %d '%s'\n", index, 
(index!=-1) ? menubar->menu()[index].label() : "NOPE");


  index = menubar->find_index("File/Quit");
  printf("--- FIND INDEX: [NAME] File/Quit: %d '%s'\n", index, (index!=-1) ? 
menubar->menu()[index].label() : "NOPE");
  m = (Fl_Menu_Item*)((index!=-1) ? menubar->menu()+index : 0);
  index = menubar->find_index(m);
  printf("--- FIND INDEX: [ITEM] File/Recent/Aaa+0: %d '%s'\n", index, 
(index!=-1) ? menubar->menu()[index].label() : "NOPE");
  m++;
  index = menubar->find_index(m);
  printf("--- FIND INDEX: [ITEM] File/Recent/Aaa+1: %d '%s'\n", index, 
(index!=-1) ? menubar->menu()[index].label() : "NOPE");

  index = menubar->find_index(append_cb);
  printf("--- FIND INDEX: [CALLBACK] append_cb: %d '%s'\n", index, (index!=-1) 
? menubar->menu()[index].label() : "NOPE");

  index = menubar->find_index(add_recent_cb);
  printf("--- FIND INDEX: [CALLBACK] add_recent_cb: %d '%s'\n", index, 
(index!=-1) ? menubar->menu()[index].label() : "NOPE");

  index = menubar->find_index(clear_recent_cb);
  printf("--- FIND INDEX: [CALLBACK] clear_recent_cb: %d '%s'\n", index, 
(index!=-1) ? menubar->menu()[index].label() : "NOPE");

  index = menubar->find_index(find_index_cb);
  printf("--- FIND INDEX: [CALLBACK] find_index_cb (SHOULD BE NOT FOUND): %d 
'%s'\n", index, (index!=-1) ? menubar->menu()[index].label() : "NOPE");
}

int main() {
  Fl_Window win(700,400);
  menubar = new Fl_Menu_Bar(0,0,700,25);
  menubar->add("File/&Open",  0, my_menu_callback);
  menubar->add("File/&Save",  0, my_menu_callback);
  menubar->add("File/Recent/One",0,0);
  menubar->add("File/Recent/Two",0,0);
  menubar->add("File/Recent/Three",0,0);
  menubar->add("File/Quit",0,0);
  menubar->add("Edit/&Copy",  0, my_menu_callback);
  menubar->add("Edit/Preferences/foo",  0, my_menu_callback);
  menubar->add("Edit/Insert",  0, insert_cb, (void*)1);
  menubar->add("Edit/Append",  0, append_cb);
  menubar->add("Edit/Clear Recent",  0, clear_recent_cb);
  menubar->add("Edit/Add Recent",  0, add_recent_cb);
  Fl_Button but1(10,100,120,25,"Insert 1");     but1.callback(insert_cb, 
(void*)1);
  Fl_Button but2(10,130,120,25,"Insert 2");     but2.callback(insert_cb, 
(void*)2);
  Fl_Button but3(10,160,120,25,"Append");       but3.callback(append_cb);
  Fl_Button but4(10,190,120,25,"Clear Recent"); but4.callback(clear_recent_cb);
  Fl_Button but5(10,220,120,25,"Add Recent");   but5.callback(add_recent_cb);
  Fl_Button but6(10,250,120,25,"Find Index");   but6.callback(find_index_cb);
  win.show();
  return(Fl::run());
}
_______________________________________________
fltk-dev mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk-dev

Reply via email to