Fix losing Focus on moving diagram position with keyboard

Due to the changes made in the commit "Add highlight current page in
ProjectView", there is a problem when moving diagrams in the ProjectView
using the keyboard. The diagrams lose focus after being moved.
The cause is: The DiagramItem loses its selection before the move
function is executed.

The code has been adjusted.
This commit is contained in:
ChuckNr11
2026-04-19 10:44:52 +02:00
parent 03bb97b529
commit f60acad3b3
3 changed files with 28 additions and 1 deletions

View File

@@ -480,28 +480,33 @@ void ElementsPanelWidget::keyPressEvent (QKeyEvent *e) {
break; break;
case Qt::Key_F3: case Qt::Key_F3:
if (Diagram *selected_diagram = elements_panel -> selectedDiagram()) { if (Diagram *selected_diagram = elements_panel -> selectedDiagram()) {
elements_panel->setSelectedItem(elements_panel->getItemForDiagram(selected_diagram));
emit(requestForDiagramMoveUp(selected_diagram)); emit(requestForDiagramMoveUp(selected_diagram));
} }
break; break;
case Qt::Key_F4: case Qt::Key_F4:
if (Diagram *selected_diagram = elements_panel -> selectedDiagram()) { if (Diagram *selected_diagram = elements_panel -> selectedDiagram()) {
elements_panel->setSelectedItem(elements_panel->getItemForDiagram(selected_diagram));
emit(requestForDiagramMoveDown(selected_diagram)); emit(requestForDiagramMoveDown(selected_diagram));
} }
break; break;
case Qt::Key_F5: case Qt::Key_F5:
if (Diagram *selected_diagram = elements_panel -> selectedDiagram()) { if (Diagram *selected_diagram = elements_panel -> selectedDiagram()) {
elements_panel->setSelectedItem(elements_panel->getItemForDiagram(selected_diagram));
emit(requestForDiagramMoveUpTop(selected_diagram)); emit(requestForDiagramMoveUpTop(selected_diagram));
} }
break; break;
case Qt::Key_F6: case Qt::Key_F6:
if (Diagram *selected_diagram = elements_panel -> selectedDiagram()) { if (Diagram *selected_diagram = elements_panel -> selectedDiagram()) {
elements_panel->setSelectedItem(elements_panel->getItemForDiagram(selected_diagram));
emit(requestForDiagramMoveDownx10(selected_diagram)); emit(requestForDiagramMoveDownx10(selected_diagram));
} }
break; break;
case Qt::Key_F7: case Qt::Key_F7:
if (Diagram *selected_diagram = elements_panel -> selectedDiagram()) { if (Diagram *selected_diagram = elements_panel -> selectedDiagram()) {
elements_panel->setSelectedItem(elements_panel->getItemForDiagram(selected_diagram));
emit(requestForDiagramMoveDownx100(selected_diagram)); emit(requestForDiagramMoveDownx100(selected_diagram));
} }
@@ -509,12 +514,14 @@ void ElementsPanelWidget::keyPressEvent (QKeyEvent *e) {
break; break;
case Qt::Key_F8: case Qt::Key_F8:
if (Diagram *selected_diagram = elements_panel -> selectedDiagram()) { if (Diagram *selected_diagram = elements_panel -> selectedDiagram()) {
elements_panel->setSelectedItem(elements_panel->getItemForDiagram(selected_diagram));
emit(requestForDiagramMoveUpx10(selected_diagram)); emit(requestForDiagramMoveUpx10(selected_diagram));
} }
break; break;
case Qt::Key_F9: case Qt::Key_F9:
if (Diagram *selected_diagram = elements_panel -> selectedDiagram()) { if (Diagram *selected_diagram = elements_panel -> selectedDiagram()) {
elements_panel->setSelectedItem(elements_panel->getItemForDiagram(selected_diagram));
emit(requestForDiagramMoveUpx100(selected_diagram)); emit(requestForDiagramMoveUpx100(selected_diagram));
} }
break; break;

View File

@@ -781,7 +781,13 @@ void GenericPanel::projectDiagramsOrderChanged(QETProject *project,
} }
// select the moved diagram // select the moved diagram
setCurrentItem(qtwi_project -> child(from)); if(m_selected_item){
setCurrentItem(moved_qtwi_diagram);
}
else{
setCurrentItem(qtwi_project -> child(from));
}
m_selected_item = nullptr;
emit(panelContentChanged()); emit(panelContentChanged());
} }
@@ -1040,3 +1046,12 @@ void GenericPanel::emitFirstActivated()
{ {
emit(firstActivated()); emit(firstActivated());
} }
/**
@brief GenericPanel::setSelectedItem
@param selectedItem
*/
void GenericPanel::setSelectedItem(QTreeWidgetItem *selectedItem)
{
m_selected_item = selectedItem;
}

View File

@@ -171,6 +171,9 @@ class GenericPanel : public QTreeWidget {
const QString &); const QString &);
// various other methods // various other methods
public:
void setSelectedItem(QTreeWidgetItem *selectedItem);
protected: protected:
virtual QString defaultText(QET::ItemType); virtual QString defaultText(QET::ItemType);
virtual QIcon defaultIcon(QET::ItemType); virtual QIcon defaultIcon(QET::ItemType);
@@ -222,5 +225,7 @@ class GenericPanel : public QTreeWidget {
representing a title block template representing a title block template
*/ */
QHash<TitleBlockTemplateLocation, QTreeWidgetItem *> tb_templates_; QHash<TitleBlockTemplateLocation, QTreeWidgetItem *> tb_templates_;
QTreeWidgetItem *m_selected_item = nullptr;
}; };
#endif #endif