2007-12-01 10:47:15 +00:00
|
|
|
/*
|
2020-06-15 17:42:37 +02:00
|
|
|
Copyright 2006-2020 The QElectroTech Team
|
2007-12-01 10:47:15 +00:00
|
|
|
This file is part of QElectroTech.
|
2020-09-21 20:37:10 +02:00
|
|
|
|
2007-12-01 10:47:15 +00:00
|
|
|
QElectroTech is free software: you can redistribute it and/or modify
|
|
|
|
it under the terms of the GNU General Public License as published by
|
|
|
|
the Free Software Foundation, either version 2 of the License, or
|
|
|
|
(at your option) any later version.
|
2020-09-21 20:37:10 +02:00
|
|
|
|
2007-12-01 10:47:15 +00:00
|
|
|
QElectroTech is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
2020-09-21 20:37:10 +02:00
|
|
|
|
2007-12-01 10:47:15 +00:00
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
2007-02-26 22:42:46 +00:00
|
|
|
#include "elementspanelwidget.h"
|
2020-12-08 19:57:35 +01:00
|
|
|
|
|
|
|
#include "diagram.h"
|
|
|
|
#include "editor/qetelementeditor.h"
|
2009-04-03 19:30:25 +00:00
|
|
|
#include "elementscategoryeditor.h"
|
|
|
|
#include "qetapp.h"
|
2009-05-01 14:41:33 +00:00
|
|
|
#include "qeticons.h"
|
2020-12-08 19:57:35 +01:00
|
|
|
#include "qetproject.h"
|
|
|
|
#include "titleblock/templatedeleter.h"
|
2009-04-03 19:30:25 +00:00
|
|
|
|
|
|
|
/*
|
2020-09-04 21:13:10 +02:00
|
|
|
When the ENABLE_PANEL_WIDGET_DND_CHECKS flag is set, the panel
|
|
|
|
performs checks during drag'n drop of items and categories.
|
|
|
|
For example, it checks that a target category is writable
|
|
|
|
before authorizing the drop of an element.
|
|
|
|
Removing this flag allows you to test the behavior of management functions
|
|
|
|
items (copy, move, etc.).
|
|
|
|
|
2009-04-03 19:30:25 +00:00
|
|
|
Lorsque le flag ENABLE_PANEL_WIDGET_DND_CHECKS est defini, le panel
|
|
|
|
effectue des verifications lors des drag'n drop d'elements et categories.
|
|
|
|
Par exemple, il verifie qu'une categorie cible est accessible en ecriture
|
|
|
|
avant d'y autoriser le drop d'un element.
|
|
|
|
Supprimer ce flag permet de tester le comportement des fonctions de gestion
|
|
|
|
des items (copy, move, etc.).
|
|
|
|
*/
|
|
|
|
#define ENABLE_PANEL_WIDGET_DND_CHECKS
|
|
|
|
|
2007-04-09 02:56:47 +00:00
|
|
|
/**
|
|
|
|
Constructeur
|
|
|
|
@param parent Le QWidget parent de ce widget
|
|
|
|
*/
|
2007-02-26 22:42:46 +00:00
|
|
|
ElementsPanelWidget::ElementsPanelWidget(QWidget *parent) : QWidget(parent) {
|
|
|
|
// initalise le panel d'elements
|
|
|
|
elements_panel = new ElementsPanel(this);
|
2020-09-21 20:37:10 +02:00
|
|
|
|
2007-08-28 21:17:11 +00:00
|
|
|
// initialise les actions
|
2020-08-16 14:26:40 +02:00
|
|
|
open_directory = new QAction(QET::Icons::FolderOpen, tr("Ouvrir le dossier correspondant"), this);
|
|
|
|
copy_path = new QAction(QET::Icons::IC_CopyFile, tr("Copier le chemin"), this);
|
|
|
|
prj_activate = new QAction(QET::Icons::ProjectFile, tr("Basculer vers ce projet"), this);
|
|
|
|
prj_close = new QAction(QET::Icons::DocumentClose, tr("Fermer ce projet"), this);
|
|
|
|
prj_edit_prop = new QAction(QET::Icons::DialogInformation, tr("Propriétés du projet"), this);
|
|
|
|
prj_prop_diagram = new QAction(QET::Icons::DialogInformation, tr("Propriétés du folio"), this);
|
|
|
|
prj_add_diagram = new QAction(QET::Icons::DiagramAdd, tr("Ajouter un folio"), this);
|
|
|
|
prj_del_diagram = new QAction(QET::Icons::DiagramDelete, tr("Supprimer ce folio"), this);
|
|
|
|
prj_move_diagram_up = new QAction(QET::Icons::GoUp, tr("Remonter ce folio"), this);
|
|
|
|
prj_move_diagram_down = new QAction(QET::Icons::GoDown, tr("Abaisser ce folio"), this);
|
|
|
|
prj_move_diagram_upx10 = new QAction(QET::Icons::GoUpDouble, tr("Remonter ce folio x10"), this);
|
|
|
|
prj_move_diagram_top = new QAction(QET::Icons::GoTop, tr("Remonter ce folio au debut"), this);
|
|
|
|
prj_move_diagram_downx10 = new QAction(QET::Icons::GoDownDouble, tr("Abaisser ce folio x10"), this);
|
2015-03-02 20:14:56 +00:00
|
|
|
tbt_add = new QAction(QET::Icons::TitleBlock, tr("Nouveau modèle"), this);
|
|
|
|
tbt_edit = new QAction(QET::Icons::TitleBlock, tr("Éditer ce modèle"), this);
|
|
|
|
tbt_remove = new QAction(QET::Icons::TitleBlock, tr("Supprimer ce modèle"), this);
|
2013-06-24 20:18:20 +00:00
|
|
|
|
2020-09-21 20:37:10 +02:00
|
|
|
|
2019-05-30 22:17:03 +00:00
|
|
|
prj_del_diagram -> setShortcut(QKeySequence(Qt::Key_Delete));
|
|
|
|
prj_move_diagram_up -> setShortcut(QKeySequence(Qt::Key_F3));
|
|
|
|
prj_move_diagram_down -> setShortcut(QKeySequence(Qt::Key_F4));
|
|
|
|
prj_move_diagram_top -> setShortcut(QKeySequence(Qt::Key_F5));
|
2020-09-21 20:37:10 +02:00
|
|
|
|
|
|
|
|
2007-12-29 15:00:30 +00:00
|
|
|
// initialise le champ de texte pour filtrer avec une disposition horizontale
|
|
|
|
filter_textfield = new QLineEdit(this);
|
2015-03-05 16:35:12 +00:00
|
|
|
filter_textfield -> setClearButtonEnabled(true);
|
|
|
|
filter_textfield -> setPlaceholderText(tr("Filtrer"));
|
|
|
|
|
2016-08-25 01:57:20 +00:00
|
|
|
|
2007-10-28 16:03:18 +00:00
|
|
|
context_menu = new QMenu(this);
|
2020-09-21 20:37:10 +02:00
|
|
|
|
2013-02-03 19:25:02 +00:00
|
|
|
connect(open_directory, SIGNAL(triggered()), this, SLOT(openDirectoryForSelectedItem()));
|
|
|
|
connect(copy_path, SIGNAL(triggered()), this, SLOT(copyPathForSelectedItem()));
|
2012-06-25 06:27:24 +00:00
|
|
|
connect(prj_activate, SIGNAL(triggered()), this, SLOT(activateProject()));
|
2010-02-28 16:13:45 +00:00
|
|
|
connect(prj_close, SIGNAL(triggered()), this, SLOT(closeProject()));
|
|
|
|
connect(prj_edit_prop, SIGNAL(triggered()), this, SLOT(editProjectProperties()));
|
|
|
|
connect(prj_prop_diagram, SIGNAL(triggered()), this, SLOT(editDiagramProperties()));
|
|
|
|
connect(prj_add_diagram, SIGNAL(triggered()), this, SLOT(newDiagram()));
|
|
|
|
connect(prj_del_diagram, SIGNAL(triggered()), this, SLOT(deleteDiagram()));
|
|
|
|
connect(prj_move_diagram_up, SIGNAL(triggered()), this, SLOT(moveDiagramUp()));
|
|
|
|
connect(prj_move_diagram_down, SIGNAL(triggered()), this, SLOT(moveDiagramDown()));
|
2015-03-04 06:00:25 +00:00
|
|
|
connect(prj_move_diagram_top, SIGNAL(triggered()), this, SLOT(moveDiagramUpTop()));
|
2014-12-14 17:01:11 +00:00
|
|
|
connect(prj_move_diagram_upx10, SIGNAL(triggered()), this, SLOT(moveDiagramUpx10()));
|
|
|
|
connect(prj_move_diagram_downx10, SIGNAL(triggered()), this, SLOT(moveDiagramDownx10()));
|
2010-12-24 21:00:11 +00:00
|
|
|
connect(tbt_add, SIGNAL(triggered()), this, SLOT(addTitleBlockTemplate()));
|
|
|
|
connect(tbt_edit, SIGNAL(triggered()), this, SLOT(editTitleBlockTemplate()));
|
|
|
|
connect(tbt_remove, SIGNAL(triggered()), this, SLOT(removeTitleBlockTemplate()));
|
2020-09-21 20:37:10 +02:00
|
|
|
|
2015-03-05 16:35:12 +00:00
|
|
|
connect(filter_textfield, SIGNAL(textChanged(const QString &)), this, SLOT(filterEdited(const QString &)));
|
2020-09-21 20:37:10 +02:00
|
|
|
|
2010-02-28 16:13:45 +00:00
|
|
|
connect(elements_panel, SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)), this, SLOT(updateButtons()));
|
|
|
|
connect(elements_panel, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(handleContextMenu(const QPoint &)));
|
2011-12-27 02:17:07 +00:00
|
|
|
connect(
|
|
|
|
elements_panel,
|
2012-01-08 17:04:34 +00:00
|
|
|
SIGNAL(requestForTitleBlockTemplate(const TitleBlockTemplateLocation &)),
|
2011-12-27 02:17:07 +00:00
|
|
|
QETApp::instance(),
|
2012-01-08 17:04:34 +00:00
|
|
|
SLOT(openTitleBlockTemplate(const TitleBlockTemplateLocation &))
|
2011-12-27 02:17:07 +00:00
|
|
|
);
|
2020-09-21 20:37:10 +02:00
|
|
|
|
2007-02-26 22:42:46 +00:00
|
|
|
// disposition verticale
|
2018-07-30 15:24:29 +00:00
|
|
|
QVBoxLayout *vlayout = new QVBoxLayout(this);
|
2020-09-21 20:37:10 +02:00
|
|
|
vlayout -> setContentsMargins(0,0,0,0);
|
2007-02-26 22:42:46 +00:00
|
|
|
vlayout -> setSpacing(0);
|
2015-03-05 16:35:12 +00:00
|
|
|
vlayout -> addWidget(filter_textfield);
|
2007-02-26 22:42:46 +00:00
|
|
|
vlayout -> addWidget(elements_panel);
|
|
|
|
vlayout -> setStretchFactor(elements_panel, 75000);
|
|
|
|
setLayout(vlayout);
|
|
|
|
}
|
2007-04-04 02:13:14 +00:00
|
|
|
|
2007-04-12 03:13:13 +00:00
|
|
|
/**
|
|
|
|
Destructeur
|
|
|
|
*/
|
2020-09-07 22:03:40 +02:00
|
|
|
ElementsPanelWidget::~ElementsPanelWidget()
|
|
|
|
{
|
2007-04-12 03:13:13 +00:00
|
|
|
}
|
|
|
|
|
2013-02-03 19:25:02 +00:00
|
|
|
/**
|
|
|
|
Require the desktop environment to open the directory containing the file
|
|
|
|
represented by the selected item, if any.
|
|
|
|
*/
|
2020-09-07 22:03:40 +02:00
|
|
|
void ElementsPanelWidget::openDirectoryForSelectedItem()
|
|
|
|
{
|
2013-02-03 19:25:02 +00:00
|
|
|
if (QTreeWidgetItem *qtwi = elements_panel -> currentItem()) {
|
|
|
|
QString dir_path = elements_panel -> dirPathForItem(qtwi);
|
|
|
|
if (!dir_path.isEmpty()) {
|
2013-02-03 21:15:26 +00:00
|
|
|
QDesktopServices::openUrl(QUrl::fromLocalFile(dir_path));
|
2013-02-03 19:25:02 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Copy the full path to the file represented by the selected item to the
|
|
|
|
clipboard.
|
|
|
|
*/
|
2020-09-07 22:03:40 +02:00
|
|
|
void ElementsPanelWidget::copyPathForSelectedItem()
|
|
|
|
{
|
2013-02-03 19:25:02 +00:00
|
|
|
if (QTreeWidgetItem *qtwi = elements_panel -> currentItem()) {
|
|
|
|
QString file_path = elements_panel -> filePathForItem(qtwi);
|
|
|
|
file_path = QDir::toNativeSeparators(file_path);
|
|
|
|
if (!file_path.isEmpty()) {
|
|
|
|
QApplication::clipboard() -> setText(file_path);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2008-01-19 19:19:11 +00:00
|
|
|
/**
|
|
|
|
Recharge le panel d'elements
|
|
|
|
*/
|
2020-09-07 22:03:40 +02:00
|
|
|
void ElementsPanelWidget::reloadAndFilter()
|
|
|
|
{
|
2008-01-19 19:19:11 +00:00
|
|
|
// recharge tous les elements
|
2020-09-04 23:00:32 +02:00
|
|
|
elements_panel -> reload();
|
2008-01-19 19:19:11 +00:00
|
|
|
// reapplique le filtre
|
2012-02-06 22:46:26 +00:00
|
|
|
if (!filter_textfield -> text().isEmpty()) {
|
|
|
|
elements_panel -> filter(filter_textfield -> text());
|
|
|
|
}
|
2008-01-19 19:19:11 +00:00
|
|
|
}
|
|
|
|
|
2012-06-25 06:27:24 +00:00
|
|
|
/**
|
|
|
|
* Emit the requestForProject signal with te selected project
|
|
|
|
*/
|
2020-09-07 22:03:40 +02:00
|
|
|
void ElementsPanelWidget::activateProject()
|
|
|
|
{
|
2012-06-25 06:27:24 +00:00
|
|
|
if (QETProject *selected_project = elements_panel -> selectedProject()) {
|
|
|
|
emit(requestForProject(selected_project));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2009-04-03 19:30:25 +00:00
|
|
|
/**
|
|
|
|
Emet le signal requestForProjectClosing avec le projet selectionne
|
|
|
|
*/
|
2020-09-07 22:03:40 +02:00
|
|
|
void ElementsPanelWidget::closeProject()
|
|
|
|
{
|
2009-04-03 19:30:25 +00:00
|
|
|
if (QETProject *selected_project = elements_panel -> selectedProject()) {
|
|
|
|
emit(requestForProjectClosing(selected_project));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Emet le signal requestForProjectPropertiesEdition avec le projet selectionne
|
|
|
|
*/
|
2020-09-07 22:03:40 +02:00
|
|
|
void ElementsPanelWidget::editProjectProperties()
|
|
|
|
{
|
2009-04-03 19:30:25 +00:00
|
|
|
if (QETProject *selected_project = elements_panel -> selectedProject()) {
|
|
|
|
emit(requestForProjectPropertiesEdition(selected_project));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Emet le signal requestForDiagramPropertiesEdition avec le schema selectionne
|
|
|
|
*/
|
2020-09-07 22:03:40 +02:00
|
|
|
void ElementsPanelWidget::editDiagramProperties()
|
|
|
|
{
|
2009-04-03 19:30:25 +00:00
|
|
|
if (Diagram *selected_diagram = elements_panel -> selectedDiagram()) {
|
|
|
|
emit(requestForDiagramPropertiesEdition(selected_diagram));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Emet le signal requestForNewDiagram avec le projet selectionne
|
|
|
|
*/
|
2020-09-07 22:03:40 +02:00
|
|
|
void ElementsPanelWidget::newDiagram()
|
|
|
|
{
|
2009-04-03 19:30:25 +00:00
|
|
|
if (QETProject *selected_project = elements_panel -> selectedProject()) {
|
|
|
|
emit(requestForNewDiagram(selected_project));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Emet le signal requestForDiagramDeletion avec le schema selectionne
|
|
|
|
*/
|
2020-09-07 22:03:40 +02:00
|
|
|
void ElementsPanelWidget::deleteDiagram()
|
|
|
|
{
|
2009-04-03 19:30:25 +00:00
|
|
|
if (Diagram *selected_diagram = elements_panel -> selectedDiagram()) {
|
|
|
|
emit(requestForDiagramDeletion(selected_diagram));
|
|
|
|
}
|
|
|
|
}
|
2008-01-19 19:19:11 +00:00
|
|
|
|
2015-03-04 06:00:25 +00:00
|
|
|
/**
|
|
|
|
Emet le signal requestForDiagramMoveUpTop avec le schema selectionne
|
2020-08-16 11:19:36 +02:00
|
|
|
+*/
|
2020-09-07 22:03:40 +02:00
|
|
|
void ElementsPanelWidget::moveDiagramUpTop()
|
|
|
|
{
|
2015-03-04 06:00:25 +00:00
|
|
|
if (Diagram *selected_diagram = elements_panel -> selectedDiagram()) {
|
|
|
|
emit(requestForDiagramMoveUpTop(selected_diagram));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-02-28 16:13:45 +00:00
|
|
|
/**
|
|
|
|
Emet le signal requestForDiagramMoveUp avec le schema selectionne
|
|
|
|
*/
|
2020-09-07 22:03:40 +02:00
|
|
|
void ElementsPanelWidget::moveDiagramUp()
|
|
|
|
{
|
2010-02-28 16:13:45 +00:00
|
|
|
if (Diagram *selected_diagram = elements_panel -> selectedDiagram()) {
|
|
|
|
emit(requestForDiagramMoveUp(selected_diagram));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Emet le signal requestForDiagramMoveDown avec le schema selectionne
|
|
|
|
*/
|
2020-09-07 22:03:40 +02:00
|
|
|
void ElementsPanelWidget::moveDiagramDown()
|
|
|
|
{
|
2010-02-28 16:13:45 +00:00
|
|
|
if (Diagram *selected_diagram = elements_panel -> selectedDiagram()) {
|
|
|
|
emit(requestForDiagramMoveDown(selected_diagram));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-12-14 17:01:11 +00:00
|
|
|
/**
|
|
|
|
Emet le signal requestForDiagramMoveUpx10 avec le schema selectionne
|
|
|
|
*/
|
2020-09-07 22:03:40 +02:00
|
|
|
void ElementsPanelWidget::moveDiagramUpx10()
|
|
|
|
{
|
2014-12-14 17:01:11 +00:00
|
|
|
if (Diagram *selected_diagram = elements_panel -> selectedDiagram()) {
|
|
|
|
emit(requestForDiagramMoveUpx10(selected_diagram));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Emet le signal requestForDiagramMoveDownx10 avec le schema selectionne
|
|
|
|
*/
|
2020-09-07 22:03:40 +02:00
|
|
|
void ElementsPanelWidget::moveDiagramDownx10()
|
|
|
|
{
|
2014-12-14 17:01:11 +00:00
|
|
|
if (Diagram *selected_diagram = elements_panel -> selectedDiagram()) {
|
|
|
|
emit(requestForDiagramMoveDownx10(selected_diagram));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2010-12-24 21:00:11 +00:00
|
|
|
/**
|
|
|
|
Opens a template editor to create a new title block template.
|
|
|
|
*/
|
2020-09-07 22:03:40 +02:00
|
|
|
void ElementsPanelWidget::addTitleBlockTemplate()
|
|
|
|
{
|
2010-12-24 21:00:11 +00:00
|
|
|
QTreeWidgetItem *current_item = elements_panel -> currentItem();
|
|
|
|
if (!current_item) return;
|
2020-09-21 20:37:10 +02:00
|
|
|
|
2012-02-06 21:21:43 +00:00
|
|
|
if (current_item -> type() == QET::TitleBlockTemplatesCollection) {
|
|
|
|
QETApp::instance() -> openTitleBlockTemplate(
|
|
|
|
elements_panel -> templateLocationForItem(current_item)
|
|
|
|
);
|
2010-12-24 21:00:11 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Opens an editor to edit the currently selected title block template, if any.
|
|
|
|
*/
|
2020-09-07 22:03:40 +02:00
|
|
|
void ElementsPanelWidget::editTitleBlockTemplate()
|
|
|
|
{
|
2010-12-24 21:00:11 +00:00
|
|
|
QTreeWidgetItem *current_item = elements_panel -> currentItem();
|
2012-02-06 21:21:43 +00:00
|
|
|
if (current_item && current_item -> type() == QET::TitleBlockTemplate) {
|
|
|
|
QETApp::instance() -> openTitleBlockTemplate(
|
|
|
|
elements_panel -> templateLocationForItem(current_item)
|
|
|
|
);
|
2010-12-24 21:00:11 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Delete the currently selected title block template, if any.
|
|
|
|
*/
|
2020-09-07 22:03:40 +02:00
|
|
|
void ElementsPanelWidget::removeTitleBlockTemplate()
|
|
|
|
{
|
2010-12-24 21:00:11 +00:00
|
|
|
QTreeWidgetItem *current_item = elements_panel -> currentItem();
|
2012-02-06 21:21:43 +00:00
|
|
|
if (current_item && current_item -> type() == QET::TitleBlockTemplate) {
|
2012-01-08 17:04:34 +00:00
|
|
|
TitleBlockTemplateDeleter(
|
2012-02-06 21:21:43 +00:00
|
|
|
elements_panel -> templateLocationForItem(current_item),
|
2012-01-08 17:04:34 +00:00
|
|
|
this
|
|
|
|
).exec();
|
2010-12-24 21:00:11 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2009-04-03 19:30:25 +00:00
|
|
|
/**
|
|
|
|
Met a jour les boutons afin d'assurer la coherence de l'interface
|
|
|
|
*/
|
2020-09-07 22:03:40 +02:00
|
|
|
void ElementsPanelWidget::updateButtons()
|
|
|
|
{
|
2012-02-06 21:21:43 +00:00
|
|
|
QTreeWidgetItem *current_item = elements_panel -> currentItem();
|
|
|
|
int current_type = elements_panel -> currentItemType();
|
2020-09-21 20:37:10 +02:00
|
|
|
|
2016-05-26 17:12:12 +00:00
|
|
|
if (current_type == QET::Project) {
|
2009-04-03 19:30:25 +00:00
|
|
|
bool is_writable = !(elements_panel -> selectedProject() -> isReadOnly());
|
|
|
|
prj_add_diagram -> setEnabled(is_writable);
|
2012-02-06 21:21:43 +00:00
|
|
|
} else if (current_type == QET::Diagram) {
|
2010-02-28 16:13:45 +00:00
|
|
|
Diagram *selected_diagram = elements_panel -> selectedDiagram();
|
|
|
|
QETProject *selected_diagram_project = selected_diagram -> project();
|
2020-09-21 20:37:10 +02:00
|
|
|
|
2010-02-28 16:13:45 +00:00
|
|
|
bool is_writable = !(selected_diagram_project -> isReadOnly());
|
|
|
|
int project_diagrams_count = selected_diagram_project -> diagrams().count();
|
|
|
|
int diagram_position = selected_diagram_project -> diagrams().indexOf(selected_diagram);
|
2020-09-21 20:37:10 +02:00
|
|
|
|
2010-02-28 16:13:45 +00:00
|
|
|
prj_del_diagram -> setEnabled(is_writable);
|
|
|
|
prj_move_diagram_up -> setEnabled(is_writable && diagram_position > 0);
|
|
|
|
prj_move_diagram_down -> setEnabled(is_writable && diagram_position < project_diagrams_count - 1);
|
2015-03-04 06:00:25 +00:00
|
|
|
prj_move_diagram_top -> setEnabled(is_writable && diagram_position > 0);
|
2014-12-14 17:01:11 +00:00
|
|
|
prj_move_diagram_upx10 -> setEnabled(is_writable && diagram_position > 10);
|
|
|
|
prj_move_diagram_downx10 -> setEnabled(is_writable && diagram_position < project_diagrams_count - 10);
|
2012-02-06 21:21:43 +00:00
|
|
|
} else if (current_type == QET::TitleBlockTemplatesCollection) {
|
|
|
|
TitleBlockTemplateLocation location = elements_panel -> templateLocationForItem(current_item);
|
2012-01-23 07:21:09 +00:00
|
|
|
tbt_add -> setEnabled(!location.isReadOnly());
|
|
|
|
tbt_edit -> setEnabled(false); // would not make sense
|
|
|
|
tbt_remove -> setEnabled(false); // would not make sense
|
2012-02-06 21:21:43 +00:00
|
|
|
} else if (current_type == QET::TitleBlockTemplate) {
|
2012-01-23 07:21:09 +00:00
|
|
|
QTreeWidgetItem *item = elements_panel -> currentItem();
|
2012-02-06 21:21:43 +00:00
|
|
|
TitleBlockTemplateLocation location = elements_panel -> templateLocationForItem(item);
|
2012-01-23 07:21:09 +00:00
|
|
|
tbt_add -> setEnabled(false); // would not make sense
|
|
|
|
tbt_edit -> setEnabled(true); // the tbt editor has a read-only mode
|
|
|
|
// deleting a tbt requires its parent collection to be writable
|
|
|
|
tbt_remove -> setEnabled(location.parentCollection() && !(location.parentCollection() -> isReadOnly()));
|
2009-04-03 19:30:25 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2007-10-28 16:03:18 +00:00
|
|
|
/**
|
|
|
|
Gere le menu contextuel du panel d'elements
|
|
|
|
@param pos Position ou le menu contextuel a ete demande
|
|
|
|
*/
|
|
|
|
void ElementsPanelWidget::handleContextMenu(const QPoint &pos) {
|
|
|
|
// recupere l'item concerne par l'evenement ainsi que son chemin
|
2009-04-03 19:30:25 +00:00
|
|
|
QTreeWidgetItem *item = elements_panel -> itemAt(pos);
|
2007-10-28 16:03:18 +00:00
|
|
|
if (!item) return;
|
2020-09-21 20:37:10 +02:00
|
|
|
|
2010-02-28 16:13:45 +00:00
|
|
|
updateButtons();
|
2007-10-30 14:00:11 +00:00
|
|
|
context_menu -> clear();
|
2020-09-21 20:37:10 +02:00
|
|
|
|
2013-02-03 19:25:02 +00:00
|
|
|
QString dir_path = elements_panel -> dirPathForItem(item);
|
|
|
|
if (!dir_path.isEmpty()) {
|
|
|
|
context_menu -> addAction(open_directory);
|
|
|
|
context_menu -> addAction(copy_path);
|
|
|
|
context_menu -> addSeparator();
|
|
|
|
}
|
2020-09-21 20:37:10 +02:00
|
|
|
|
2012-02-06 21:21:43 +00:00
|
|
|
switch(item -> type()) {
|
|
|
|
case QET::Project:
|
2012-06-25 06:27:24 +00:00
|
|
|
context_menu -> addAction(prj_activate);
|
2009-04-03 19:30:25 +00:00
|
|
|
context_menu -> addAction(prj_edit_prop);
|
|
|
|
context_menu -> addAction(prj_add_diagram);
|
|
|
|
context_menu -> addAction(prj_close);
|
2012-02-06 21:21:43 +00:00
|
|
|
break;
|
|
|
|
case QET::Diagram:
|
2009-04-03 19:30:25 +00:00
|
|
|
context_menu -> addAction(prj_prop_diagram);
|
|
|
|
context_menu -> addAction(prj_del_diagram);
|
2015-03-04 06:00:25 +00:00
|
|
|
context_menu -> addAction(prj_move_diagram_top);
|
2014-12-14 17:01:11 +00:00
|
|
|
context_menu -> addAction(prj_move_diagram_upx10);
|
2010-02-28 16:13:45 +00:00
|
|
|
context_menu -> addAction(prj_move_diagram_up);
|
|
|
|
context_menu -> addAction(prj_move_diagram_down);
|
2014-12-14 17:01:11 +00:00
|
|
|
context_menu -> addAction(prj_move_diagram_downx10);
|
2012-02-06 21:21:43 +00:00
|
|
|
break;
|
|
|
|
case QET::TitleBlockTemplatesCollection:
|
2010-12-24 21:00:11 +00:00
|
|
|
context_menu -> addAction(tbt_add);
|
2012-02-06 21:21:43 +00:00
|
|
|
break;
|
|
|
|
case QET::TitleBlockTemplate:
|
2010-12-24 21:00:11 +00:00
|
|
|
context_menu -> addAction(tbt_edit);
|
|
|
|
context_menu -> addAction(tbt_remove);
|
2012-02-06 21:21:43 +00:00
|
|
|
break;
|
2007-10-28 16:03:18 +00:00
|
|
|
}
|
2020-09-21 20:37:10 +02:00
|
|
|
|
2007-10-28 16:03:18 +00:00
|
|
|
// affiche le menu
|
2009-04-03 19:30:25 +00:00
|
|
|
if (!context_menu -> isEmpty()) {
|
|
|
|
context_menu -> popup(mapToGlobal(elements_panel -> mapTo(this, pos + QPoint(2, 2))));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-02-06 21:21:43 +00:00
|
|
|
void ElementsPanelWidget::filterEdited(const QString &next_text) {
|
|
|
|
if (previous_filter_.isEmpty() && next_text.length() == 1) {
|
|
|
|
// the field is not empty anymore: begin filtering
|
|
|
|
elements_panel -> filter(next_text, QET::BeginFilter);
|
|
|
|
} else if (!previous_filter_.isEmpty() && next_text.isEmpty()) {
|
|
|
|
// the field is now empty again: end of filtering
|
|
|
|
elements_panel -> filter(QString(), QET::EndFilter);
|
|
|
|
} else {
|
|
|
|
// regular filtering
|
|
|
|
elements_panel -> filter(next_text, QET::RegularFilter);
|
|
|
|
}
|
|
|
|
previous_filter_ = next_text;
|
|
|
|
}
|
|
|
|
|
2016-05-13 15:00:22 +00:00
|
|
|
/**
|
|
|
|
Treat key press event inside elements panel widget
|
|
|
|
*/
|
|
|
|
void ElementsPanelWidget::keyPressEvent (QKeyEvent *e) {
|
|
|
|
switch(e -> key()) {
|
|
|
|
case Qt::Key_Delete: //delete diagram through elements panel widget
|
|
|
|
if (Diagram *selected_diagram = elements_panel -> selectedDiagram()) {
|
|
|
|
emit(requestForDiagramDeletion(selected_diagram));
|
|
|
|
}
|
2019-05-30 22:17:03 +00:00
|
|
|
break;
|
|
|
|
case Qt::Key_F3:
|
|
|
|
if (Diagram *selected_diagram = elements_panel -> selectedDiagram()) {
|
|
|
|
emit(requestForDiagramMoveUp(selected_diagram));
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case Qt::Key_F4:
|
|
|
|
if (Diagram *selected_diagram = elements_panel -> selectedDiagram()) {
|
|
|
|
emit(requestForDiagramMoveDown(selected_diagram));
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case Qt::Key_F5:
|
|
|
|
if (Diagram *selected_diagram = elements_panel -> selectedDiagram()) {
|
|
|
|
emit(requestForDiagramMoveUpTop(selected_diagram));
|
|
|
|
}
|
|
|
|
break;
|
2016-05-13 15:00:22 +00:00
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|