diff --git a/Common/Options.cpp b/Common/Options.cpp index 8fd577b3f457cbe510d10acec1d27bb3b38c8e65..568cbaf5d7d93ace60eff641266e30b04b2ba389 100644 --- a/Common/Options.cpp +++ b/Common/Options.cpp @@ -1771,10 +1771,8 @@ double opt_general_graphics_size0(OPT_ARGS_NUM) if(CTX::instance()->glSize[0] <= 0) CTX::instance()->glSize[0] = 600; } #if defined(HAVE_FLTK) - if(FlGui::available()){ - if(action & GMSH_SET){ - FlGui::instance()->graph[0]->setGlWidth(CTX::instance()->glSize[0]); - } + if(FlGui::available() && (action & GMSH_GUI)){ + FlGui::instance()->graph[0]->setGlWidth(CTX::instance()->glSize[0]); } #endif return CTX::instance()->glSize[0]; @@ -1787,10 +1785,8 @@ double opt_general_graphics_size1(OPT_ARGS_NUM) if(CTX::instance()->glSize[1] <= 0) CTX::instance()->glSize[1] = 600; } #if defined(HAVE_FLTK) - if(FlGui::available()){ - if(action & GMSH_SET){ - FlGui::instance()->graph[0]->setGlHeight(CTX::instance()->glSize[1]); - } + if(FlGui::available() && (action & GMSH_GUI)){ + FlGui::instance()->graph[0]->setGlHeight(CTX::instance()->glSize[1]); } #endif return CTX::instance()->glSize[1]; @@ -1837,6 +1833,11 @@ double opt_general_message_size(OPT_ARGS_NUM) CTX::instance()->msgSize = (int)val; if(CTX::instance()->msgSize < 0) CTX::instance()->msgSize = 0; } +#if defined(HAVE_FLTK) + if(FlGui::available() && (action & GMSH_GUI)){ + FlGui::instance()->graph[0]->setMessageHeight(CTX::instance()->msgSize); + } +#endif return CTX::instance()->msgSize; } @@ -1845,6 +1846,14 @@ double opt_general_detached_menu(OPT_ARGS_NUM) if(action & GMSH_SET){ CTX::instance()->detachedMenu = (int)val; } +#if defined(HAVE_FLTK) + if(FlGui::available() && (action & GMSH_GUI)){ + if(CTX::instance()->detachedMenu) + FlGui::instance()->graph[0]->detachMenu(); + else + FlGui::instance()->graph[0]->attachMenu(); + } +#endif return CTX::instance()->detachedMenu; } @@ -1854,6 +1863,11 @@ double opt_general_menu_size0(OPT_ARGS_NUM) CTX::instance()->menuSize[0] = (int)val; if(CTX::instance()->menuSize[0] < 0) CTX::instance()->menuSize[0] = 0; } +#if defined(HAVE_FLTK) + if(FlGui::available() && (action & GMSH_GUI)){ + FlGui::instance()->graph[0]->setMenuWidth(CTX::instance()->menuSize[0]); + } +#endif return CTX::instance()->menuSize[0]; } diff --git a/Fltk/FlGui.cpp b/Fltk/FlGui.cpp index b4d4dcaf4bee25e4d01035ebf9cb41fabd997b64..3b54829f50a887c8f16c78c4bbfb4bbc42e16621 100644 --- a/Fltk/FlGui.cpp +++ b/Fltk/FlGui.cpp @@ -90,9 +90,10 @@ FlGui::FlGui(int argc, char **argv) Fl::display(CTX::instance()->display.c_str()); #if 0 // dark scheme... not bad, but needs work - Fl::background(60, 60, 60); - Fl::background2(120, 120, 120); - Fl::foreground(200, 200, 200); + Fl::background(110, 110, 110); + Fl::background2(140, 140, 140); + Fl::foreground(230, 230, 230); + //Fl::set_color(FL_SELECTION_COLOR, 50, 50, 0); #endif // add new box types used in graphic window @@ -703,7 +704,7 @@ void FlGui::storeCurrentWindowsInfo() 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]->getSavedMessageHeight(); + CTX::instance()->msgSize = graph[0]->getMessageHeight(); CTX::instance()->menuSize[0] = graph[0]->getMenuWidth(); if(graph[0]->isMenuDetached()){ CTX::instance()->detachedMenu = 1; diff --git a/Fltk/graphicWindow.cpp b/Fltk/graphicWindow.cpp index 66897a6ae8cf97911e42e6348fd5b3a03ff9497e..c0162fd7342a7918bccc08976329c077938727df 100644 --- a/Fltk/graphicWindow.cpp +++ b/Fltk/graphicWindow.cpp @@ -676,6 +676,7 @@ static void geometry_edit_cb(Fl_Widget *w, void *data) void geometry_reload_cb(Fl_Widget *w, void *data) { std::string fileName = GModel::current()->getFileName(); + //ClearProject(); OpenProject(fileName); drawContext::global()->draw(); } @@ -2671,17 +2672,15 @@ class mainWindowSpecialResize : public mainWindow { : mainWindow(w, h, nonModal, l) {} virtual void resize(int X,int Y,int W,int H) { - bool special = (FlGui::available() && shown() && + bool special = (FlGui::available() && shown() && this == FlGui::instance()->graph[0]->getWindow()); - int old_mh = 0; + int mh = 0; if(special) - old_mh = FlGui::instance()->graph[0]->getMessageHeight(); + mh = FlGui::instance()->graph[0]->getMessageHeight(); Fl_Window::resize(X, Y, W, H); const int minimum_non_message_height = 100; - if(special && old_mh < h() - minimum_non_message_height){ - int mh = FlGui::instance()->graph[0]->getMessageHeight(); - FlGui::instance()->graph[0]->resizeMessages(old_mh - mh); - } + if(special && mh < h() - minimum_non_message_height) + FlGui::instance()->graph[0]->setMessageHeight(mh); } }; @@ -2921,12 +2920,12 @@ graphicWindow::graphicWindow(bool main, int numTiles, bool detachedMenu) // resize the tiles to match the prescribed sizes _tile->position(0, mh + glheight, 0, mh + CTX::instance()->glSize[1]); - _savedMessageHeight = CTX::instance()->msgSize; + // if the tree widget is too small it will not be rebuilt correctly (probably + // a bug)... so impose minimum width 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); - _savedMenuWidth = CTX::instance()->menuSize[0]; _win->position(CTX::instance()->glPosition[0], CTX::instance()->glPosition[1]); _win->end(); @@ -2970,7 +2969,7 @@ void graphicWindow::setTitle(std::string str) void graphicWindow::detachMenu() { if(_menuwin || !_onelab || !_browser) return; - if(_browser->h() == 0) resizeMessages(1); + if(_browser->h() == 0) setMessageHeight(1); int w = _onelab->w(); _tile->remove(_onelab); _browser->resize(0, _browser->y(), _browser->w() + w, _browser->h()); @@ -3003,7 +3002,7 @@ void graphicWindow::attachMenu() _menuwin->hide(); delete _menuwin; _menuwin = 0; - if(_browser->h() == 0) resizeMessages(1); + if(_browser->h() == 0) setMessageHeight(1); int w = _onelab->w(); if(_browser->w() - w < 0) w = _browser->w() / 2; _browser->resize(w, _browser->y(), _browser->w() - w, _browser->h()); @@ -3027,19 +3026,19 @@ void graphicWindow::showMenu() { if(_menuwin || !_onelab || !_win->shown()) return; if(_onelab->w() < 5){ - int width = _savedMenuWidth; + int width = CTX::instance()->menuSize[0]; if(width < 5) width = _onelab->getMinWindowWidth(); int maxw = _win->w(); if(width > maxw) width = maxw / 2; - resizeMenu(width - _onelab->w()); + setMenuWidth(width); } } void graphicWindow::hideMenu() { if(_menuwin || !_onelab) return; - _savedMenuWidth = _onelab->w(); - resizeMenu(-_onelab->w()); + CTX::instance()->menuSize[0] = _onelab->w(); + setMenuWidth(0); } void graphicWindow::showHideMenu() @@ -3100,7 +3099,7 @@ bool graphicWindow::split(openglWindow *g, char how) } else{ // make sure browser is not zero-size when adding children - if(_browser && _browser->h() == 0) resizeMessages(1); + if(_browser && _browser->h() == 0) setMessageHeight(1); int x1 = g->x(); int y1 = g->y(); int w1 = (how == 'h') ? g->w() / 2 : g->w(); @@ -3186,15 +3185,23 @@ void graphicWindow::checkAnimButtons() } } -void graphicWindow::resizeMenu(int dh) +void graphicWindow::setMenuWidth(int w) { - if(_menuwin || !_onelab) return; + if(_menuwin){ + _menuwin->size(std::max(w, _onelab->getMinWindowWidth()), _menuwin->h()); + _menuwin->redraw(); + return; + } + if(!_onelab || !_browser) return; + double dw = w - _onelab->w(); + if(!dw) return; for(unsigned int i = 0; i < gl.size(); i++){ 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()); + gl[i]->resize(gl[i]->x() + dw, gl[i]->y(), gl[i]->w() - dw, gl[i]->h()); } - _onelab->resize(_onelab->x(), _onelab->y(), _onelab->w() + dh, _onelab->h()); - _onelab->redraw(); + _browser->resize(_browser->x() + dw, _browser->y(), _browser->w() - dw, _browser->h()); + _onelab->resize(_onelab->x(), _onelab->y(), _onelab->w() + dw, _onelab->h()); + _tile->redraw(); } int graphicWindow::getGlHeight() @@ -3211,43 +3218,43 @@ int graphicWindow::getGlWidth() void graphicWindow::setGlWidth(int w) { - _win->size(w, _win->h()); + if(w == _win->w()) return; + _win->size(std::max(w, _minWidth), _win->h()); _win->redraw(); - // 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(), hh); + if(hh == _win->h()) return; + _win->size(_win->w(), std::max(hh, _minHeight)); _win->redraw(); - // workaround resizing bug on Mac - _win->size_range(_minWidth, _minHeight); } -void graphicWindow::resizeMessages(int dh) +void graphicWindow::setMessageHeight(int h) { if(!_browser) return; + int dh = h - _browser->h(); + if(!dh) return; for(unsigned int i = 0; i < gl.size(); i++){ 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(); + _tile->redraw(); } void graphicWindow::showMessages() { if(!_browser || !_win->shown()) return; if(_browser->h() < 5){ - int height = _savedMessageHeight; + int height = CTX::instance()->msgSize; if(height < 5) height = 50; int maxh = _win->h() - _bottom->h(); if(height > maxh) height = maxh / 2; - resizeMessages(height - _browser->h()); + setMessageHeight(height); } if(_autoScrollMessages) _browser->bottomline(_browser->size()); @@ -3256,8 +3263,8 @@ void graphicWindow::showMessages() void graphicWindow::hideMessages() { if(!_browser) return; - _savedMessageHeight = _browser->h(); - resizeMessages(-_browser->h()); + CTX::instance()->msgSize = _browser->h(); + setMessageHeight(0); } void graphicWindow::showHideMessages() @@ -3273,13 +3280,6 @@ int graphicWindow::getMessageHeight() return _browser->h(); } -int graphicWindow::getSavedMessageHeight() -{ - if(!_browser) return 0; - if(!_browser->h()) return _savedMessageHeight; - return _browser->h(); -} - void graphicWindow::addMessage(const char *msg) { if(!_browser) return; diff --git a/Fltk/graphicWindow.h b/Fltk/graphicWindow.h index 676c4445be1c6625745b88e28c00add61450d982..13b8279fcac77dfb7e0d2f7b4c1fa62f94261288 100644 --- a/Fltk/graphicWindow.h +++ b/Fltk/graphicWindow.h @@ -24,7 +24,6 @@ class graphicWindow{ private: std::string _title; - int _savedMessageHeight, _savedMenuWidth; bool _autoScrollMessages; #if defined(__APPLE__) Fl_Sys_Menu_Bar *_sysbar; @@ -48,32 +47,33 @@ class graphicWindow{ 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 setTitle(std::string str); void setStereo(); - void resizeMenu(int dh); - void showMenu(); - void hideMenu(); - void showHideMenu(); - bool isMenuDetached(){ return _menuwin ? true : false; } + int getGlWidth(); + void setGlWidth(int w); + int getGlHeight(); + void setGlHeight(int h); int getMenuWidth(); + void setMenuWidth(int w); int getMenuHeight(); int getMenuPositionX(); int getMenuPositionY(); + void showMenu(); + void hideMenu(); + void showHideMenu(); void detachMenu(); void attachMenu(); void attachDetachMenu(); + bool isMenuDetached(){ return _menuwin ? true : false; } bool split(openglWindow *g, char how); void setAnimButtons(int mode); void checkAnimButtons(); - void resizeMessages(int dh); + int getMessageHeight(); + void setMessageHeight(int h); void showMessages(); void hideMessages(); void showHideMessages(); @@ -81,8 +81,6 @@ class graphicWindow{ void clearMessages(); void saveMessages(const char *filename); void copySelectedMessagesToClipboard(); - int getMessageHeight(); - int getSavedMessageHeight(); void fillRecentHistoryMenu(); }; diff --git a/Fltk/onelabGroup.cpp b/Fltk/onelabGroup.cpp index 7d472b749026ec2d0ab69c6f63975a834db3e823..bc80fa6be03b92c2be473a6eb9aa22f7cde16879 100644 --- a/Fltk/onelabGroup.cpp +++ b/Fltk/onelabGroup.cpp @@ -767,6 +767,7 @@ onelabGroup::onelabGroup(int x, int y, int w, int h, const char *l) _tree->color(col); _tree->callback(onelab_tree_cb); _tree->connectorstyle(FL_TREE_CONNECTOR_SOLID); + //_tree->connectorstyle(FL_TREE_CONNECTOR_NONE); _tree->showroot(0); _tree->box(FL_FLAT_BOX); _tree->scrollbar_size(std::max(10, FL_NORMAL_SIZE - 2));