diff --git a/Common/Options.cpp b/Common/Options.cpp index 3ff5a0ad5b716ce7a12e1de21638b4709570850a..0c9f8980b1fcf4b97c260b1e8268a616b479320c 100644 --- a/Common/Options.cpp +++ b/Common/Options.cpp @@ -1770,12 +1770,7 @@ double opt_general_graphics_size0(OPT_ARGS_NUM) #if defined(HAVE_FLTK) if(FlGui::available()){ if(action & GMSH_SET){ - FlGui::instance()->graph[0]->win->size - (CTX::instance()->glSize[0], - FlGui::instance()->graph[0]->win->h()); - // workaround resizing bug on Mac - FlGui::instance()->graph[0]->win->size_range - (FlGui::instance()->graph[0]->minWidth, FlGui::instance()->graph[0]->minHeight); + FlGui::instance()->graph[0]->setGlWidth(CTX::instance()->glSize[0]); } } #endif @@ -1791,12 +1786,7 @@ double opt_general_graphics_size1(OPT_ARGS_NUM) #if defined(HAVE_FLTK) if(FlGui::available()){ if(action & GMSH_SET){ - FlGui::instance()->graph[0]->win->size - (FlGui::instance()->graph[0]->win->w(), - FlGui::instance()->graph[0]->bottom->h() + CTX::instance()->glSize[1]); - // workaround resizing bug on Mac - FlGui::instance()->graph[0]->win->size_range - (FlGui::instance()->graph[0]->minWidth, FlGui::instance()->graph[0]->minHeight); + FlGui::instance()->graph[0]->setGlHeight(CTX::instance()->glSize[1]); } } #endif @@ -2488,16 +2478,16 @@ double opt_general_mouse_selection(OPT_ARGS_NUM) if(FlGui::available()) Msg::StatusBar(false, "Mouse selection ON"); for(unsigned int i = 0; i < FlGui::instance()->graph.size(); i++) - FlGui::instance()->graph[i]->butt[9]->color(FL_BACKGROUND_COLOR); + FlGui::instance()->graph[i]->getSelectionButton()->color(FL_BACKGROUND_COLOR); } else{ if(FlGui::available()) Msg::StatusBar(false, "Mouse selection OFF"); for(unsigned int i = 0; i < FlGui::instance()->graph.size(); i++) - FlGui::instance()->graph[i]->butt[9]->color(FL_RED); + FlGui::instance()->graph[i]->getSelectionButton()->color(FL_RED); } for(unsigned int i = 0; i < FlGui::instance()->graph.size(); i++) - FlGui::instance()->graph[i]->butt[9]->redraw(); + FlGui::instance()->graph[i]->getSelectionButton()->redraw(); } #endif return CTX::instance()->mouseSelection; diff --git a/Fltk/FlGui.cpp b/Fltk/FlGui.cpp index 5df40535dc33f609bc82c218c47f61d022b91d63..3ad61ffbd38e2ac3d0f8322daa859ca9cd252ac5 100644 --- a/Fltk/FlGui.cpp +++ b/Fltk/FlGui.cpp @@ -243,7 +243,7 @@ FlGui::FlGui(int argc, char **argv) CTX::instance()->detachedMenu ? true : false)); // FIXME: make this cleaner ;-) - onelab = graph.back()->onelab; + onelab = graph.back()->getMenu(); #if defined(WIN32) graph[0]->win->icon @@ -270,8 +270,8 @@ FlGui::FlGui(int argc, char **argv) gmsh32x32, 32, 32)); #endif - graph[0]->win->show(1, argv); - if(graph[0]->menuwin) graph[0]->menuwin->show(); + graph[0]->getWindow()->show(1, argv); + if(graph[0]->getMenuWindow()) graph[0]->getMenuWindow()->show(); // graphic window should have the initial focus (so we can e.g. directly loop // through time steps with the keyboard) @@ -281,9 +281,11 @@ FlGui::FlGui(int argc, char **argv) // create additional graphic windows for(int i = 1; i < CTX::instance()->numWindows; i++){ graphicWindow *g = new graphicWindow(false, CTX::instance()->numTiles); - g->win->resize(graph.back()->win->x() + 10, graph.back()->win->y() + 10, - graph.back()->win->w(), graph.back()->win->h()); - g->win->show(); + g->getWindow()->resize(graph.back()->getWindow()->x() + 10, + graph.back()->getWindow()->y() + 10, + graph.back()->getWindow()->w(), + graph.back()->getWindow()->h()); + g->getWindow()->show(); graph.push_back(g); } @@ -753,10 +755,8 @@ void FlGui::splitCurrentOpenglWindow(char how) { openglWindow *g = getCurrentOpenglWindow(); for(unsigned int i = 0; i < graph.size(); i++){ - if(graph[i]->tile->find(g) != graph[i]->tile->children()){ - graph[i]->split(g, how); + if(graph[i]->split(g, how)) break; - } } } @@ -774,8 +774,8 @@ void FlGui::setStatus(const char *msg, bool opengl) strncpy(buff, msg, sizeof(buff) - 1); buff[sizeof(buff) - 1] = '\0'; for(unsigned int i = 0; i < graph.size(); i++){ - graph[i]->label->label(buff); - graph[i]->label->redraw(); + graph[i]->getProgress()->label(buff); + graph[i]->getProgress()->redraw(); } } else{ @@ -797,20 +797,20 @@ void FlGui::setStatus(const char *msg, bool opengl) void FlGui::setProgress(const char *msg, double val, double min, double max) { for(unsigned int i = 0; i < FlGui::instance()->graph.size(); i++){ - if(FlGui::instance()->graph[i]->label->value() != val) - FlGui::instance()->graph[i]->label->value(val); - if(FlGui::instance()->graph[i]->label->minimum() != min) - FlGui::instance()->graph[i]->label->minimum(min); - if(FlGui::instance()->graph[i]->label->maximum() != max) - FlGui::instance()->graph[i]->label->maximum(max); + if(FlGui::instance()->graph[i]->getProgress()->value() != val) + FlGui::instance()->graph[i]->getProgress()->value(val); + if(FlGui::instance()->graph[i]->getProgress()->minimum() != min) + FlGui::instance()->graph[i]->getProgress()->minimum(min); + if(FlGui::instance()->graph[i]->getProgress()->maximum() != max) + FlGui::instance()->graph[i]->getProgress()->maximum(max); } setStatus(msg); } void FlGui::storeCurrentWindowsInfo() { - CTX::instance()->glPosition[0] = graph[0]->win->x(); - CTX::instance()->glPosition[1] = graph[0]->win->y(); + CTX::instance()->glPosition[0] = graph[0]->getWindow()->x(); + CTX::instance()->glPosition[1] = graph[0]->getWindow()->y(); CTX::instance()->glSize[0] = graph[0]->getGlWidth(); CTX::instance()->glSize[1] = graph[0]->getGlHeight(); CTX::instance()->msgSize = graph[0]->getMessageHeight(); @@ -873,8 +873,8 @@ void window_cb(Fl_Widget *w, void *data) if(str == "minimize"){ for(unsigned int i = 0; i < FlGui::instance()->graph.size(); i++) - if(FlGui::instance()->graph[i]->win->shown()) - FlGui::instance()->graph[i]->win->iconize(); + if(FlGui::instance()->graph[i]->getWindow()->shown()) + FlGui::instance()->graph[i]->getWindow()->iconize(); if(FlGui::instance()->options->win->shown()) FlGui::instance()->options->win->iconize(); if(FlGui::instance()->plugins->win->shown()) @@ -894,25 +894,25 @@ void window_cb(Fl_Widget *w, void *data) } else if(str == "zoom"){ if(zoom){ - oldx = FlGui::instance()->graph[0]->win->x(); - oldy = FlGui::instance()->graph[0]->win->y(); - oldw = FlGui::instance()->graph[0]->win->w(); - oldh = FlGui::instance()->graph[0]->win->h(); + oldx = FlGui::instance()->graph[0]->getWindow()->x(); + oldy = FlGui::instance()->graph[0]->getWindow()->y(); + oldw = FlGui::instance()->graph[0]->getWindow()->w(); + oldh = FlGui::instance()->graph[0]->getWindow()->h(); //#define FS #ifndef FS - FlGui::instance()->graph[0]->win->resize(Fl::x(), Fl::y(), Fl::w(), Fl::h()); + FlGui::instance()->graph[0]->getWindow()->resize(Fl::x(), Fl::y(), Fl::w(), Fl::h()); FlGui::instance()->graph[0]->hideMessages(); FlGui::check(); #else - FlGui::instance()->graph[0]->win->fullscreen(); + FlGui::instance()->graph[0]->getWindow()->fullscreen(); #endif zoom = 0; } else{ #ifndef FS - FlGui::instance()->graph[0]->win->resize(oldx, oldy, oldw, oldh); + FlGui::instance()->graph[0]->getWindow()->resize(oldx, oldy, oldw, oldh); #else - FlGui::instance()->graph[0]->win->fullscreen_off(); + FlGui::instance()->graph[0]->getWindow()->fullscreen_off(); #endif zoom = 1; } @@ -920,7 +920,7 @@ void window_cb(Fl_Widget *w, void *data) else if(str == "front"){ // the order is important! for(unsigned int i = 0; i < FlGui::instance()->graph.size(); i++) - FlGui::instance()->graph[i]->win->show(); + FlGui::instance()->graph[i]->getWindow()->show(); if(FlGui::instance()->options->win->shown()) FlGui::instance()->options->win->show(); if(FlGui::instance()->plugins->win->shown()) diff --git a/Fltk/graphicWindow.cpp b/Fltk/graphicWindow.cpp index f444f2bfc5aa4802bf633262e7bf4dfa8d68a1db..a9581dbabde95bc3eebaae8611829d8f93a086a7 100644 --- a/Fltk/graphicWindow.cpp +++ b/Fltk/graphicWindow.cpp @@ -237,9 +237,11 @@ static void file_window_cb(Fl_Widget *w, void *data) graphicWindow *g2 = new graphicWindow(false, CTX::instance()->numTiles); FlGui::instance()->graph.push_back(g2); FlGui::instance()->setGraphicTitle(GModel::current()->getFileName()); - g2->win->resize(g1->win->x() + 10, g1->win->y() + 10, - g1->win->w(), g1->win->h()); - g2->win->show(); + g2->getWindow()->resize(g1->getWindow()->x() + 10, + g1->getWindow()->y() + 10, + g1->getWindow()->w(), + g1->getWindow()->h()); + g2->getWindow()->show(); } else if(str == "split_h"){ FlGui::instance()->splitCurrentOpenglWindow('h'); @@ -2273,7 +2275,7 @@ static graphicWindow *getGraphicWindow(Fl_Widget *w) { if(!w || !w->parent()) return FlGui::instance()->graph[0]; for(unsigned int i = 0; i < FlGui::instance()->graph.size(); i++) - if(FlGui::instance()->graph[i]->win == w->parent()) + if(FlGui::instance()->graph[i]->getWindow() == w->parent()) return FlGui::instance()->graph[i]; return FlGui::instance()->graph[0]; } @@ -2577,7 +2579,7 @@ static void remove_graphic_window_cb(Fl_Widget *w, void *data) std::vector<graphicWindow*> graph2; graphicWindow *deleteMe = 0; for(unsigned int i = 0; i < FlGui::instance()->graph.size(); i++){ - if(FlGui::instance()->graph[i]->win == w) + if(FlGui::instance()->graph[i]->getWindow() == w) deleteMe = FlGui::instance()->graph[i]; else graph2.push_back(FlGui::instance()->graph[i]); @@ -2711,32 +2713,32 @@ graphicWindow::graphicWindow(bool main, int numTiles, bool detachedMenu) // the graphic window should be a "normal" window (neither modal nor // non-modal) if(main){ - win = new mainWindow(width, height, false); - win->callback(file_quit_cb); + _win = new mainWindow(width, height, false); + _win->callback(file_quit_cb); } else{ - win = new paletteWindow(width, height, false); - win->callback(remove_graphic_window_cb); + _win = new paletteWindow(width, height, false); + _win->callback(remove_graphic_window_cb); } #if defined(__APPLE__) - sysbar = 0; + _sysbar = 0; #endif - bar = 0; + _bar = 0; if(main){ #if defined(__APPLE__) if(CTX::instance()->systemMenuBar){ - sysbar = new Fl_Sys_Menu_Bar(1, 1, 1, 1); - sysbar->menu(sysbar_table); - sysbar->global(); + _sysbar = new Fl_Sys_Menu_Bar(1, 1, 1, 1); + _sysbar->menu(sysbar_table); + _sysbar->global(); fillRecentHistoryMenu(); } else{ #endif - bar = new Fl_Menu_Bar(0, 0, width, BH); - bar->menu(bar_table); - bar->box(FL_UP_BOX); - bar->global(); + _bar = new Fl_Menu_Bar(0, 0, width, BH); + _bar->menu(bar_table); + _bar->box(FL_UP_BOX); + _bar->global(); fillRecentHistoryMenu(); #if defined(__APPLE__) } @@ -2744,97 +2746,97 @@ graphicWindow::graphicWindow(bool main, int numTiles, bool detachedMenu) } // bottom button bar - bottom = new Fl_Box(0, mh + glheight + mheight, width, sh); - bottom->box(FL_FLAT_BOX); + _bottom = new Fl_Box(0, mh + glheight + mheight, width, sh); + _bottom->box(FL_FLAT_BOX); int x = 2; int sht = sh - 4; // leave a 2 pixel border at the bottom - butt[5] = new Fl_Button(x, mh + glheight + mheight + 2, sw, sht, "@-1gmsh_models"); - butt[5]->callback(status_options_cb, (void *)"model"); - butt[5]->tooltip("Select active model"); + _butt[5] = new Fl_Button(x, mh + glheight + mheight + 2, sw, sht, "@-1gmsh_models"); + _butt[5]->callback(status_options_cb, (void *)"model"); + _butt[5]->tooltip("Select active model"); x += sw; - butt[0] = new Fl_Button(x, mh + glheight + mheight + 2, sw, sht, "X"); - butt[0]->callback(status_xyz1p_cb, (void *)"x"); - butt[0]->tooltip("Set +X or -X view (Alt+x or Alt+Shift+x)"); + _butt[0] = new Fl_Button(x, mh + glheight + mheight + 2, sw, sht, "X"); + _butt[0]->callback(status_xyz1p_cb, (void *)"x"); + _butt[0]->tooltip("Set +X or -X view (Alt+x or Alt+Shift+x)"); x += sw; - butt[1] = new Fl_Button(x, mh + glheight + mheight + 2, sw, sht, "Y"); - butt[1]->callback(status_xyz1p_cb, (void *)"y"); - butt[1]->tooltip("Set +Y or -Y view (Alt+y or Alt+Shift+y)"); + _butt[1] = new Fl_Button(x, mh + glheight + mheight + 2, sw, sht, "Y"); + _butt[1]->callback(status_xyz1p_cb, (void *)"y"); + _butt[1]->tooltip("Set +Y or -Y view (Alt+y or Alt+Shift+y)"); x += sw; - butt[2] = new Fl_Button(x, mh + glheight + mheight + 2, sw, sht, "Z"); - butt[2]->callback(status_xyz1p_cb, (void *)"z"); - butt[2]->tooltip("Set +Z or -Z view (Alt+z or Alt+Shift+z)"); + _butt[2] = new Fl_Button(x, mh + glheight + mheight + 2, sw, sht, "Z"); + _butt[2]->callback(status_xyz1p_cb, (void *)"z"); + _butt[2]->tooltip("Set +Z or -Z view (Alt+z or Alt+Shift+z)"); x += sw; - butt[4] = new Fl_Button(x, mh + glheight + mheight + 2, sw, sht, "@-1gmsh_rotate"); - butt[4]->callback(status_xyz1p_cb, (void *)"r"); - butt[4]->tooltip("Rotate +90 or -90 (Shift) degrees, or sync rotations (Alt)"); + _butt[4] = new Fl_Button(x, mh + glheight + mheight + 2, sw, sht, "@-1gmsh_rotate"); + _butt[4]->callback(status_xyz1p_cb, (void *)"r"); + _butt[4]->tooltip("Rotate +90 or -90 (Shift) degrees, or sync rotations (Alt)"); x += sw; - butt[3] = new Fl_Button(x, mh + glheight + mheight + 2, 2 * FL_NORMAL_SIZE, sht, "1:1"); - butt[3]->callback(status_xyz1p_cb, (void *)"1:1"); - butt[3]->tooltip("Set unit scale, sync scale between viewports (Alt), " + _butt[3] = new Fl_Button(x, mh + glheight + mheight + 2, 2 * FL_NORMAL_SIZE, sht, "1:1"); + _butt[3]->callback(status_xyz1p_cb, (void *)"1:1"); + _butt[3]->tooltip("Set unit scale, sync scale between viewports (Alt), " "or reset bounding box around visible entities (Shift)"); x += 2 * FL_NORMAL_SIZE; - butt[8] = new Fl_Button(x, mh + glheight + mheight + 2, sw, sht, "@-1gmsh_ortho"); - butt[8]->callback(status_options_cb, (void *)"p"); - butt[8]->tooltip("Toggle projection mode (Alt+o or Alt+Shift+o)"); + _butt[8] = new Fl_Button(x, mh + glheight + mheight + 2, sw, sht, "@-1gmsh_ortho"); + _butt[8]->callback(status_options_cb, (void *)"p"); + _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]->tooltip("Toggle mesh visibility (Alt+m)"); + _butt[12] = new Fl_Button(x, mh + glheight + mheight + 2, sw, sht, "M"); + _butt[12]->callback(status_options_cb, (void *)"M"); + _butt[12]->tooltip("Toggle mesh visibility (Alt+m)"); x += sw; - butt[13] = new Fl_Button(x, mh + glheight + mheight + 2, sw, sht, "@-1gmsh_clscale"); - butt[13]->callback(status_options_cb, (void *)"clscale"); - butt[13]->tooltip("Change mesh element size factor"); + _butt[13] = new Fl_Button(x, mh + glheight + mheight + 2, sw, sht, "@-1gmsh_clscale"); + _butt[13]->callback(status_options_cb, (void *)"clscale"); + _butt[13]->tooltip("Change mesh element size factor"); x += sw; - butt[9] = new Fl_Button(x, mh + glheight + mheight + 2, sw, sht, "S"); - butt[9]->callback(status_options_cb, (void *)"S"); - butt[9]->tooltip("Toggle mouse selection ON/OFF (Escape)"); + _butt[9] = new Fl_Button(x, mh + glheight + mheight + 2, sw, sht, "S"); + _butt[9]->callback(status_options_cb, (void *)"S"); + _butt[9]->tooltip("Toggle mouse selection ON/OFF (Escape)"); x += sw; - butt[6] = new Fl_Button(x, mh + glheight + mheight + 2, sw, sht, "@-1gmsh_rewind"); - butt[6]->callback(status_rewind_cb); - butt[6]->tooltip("Rewind animation"); - butt[6]->deactivate(); + _butt[6] = new Fl_Button(x, mh + glheight + mheight + 2, sw, sht, "@-1gmsh_rewind"); + _butt[6]->callback(status_rewind_cb); + _butt[6]->tooltip("Rewind animation"); + _butt[6]->deactivate(); x += sw; - butt[10] = new Fl_Button(x, mh + glheight + mheight + 2, sw, sht, "@-1gmsh_back"); - butt[10]->callback(status_stepbackward_cb); - butt[10]->tooltip("Step backward"); - butt[10]->deactivate(); + _butt[10] = new Fl_Button(x, mh + glheight + mheight + 2, sw, sht, "@-1gmsh_back"); + _butt[10]->callback(status_stepbackward_cb); + _butt[10]->tooltip("Step backward"); + _butt[10]->deactivate(); x += sw; - butt[7] = new Fl_Button(x, mh + glheight + mheight + 2, sw, sht, "@-1gmsh_play"); - butt[7]->callback(status_play_cb); - butt[7]->tooltip("Play/pause animation"); - butt[7]->deactivate(); + _butt[7] = new Fl_Button(x, mh + glheight + mheight + 2, sw, sht, "@-1gmsh_play"); + _butt[7]->callback(status_play_cb); + _butt[7]->tooltip("Play/pause animation"); + _butt[7]->deactivate(); x += sw; - butt[11] = new Fl_Button(x, mh + glheight + mheight + 2, sw, sht, "@-1gmsh_forward"); - butt[11]->callback(status_stepforward_cb); - butt[11]->tooltip("Step forward"); - butt[11]->deactivate(); + _butt[11] = new Fl_Button(x, mh + glheight + mheight + 2, sw, sht, "@-1gmsh_forward"); + _butt[11]->callback(status_stepforward_cb); + _butt[11]->tooltip("Step forward"); + _butt[11]->deactivate(); x += sw; for(int i = 0; i < 14; i++) { - butt[i]->box(FL_FLAT_BOX); - butt[i]->selection_color(FL_WHITE); - butt[i]->align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE | FL_ALIGN_CLIP); + _butt[i]->box(FL_FLAT_BOX); + _butt[i]->selection_color(FL_WHITE); + _butt[i]->align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE | FL_ALIGN_CLIP); } x += 2; - label = new Fl_Progress(x, mh + glheight + mheight + 2, width - x, sht); - label->box(FL_THIN_DOWN_BOX); - label->align(FL_ALIGN_LEFT | FL_ALIGN_INSIDE | FL_ALIGN_CLIP); - label->color(FL_BACKGROUND_COLOR, FL_DARK2); // FL_DARK_GREEN + _label = new Fl_Progress(x, mh + glheight + mheight + 2, width - x, sht); + _label->box(FL_THIN_DOWN_BOX); + _label->align(FL_ALIGN_LEFT | FL_ALIGN_INSIDE | FL_ALIGN_CLIP); + _label->color(FL_BACKGROUND_COLOR, FL_DARK2); // FL_DARK_GREEN // dummy resizable box dummyBox *resbox = new dummyBox(x, mh, width - x, glheight); - win->resizable(resbox); + _win->resizable(resbox); // set mininum window size - minWidth = x; - minHeight = 100; - win->size_range(minWidth, minHeight); + _minWidth = x; + _minHeight = 100; + _win->size_range(_minWidth, _minHeight); // tiled windows (tree menu, opengl, messages) - tile = new Fl_Tile(0, mh, glwidth + twidth, glheight + mheight); + _tile = new Fl_Tile(0, mh, glwidth + twidth, glheight + mheight); int w2 = glwidth / 2, h2 = glheight / 2; if(numTiles == 2){ @@ -2876,178 +2878,178 @@ graphicWindow::graphicWindow(bool main, int numTiles, bool detachedMenu) for(unsigned int i = 0; i < gl.size(); i++) gl[i]->mode(mode); if(main){ - browser = new Fl_Browser(twidth, mh + glheight, glwidth, mheight); - browser->box(FL_THIN_DOWN_BOX); - browser->textfont(FL_COURIER); - browser->textsize(FL_NORMAL_SIZE - 1); - browser->type(FL_MULTI_BROWSER); - browser->callback(message_browser_cb, this); - browser->scrollbar_size(std::max(10, FL_NORMAL_SIZE - 2)); // thinner scrollbars + _browser = new Fl_Browser(twidth, mh + glheight, glwidth, mheight); + _browser->box(FL_THIN_DOWN_BOX); + _browser->textfont(FL_COURIER); + _browser->textsize(FL_NORMAL_SIZE - 1); + _browser->type(FL_MULTI_BROWSER); + _browser->callback(message_browser_cb, this); + _browser->scrollbar_size(std::max(10, FL_NORMAL_SIZE - 2)); // thinner scrollbars } else{ - browser = 0; + _browser = 0; } if(main && !detachedMenu){ - onelab = new onelabGroup(0, mh, twidth, height - mh - sh); + _onelab = new onelabGroup(0, mh, twidth, height - mh - sh); } else{ - onelab = 0; + _onelab = 0; } - tile->end(); + _tile->end(); // resize the tiles to match the prescribed sizes - tile->position(0, mh + glheight, 0, mh + CTX::instance()->glSize[1]); + _tile->position(0, mh + glheight, 0, mh + CTX::instance()->glSize[1]); _savedMessageHeight = CTX::instance()->msgSize; int minw = 3 * BB/2 + 4 * WB; if(CTX::instance()->menuSize[0] < minw) CTX::instance()->menuSize[0] = minw; - tile->position(twidth, 0, CTX::instance()->menuSize[0], 0); + _tile->position(twidth, 0, CTX::instance()->menuSize[0], 0); _savedMenuWidth = CTX::instance()->menuSize[0]; - win->position(CTX::instance()->glPosition[0], CTX::instance()->glPosition[1]); - win->end(); + _win->position(CTX::instance()->glPosition[0], CTX::instance()->glPosition[1]); + _win->end(); if(main && detachedMenu){ - menuwin = new mainWindow + _menuwin = new mainWindow (CTX::instance()->menuSize[0], CTX::instance()->menuSize[1], CTX::instance()->nonModalWindows ? true : false, "Gmsh"); - menuwin->callback(file_quit_cb); - menuwin->box(GMSH_WINDOW_BOX); - onelab = new onelabGroup(0, 0, menuwin->w(), menuwin->h()); - menuwin->position(CTX::instance()->menuPosition[0], - CTX::instance()->menuPosition[1]); - menuwin->resizable(onelab); - menuwin->size_range(onelab->getMinWindowWidth(), onelab->getMinWindowHeight()); - menuwin->end(); + _menuwin->callback(file_quit_cb); + _menuwin->box(GMSH_WINDOW_BOX); + _onelab = new onelabGroup(0, 0, _menuwin->w(), _menuwin->h()); + _menuwin->position(CTX::instance()->menuPosition[0], + CTX::instance()->menuPosition[1]); + _menuwin->resizable(_onelab); + _menuwin->size_range(_onelab->getMinWindowWidth(), _onelab->getMinWindowHeight()); + _menuwin->end(); } else{ - menuwin = 0; + _menuwin = 0; } } graphicWindow::~graphicWindow() { openglWindow::setLastHandled(0); - tile->clear(); - win->clear(); - Fl::delete_widget(win); + _tile->clear(); + _win->clear(); + Fl::delete_widget(_win); } void graphicWindow::setTitle(std::string str) { _title = str; - win->label(_title.c_str()); + _win->label(_title.c_str()); } void graphicWindow::detachMenu() { - if(menuwin || !onelab || !browser) return; - if(browser->h() == 0) resizeMessages(1); - int w = onelab->w(); - tile->remove(onelab); - browser->resize(0, browser->y(), browser->w() + w, browser->h()); + if(_menuwin || !_onelab || !_browser) return; + if(_browser->h() == 0) resizeMessages(1); + int w = _onelab->w(); + _tile->remove(_onelab); + _browser->resize(0, _browser->y(), _browser->w() + w, _browser->h()); for(unsigned int i = 0; i < gl.size(); i++){ if(gl[i]->x() == w) gl[i]->resize(0, gl[i]->y(), gl[i]->w() + w, gl[i]->h()); } - tile->redraw(); + _tile->redraw(); - menuwin = new mainWindow + _menuwin = new mainWindow (CTX::instance()->menuSize[0], CTX::instance()->menuSize[1], CTX::instance()->nonModalWindows ? true : false, "Gmsh"); - menuwin->callback(file_quit_cb); - menuwin->box(GMSH_WINDOW_BOX); - menuwin->add(onelab); - onelab->resize(0, 0, menuwin->w(), menuwin->h()); - menuwin->position(CTX::instance()->menuPosition[0], - CTX::instance()->menuPosition[1]); - menuwin->resizable(onelab); - menuwin->size_range(onelab->getMinWindowWidth(), onelab->getMinWindowHeight()); - menuwin->end(); - menuwin->show(); + _menuwin->callback(file_quit_cb); + _menuwin->box(GMSH_WINDOW_BOX); + _menuwin->add(_onelab); + _onelab->resize(0, 0, _menuwin->w(), _menuwin->h()); + _menuwin->position(CTX::instance()->menuPosition[0], + CTX::instance()->menuPosition[1]); + _menuwin->resizable(_onelab); + _menuwin->size_range(_onelab->getMinWindowWidth(), _onelab->getMinWindowHeight()); + _menuwin->end(); + _menuwin->show(); } void graphicWindow::attachMenu() { - if(!menuwin || !onelab || !browser) return; - menuwin->remove(onelab); - menuwin->hide(); - delete menuwin; - menuwin = 0; - if(browser->h() == 0) resizeMessages(1); - int w = onelab->w(); - if(browser->w() - w < 0) w = browser->w() / 2; - browser->resize(w, browser->y(), browser->w() - w, browser->h()); + if(!_menuwin || !_onelab || !_browser) return; + _menuwin->remove(_onelab); + _menuwin->hide(); + delete _menuwin; + _menuwin = 0; + if(_browser->h() == 0) resizeMessages(1); + int w = _onelab->w(); + if(_browser->w() - w < 0) w = _browser->w() / 2; + _browser->resize(w, _browser->y(), _browser->w() - w, _browser->h()); for(unsigned int i = 0; i < gl.size(); i++){ if(gl[i]->x() == 0) gl[i]->resize(w, gl[i]->y(), gl[i]->w() - w, gl[i]->h()); } - tile->add(onelab); - onelab->resize(tile->x(), tile->y(), w, tile->h()); - tile->redraw(); + _tile->add(_onelab); + _onelab->resize(_tile->x(), _tile->y(), w, _tile->h()); + _tile->redraw(); } void graphicWindow::attachDetachMenu() { - if(menuwin) attachMenu(); + if(_menuwin) attachMenu(); else detachMenu(); } void graphicWindow::showMenu() { - if(menuwin || !onelab || !win->shown()) return; - if(onelab->w() < 5){ + if(_menuwin || !_onelab || !_win->shown()) return; + if(_onelab->w() < 5){ int width = _savedMenuWidth; - if(width < 5) width = onelab->getMinWindowWidth(); - int maxw = win->w(); + if(width < 5) width = _onelab->getMinWindowWidth(); + int maxw = _win->w(); if(width > maxw) width = maxw / 2; - resizeMenu(width - onelab->w()); + resizeMenu(width - _onelab->w()); } } void graphicWindow::hideMenu() { - if(menuwin || !onelab) return; - _savedMenuWidth = onelab->w(); - resizeMenu(-onelab->w()); + if(_menuwin || !_onelab) return; + _savedMenuWidth = _onelab->w(); + resizeMenu(-_onelab->w()); } void graphicWindow::showHideMenu() { - if(menuwin || !onelab) return; - if(onelab->w() < 5) showMenu(); + if(_menuwin || !_onelab) return; + if(_onelab->w() < 5) showMenu(); else hideMenu(); } int graphicWindow::getMenuWidth() { - if(!onelab) return 0; - return onelab->w(); + if(!_onelab) return 0; + return _onelab->w(); } int graphicWindow::getMenuHeight() { - if(!menuwin) return 0; - return menuwin->h(); + if(!_menuwin) return 0; + return _menuwin->h(); } int graphicWindow::getMenuPositionX() { - if(!menuwin) return 0; - return menuwin->x(); + if(!_menuwin) return 0; + return _menuwin->x(); } int graphicWindow::getMenuPositionY() { - if(!menuwin) return 0; - return menuwin->y(); + if(!_menuwin) return 0; + return _menuwin->y(); } -void graphicWindow::split(openglWindow *g, char how) +bool graphicWindow::split(openglWindow *g, char how) { - if(tile->find(g) == tile->children()) return; + if(_tile->find(g) == _tile->children()) return false; // not found if(how == 'u'){ // after many tries I cannot figure out how to do this cleanly, so let's be @@ -3055,24 +3057,24 @@ void graphicWindow::split(openglWindow *g, char how) int mode = g->mode(); openglWindow::setLastHandled(0); for(unsigned int i = 0; i < gl.size(); i++){ - tile->remove(gl[i]); + _tile->remove(gl[i]); delete gl[i]; } gl.clear(); openglWindow *g2 = new openglWindow - (tile->x() + (onelab && !menuwin ? onelab->w() : 0), - tile->y(), - tile->w() - (onelab && !menuwin ? onelab->w() : 0), - tile->h() - (browser ? browser->h() : 0)); + (_tile->x() + (_onelab && !_menuwin ? _onelab->w() : 0), + _tile->y(), + _tile->w() - (_onelab && !_menuwin ? _onelab->w() : 0), + _tile->h() - (_browser ? _browser->h() : 0)); g2->end(); g2->mode(mode); gl.push_back(g2); - tile->add(g2); + _tile->add(g2); g2->show(); } else{ // make sure browser is not zero-size when adding children - if(browser && browser->h() == 0) resizeMessages(1); + if(_browser && _browser->h() == 0) resizeMessages(1); int x1 = g->x(); int y1 = g->y(); int w1 = (how == 'h') ? g->w() / 2 : g->w(); @@ -3088,23 +3090,45 @@ void graphicWindow::split(openglWindow *g, char how) g2->mode(g->mode()); gl.push_back(g2); - tile->add(g2); + _tile->add(g2); g2->show(); g->resize(x1, y1, w1, h1); g2->resize(x2, y2, w2, h2); } + return true; +} + +void graphicWindow::setStereo() +{ + openglWindow::setLastHandled(0); + for(unsigned int i = 0; i < gl.size(); i++){ + _tile->remove(gl[i]); + delete gl[i]; + } + gl.clear(); + openglWindow *g2 = new openglWindow + (_tile->x() + (_onelab && !_menuwin ? _onelab->w() : 0), + _tile->y(), + _tile->w() - (_onelab && !_menuwin ? _onelab->w() : 0), + _tile->h() - (_browser ? _browser->h() : 0)); + g2->mode(FL_RGB | FL_DEPTH | FL_DOUBLE | FL_STEREO); + g2->end(); + gl.push_back(g2); + _tile->add(g2); + g2->show(); + Msg::Info("new gl window for stereo vision!"); } void graphicWindow::setAnimButtons(int mode) { if(mode) { - butt[7]->callback(status_play_cb); - butt[7]->label("@-1gmsh_play"); + _butt[7]->callback(status_play_cb); + _butt[7]->label("@-1gmsh_play"); } else { - butt[7]->callback(status_pause_cb); - butt[7]->label("@-1gmsh_pause"); + _butt[7]->callback(status_pause_cb); + _butt[7]->label("@-1gmsh_pause"); } } @@ -3123,105 +3147,122 @@ void graphicWindow::checkAnimButtons() } } if(play){ - butt[6]->activate(); - butt[7]->activate(); - butt[10]->activate(); - butt[11]->activate(); + _butt[6]->activate(); + _butt[7]->activate(); + _butt[10]->activate(); + _butt[11]->activate(); } else{ - butt[6]->deactivate(); - butt[7]->deactivate(); - butt[10]->deactivate(); - butt[11]->deactivate(); + _butt[6]->deactivate(); + _butt[7]->deactivate(); + _butt[10]->deactivate(); + _butt[11]->deactivate(); } } void graphicWindow::resizeMenu(int dh) { - if(menuwin || !onelab) return; + if(_menuwin || !_onelab) return; for(unsigned int i = 0; i < gl.size(); i++){ - if(gl[i]->x() == onelab->x() + onelab->w()) + if(gl[i]->x() == _onelab->x() + _onelab->w()) gl[i]->resize(gl[i]->x() + dh, gl[i]->y(), gl[i]->w() - dh, gl[i]->h()); } - onelab->resize(onelab->x(), onelab->y(), onelab->w() + dh, onelab->h()); - onelab->redraw(); + _onelab->resize(_onelab->x(), _onelab->y(), _onelab->w() + dh, _onelab->h()); + _onelab->redraw(); } int graphicWindow::getGlHeight() { - int h = win->h() - bottom->h(); // yes, ignore message browser - if(bar) h -= bar->h(); + int h = _win->h() - _bottom->h(); // yes, ignore message browser + if(_bar) h -= _bar->h(); return h; } int graphicWindow::getGlWidth() { - return win->w(); + return _win->w(); +} + +void graphicWindow::setGlWidth(int w) +{ + _win->size(w, _win->h()); + // workaround resizing bug on Mac + _win->size_range(_minWidth, _minHeight); +} + +void graphicWindow::setGlHeight(int h) +{ + int hh = h + _bottom->h(); + if(_bar) hh += _bar->h(); + _win->size(_win->w(), h); + // workaround resizing bug on Mac + _win->size_range(_minWidth, _minHeight); } void graphicWindow::resizeMessages(int dh) { - if(!browser) return; + if(!_browser) return; for(unsigned int i = 0; i < gl.size(); i++){ - if(gl[i]->y() + gl[i]->h() == browser->y()) + if(gl[i]->y() + gl[i]->h() == _browser->y()) gl[i]->resize(gl[i]->x(), gl[i]->y(), gl[i]->w(), gl[i]->h() - dh); } - browser->resize(browser->x(), browser->y() - dh, browser->w(), browser->h() + dh); - browser->redraw(); + _browser->resize(_browser->x(), _browser->y() - dh, + _browser->w(), _browser->h() + dh); + _browser->redraw(); } void graphicWindow::showMessages() { - if(!browser || !win->shown()) return; - if(browser->h() < 5){ + if(!_browser || !_win->shown()) return; + if(_browser->h() < 5){ int height = _savedMessageHeight; if(height < 5) height = 50; - int maxh = win->h() - bottom->h(); + int maxh = _win->h() - _bottom->h(); if(height > maxh) height = maxh / 2; - resizeMessages(height - browser->h()); + resizeMessages(height - _browser->h()); } if(_autoScrollMessages) - browser->bottomline(browser->size()); + _browser->bottomline(_browser->size()); } void graphicWindow::hideMessages() { - if(!browser) return; - _savedMessageHeight = browser->h(); - resizeMessages(-browser->h()); + if(!_browser) return; + _savedMessageHeight = _browser->h(); + resizeMessages(-_browser->h()); } void graphicWindow::showHideMessages() { - if(!browser) return; - if(browser->h() < 5) showMessages(); + if(!_browser) return; + if(_browser->h() < 5) showMessages(); else hideMessages(); } int graphicWindow::getMessageHeight() { - if(!browser) return 0; - if(!browser->h()) return _savedMessageHeight; - return browser->h(); + if(!_browser) return 0; + if(!_browser->h()) return _savedMessageHeight; + return _browser->h(); } void graphicWindow::addMessage(const char *msg) { - if(!browser) return; - browser->add(msg, 0); - if(_autoScrollMessages && win->shown() && browser->h() >= 10) - browser->bottomline(browser->size()); + if(!_browser) return; + _browser->add(msg, 0); + if(_autoScrollMessages && _win->shown() && _browser->h() >= 10) + _browser->bottomline(_browser->size()); } void graphicWindow::clearMessages() { - if(!browser) return; - browser->clear(); + if(!_browser) return; + _browser->clear(); } void graphicWindow::saveMessages(const char *filename) { - if(!browser) return; + if(!_browser) return; FILE *fp = fopen(filename, "w"); @@ -3231,8 +3272,8 @@ void graphicWindow::saveMessages(const char *filename) } Msg::StatusBar(true, "Writing '%s'...", filename); - for(int i = 1; i <= browser->size(); i++) { - const char *c = browser->text(i); + for(int i = 1; i <= _browser->size(); i++) { + const char *c = _browser->text(i); if(c[0] == '@') fprintf(fp, "%s\n", &c[5]); else @@ -3244,12 +3285,12 @@ void graphicWindow::saveMessages(const char *filename) void graphicWindow::copySelectedMessagesToClipboard() { - if(!browser) return; + if(!_browser) return; std::string buff; - for(int i = 1; i <= browser->size(); i++) { - if(browser->selected(i)) { - const char *c = browser->text(i); + for(int i = 1; i <= _browser->size(); i++) { + if(_browser->selected(i)) { + const char *c = _browser->text(i); if(strlen(c) > 5 && c[0] == '@') buff += std::string(&c[5]); else @@ -3265,7 +3306,7 @@ void graphicWindow::copySelectedMessagesToClipboard() void graphicWindow::fillRecentHistoryMenu() { #if defined(__APPLE__) - if(CTX::instance()->systemMenuBar && !sysbar) + if(CTX::instance()->systemMenuBar && !_sysbar) return; #endif @@ -3282,7 +3323,7 @@ void graphicWindow::fillRecentHistoryMenu() #if defined(__APPLE__) if(CTX::instance()->systemMenuBar) - sysbar->menu(table); + _sysbar->menu(table); #endif } diff --git a/Fltk/graphicWindow.h b/Fltk/graphicWindow.h index 397e9f8acdae76ae0af22509ae128c519c60b706..38e7223d3dcbe957c920b57822f5910a41bfa57c 100644 --- a/Fltk/graphicWindow.h +++ b/Fltk/graphicWindow.h @@ -26,33 +26,43 @@ class graphicWindow{ std::string _title; int _savedMessageHeight, _savedMenuWidth; bool _autoScrollMessages; - public: - Fl_Window *win, *menuwin; #if defined(__APPLE__) - Fl_Sys_Menu_Bar *sysbar; + Fl_Sys_Menu_Bar *_sysbar; #endif - Fl_Menu_Bar *bar; - Fl_Tile *tile; + Fl_Menu_Bar *_bar; + Fl_Tile *_tile; + Fl_Window *_win, *_menuwin; + Fl_Browser *_browser; + onelabGroup *_onelab; + Fl_Box *_bottom; + Fl_Button *_butt[14]; + Fl_Progress *_label; + int _minWidth, _minHeight; + public: std::vector<openglWindow*> gl; - Fl_Browser *browser; - onelabGroup *onelab; - Fl_Box *bottom; - Fl_Button *butt[14]; - Fl_Progress *label; - int minWidth, minHeight; public: graphicWindow(bool main=true, int numTiles=1, bool detachedMenu=false); ~graphicWindow(); + Fl_Window *getWindow(){ return _win; } + Fl_Window *getMenuWindow(){ return _menuwin; } + onelabGroup *getMenu(){ return _onelab; } + Fl_Progress *getProgress(){ return _label; } + Fl_Button *getSelectionButton(){ return _butt[9]; } + void setGlWidth(int w); + void setGlHeight(int h); + int getMinWidth(){ return _minWidth; } + int getMinHeight(){ return _minHeight; } void setTitle(std::string str); void setAutoScroll(bool val){ _autoScrollMessages = val; } bool getAutoScroll(){ return _autoScrollMessages; } int getGlHeight(); int getGlWidth(); + void setStereo(); void resizeMenu(int dh); void showMenu(); void hideMenu(); void showHideMenu(); - bool isMenuDetached(){ return menuwin ? true : false; } + bool isMenuDetached(){ return _menuwin ? true : false; } int getMenuWidth(); int getMenuHeight(); int getMenuPositionX(); @@ -60,7 +70,7 @@ class graphicWindow{ void detachMenu(); void attachMenu(); void attachDetachMenu(); - void split(openglWindow *g, char how); + bool split(openglWindow *g, char how); void setAnimButtons(int mode); void checkAnimButtons(); void resizeMessages(int dh); diff --git a/Fltk/optionWindow.cpp b/Fltk/optionWindow.cpp index 2891c98ab5bd1c88c6d2c12ae8e3f69371007a0e..cddfa04bcf7e63a9b2e7258502293d67d7a433b3 100644 --- a/Fltk/optionWindow.cpp +++ b/Fltk/optionWindow.cpp @@ -338,22 +338,9 @@ static void general_options_ok_cb(Fl_Widget *w, void *data) opt_general_camera_mode(0, GMSH_SET, o->general.butt[18]->value()); if(opt_general_stereo_mode(0, GMSH_GET, 0) != o->general.butt[17]->value()) { opt_general_stereo_mode(0, GMSH_SET, o->general.butt[17]->value()); - // beginning of test to re-allocate gl for stereo: inspired from - // "split" method if (CTX::instance()->stereo){ - openglWindow::setLastHandled(0); - for(unsigned int i = 0; i < FlGui::instance()->graph.size(); i++){ - graphicWindow * graph = FlGui::instance()->graph[i]; - graph->tile->clear(); - graph->gl.clear(); - openglWindow* stereo_gl = new openglWindow(0, 0, graph->tile->w(), graph->tile->h()); - stereo_gl->mode(FL_RGB | FL_DEPTH | FL_DOUBLE | FL_STEREO); - stereo_gl->end(); - graph->gl.push_back(stereo_gl); - graph->tile->add(stereo_gl); - stereo_gl->show(); - Msg::Info("new gl windows for stereo vision!"); - } + for(unsigned int i = 0; i < FlGui::instance()->graph.size(); i++) + FlGui::instance()->graph[i]->setStereo(); } }