diff --git a/Fltk/viewButton.cpp b/Fltk/viewButton.cpp index ae4fcd90756f059f913f71a07d88429e27ac6035..28a265bd856f4c5c0f99470601ed42a63e6775c1 100644 --- a/Fltk/viewButton.cpp +++ b/Fltk/viewButton.cpp @@ -83,6 +83,13 @@ static void view_reload_visible_cb(Fl_Widget *w, void *data) drawContext::global()->draw(); } +static void view_sort_cb(Fl_Widget *w, void *data) +{ + PView::sortByName(); + FlGui::instance()->updateViews(true, true); + drawContext::global()->draw(); +} + static void view_remove_other_cb(Fl_Widget *w, void *data) { if(PView::list.empty()) return; @@ -176,16 +183,10 @@ static void view_save_cb(Fl_Widget *w, void *data) #undef TT #undef NN -static void view_alias_cb(Fl_Widget *w, void *data) -{ - new PView(PView::list[(intptr_t)data], false); - FlGui::instance()->updateViews(true, true); - drawContext::global()->draw(); -} - static void view_alias_with_options_cb(Fl_Widget *w, void *data) { - new PView(PView::list[(intptr_t)data], true); + const bool copyOptions = true; + new PView(PView::list[(intptr_t)data], copyOptions); FlGui::instance()->updateViews(true, true); drawContext::global()->draw(); } @@ -277,64 +278,73 @@ viewButton::viewButton(int x, int y, int w, int h, int num, Fl_Color col) _butt = new Fl_Button(x + w - popw, y, popw, h, "@>"); _butt->align(FL_ALIGN_RIGHT | FL_ALIGN_INSIDE | FL_ALIGN_CLIP); - _butt->tooltip("Show view option menu (Shift+w)"); + _butt->tooltip("Show view options (Shift+w)"); _butt->box(FL_FLAT_BOX); _butt->color(col); _butt->selection_color(col); _popup = new Fl_Menu_Button(x + w - popw, y, popw, h); _popup->type(Fl_Menu_Button::POPUP123); - _popup->add("Reload/View", 'r', + + _popup->add("Options", 'o', + (Fl_Callback *) view_options_cb, (void *)num, 0); + _popup->add("Plugins", 'p', + (Fl_Callback *) plugin_cb, (void *)num, FL_MENU_DIVIDER); + + _popup->add("Reload", 'r', (Fl_Callback *) view_reload_cb, (void *)num, 0); - _popup->add("Reload/Visible Views", 0, - (Fl_Callback *) view_reload_visible_cb, (void *)num, 0); - _popup->add("Reload/All Views", 0, - (Fl_Callback *) view_reload_all_cb, (void *)num, 0); - _popup->add("Remove/View", FL_Delete, + _popup->add("Remove", FL_Delete, (Fl_Callback *) view_remove_cb, (void *)num, 0); - _popup->add("Remove/Other Views", 0, - (Fl_Callback *) view_remove_other_cb, (void *)num, 0); - _popup->add("Remove/Visible Views", 0, - (Fl_Callback *) view_remove_all_cb, (void *)-2, 0); - _popup->add("Remove/Invisible Views", 0, - (Fl_Callback *) view_remove_all_cb, (void *)-3, 0); - _popup->add("Remove/Empty Views", 0, - (Fl_Callback *) view_remove_all_cb, (void *)-4, 0); - _popup->add("Remove/All Views", 0, - (Fl_Callback *) view_remove_all_cb, (void *)-1, 0); - _popup->add("Remove/By Name", 0, - (Fl_Callback *) view_remove_all_cb, (void *)num, 0); - _popup->add("Alias/View without Options", 0, - (Fl_Callback *) view_alias_cb, (void *)num, 0); - _popup->add("Alias/View with Options", 0, + _popup->add("Create Alias", 0, (Fl_Callback *) view_alias_with_options_cb, (void *)num, 0); - _popup->add("Combine Elements/From Visible Views", 0, - (Fl_Callback *) view_combine_space_visible_cb, (void *)num, 0); - _popup->add("Combine Elements/From All Views", 0, + _popup->add("Apply As Background Mesh", 0, + (Fl_Callback *) view_applybgmesh_cb, (void *)num, 0); + _popup->add("Save As...", 0, + (Fl_Callback *) view_save_cb, (void *)num, FL_MENU_DIVIDER); + + _popup->add("Sort By Name", 0, + (Fl_Callback *) view_sort_cb, (void *)0, FL_MENU_DIVIDER); + + _popup->add("All/Reload", 0, + (Fl_Callback *) view_reload_all_cb, (void *)num, 0); + _popup->add("All/Remove", 0, + (Fl_Callback *) view_remove_all_cb, (void *)-1, 0); + _popup->add("All/Combine Elements", 0, (Fl_Callback *) view_combine_space_all_cb, (void *)num, 0); - _popup->add("Combine Elements/By View Name", 0, - (Fl_Callback *) view_combine_space_by_name_cb, (void *)num, 0); - _popup->add("Combine Time Steps/From Visible Views", 0, - (Fl_Callback *) view_combine_time_visible_cb, (void *)num, 0); - _popup->add("Combine Time Steps/From All Views", 0, + _popup->add("All/Combine Time Steps", 0, (Fl_Callback *) view_combine_time_all_cb, (void *)num, 0); - _popup->add("Combine Time Steps/By View Name", 0, - (Fl_Callback *) view_combine_time_by_name_cb, (void *)num, 0); - _popup->add("Set Visibility/All On", 0, + _popup->add("All/Set Visibility On", 0, (Fl_Callback *) view_all_visible_cb, (void *)-1, 0); - _popup->add("Set Visibility/All Off", 0, + _popup->add("All/Set Visibility Off", 0, (Fl_Callback *) view_all_visible_cb, (void *)-2, 0); - _popup->add("Set Visibility/Invert", 0, + _popup->add("All/Invert Visibility", 0, (Fl_Callback *) view_all_visible_cb, (void *)-3, 0); - _popup->add("Set Visibility/By name", 0, + + _popup->add("Visible/Reload", 0, + (Fl_Callback *) view_reload_visible_cb, (void *)num, 0); + _popup->add("Visible/Remove", 0, + (Fl_Callback *) view_remove_all_cb, (void *)-2, 0); + _popup->add("Visible/Combine Elements", 0, + (Fl_Callback *) view_combine_space_visible_cb, (void *)num, 0); + _popup->add("Visible/Combine Time Steps", 0, + (Fl_Callback *) view_combine_time_visible_cb, (void *)num, 0); + + _popup->add("Invisible/Remove", 0, + (Fl_Callback *) view_remove_all_cb, (void *)-3, 0); + + _popup->add("Other/Remove", 0, + (Fl_Callback *) view_remove_other_cb, (void *)num, 0); + + _popup->add("Empty/Remove", 0, + (Fl_Callback *) view_remove_all_cb, (void *)-4, 0); + + _popup->add("Same Name/Remove", 0, + (Fl_Callback *) view_remove_all_cb, (void *)num, 0); + _popup->add("Same Name/Combine Elements", 0, + (Fl_Callback *) view_combine_space_by_name_cb, (void *)num, 0); + _popup->add("Same Name/Combine Time Steps", 0, + (Fl_Callback *) view_combine_time_by_name_cb, (void *)num, 0); + _popup->add("Same Name/Set Visibility On", 0, (Fl_Callback *) view_all_visible_cb, (void *)num, 0); - _popup->add("Apply As Background Mesh", 0, - (Fl_Callback *) view_applybgmesh_cb, (void *)num, 0); - _popup->add("Save As...", 0, - (Fl_Callback *) view_save_cb, (void *)num, FL_MENU_DIVIDER); - _popup->add("Options", 'o', - (Fl_Callback *) view_options_cb, (void *)num, 0); - _popup->add("Plugins", 'p', - (Fl_Callback *) plugin_cb, (void *)num, 0); end(); // close the group resizable(_toggle); diff --git a/Post/PView.cpp b/Post/PView.cpp index 9f71205e57f3c851946b1bee3e94221fc9ae6484..0eda4bfa0a725b52218b43752e626f10939bf349 100644 --- a/Post/PView.cpp +++ b/Post/PView.cpp @@ -291,6 +291,20 @@ void PView::combine(bool time, int how, bool remove) delete *it; } +class PViewLessThanName { +public: + bool operator()(PView *v1, PView *v2) const + { + return v1->getData()->getName() < v2->getData()->getName(); + } +}; + +void PView::sortByName() +{ + std::sort(list.begin(), list.end(), PViewLessThanName()); + for(unsigned int i = 0; i < list.size(); i++) list[i]->setIndex(i); +} + PView *PView::getViewByName(const std::string &name, int timeStep, int partition, const std::string &fileName) { diff --git a/Post/PView.h b/Post/PView.h index ae7b847c56d462f3b2ca51d33ef3001780bca2d9..40e3781a19b41c6c30434d6cf78002ac2afc38f1 100644 --- a/Post/PView.h +++ b/Post/PView.h @@ -113,6 +113,9 @@ class PView{ int partition=-1); static PView *getViewByTag(int tag, int timeStep=-1, int partition=-1); + // sort views in ::list by name + static void sortByName(); + // IO read routines (these are global: they can create multiple // views) static bool readPOS(const std::string &fileName, int fileIndex=-1);