mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Fix inconsistent position of screen splitters
I basically rewrote the way we handled the splitters. It now uses a state to know what it's doing, and will only update the value of the saved-to-disk splitter size if the state shows the splitters (currently only VIEWALL), where all the other states should hide the splitters, and the values of the splitters don't matter. Fixes #225 Signed-off-by: Tomaz Canabrava <tomaz.canabrava@intel.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
460aa4c1bd
commit
d84cdb655e
2 changed files with 55 additions and 30 deletions
|
@ -349,12 +349,14 @@ void MainWindow::on_infoProfileSplitter_splitterMoved(int pos, int idx)
|
||||||
#define BEHAVIOR QList<int>()
|
#define BEHAVIOR QList<int>()
|
||||||
void MainWindow::on_actionViewList_triggered()
|
void MainWindow::on_actionViewList_triggered()
|
||||||
{
|
{
|
||||||
|
beginChangeState(LIST_MAXIMIZED);
|
||||||
ui.listGlobeSplitter->setSizes( BEHAVIOR << EXPANDED << COLLAPSED);
|
ui.listGlobeSplitter->setSizes( BEHAVIOR << EXPANDED << COLLAPSED);
|
||||||
ui.mainSplitter->setSizes( BEHAVIOR << COLLAPSED << EXPANDED);
|
ui.mainSplitter->setSizes( BEHAVIOR << COLLAPSED << EXPANDED);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::on_actionViewProfile_triggered()
|
void MainWindow::on_actionViewProfile_triggered()
|
||||||
{
|
{
|
||||||
|
beginChangeState(PROFILE_MAXIMIZED);
|
||||||
ui.infoProfileSplitter->setSizes(BEHAVIOR << COLLAPSED << EXPANDED);
|
ui.infoProfileSplitter->setSizes(BEHAVIOR << COLLAPSED << EXPANDED);
|
||||||
ui.mainSplitter->setSizes( BEHAVIOR << EXPANDED << COLLAPSED);
|
ui.mainSplitter->setSizes( BEHAVIOR << EXPANDED << COLLAPSED);
|
||||||
redrawProfile();
|
redrawProfile();
|
||||||
|
@ -362,12 +364,14 @@ void MainWindow::on_actionViewProfile_triggered()
|
||||||
|
|
||||||
void MainWindow::on_actionViewInfo_triggered()
|
void MainWindow::on_actionViewInfo_triggered()
|
||||||
{
|
{
|
||||||
|
beginChangeState(INFO_MAXIMIZED);
|
||||||
ui.infoProfileSplitter->setSizes(BEHAVIOR << EXPANDED << COLLAPSED);
|
ui.infoProfileSplitter->setSizes(BEHAVIOR << EXPANDED << COLLAPSED);
|
||||||
ui.mainSplitter->setSizes( BEHAVIOR << EXPANDED << COLLAPSED);
|
ui.mainSplitter->setSizes( BEHAVIOR << EXPANDED << COLLAPSED);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::on_actionViewGlobe_triggered()
|
void MainWindow::on_actionViewGlobe_triggered()
|
||||||
{
|
{
|
||||||
|
beginChangeState(GLOBE_MAXIMIZED);
|
||||||
ui.mainSplitter->setSizes(BEHAVIOR << COLLAPSED << EXPANDED);
|
ui.mainSplitter->setSizes(BEHAVIOR << COLLAPSED << EXPANDED);
|
||||||
ui.listGlobeSplitter->setSizes(BEHAVIOR << COLLAPSED << EXPANDED);
|
ui.listGlobeSplitter->setSizes(BEHAVIOR << COLLAPSED << EXPANDED);
|
||||||
}
|
}
|
||||||
|
@ -375,17 +379,47 @@ void MainWindow::on_actionViewGlobe_triggered()
|
||||||
|
|
||||||
void MainWindow::on_actionViewAll_triggered()
|
void MainWindow::on_actionViewAll_triggered()
|
||||||
{
|
{
|
||||||
// big number squash the info profile to it's minimum.
|
beginChangeState(VIEWALL);
|
||||||
ui.infoProfileSplitter->setSizes(QList<int>() << 1 << 20000);
|
QSettings settings;
|
||||||
|
settings.beginGroup("MainWindow");
|
||||||
|
if (settings.value("mainSplitter").isValid()){
|
||||||
|
ui.mainSplitter->restoreState(settings.value("mainSplitter").toByteArray());
|
||||||
|
ui.infoProfileSplitter->restoreState(settings.value("infoProfileSplitter").toByteArray());
|
||||||
|
ui.listGlobeSplitter->restoreState(settings.value("listGlobeSplitter").toByteArray());
|
||||||
|
} else {
|
||||||
|
QList<int> mainSizes;
|
||||||
|
mainSizes.append( qApp->desktop()->size().height() * 0.7 );
|
||||||
|
mainSizes.append( qApp->desktop()->size().height() * 0.3 );
|
||||||
|
ui.mainSplitter->setSizes( mainSizes );
|
||||||
|
|
||||||
// big number squash the globe view.
|
QList<int> infoProfileSizes;
|
||||||
ui.listGlobeSplitter->setSizes(QList<int>() << 2000 << 1 );
|
infoProfileSizes.append( qApp->desktop()->size().width() * 0.3 );
|
||||||
|
infoProfileSizes.append( qApp->desktop()->size().width() * 0.7 );
|
||||||
|
ui.infoProfileSplitter->setSizes(infoProfileSizes);
|
||||||
|
|
||||||
// half and half?
|
QList<int> listGlobeSizes;
|
||||||
ui.mainSplitter->setSizes( QList<int>() << 1 << 1);
|
listGlobeSizes.append( qApp->desktop()->size().width() * 0.7 );
|
||||||
|
listGlobeSizes.append( qApp->desktop()->size().width() * 0.3 );
|
||||||
|
ui.listGlobeSplitter->setSizes(listGlobeSizes);
|
||||||
|
}
|
||||||
redrawProfile();
|
redrawProfile();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::beginChangeState(CurrentState s){
|
||||||
|
if (state == VIEWALL){
|
||||||
|
saveSplitterSizes();
|
||||||
|
}
|
||||||
|
state = s;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::saveSplitterSizes(){
|
||||||
|
QSettings settings;
|
||||||
|
settings.beginGroup("MainWindow");
|
||||||
|
settings.setValue("mainSplitter", ui.mainSplitter->saveState());
|
||||||
|
settings.setValue("infoProfileSplitter", ui.infoProfileSplitter->saveState());
|
||||||
|
settings.setValue("listGlobeSplitter", ui.listGlobeSplitter->saveState());
|
||||||
|
}
|
||||||
|
|
||||||
void MainWindow::on_actionPreviousDC_triggered()
|
void MainWindow::on_actionPreviousDC_triggered()
|
||||||
{
|
{
|
||||||
dc_number--;
|
dc_number--;
|
||||||
|
@ -523,29 +557,15 @@ void MainWindow::initialUiSetup()
|
||||||
QSize sz = settings.value("size", qApp->desktop()->size()).value<QSize>();
|
QSize sz = settings.value("size", qApp->desktop()->size()).value<QSize>();
|
||||||
resize(sz);
|
resize(sz);
|
||||||
|
|
||||||
if (settings.value("mainSplitter").isValid()){
|
CurrentState state = (CurrentState) settings.value("lastState", 0).toInt();
|
||||||
ui.mainSplitter->restoreState(settings.value("mainSplitter").toByteArray());
|
switch(state){
|
||||||
ui.infoProfileSplitter->restoreState(settings.value("infoProfileSplitter").toByteArray());
|
case VIEWALL: on_actionViewAll_triggered(); break;
|
||||||
ui.listGlobeSplitter->restoreState(settings.value("listGlobeSplitter").toByteArray());
|
case GLOBE_MAXIMIZED : on_actionViewGlobe_triggered(); break;
|
||||||
} else {
|
case INFO_MAXIMIZED : on_actionViewInfo_triggered(); break;
|
||||||
QList<int> mainSizes;
|
case LIST_MAXIMIZED : on_actionViewList_triggered(); break;
|
||||||
mainSizes.append( qApp->desktop()->size().height() * 0.7 );
|
case PROFILE_MAXIMIZED : on_actionViewProfile_triggered(); break;
|
||||||
mainSizes.append( qApp->desktop()->size().height() * 0.3 );
|
|
||||||
ui.mainSplitter->setSizes( mainSizes );
|
|
||||||
|
|
||||||
QList<int> infoProfileSizes;
|
|
||||||
infoProfileSizes.append( qApp->desktop()->size().width() * 0.3 );
|
|
||||||
infoProfileSizes.append( qApp->desktop()->size().width() * 0.7 );
|
|
||||||
ui.infoProfileSplitter->setSizes(infoProfileSizes);
|
|
||||||
|
|
||||||
QList<int> listGlobeSizes;
|
|
||||||
listGlobeSizes.append( qApp->desktop()->size().width() * 0.7 );
|
|
||||||
listGlobeSizes.append( qApp->desktop()->size().width() * 0.3 );
|
|
||||||
ui.listGlobeSplitter->setSizes(listGlobeSizes);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
settings.endGroup();
|
|
||||||
|
|
||||||
settings.beginGroup("ListWidget");
|
settings.beginGroup("ListWidget");
|
||||||
/* if no width are set, use the calculated width for each column;
|
/* if no width are set, use the calculated width for each column;
|
||||||
* for that to work we need to temporarily expand all rows */
|
* for that to work we need to temporarily expand all rows */
|
||||||
|
@ -625,10 +645,11 @@ void MainWindow::writeSettings()
|
||||||
QSettings settings;
|
QSettings settings;
|
||||||
|
|
||||||
settings.beginGroup("MainWindow");
|
settings.beginGroup("MainWindow");
|
||||||
|
settings.setValue("lastState", (int) state);
|
||||||
settings.setValue("size",size());
|
settings.setValue("size",size());
|
||||||
settings.setValue("mainSplitter", ui.mainSplitter->saveState());
|
if (state == VIEWALL){
|
||||||
settings.setValue("infoProfileSplitter", ui.infoProfileSplitter->saveState());
|
saveSplitterSizes();
|
||||||
settings.setValue("listGlobeSplitter", ui.listGlobeSplitter->saveState());
|
}
|
||||||
settings.endGroup();
|
settings.endGroup();
|
||||||
|
|
||||||
settings.beginGroup("ListWidget");
|
settings.beginGroup("ListWidget");
|
||||||
|
|
|
@ -36,6 +36,7 @@ public:
|
||||||
enum {COLLAPSED, EXPANDED};
|
enum {COLLAPSED, EXPANDED};
|
||||||
enum StackWidgetIndexes{ PROFILE, PLANNERPROFILE};
|
enum StackWidgetIndexes{ PROFILE, PLANNERPROFILE};
|
||||||
enum InfoWidgetIndexes{ MAINTAB, PLANNERWIDGET};
|
enum InfoWidgetIndexes{ MAINTAB, PLANNERWIDGET};
|
||||||
|
enum CurrentState{ VIEWALL, GLOBE_MAXIMIZED, INFO_MAXIMIZED, PROFILE_MAXIMIZED, LIST_MAXIMIZED};
|
||||||
|
|
||||||
MainWindow();
|
MainWindow();
|
||||||
ProfileGraphicsView *graphics();
|
ProfileGraphicsView *graphics();
|
||||||
|
@ -116,12 +117,15 @@ private:
|
||||||
QAction *actionNextDive;
|
QAction *actionNextDive;
|
||||||
QAction *actionPreviousDive;
|
QAction *actionPreviousDive;
|
||||||
QWebView *helpView;
|
QWebView *helpView;
|
||||||
|
CurrentState state;
|
||||||
QString filter();
|
QString filter();
|
||||||
bool askSaveChanges();
|
bool askSaveChanges();
|
||||||
void writeSettings();
|
void writeSettings();
|
||||||
void redrawProfile();
|
void redrawProfile();
|
||||||
void file_save();
|
void file_save();
|
||||||
void file_save_as();
|
void file_save_as();
|
||||||
|
void beginChangeState(CurrentState s);
|
||||||
|
void saveSplitterSizes();
|
||||||
};
|
};
|
||||||
|
|
||||||
MainWindow *mainWindow();
|
MainWindow *mainWindow();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue