From 98ab903d5d7e247cbb11b298db06143273cb4ae5 Mon Sep 17 00:00:00 2001 From: Christophe Geuzaine <cgeuzaine@ulg.ac.be> Date: Sun, 8 Sep 2013 18:55:08 +0000 Subject: [PATCH] call quick visibility menu with double-click in graphic window (with memory of last clicked item) --- Fltk/graphicWindow.cpp | 17 +++++++++++++---- Fltk/openglWindow.cpp | 17 ++++++++++++----- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/Fltk/graphicWindow.cpp b/Fltk/graphicWindow.cpp index 872a899e0f..d2a2f61683 100644 --- a/Fltk/graphicWindow.cpp +++ b/Fltk/graphicWindow.cpp @@ -2302,7 +2302,8 @@ void status_options_cb(Fl_Widget *w, void *data) perspectiveEditor(); drawContext::global()->draw(); } - else if(!strcmp(str, "M")){ // quick visibility menu + else if(!strcmp(str, "quickvis") || + !strcmp(str, "quickvis_toggle")){ // quick visibility menu static Fl_Menu_Item menu[] = { { "Axes", 0, quick_visibility_cb, (void*)"axes", FL_MENU_TOGGLE|FL_MENU_DIVIDER }, @@ -2362,8 +2363,16 @@ void status_options_cb(Fl_Widget *w, void *data) break; } } - const Fl_Menu_Item *m = menu->popup(Fl::event_x(), Fl::event_y(), 0, &menu[22], 0); - if(m) m->do_callback(0, m->user_data()); + if(!strcmp(str, "quickvis_toggle")){ + const Fl_Menu_Item *m = menu->popup(Fl::event_x(), Fl::event_y(), 0, &menu[22], 0); + if(m) m->do_callback(0, m->user_data()); + } + else{ + static Fl_Menu_Item *picked = &menu[22]; + picked = (Fl_Menu_Item*)menu->popup(Fl::event_x(), Fl::event_y(), 0, + picked ? picked : &menu[22], 0); + if(picked) picked->do_callback(0, picked->user_data()); + } drawContext::global()->draw(); } else if(!strcmp(str, "clscale")){ @@ -2715,7 +2724,7 @@ graphicWindow::graphicWindow(bool main, int numTiles, bool detachedMenu) _butt[8]->tooltip("Toggle projection mode (Alt+o or Alt+Shift+o)"); x += sw; _butt[12] = new Fl_Button(x, mh + glheight + mheight + 2, sw, sht, "M"); - _butt[12]->callback(status_options_cb, (void *)"M"); + _butt[12]->callback(status_options_cb, (void *)"quickvis_toggle"); _butt[12]->tooltip("Quick visibility menu (Alt+m to toggle mesh display)"); x += sw; _butt[13] = new Fl_Button(x, mh + glheight + mheight + 2, sw, sht, "@-1gmsh_clscale"); diff --git a/Fltk/openglWindow.cpp b/Fltk/openglWindow.cpp index 34061b8c77..372031c0a3 100644 --- a/Fltk/openglWindow.cpp +++ b/Fltk/openglWindow.cpp @@ -22,19 +22,21 @@ #include "Trackball.h" #include "GamePad.h" -// Navigator handler (read gamepad event if gamepad exists or question presence of gamepad) +// Navigator handler (read gamepad event if gamepad exists or question presence +// of gamepad) static void navigator_handler(void *data) { openglWindow* gl_win = (openglWindow*)data; if (CTX::instance()->gamepad && CTX::instance()->gamepad->active) { if (gl_win->Nautilus ==0){ - gl_win->Nautilus = new Navigator(CTX::instance()->gamepad->frequency,gl_win->getDrawContext()); + gl_win->Nautilus = new Navigator(CTX::instance()->gamepad->frequency, + gl_win->getDrawContext()); } gl_win->moveWithGamepad(); Fl::add_timeout(CTX::instance()->gamepad->frequency, navigator_handler, data); } else{ - if (gl_win->Nautilus){ delete gl_win->Nautilus; gl_win->Nautilus=0; } + if (gl_win->Nautilus){ delete gl_win->Nautilus; gl_win->Nautilus = 0; } Fl::add_timeout(3., navigator_handler, data); } } @@ -255,8 +257,8 @@ void openglWindow::draw() cam->up.x,cam->up.y,cam->up.z); _ctx->draw3d(); _ctx->draw2d(); - if(CTX::instance()->gamepad && CTX::instance()->gamepad->active && Nautilus) Nautilus->drawIcons(); - + if(CTX::instance()->gamepad && CTX::instance()->gamepad->active && Nautilus) + Nautilus->drawIcons(); _drawScreenMessage(); _drawBorder(); } @@ -340,6 +342,11 @@ int openglWindow::handle(int event) return Fl_Gl_Window::handle(event); case FL_PUSH: + if(Fl::event_clicks() == 1){ // double-click + status_options_cb(0, (void*)"quickvis"); + Fl::event_clicks(-1); + return 1; + } _setLastHandled(this); take_focus(); // force keyboard focus when we click in the window _curr.set(_ctx, Fl::event_x(), Fl::event_y()); -- GitLab