void MainVSPScreen::BoldEntries( string mpath ) { Fl_Menu_Item* item = NULL; item = (Fl_Menu_Item*) m_MenuBar->find_item( mpath.c_str() ); if ( item ) { item->labelfont( FL_HELVETICA_BOLD ); } }
// turn the item on if any of its children are on; otherwise restore it // to its off state. static void cb_cb(Fl_Widget *w, void *v) { Fl_Menu_Item *titleitem = (Fl_Menu_Item*) ((Fl_Menu_ *)w)->mvalue(); const Fl_Menu_Item *item; for (item = titleitem+1; item->label(); item++) if (item->value()) { titleitem->set(); return; } titleitem->clear(); }
void NSM_Client::command_active(bool active) { #ifndef NO_UI if(active) { Fl_Menu_Item *m; //TODO see if there is a cleaner way of doing this without voiding //constness if((m=const_cast<Fl_Menu_Item *>(ui->mastermenu->find_item( "&File/&Open Parameters...")))) m->label("&Import Parameters..."); if((m=const_cast<Fl_Menu_Item *>(ui->simplemastermenu->find_item( "&File/&Open Parameters...")))) m->label("&Import Parameters..."); //TODO get this menu entry inserted at the right point if((m=const_cast<Fl_Menu_Item *>(ui->mastermenu->find_item("&File/&Export Parameters...")))) m->show(); else ui->mastermenu->add("&File/&Export Parameters...",0,save_callback,ui); if((m=const_cast<Fl_Menu_Item *>(ui->simplemastermenu->find_item("&File/&Export Parameters...")))) m->show(); else ui->simplemastermenu->add("&File/&Export Parameters...",0,save_callback,ui); ui->sm_indicator1->value(1); ui->sm_indicator2->value(1); ui->sm_indicator1->tooltip(session_manager_name()); ui->sm_indicator2->tooltip(session_manager_name()); } else { Fl_Menu_Item *m; if((m=const_cast<Fl_Menu_Item *>(ui->mastermenu->find_item( "&File/&Import Parameters...")))) m->label("&Open Parameters..."); if((m=const_cast<Fl_Menu_Item *>(ui->simplemastermenu->find_item( "&File/&Open Parameters...")))) m->label("&Open Parameters..."); if((m=const_cast<Fl_Menu_Item *>(ui->mastermenu->find_item("&File/&Export Parameters...")))) m->hide(); if((m=const_cast<Fl_Menu_Item *>(ui->simplemastermenu->find_item("&File/&Export Parameters...")))) m->hide(); ui->sm_indicator1->value(0); ui->sm_indicator2->value(0); ui->sm_indicator1->tooltip(NULL); ui->sm_indicator2->tooltip(NULL); } #endif }
void UserInterface::enableMenuItem(void(*cb)(Fl_Widget*, void*), bool enable) { Fl_Menu_Item * mi = const_cast<Fl_Menu_Item *>(menuBar_->find_item(cb)); if (mi == 0) { throw std::runtime_error("menu callback not found"); } if (enable) { mi->activate(); } else { mi->deactivate(); } }
void ValueViewerWindow::reset() { uiInstance->m_valueTable->clearSelection(); uiInstance->m_valueTable->setType(SEARCH_VALUE_TYPE_4BYTE); uiInstance->m_valueTable->setAddress(0); uiInstance->m_valueTable->setSigned(false); Fl_Menu_Item *it = &uiInstance->menu_ui_valueType[0]; while (it->label() != 0) { if (get_user_data(int, it->user_data()) == SEARCH_VALUE_TYPE_4BYTE) { uiInstance->m_viewerTypeChoice->value(it); break; } it++; } uiInstance->m_viewerSignedButton->value(0); }
// use this to fill in a menu location: static void init(Fl_Menu_Item& m, const char* data) { #ifdef HAVE_STYLES m.style = 0; #endif m.label(data); #if FL_MAJOR_VERSION > 2 m.flags = fltk::RAW_LABEL; #else m.flags = 0; #endif m.labeltype(FL_NORMAL_LABEL); m.shortcut(0); m.labelfont(MENU_FONT_SLOT); m.labelsize(MENU_FONT_SIZE); m.labelcolor(FL_FOREGROUND_COLOR); }
// add a parameter number to the tree Fl_Widget *onelabGroup::_addParameterWidget(onelab::number &p, int ww, int hh, Fl_Tree_Item *n, bool highlight, Fl_Color c) { char *path = strdup(getPath(n).c_str()); _treeStrings.push_back(path); // enumeration (display choices as value labels, not numbers) if(p.getChoices().size() && p.getChoices().size() == p.getValueLabels().size()){ Fl_Choice *but = new Fl_Choice(1, 1, ww, hh); std::vector<Fl_Menu_Item> menu; std::map<double, std::string> labels(p.getValueLabels()); for(std::map<double, std::string>::iterator it = labels.begin(); it != labels.end(); it++){ char *str = strdup(it->second.c_str()); _treeStrings.push_back(str); Fl_Menu_Item menuItem = {str, 0, 0, 0, 0}; if(highlight) menuItem.labelcolor(c); menu.push_back(menuItem); } Fl_Menu_Item it = {0}; menu.push_back(it); but->copy(&menu[0]); for(unsigned int i = 0; i < p.getChoices().size(); i++){ if(p.getValue() == p.getChoices()[i]){ but->value(i); break; } } but->callback(onelab_number_choice_cb, (void*)path); but->align(FL_ALIGN_RIGHT); if(p.getReadOnly()) but->deactivate(); return but; } // check box (boolean choice) if(p.getChoices().size() == 2 && p.getChoices()[0] == 0 && p.getChoices()[1] == 1){ n->labelsize(FL_NORMAL_SIZE + 2); Fl_Check_Button *but = new Fl_Check_Button(1, 1, ww / _widgetLabelRatio, hh); but->box(FL_FLAT_BOX); but->color(_tree->color()); but->value(p.getValue()); but->callback(onelab_number_check_button_cb, (void*)path); if(highlight) but->color(c); if(p.getReadOnly()) but->deactivate(); return but; } // non-editable value if(p.getReadOnly()){ outputRange *but = new outputRange(1, 1, ww, hh); //TODO but->callback(onelab_number_output_range_cb, (void*)path); but->value(p.getValue()); but->align(FL_ALIGN_RIGHT); but->graph(p.getAttribute("Graph")); if(highlight) but->color(c); return but; } // general number input inputRange *but = new inputRange(1, 1, ww, hh, onelab::parameter::maxNumber(), p.getAttribute("ReadOnlyRange") == "1"); but->value(p.getValue()); but->minimum(p.getMin()); but->maximum(p.getMax()); but->step(p.getStep()); but->choices(p.getChoices()); but->loop(p.getAttribute("Loop")); but->graph(p.getAttribute("Graph")); but->callback(onelab_number_input_range_cb, (void*)path); but->when(FL_WHEN_RELEASE | FL_WHEN_ENTER_KEY); but->align(FL_ALIGN_RIGHT); if(highlight) but->color(c); return but; }
void ShowTabMenu(int tab) { static char beenhere; if (!beenhere) { beenhere = 1; #if FL_MAJOR_VERSION < 2 Fl::set_labeltype(FRAME_LABEL, frame_label_draw, frame_label_measure); Fl::set_labeltype(TEXT_LABEL, label_draw, label_measure); #endif if (exit_flag) { Fl_Menu_Item* m = other_menu_items+num_other_items-2; m->label("Exit"); m->callback(exit_cb); } } static Fl_Menu_Item* menu = 0; static int arraysize = 0; #if DESKTOPS int one_desktop = !Desktop::first->next; #endif // count up how many items are on the menu: int n = num_other_items; #if WMX_MENU_ITEMS load_wmx(); if (num_wmx) { n -= 1; // delete "new xterm" // add wmx items int level = 0; for (int i=0; i<num_wmx; i++) { int nextlev = (i==num_wmx-1)?0:strspn(wmxlist[i+1], "/")-1; if (nextlev < level) { n += level-nextlev; level = nextlev; } else if (nextlev > level) level++; n++; } } #endif #if DESKTOPS // count number of items per desktop in these variables: int numsticky = 0; Desktop* d; for (d = Desktop::first; d; d = d->next) d->junk = 0; #endif // every frame contributes 1 item: Frame* c; for (c = Frame::first; c; c = c->next) { if (c->state() == UNMAPPED || c->transient_for()) continue; #if DESKTOPS if (!c->desktop()) { numsticky++; } else { c->desktop()->junk++; } #endif n++; } #if DESKTOPS if (!one_desktop) { // add the sticky "desktop": n += 2; if (!numsticky) n++; if (Desktop::current()) { n += numsticky; Desktop::current()->junk += numsticky; } // every desktop contributes menu title, null terminator, // and possible delete: for (d = Desktop::first; d; d = d->next) { n += 2; if (!d->junk) n++; } } #endif if (n > arraysize) { delete[] menu; menu = new Fl_Menu_Item[arraysize = n]; } // build the menu: n = 0; const Fl_Menu_Item* preset = 0; const Fl_Menu_Item* first_on_desk = 0; #if DESKTOPS if (one_desktop) { #endif for (c = Frame::first; c; c = c->next) { if (c->state() == UNMAPPED || c->transient_for()) continue; #if FL_MAJOR_VERSION < 2 init(menu[n],(char*)c); menu[n].labeltype(FRAME_LABEL); #else init(menu[n],c->label()); #endif menu[n].callback(frame_callback, c); if (is_active_frame(c)) preset = menu+n; n++; } if (n > 0) first_on_desk = menu; #if DESKTOPS } else for (d = Desktop::first; ; d = d->next) { // this loop adds the "sticky" desktop last, when d==0 if (d == Desktop::current()) preset = menu+n; init(menu[n], d ? d->name() : "Sticky"); menu[n].callback(desktop_cb, d); menu[n].flags = FL_SUBMENU; n++; if (d && !d->junk) { init(menu[n],"delete this desktop"); menu[n].callback(delete_desktop_cb, d); n++; } else if (!d && !numsticky) { init(menu[n],"(empty)"); menu[n].callback_ = 0; menu[n].deactivate(); n++; } else { if (d == Desktop::current()) first_on_desk = menu+n; for (c = Frame::first; c; c = c->next) { if (c->state() == UNMAPPED || c->transient_for()) continue; if (c->desktop() == d || (!c->desktop() && d == Desktop::current())) { init(menu[n],(char*)c); #if FL_MAJOR_VERSION < 2 init(menu[n],(char*)c); menu[n].labeltype(FRAME_LABEL); #else init(menu[n],c->label()); #endif menu[n].callback(d == Desktop::current() ? frame_callback : move_frame_callback, c); if (d == Desktop::current() && is_active_frame(c)) preset = menu+n; n++; } } } menu[n].label(0); n++; // terminator for submenu if (!d) break; } #endif // For ALT+Tab, move the selection forward or backward: if (tab > 0 && first_on_desk) { if (!preset) preset = first_on_desk; else { preset++; if (!preset->label() || preset->callback_ != frame_callback) preset = first_on_desk; } } else if (tab < 0 && first_on_desk) { if (preset && preset != first_on_desk) preset--; else { // go to end of menu preset = first_on_desk; while (preset[1].label() && preset[1].callback_ == frame_callback) preset++; } } #if WMX_MENU_ITEMS // put wmx-style commands above that: if (num_wmx > 0) { char* cmd; int pathlen[MAX_NESTING_DEPTH]; int level = 0; pathlen[0] = wmx_pathlen; for (int i = 0; i < num_wmx; i++) { cmd = wmxlist[i]; cmd += strspn(cmd, "/")-1; init(menu[n], cmd+pathlen[level]); #if FL_MAJOR_VERSION < 2 #if DESKTOPS if (one_desktop) #endif if (!level) menu[n].labeltype(TEXT_LABEL); #endif int nextlev = (i==num_wmx-1)?0:strspn(wmxlist[i+1], "/")-1; if (nextlev < level) { menu[n].callback(spawn_cb, cmd); // Close 'em off for (; level>nextlev; level--) init(menu[++n], 0); } else if (nextlev > level) { // This should be made a submenu pathlen[++level] = strlen(cmd)+1; // extra for next trailing / menu[n].flags = FL_SUBMENU; menu[n].callback((Fl_Callback*)0); } else { menu[n].callback(spawn_cb, cmd); } n++; } } // put the fixed menu items at the bottom: #if XTERM_MENU_ITEM if (num_wmx) // if wmx commands, delete the built-in xterm item: memcpy(menu+n, other_menu_items+1, sizeof(other_menu_items)-sizeof(Fl_Menu_Item)); else #endif #endif memcpy(menu+n, other_menu_items, sizeof(other_menu_items)); #if FL_MAJOR_VERSION < 2 #if DESKTOPS if (one_desktop) #endif // fix the menus items so they are indented to align with window names: while (menu[n].label()) menu[n++].labeltype(TEXT_LABEL); #endif const Fl_Menu_Item* picked = menu->popup(Fl::event_x(), Fl::event_y(), 0, preset); #if FL_MAJOR_VERSION < 2 if (picked && picked->callback()) picked->do_callback(0); #endif }