mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-10-05 18:54:14 +02:00
Avoid needless dock churn in QETElementEditor::updateInformations()
updateInformations() runs on every selection change and on every undo stack index change. It unconditionally called clearToolsDock(), which removes and hides the current editor widget, and then re-inserted the same widget into the stack. When the editor for the new selection is the one already shown, that means removing, hiding, reparenting and re-adding a widget only to end up in the same state. Look up the editor first and only clear and re-insert the tools dock when a different editor is needed. setPart()/setParts() still updates the contents in every case, so the visible result is unchanged.
This commit is contained in:
@@ -573,9 +573,11 @@ void QETElementEditor::updateInformations()
|
||||
|| selection_xml_name == "ellipse"
|
||||
|| selection_xml_name == "arc")
|
||||
{
|
||||
clearToolsDock();
|
||||
//We add the editor widget
|
||||
ElementItemEditor *editor = static_cast<ElementItemEditor*>(m_editors[selection_xml_name]);
|
||||
if (m_tools_dock_stack -> widget(1) != editor) {
|
||||
clearToolsDock();
|
||||
}
|
||||
|
||||
#if TODO_LIST
|
||||
#pragma message("@TODO Check if it takes longer than setting the parts again to the editor.")
|
||||
@@ -608,7 +610,9 @@ void QETElementEditor::updateInformations()
|
||||
success = editor -> setParts(cep_list);
|
||||
}
|
||||
if (success) {
|
||||
m_tools_dock_stack -> insertWidget(1, editor);
|
||||
if (m_tools_dock_stack -> widget(1) != editor) {
|
||||
m_tools_dock_stack -> insertWidget(1, editor);
|
||||
}
|
||||
m_tools_dock_stack -> setCurrentIndex(1);
|
||||
}
|
||||
else {
|
||||
@@ -626,8 +630,10 @@ void QETElementEditor::updateInformations()
|
||||
// multi edit for polygons makes no sense
|
||||
// TODO: maybe allowing multipart edit when number of points is the same?
|
||||
//We add the editor widget
|
||||
clearToolsDock();
|
||||
ElementItemEditor *editor = static_cast<ElementItemEditor*>(m_editors[selection_xml_name]);
|
||||
if (m_tools_dock_stack -> widget(1) != editor) {
|
||||
clearToolsDock();
|
||||
}
|
||||
CustomElementPart* part = editor -> currentPart();
|
||||
bool equal = part == cep_list.first();
|
||||
|
||||
@@ -637,7 +643,9 @@ void QETElementEditor::updateInformations()
|
||||
success = editor -> setPart(cep_list.first());
|
||||
}
|
||||
if (success) {
|
||||
m_tools_dock_stack -> insertWidget(1, editor);
|
||||
if (m_tools_dock_stack -> widget(1) != editor) {
|
||||
m_tools_dock_stack -> insertWidget(1, editor);
|
||||
}
|
||||
m_tools_dock_stack -> setCurrentIndex(1);
|
||||
}
|
||||
else {
|
||||
@@ -655,11 +663,15 @@ void QETElementEditor::updateInformations()
|
||||
|
||||
//There's several parts selecteds and all can be edited by style editor.
|
||||
if (style_editable) {
|
||||
clearToolsDock();
|
||||
ElementItemEditor *selection_editor = m_editors["style"];
|
||||
if (m_tools_dock_stack -> widget(1) != selection_editor) {
|
||||
clearToolsDock();
|
||||
}
|
||||
if (selection_editor) {
|
||||
if (selection_editor -> setParts(cep_list)) {
|
||||
m_tools_dock_stack -> insertWidget(1, selection_editor);
|
||||
if (m_tools_dock_stack -> widget(1) != selection_editor) {
|
||||
m_tools_dock_stack -> insertWidget(1, selection_editor);
|
||||
}
|
||||
m_tools_dock_stack -> setCurrentIndex(1);
|
||||
}
|
||||
else {
|
||||
|
||||
Reference in New Issue
Block a user