From 42719c03f58640c6174f2918331e37565bf60b46 Mon Sep 17 00:00:00 2001 From: Jim Evins Date: Thu, 24 May 2018 22:05:48 -0400 Subject: [PATCH] Adjust width of SelectProductDialog's side panel according to its contents. The width is determined at runtime based on the largest page in the QTabWidget. Without this fix, the side panel would annoyingly change width as you selected the search tab for the first time -- this was particularly annoying in the de_DE locale. --- glabels/CMakeLists.txt | 1 + glabels/NotebookUtil.cpp | 61 +++++++++++++++++++++++++++++++++ glabels/NotebookUtil.h | 40 +++++++++++++++++++++ glabels/SelectProductDialog.cpp | 3 ++ 4 files changed, 105 insertions(+) create mode 100644 glabels/NotebookUtil.cpp create mode 100644 glabels/NotebookUtil.h diff --git a/glabels/CMakeLists.txt b/glabels/CMakeLists.txt index 262395b..65c54b5 100644 --- a/glabels/CMakeLists.txt +++ b/glabels/CMakeLists.txt @@ -24,6 +24,7 @@ set (glabels_sources MainWindow.cpp MergeView.cpp MiniPreviewPixmap.cpp + NotebookUtil.cpp ObjectEditor.cpp PreferencesDialog.cpp PrintView.cpp diff --git a/glabels/NotebookUtil.cpp b/glabels/NotebookUtil.cpp new file mode 100644 index 0000000..cab79d0 --- /dev/null +++ b/glabels/NotebookUtil.cpp @@ -0,0 +1,61 @@ +/* NotebookUtil.cpp + * + * Copyright (C) 2015 Jim Evins + * + * This file is part of gLabels-qt. + * + * gLabels-qt is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * gLabels-qt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with gLabels-qt. If not, see . + */ + +#include "NotebookUtil.h" + +#include + + +namespace glabels +{ + + /// + /// Establish notebook size based on largest page + /// + void NotebookUtil::establishSize( QTabWidget* notebook ) + { + // Establish size of notebook size based on its largest page. + // This may not be established until runtime, due to varying + // lengths of translated strings or may even be influenced by + // the current theme and fonts. Without doing this, the + // notebook may change size as tabs are selected for the first + // time, which can be very annoying. + + // This hack shows the top-level window containing the notebook, + // then shows each page and invalidates the window's layout. + // Finally it re-hides the window without ever having + // relinquishing control to the Qt event loop. + + QWidget* window = notebook->window(); + int iTabSaved = notebook->currentIndex(); + int nTabs = notebook->count(); + + window->show(); + for ( int iTab = 0; iTab < nTabs; iTab++ ) + { + notebook->setCurrentIndex( iTab ); + window->layout()->invalidate(); + } + window->hide(); + + notebook->setCurrentIndex( iTabSaved ); + } + +} diff --git a/glabels/NotebookUtil.h b/glabels/NotebookUtil.h new file mode 100644 index 0000000..c4f7140 --- /dev/null +++ b/glabels/NotebookUtil.h @@ -0,0 +1,40 @@ +/* NotebookUtil.h + * + * Copyright (C) 2015 Jim Evins + * + * This file is part of gLabels-qt. + * + * gLabels-qt is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * gLabels-qt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with gLabels-qt. If not, see . + */ + +#ifndef model_NotebookUtil_h +#define model_NotebookUtil_h + + +#include +#include + + +namespace glabels +{ + namespace NotebookUtil + { + + void establishSize( QTabWidget* notebook ); + + } +} + + +#endif // model_NotebookUtil_h diff --git a/glabels/SelectProductDialog.cpp b/glabels/SelectProductDialog.cpp index 990b9fc..30baaee 100644 --- a/glabels/SelectProductDialog.cpp +++ b/glabels/SelectProductDialog.cpp @@ -20,6 +20,7 @@ #include "SelectProductDialog.h" +#include "NotebookUtil.h" #include "TemplatePickerItem.h" #include "model/Db.h" @@ -62,6 +63,8 @@ namespace glabels connect( check, SIGNAL(clicked()), this, SLOT(onCategoryCheckClicked()) ); } + NotebookUtil::establishSize( modeNotebook ); + QList tmplates = model::Db::templates(); templatePicker->setTemplates( tmplates );