Skip to content

Commit

Permalink
Minor improvement in ModelObjectsWidget::saveTreeState/restoreTreeState
Browse files Browse the repository at this point in the history
to correctly restore the vertical scrollbar position (issue #1843)
  • Loading branch information
rkhaotix committed Jan 28, 2024
1 parent 067de58 commit c2dee83
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 13 deletions.
5 changes: 3 additions & 2 deletions libs/libgui/src/mainwindow.cpp
Expand Up @@ -1379,7 +1379,7 @@ void MainWindow::setCurrentModel()

//Restore the tree state
if(current_model)
model_objs_wgt->saveTreeState(model_tree_states[current_model]);
model_objs_wgt->saveTreeState(model_tree_states[current_model], model_tree_v_pos[current_model]);

models_tbw->setCurrentIndex(model_nav_wgt->getCurrentIndex());
current_model=dynamic_cast<ModelWidget *>(models_tbw->currentWidget());
Expand Down Expand Up @@ -1517,7 +1517,7 @@ void MainWindow::setCurrentModel()
changelog_wgt->setModel(current_model);

if(current_model)
model_objs_wgt->restoreTreeState(model_tree_states[current_model]);
model_objs_wgt->restoreTreeState(model_tree_states[current_model], model_tree_v_pos[current_model]);

model_objs_wgt->saveTreeState(true);
resizeGeneralToolbarButtons();
Expand Down Expand Up @@ -1622,6 +1622,7 @@ void MainWindow::closeModel(int model_id)
{
model_nav_wgt->removeModel(model_id);
model_tree_states.erase(model);
model_tree_v_pos.erase(model);

disconnect(model, nullptr, nullptr, nullptr);

Expand Down
3 changes: 3 additions & 0 deletions libs/libgui/src/mainwindow.h
Expand Up @@ -122,6 +122,9 @@ class __libgui MainWindow: public QMainWindow, public Ui::MainWindow {
//! \brief Stores the model objects tree state for each opened model
std::map<ModelWidget *, std::vector<BaseObject *> > model_tree_states;

//! \brief Stores the model objects tree vertical scrollbar position for each opened model
std::map<ModelWidget *, int> model_tree_v_pos;

//! \brief Stores the defaul window title
QString window_title;

Expand Down
15 changes: 8 additions & 7 deletions libs/libgui/src/widgets/modelobjectswidget.cpp
Expand Up @@ -628,6 +628,7 @@ void ModelObjectsWidget::updateDatabaseTree()
std::vector<BaseObject *> ref_list, tree_state, obj_list;
std::vector<ObjectType> types = BaseObject::getChildObjectTypes(ObjectType::Database);
unsigned count = 0, i = 0, i1 = 0;
int tree_v_pos = 0;

objectstree_tw->setUpdatesEnabled(false);

Expand All @@ -640,7 +641,7 @@ void ModelObjectsWidget::updateDatabaseTree()
try
{
if(save_tree_state)
saveTreeState(tree_state);
saveTreeState(tree_state, tree_v_pos);

objectstree_tw->clear();

Expand Down Expand Up @@ -694,7 +695,7 @@ void ModelObjectsWidget::updateDatabaseTree()
objectstree_tw->expandItem(root);

if(save_tree_state)
restoreTreeState(tree_state);
restoreTreeState(tree_state, tree_v_pos);
}
}
catch(Exception &e)
Expand Down Expand Up @@ -867,7 +868,7 @@ void ModelObjectsWidget::clearSelectedObject()
model_wgt->emitSceneInteracted();
}

void ModelObjectsWidget::saveTreeState(std::vector<BaseObject *> &tree_items)
void ModelObjectsWidget::saveTreeState(std::vector<BaseObject *> &tree_items, int &v_scroll_pos)
{
QTreeWidgetItemIterator itr(objectstree_tw);
BaseObject *obj=nullptr;
Expand All @@ -883,14 +884,14 @@ void ModelObjectsWidget::saveTreeState(std::vector<BaseObject *> &tree_items)

++itr;
}

v_scroll_pos = objectstree_tw->verticalScrollBar()->value();
}

void ModelObjectsWidget::restoreTreeState(std::vector<BaseObject *> &tree_items)
void ModelObjectsWidget::restoreTreeState(std::vector<BaseObject *> &tree_items, int v_scroll_pos)
{
QTreeWidgetItem *item=nullptr, *parent_item=nullptr;

//objectslist_tbw->setUpdatesEnabled(false);

while(!tree_items.empty())
{
item=getTreeItem(tree_items.back());
Expand All @@ -909,7 +910,7 @@ void ModelObjectsWidget::restoreTreeState(std::vector<BaseObject *> &tree_items)
tree_items.pop_back();
}

//objectslist_tbw->setUpdatesEnabled(true);
objectstree_tw->verticalScrollBar()->setValue(v_scroll_pos);
}

QTreeWidgetItem *ModelObjectsWidget::getTreeItem(BaseObject *object)
Expand Down
10 changes: 6 additions & 4 deletions libs/libgui/src/widgets/modelobjectswidget.h
Expand Up @@ -104,11 +104,13 @@ class __libgui ModelObjectsWidget: public QWidget, public Ui::ModelObjectsWidget
void enableObjectCreation(bool value);

protected:
//! \brief Saves the currently expanded items on the specified vector
void saveTreeState(std::vector<BaseObject *> &tree_items);
/*! \brief Saves the currently expanded items on the specified vector.
* The vertical scrollbar position is stored in v_scroll_pos */
void saveTreeState(std::vector<BaseObject *> &tree_items, int &v_scroll_pos);

//! \brief Restores the tree at a previous state when the specified items were expanded
void restoreTreeState(std::vector<BaseObject *> &tree_items);
/*! \brief Restores the tree at a previous state when the specified items were expanded
* as well as to a vertical scrollbar position */
void restoreTreeState(std::vector<BaseObject *> &tree_items, int v_scroll_pos);

//! \brief Defines if the widget must save/restore the tree state automaticaly
void saveTreeState(bool value);
Expand Down

0 comments on commit c2dee83

Please sign in to comment.