mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-04-08 23:29:59 +02:00
Change operation of elementsPanel
corresponding to operation of project and diagram tabs - click on the item activates the corresponding diagram or project. - double click opens the corresponding properties editor. - selecting with the up and down arrow keys has the same effect.
This commit is contained in:
@@ -67,7 +67,10 @@ ElementsPanel::ElementsPanel(QWidget *parent) :
|
|||||||
connect(this, &ElementsPanel::itemDoubleClicked, this, &ElementsPanel::slot_doubleClick);
|
connect(this, &ElementsPanel::itemDoubleClicked, this, &ElementsPanel::slot_doubleClick);
|
||||||
connect(this, &GenericPanel::firstActivated, [this]() {QTimer::singleShot(250, this, SLOT(reload()));});
|
connect(this, &GenericPanel::firstActivated, [this]() {QTimer::singleShot(250, this, SLOT(reload()));});
|
||||||
connect(this, &ElementsPanel::panelContentChanged, this, &ElementsPanel::panelContentChange);
|
connect(this, &ElementsPanel::panelContentChanged, this, &ElementsPanel::panelContentChange);
|
||||||
|
|
||||||
|
// manage signal itemClicked
|
||||||
|
connect(this, &ElementsPanel::itemClicked, this, &ElementsPanel::slot_clicked);
|
||||||
|
|
||||||
//Emit a signal instead au manage is own context menu
|
//Emit a signal instead au manage is own context menu
|
||||||
setContextMenuPolicy(Qt::CustomContextMenu);
|
setContextMenuPolicy(Qt::CustomContextMenu);
|
||||||
}
|
}
|
||||||
@@ -269,21 +272,28 @@ void ElementsPanel::reload()
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Gere le double-clic sur un element.
|
@brief ElementsPanel::slot_clicked
|
||||||
Si un double-clic sur un projet est effectue, le signal requestForProject
|
handle click on qtwi
|
||||||
est emis.
|
@param qtwi item that was clickerd on
|
||||||
Si un double-clic sur un schema est effectue, le signal requestForDiagram
|
*/
|
||||||
est emis.
|
void ElementsPanel::slot_clicked(QTreeWidgetItem *clickedItem, int) {
|
||||||
|
|
||||||
|
requestForItem(clickedItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
@brief ElementsPanel::slot_doubleClick
|
||||||
|
handle double click on qtwi
|
||||||
@param qtwi
|
@param qtwi
|
||||||
*/
|
*/
|
||||||
void ElementsPanel::slot_doubleClick(QTreeWidgetItem *qtwi, int) {
|
void ElementsPanel::slot_doubleClick(QTreeWidgetItem *qtwi, int) {
|
||||||
int qtwi_type = qtwi -> type();
|
int qtwi_type = qtwi -> type();
|
||||||
if (qtwi_type == QET::Project) {
|
if (qtwi_type == QET::Project) {
|
||||||
QETProject *project = valueForItem<QETProject *>(qtwi);
|
// open project properties
|
||||||
emit(requestForProject(project));
|
emit(requestForProjectPropertiesEdition());
|
||||||
} else if (qtwi_type == QET::Diagram) {
|
} else if (qtwi_type == QET::Diagram) {
|
||||||
Diagram *diagram = valueForItem<Diagram *>(qtwi);
|
// open diagram properties
|
||||||
diagram->showMe();
|
emit(requestForDiagramPropertiesEdition());
|
||||||
} else if (qtwi_type == QET::TitleBlockTemplate) {
|
} else if (qtwi_type == QET::TitleBlockTemplate) {
|
||||||
TitleBlockTemplateLocation tbt = valueForItem<TitleBlockTemplateLocation>(qtwi);
|
TitleBlockTemplateLocation tbt = valueForItem<TitleBlockTemplateLocation>(qtwi);
|
||||||
emit(requestForTitleBlockTemplate(tbt));
|
emit(requestForTitleBlockTemplate(tbt));
|
||||||
@@ -455,3 +465,64 @@ void ElementsPanel::ensureHierarchyIsVisible(const QList<QTreeWidgetItem *> &ite
|
|||||||
if (parent_qtwi -> isHidden()) parent_qtwi -> setHidden(false);
|
if (parent_qtwi -> isHidden()) parent_qtwi -> setHidden(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief ElementsPanel::syncTabBars
|
||||||
|
* set the project- or diagram Tab corresponding to
|
||||||
|
* the selection in the treeView
|
||||||
|
*/
|
||||||
|
void ElementsPanel::requestForItem(QTreeWidgetItem *clickedItem)
|
||||||
|
{
|
||||||
|
// activate diagram
|
||||||
|
if(clickedItem->type() == QET::Diagram){
|
||||||
|
Diagram *diagram = valueForItem<Diagram *>(clickedItem);
|
||||||
|
// if we click on diagramItem in annother project we need the other project
|
||||||
|
emit(requestForProject(projectForItem(clickedItem->parent())));
|
||||||
|
// required for keyPressEvent
|
||||||
|
// after emit the focus is on the diagram editor, we put it back to elementsPanel
|
||||||
|
this->setFocus();
|
||||||
|
// activate diagram
|
||||||
|
diagram->showMe();
|
||||||
|
}
|
||||||
|
// activate project
|
||||||
|
else if(clickedItem->type() == QET::Project) {
|
||||||
|
QETProject *project = projectForItem(clickedItem);
|
||||||
|
emit(requestForProject(project));
|
||||||
|
this->setFocus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief ElementsPanel::keyPressEvent
|
||||||
|
* @param event
|
||||||
|
*/
|
||||||
|
void ElementsPanel::keyPressEvent(QKeyEvent *event)
|
||||||
|
{
|
||||||
|
switch (event->key())
|
||||||
|
{
|
||||||
|
case Qt::Key_Up:{
|
||||||
|
// check if there is another item abbove
|
||||||
|
if(!itemAbove(currentItem()))
|
||||||
|
break;
|
||||||
|
|
||||||
|
setCurrentItem(itemAbove(currentItem()));
|
||||||
|
if (currentItem()->type()==QET::Diagram || currentItem()->type()==QET::Project){
|
||||||
|
requestForItem(currentItem());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case Qt::Key_Down:{
|
||||||
|
// check if there is another item below
|
||||||
|
if(!itemBelow(currentItem()))
|
||||||
|
break;
|
||||||
|
|
||||||
|
setCurrentItem(itemBelow(currentItem()));
|
||||||
|
if (currentItem()->type()==QET::Diagram || currentItem()->type()==QET::Project){
|
||||||
|
requestForItem(currentItem());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
QTreeView::keyPressEvent(event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -53,8 +53,13 @@ class ElementsPanel : public GenericPanel {
|
|||||||
signals:
|
signals:
|
||||||
void requestForProject(QETProject *);
|
void requestForProject(QETProject *);
|
||||||
void requestForTitleBlockTemplate(const TitleBlockTemplateLocation &);
|
void requestForTitleBlockTemplate(const TitleBlockTemplateLocation &);
|
||||||
|
// Signal to open the project properties
|
||||||
|
void requestForProjectPropertiesEdition();
|
||||||
|
// Signal to open the diagram properties
|
||||||
|
void requestForDiagramPropertiesEdition();
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
void slot_clicked(QTreeWidgetItem *, int);
|
||||||
void slot_doubleClick(QTreeWidgetItem *, int);
|
void slot_doubleClick(QTreeWidgetItem *, int);
|
||||||
void reload();
|
void reload();
|
||||||
void filter(const QString &, QET::Filtering = QET::RegularFilter);
|
void filter(const QString &, QET::Filtering = QET::RegularFilter);
|
||||||
@@ -63,7 +68,9 @@ class ElementsPanel : public GenericPanel {
|
|||||||
void buildFilterList();
|
void buildFilterList();
|
||||||
void applyCurrentFilter(const QList<QTreeWidgetItem *> &);
|
void applyCurrentFilter(const QList<QTreeWidgetItem *> &);
|
||||||
void ensureHierarchyIsVisible(const QList<QTreeWidgetItem *> &);
|
void ensureHierarchyIsVisible(const QList<QTreeWidgetItem *> &);
|
||||||
|
void requestForItem(QTreeWidgetItem *);
|
||||||
|
void keyPressEvent(QKeyEvent *event)override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void startDrag(Qt::DropActions) override;
|
void startDrag(Qt::DropActions) override;
|
||||||
void startTitleBlockTemplateDrag(const TitleBlockTemplateLocation &);
|
void startTitleBlockTemplateDrag(const TitleBlockTemplateLocation &);
|
||||||
|
|||||||
@@ -120,6 +120,12 @@ ElementsPanelWidget::ElementsPanelWidget(QWidget *parent) : QWidget(parent) {
|
|||||||
SLOT(openTitleBlockTemplate(const TitleBlockTemplateLocation &))
|
SLOT(openTitleBlockTemplate(const TitleBlockTemplateLocation &))
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// manage double click on TreeWidgetItem
|
||||||
|
connect(elements_panel, SIGNAL(requestForProjectPropertiesEdition()), this, SLOT(editProjectProperties()) );
|
||||||
|
connect(elements_panel, SIGNAL(requestForDiagramPropertiesEdition()), this, SLOT(editDiagramProperties()) );
|
||||||
|
// manage project activation
|
||||||
|
connect(elements_panel, SIGNAL(requestForProject(QETProject*)), this, SIGNAL(requestForProject(QETProject*)));
|
||||||
|
|
||||||
// disposition verticale
|
// disposition verticale
|
||||||
QVBoxLayout *vlayout = new QVBoxLayout(this);
|
QVBoxLayout *vlayout = new QVBoxLayout(this);
|
||||||
vlayout -> setContentsMargins(0,0,0,0);
|
vlayout -> setContentsMargins(0,0,0,0);
|
||||||
|
|||||||
Reference in New Issue
Block a user