2007-12-01 10:47:15 +00:00
|
|
|
/*
|
2015-02-20 14:56:22 +00:00
|
|
|
Copyright 2006-2015 The QElectroTech Team
|
2007-12-01 10:47:15 +00:00
|
|
|
This file is part of QElectroTech.
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
|
|
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"
|
2007-04-04 02:13:14 +00:00
|
|
|
#include "newelementwizard.h"
|
2007-08-28 21:17:11 +00:00
|
|
|
#include "elementscategorieswidget.h"
|
2009-04-03 19:30:25 +00:00
|
|
|
#include "elementscollectionitem.h"
|
|
|
|
#include "qetelementeditor.h"
|
|
|
|
#include "elementdeleter.h"
|
|
|
|
#include "elementscategoryeditor.h"
|
|
|
|
#include "elementscategorydeleter.h"
|
|
|
|
#include "qetapp.h"
|
|
|
|
#include "interactivemoveelementshandler.h"
|
|
|
|
#include "qetproject.h"
|
|
|
|
#include "diagram.h"
|
2009-05-01 14:41:33 +00:00
|
|
|
#include "qeticons.h"
|
2011-12-31 02:30:31 +00:00
|
|
|
#include "templatedeleter.h"
|
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) {
|
2011-03-15 20:06:40 +00:00
|
|
|
// initialize the progress bar (hidden by default)
|
|
|
|
progress_bar_ = new QProgressBar(this);
|
|
|
|
progress_bar_ -> setVisible(false);
|
|
|
|
progress_bar_ -> setTextVisible(true);
|
2007-02-26 22:42:46 +00:00
|
|
|
// initalise le panel d'elements
|
|
|
|
elements_panel = new ElementsPanel(this);
|
|
|
|
|
2007-08-28 21:17:11 +00:00
|
|
|
// initialise les actions
|
2013-02-03 19:25:02 +00:00
|
|
|
open_directory = new QAction(QET::Icons::DocumentOpen, tr("Ouvrir le dossier correspondant"), this);
|
|
|
|
copy_path = new QAction(QET::Icons::CopyFile, tr("Copier le chemin"), this);
|
2010-02-28 16:13:45 +00:00
|
|
|
reload = new QAction(QET::Icons::ViewRefresh, tr("Recharger les collections"), this);
|
|
|
|
new_category = new QAction(QET::Icons::FolderNew, tr("Nouvelle cat\351gorie"), this);
|
|
|
|
edit_category = new QAction(QET::Icons::FolderEdit, tr("\311diter la cat\351gorie"), this);
|
|
|
|
delete_category = new QAction(QET::Icons::FolderDelete, tr("Supprimer la cat\351gorie"), this);
|
|
|
|
delete_collection = new QAction(QET::Icons::FolderDelete, tr("Vider la collection"), this);
|
|
|
|
new_element = new QAction(QET::Icons::ElementNew, tr("Nouvel \351l\351ment"), this);
|
|
|
|
edit_element = new QAction(QET::Icons::ElementEdit, tr("\311diter l'\351l\351ment"), this);
|
|
|
|
delete_element = new QAction(QET::Icons::ElementDelete, tr("Supprimer l'\351l\351ment"), this);
|
2011-10-01 20:07:53 +00:00
|
|
|
open_element = new QAction(QET::Icons::DocumentImport, tr("Ouvrir un fichier \351l\351ment"), this);
|
2012-06-25 06:27:24 +00:00
|
|
|
prj_activate = new QAction(QET::Icons::ProjectFile, tr("Basculer vers ce projet"), this);
|
2010-02-28 16:13:45 +00:00
|
|
|
prj_close = new QAction(QET::Icons::DocumentClose, tr("Fermer ce projet"), this);
|
|
|
|
prj_edit_prop = new QAction(QET::Icons::DialogInformation, tr("Propri\351t\351s du projet"), this);
|
|
|
|
prj_prop_diagram = new QAction(QET::Icons::DialogInformation, tr("Propri\351t\351s du sch\351ma"), this);
|
|
|
|
prj_add_diagram = new QAction(QET::Icons::DiagramAdd, tr("Ajouter un sch\351ma"), this);
|
|
|
|
prj_del_diagram = new QAction(QET::Icons::DiagramDelete, tr("Supprimer ce sch\351ma"), this);
|
|
|
|
prj_move_diagram_up = new QAction(QET::Icons::GoUp, tr("Remonter ce sch\351ma"), this);
|
|
|
|
prj_move_diagram_down = new QAction(QET::Icons::GoDown, tr("Abaisser ce sch\351ma"), this);
|
2014-12-14 17:01:11 +00:00
|
|
|
prj_move_diagram_upx10 = new QAction(QET::Icons::GoUp, tr("Remonter ce sch\351ma x10"), this);
|
|
|
|
prj_move_diagram_downx10 = new QAction(QET::Icons::GoDown, tr("Abaisser ce sch\351ma x10"), this);
|
2011-12-26 05:42:48 +00:00
|
|
|
tbt_add = new QAction(QET::Icons::TitleBlock, tr("Nouveau mod\350le"), this);
|
2010-12-24 21:00:11 +00:00
|
|
|
tbt_edit = new QAction(QET::Icons::TitleBlock, tr("\311diter ce mod\350le"), this);
|
|
|
|
tbt_remove = new QAction(QET::Icons::TitleBlock, tr("Supprimer ce mod\350le"), this);
|
2010-02-28 16:13:45 +00:00
|
|
|
move_elements_ = new QAction(QET::Icons::MoveFile, tr("D\351placer dans cette cat\351gorie"), this);
|
|
|
|
copy_elements_ = new QAction(QET::Icons::CopyFile, tr("Copier dans cette cat\351gorie"), this);
|
|
|
|
cancel_elements_ = new QAction(QET::Icons::Cancel, tr("Annuler"), this);
|
|
|
|
erase_textfield = new QAction(QET::Icons::EditClearLocationBar, tr("Effacer le filtre"), this);
|
2013-06-24 20:18:20 +00:00
|
|
|
|
|
|
|
reload -> setShortcut(Qt::Key_F5);
|
|
|
|
|
2007-12-29 15:00:30 +00:00
|
|
|
// initialise le champ de texte pour filtrer avec une disposition horizontale
|
|
|
|
QLabel *filter_label = new QLabel(tr("Filtrer : "), this);
|
|
|
|
filter_textfield = new QLineEdit(this);
|
2008-01-20 18:50:10 +00:00
|
|
|
filter_toolbar = new QToolBar("filter");
|
|
|
|
filter_toolbar -> addAction(erase_textfield);
|
|
|
|
filter_toolbar -> addWidget(filter_label);
|
|
|
|
filter_toolbar -> addWidget(filter_textfield);
|
2007-12-29 15:00:30 +00:00
|
|
|
|
2009-04-03 19:30:25 +00:00
|
|
|
// ajoute une petite marge a la droite du champ pour filtrer lorsque le style CleanLooks est utilise
|
|
|
|
if (qobject_cast<QCleanlooksStyle *>(QApplication::style())) {
|
|
|
|
int l, t, r, b;
|
|
|
|
filter_toolbar -> getContentsMargins(&l, &t, &r, &b);
|
|
|
|
filter_toolbar -> setContentsMargins (l, t, r + 4, b);
|
|
|
|
}
|
|
|
|
|
2007-10-28 16:03:18 +00:00
|
|
|
context_menu = new QMenu(this);
|
|
|
|
|
2013-02-03 19:25:02 +00:00
|
|
|
connect(open_directory, SIGNAL(triggered()), this, SLOT(openDirectoryForSelectedItem()));
|
|
|
|
connect(copy_path, SIGNAL(triggered()), this, SLOT(copyPathForSelectedItem()));
|
2010-02-28 16:13:45 +00:00
|
|
|
connect(reload, SIGNAL(triggered()), this, SLOT(reloadAndFilter()));
|
|
|
|
connect(new_category, SIGNAL(triggered()), this, SLOT(newCategory()));
|
|
|
|
connect(edit_category, SIGNAL(triggered()), this, SLOT(editCategory()));
|
|
|
|
connect(delete_category, SIGNAL(triggered()), this, SLOT(deleteCategory()));
|
|
|
|
connect(delete_collection, SIGNAL(triggered()), this, SLOT(deleteCategory()));
|
|
|
|
connect(new_element, SIGNAL(triggered()), this, SLOT(newElement()));
|
|
|
|
connect(edit_element, SIGNAL(triggered()), this, SLOT(editElement()));
|
|
|
|
connect(delete_element, SIGNAL(triggered()), this, SLOT(deleteElement()));
|
2011-10-01 20:07:53 +00:00
|
|
|
connect(open_element, SIGNAL(triggered()), this, SLOT(openElementFromFile()));
|
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()));
|
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()));
|
2010-02-28 16:13:45 +00:00
|
|
|
connect(move_elements_, SIGNAL(triggered()), this, SLOT(moveElements()));
|
|
|
|
connect(copy_elements_, SIGNAL(triggered()), this, SLOT(copyElements()));
|
2007-08-28 21:17:11 +00:00
|
|
|
|
2010-02-28 16:13:45 +00:00
|
|
|
connect(erase_textfield, SIGNAL(triggered()), this, SLOT(clearFilterTextField()));
|
2012-02-06 21:21:43 +00:00
|
|
|
connect(filter_textfield, SIGNAL(textEdited(const QString &)), this, SLOT(filterEdited(const QString &)));
|
2007-12-29 15:00:30 +00: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 &)));
|
2012-06-25 06:27:24 +00:00
|
|
|
connect(elements_panel, SIGNAL(requestForDiagram(Diagram*)), this, SIGNAL(requestForDiagram(Diagram*)));
|
2012-02-06 21:21:43 +00:00
|
|
|
connect(elements_panel, SIGNAL(requestForCollectionItem(const ElementsLocation &)), this, SLOT(handleCollectionRequest(const ElementsLocation &)));
|
2009-04-03 19:30:25 +00:00
|
|
|
connect(
|
|
|
|
elements_panel,
|
|
|
|
SIGNAL(requestForMoveElements(ElementsCollectionItem *, ElementsCollectionItem *, QPoint)),
|
|
|
|
this,
|
|
|
|
SLOT(handleMoveElementsRequest(ElementsCollectionItem *, ElementsCollectionItem *, const QPoint &)),
|
|
|
|
Qt::QueuedConnection
|
|
|
|
);
|
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
|
|
|
);
|
2011-03-15 20:06:40 +00:00
|
|
|
connect(elements_panel, SIGNAL(loadingProgressed(int, int)), this, SLOT(updateProgressBar(int, int)));
|
|
|
|
connect(elements_panel, SIGNAL(readingAboutToBegin()), this, SLOT(collectionsRead()));
|
|
|
|
connect(elements_panel, SIGNAL(readingFinished()), this, SLOT(collectionsReadFinished()));
|
2013-01-29 23:03:09 +00:00
|
|
|
connect(elements_panel, SIGNAL(loadingFinished()), this, SLOT(loadingFinished()));
|
2007-08-28 21:17:11 +00:00
|
|
|
|
2007-02-26 22:42:46 +00:00
|
|
|
// initialise la barre d'outils
|
|
|
|
toolbar = new QToolBar(this);
|
|
|
|
toolbar -> setMovable(false);
|
2007-08-28 21:17:11 +00:00
|
|
|
toolbar -> addAction(reload);
|
|
|
|
toolbar -> addSeparator();
|
|
|
|
toolbar -> addAction(new_category);
|
|
|
|
toolbar -> addAction(edit_category);
|
|
|
|
toolbar -> addAction(delete_category);
|
|
|
|
toolbar -> addSeparator();
|
|
|
|
toolbar -> addAction(new_element);
|
|
|
|
toolbar -> addAction(edit_element);
|
|
|
|
toolbar -> addAction(delete_element);
|
2011-10-01 20:07:53 +00:00
|
|
|
toolbar -> addSeparator();
|
|
|
|
toolbar -> addAction(open_element);
|
2007-02-26 22:42:46 +00:00
|
|
|
|
|
|
|
// disposition verticale
|
|
|
|
QVBoxLayout *vlayout = new QVBoxLayout(this);
|
|
|
|
vlayout -> setMargin(0);
|
|
|
|
vlayout -> setSpacing(0);
|
|
|
|
vlayout -> addWidget(toolbar);
|
2008-01-20 18:50:10 +00:00
|
|
|
vlayout -> addWidget(filter_toolbar);
|
2007-02-26 22:42:46 +00:00
|
|
|
vlayout -> addWidget(elements_panel);
|
2011-03-15 20:06:40 +00:00
|
|
|
vlayout -> addWidget(progress_bar_);
|
2007-02-26 22:42:46 +00:00
|
|
|
vlayout -> setStretchFactor(elements_panel, 75000);
|
|
|
|
setLayout(vlayout);
|
2013-01-29 23:03:09 +00:00
|
|
|
|
|
|
|
// by default, the reload button is disabled
|
|
|
|
reload -> setEnabled(false);
|
2007-02-26 22:42:46 +00:00
|
|
|
}
|
2007-04-04 02:13:14 +00:00
|
|
|
|
2007-04-12 03:13:13 +00:00
|
|
|
/**
|
|
|
|
Destructeur
|
|
|
|
*/
|
|
|
|
ElementsPanelWidget::~ElementsPanelWidget() {
|
|
|
|
}
|
|
|
|
|
2009-04-03 19:30:25 +00:00
|
|
|
/**
|
|
|
|
Vide le champ de texte permettant a l'utilisateur de filtrer, donne le
|
|
|
|
focus a ce champ et annule le filtrage.
|
|
|
|
*/
|
|
|
|
void ElementsPanelWidget::clearFilterTextField() {
|
|
|
|
filter_textfield -> clear();
|
|
|
|
filter_textfield -> setFocus();
|
2012-02-06 21:21:43 +00:00
|
|
|
filterEdited(QString());
|
2009-04-03 19:30:25 +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.
|
|
|
|
*/
|
|
|
|
void ElementsPanelWidget::openDirectoryForSelectedItem() {
|
|
|
|
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.
|
|
|
|
*/
|
|
|
|
void ElementsPanelWidget::copyPathForSelectedItem() {
|
|
|
|
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
|
|
|
|
*/
|
|
|
|
void ElementsPanelWidget::reloadAndFilter() {
|
|
|
|
// recharge tous les elements
|
2013-01-29 23:03:09 +00:00
|
|
|
reload -> setEnabled(false);
|
2011-03-15 20:06:40 +00:00
|
|
|
elements_panel -> reload(true);
|
2008-01-19 19:19:11 +00:00
|
|
|
|
2013-01-29 23:03:09 +00:00
|
|
|
// the reload button was enabled again through loadingFinished()
|
|
|
|
reload -> setEnabled(false);
|
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());
|
|
|
|
}
|
2013-01-29 23:03:09 +00:00
|
|
|
reload -> setEnabled(true);
|
2008-01-19 19:19:11 +00:00
|
|
|
}
|
|
|
|
|
2012-06-25 06:27:24 +00:00
|
|
|
/**
|
|
|
|
* Emit the requestForProject signal with te selected project
|
|
|
|
*/
|
|
|
|
void ElementsPanelWidget::activateProject() {
|
|
|
|
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
|
|
|
|
*/
|
|
|
|
void ElementsPanelWidget::closeProject() {
|
|
|
|
if (QETProject *selected_project = elements_panel -> selectedProject()) {
|
|
|
|
emit(requestForProjectClosing(selected_project));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Emet le signal requestForProjectPropertiesEdition avec le projet selectionne
|
|
|
|
*/
|
|
|
|
void ElementsPanelWidget::editProjectProperties() {
|
|
|
|
if (QETProject *selected_project = elements_panel -> selectedProject()) {
|
|
|
|
emit(requestForProjectPropertiesEdition(selected_project));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Emet le signal requestForDiagramPropertiesEdition avec le schema selectionne
|
|
|
|
*/
|
|
|
|
void ElementsPanelWidget::editDiagramProperties() {
|
|
|
|
if (Diagram *selected_diagram = elements_panel -> selectedDiagram()) {
|
|
|
|
emit(requestForDiagramPropertiesEdition(selected_diagram));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Emet le signal requestForNewDiagram avec le projet selectionne
|
|
|
|
*/
|
|
|
|
void ElementsPanelWidget::newDiagram() {
|
|
|
|
if (QETProject *selected_project = elements_panel -> selectedProject()) {
|
|
|
|
emit(requestForNewDiagram(selected_project));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Emet le signal requestForDiagramDeletion avec le schema selectionne
|
|
|
|
*/
|
|
|
|
void ElementsPanelWidget::deleteDiagram() {
|
|
|
|
if (Diagram *selected_diagram = elements_panel -> selectedDiagram()) {
|
|
|
|
emit(requestForDiagramDeletion(selected_diagram));
|
|
|
|
}
|
|
|
|
}
|
2008-01-19 19:19:11 +00:00
|
|
|
|
2010-02-28 16:13:45 +00:00
|
|
|
/**
|
|
|
|
Emet le signal requestForDiagramMoveUp avec le schema selectionne
|
|
|
|
*/
|
|
|
|
void ElementsPanelWidget::moveDiagramUp() {
|
|
|
|
if (Diagram *selected_diagram = elements_panel -> selectedDiagram()) {
|
|
|
|
emit(requestForDiagramMoveUp(selected_diagram));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Emet le signal requestForDiagramMoveDown avec le schema selectionne
|
|
|
|
*/
|
|
|
|
void ElementsPanelWidget::moveDiagramDown() {
|
|
|
|
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
|
|
|
|
*/
|
|
|
|
void ElementsPanelWidget::moveDiagramUpx10() {
|
|
|
|
if (Diagram *selected_diagram = elements_panel -> selectedDiagram()) {
|
|
|
|
emit(requestForDiagramMoveUpx10(selected_diagram));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Emet le signal requestForDiagramMoveDownx10 avec le schema selectionne
|
|
|
|
*/
|
|
|
|
void ElementsPanelWidget::moveDiagramDownx10() {
|
|
|
|
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.
|
|
|
|
*/
|
|
|
|
void ElementsPanelWidget::addTitleBlockTemplate() {
|
|
|
|
QTreeWidgetItem *current_item = elements_panel -> currentItem();
|
|
|
|
if (!current_item) return;
|
|
|
|
|
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.
|
|
|
|
*/
|
|
|
|
void ElementsPanelWidget::editTitleBlockTemplate() {
|
|
|
|
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.
|
|
|
|
*/
|
|
|
|
void ElementsPanelWidget::removeTitleBlockTemplate() {
|
|
|
|
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
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2007-04-09 02:56:47 +00:00
|
|
|
/**
|
|
|
|
Appelle l'assistant de creation de nouvel element
|
|
|
|
*/
|
2007-04-04 02:13:14 +00:00
|
|
|
void ElementsPanelWidget::newElement() {
|
2009-04-03 19:30:25 +00:00
|
|
|
ElementsCategory *selected_category = writableSelectedCategory();
|
|
|
|
|
2008-08-17 20:41:37 +00:00
|
|
|
NewElementWizard new_element_wizard(this);
|
2009-04-03 19:30:25 +00:00
|
|
|
if (selected_category) {
|
|
|
|
new_element_wizard.preselectCategory(selected_category);
|
|
|
|
}
|
2007-06-30 17:41:07 +00:00
|
|
|
new_element_wizard.exec();
|
2007-04-04 02:13:14 +00:00
|
|
|
}
|
2007-08-28 21:17:11 +00:00
|
|
|
|
2009-11-22 16:12:22 +00:00
|
|
|
/**
|
2011-10-01 20:07:53 +00:00
|
|
|
Open an element from a file freely chosen by the user.
|
2009-11-22 16:12:22 +00:00
|
|
|
*/
|
2011-10-01 20:07:53 +00:00
|
|
|
void ElementsPanelWidget::openElementFromFile() {
|
2009-11-22 16:12:22 +00:00
|
|
|
QString fileName = QETElementEditor::getOpenElementFileName(this);
|
|
|
|
|
|
|
|
// Ouverture de l'element dans l'editeur pour pouvoir ensuite l'enregistrer dans la categorie voulue
|
|
|
|
if (!fileName.isEmpty()) {
|
2010-03-28 16:27:48 +00:00
|
|
|
QETApp::instance() -> openElementFiles(QStringList() << fileName);
|
2009-11-22 16:12:22 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2007-10-10 17:50:26 +00:00
|
|
|
/**
|
2009-04-03 19:30:25 +00:00
|
|
|
Si une categorie accessible en ecriture est selectionnee, cette methode
|
|
|
|
affiche directement un formulaire de creation de categorie en utilisant la
|
|
|
|
selection comme categorie parente.
|
|
|
|
Sinon, elle affiche un gestionnaire de categories, permettant ainsi a
|
|
|
|
l'utilisateur de choisir une categorie parente.
|
2007-10-10 17:50:26 +00:00
|
|
|
*/
|
2007-08-28 21:17:11 +00:00
|
|
|
void ElementsPanelWidget::newCategory() {
|
2009-04-03 19:30:25 +00:00
|
|
|
ElementsCategory *selected_category = writableSelectedCategory();
|
|
|
|
|
|
|
|
if (selected_category) {
|
|
|
|
ElementsCategoryEditor new_category_dialog(selected_category -> location(), false, this);
|
|
|
|
if (new_category_dialog.exec() == QDialog::Accepted) {
|
|
|
|
elements_panel -> reload();
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
launchCategoriesManager();
|
|
|
|
elements_panel -> reload();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Met a jour les boutons afin d'assurer la coherence de l'interface
|
|
|
|
*/
|
|
|
|
void ElementsPanelWidget::updateButtons() {
|
2012-02-06 21:21:43 +00:00
|
|
|
QTreeWidgetItem *current_item = elements_panel -> currentItem();
|
|
|
|
int current_type = elements_panel -> currentItemType();
|
|
|
|
|
|
|
|
bool collection_selected = current_type == QET::ElementsCollection;
|
|
|
|
bool category_selected = current_type & QET::ElementsContainer;
|
|
|
|
bool element_selected = current_type == QET::Element;
|
2009-04-03 19:30:25 +00:00
|
|
|
|
|
|
|
if (collection_selected || category_selected || element_selected) {
|
|
|
|
bool element_writable = elements_panel -> selectedItemIsWritable();
|
|
|
|
delete_collection -> setEnabled(collection_selected && element_writable);
|
|
|
|
new_category -> setEnabled(category_selected && element_writable);
|
|
|
|
edit_category -> setEnabled(category_selected && !collection_selected);
|
|
|
|
delete_category -> setEnabled(category_selected && element_writable);
|
|
|
|
new_element -> setEnabled(category_selected && element_writable);
|
|
|
|
edit_element -> setEnabled(element_selected);
|
|
|
|
delete_element -> setEnabled(element_selected && element_writable);
|
2012-02-06 21:21:43 +00:00
|
|
|
} else 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);
|
2011-10-01 20:07:53 +00:00
|
|
|
setElementsActionEnabled(false);
|
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();
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
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);
|
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);
|
2011-10-01 20:07:53 +00:00
|
|
|
setElementsActionEnabled(false);
|
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
|
|
|
|
setElementsActionEnabled(false);
|
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()));
|
2011-10-01 20:07:53 +00:00
|
|
|
setElementsActionEnabled(false);
|
2009-04-03 19:30:25 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-10-01 20:07:53 +00:00
|
|
|
/**
|
|
|
|
Enable or disable elements-related actions (i.e. new/edit/delete
|
|
|
|
categories/elements).
|
|
|
|
@param bool true to enable actions, false to disable them
|
|
|
|
*/
|
|
|
|
void ElementsPanelWidget::setElementsActionEnabled(bool enable) {
|
|
|
|
delete_collection -> setEnabled(enable);
|
|
|
|
new_category -> setEnabled(enable);
|
|
|
|
edit_category -> setEnabled(enable);
|
|
|
|
delete_category -> setEnabled(enable);
|
|
|
|
new_element -> setEnabled(enable);
|
|
|
|
edit_element -> setEnabled(enable);
|
|
|
|
delete_element -> setEnabled(enable);
|
|
|
|
}
|
|
|
|
|
2009-04-03 19:30:25 +00:00
|
|
|
/**
|
|
|
|
Lance le gestionnaire de categories. Il s'agit d'un petit dialogue listant
|
|
|
|
les categories accessibles en ecriture et permettant de les editer, de les
|
|
|
|
supprimer et d'en creer de nouvelles.
|
|
|
|
*/
|
|
|
|
int ElementsPanelWidget::launchCategoriesManager() {
|
2008-08-17 20:41:37 +00:00
|
|
|
QDialog new_category_dialog(this);
|
2007-12-19 21:44:43 +00:00
|
|
|
new_category_dialog.setMinimumSize(480, 280);
|
2009-04-03 19:30:25 +00:00
|
|
|
new_category_dialog.setWindowTitle(tr("Gestionnaire de cat\351gories", "window title"));
|
2007-08-28 21:17:11 +00:00
|
|
|
|
|
|
|
QVBoxLayout *layout = new QVBoxLayout(&new_category_dialog);
|
|
|
|
QLabel *explication = new QLabel(tr("Vous pouvez utiliser ce gestionnaire pour ajouter, supprimer ou modifier les cat\351gories."));
|
|
|
|
explication -> setAlignment(Qt::AlignJustify | Qt::AlignVCenter);
|
|
|
|
explication -> setWordWrap(true);
|
|
|
|
layout -> addWidget(explication);
|
|
|
|
|
|
|
|
layout -> addWidget(new ElementsCategoriesWidget());
|
|
|
|
|
|
|
|
QDialogButtonBox *buttons = new QDialogButtonBox(QDialogButtonBox::Close);
|
|
|
|
connect(buttons, SIGNAL(rejected()), &new_category_dialog, SLOT(accept()));
|
|
|
|
layout -> addWidget(buttons);
|
|
|
|
|
2009-04-03 19:30:25 +00:00
|
|
|
return(new_category_dialog.exec());
|
2007-08-28 21:17:11 +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;
|
|
|
|
|
2010-02-28 16:13:45 +00:00
|
|
|
updateButtons();
|
2007-10-30 14:00:11 +00:00
|
|
|
context_menu -> clear();
|
2009-04-03 19:30:25 +00: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();
|
|
|
|
}
|
|
|
|
|
2012-02-06 21:21:43 +00:00
|
|
|
switch(item -> type()) {
|
|
|
|
case QET::ElementsCategory:
|
|
|
|
context_menu -> addAction(new_category);
|
|
|
|
context_menu -> addAction(edit_category);
|
|
|
|
context_menu -> addAction(delete_category);
|
|
|
|
context_menu -> addAction(new_element);
|
|
|
|
break;
|
|
|
|
case QET::Element:
|
|
|
|
context_menu -> addAction(edit_element);
|
|
|
|
context_menu -> addAction(delete_element);
|
|
|
|
break;
|
|
|
|
case QET::ElementsCollection:
|
|
|
|
context_menu -> addAction(new_category);
|
|
|
|
context_menu -> addAction(delete_collection);
|
|
|
|
context_menu -> addAction(new_element);
|
|
|
|
break;
|
|
|
|
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);
|
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
|
|
|
}
|
|
|
|
|
|
|
|
// 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))));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Gere les demandes d'edition de categories ou d'elements
|
|
|
|
@param item Item de la collection a editer
|
|
|
|
*/
|
2012-02-06 21:21:43 +00:00
|
|
|
void ElementsPanelWidget::handleCollectionRequest(const ElementsLocation &item_location) {
|
|
|
|
if (item_location.isNull()) return;
|
|
|
|
ElementsCollectionItem *item = QETApp::collectionItem(item_location);
|
2009-04-03 19:30:25 +00:00
|
|
|
if (!item) return;
|
|
|
|
if (item -> isElement()) {
|
|
|
|
// il s'agit d'un element
|
|
|
|
launchElementEditor(item -> location());
|
|
|
|
}
|
2010-11-15 00:35:02 +00:00
|
|
|
// we could edit it categories, but instead people prefer the double-clic to
|
|
|
|
// expand/collapse them
|
2009-04-03 19:30:25 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Gere le drop d'un collectionItem sur un autre.
|
|
|
|
Elle memorise dans les attributs de cette classe l'item source et l'item
|
|
|
|
destination du drag'n drop.
|
|
|
|
Un menu est ensuite affiche pour demander a l'utilisateur ce qu'il
|
|
|
|
souhaite faire (deplacer, copier ou annuler).
|
|
|
|
@param src Item source
|
|
|
|
@param dst Item cible
|
|
|
|
@param pos Position ou le menu contextuel a ete demande
|
|
|
|
*/
|
|
|
|
void ElementsPanelWidget::handleMoveElementsRequest(ElementsCollectionItem *src, ElementsCollectionItem *dst, const QPoint &pos) {
|
|
|
|
if (!src || !dst || !dst -> isCategory()) return;
|
|
|
|
|
|
|
|
// memorise les items source et cible du drag'n drop
|
|
|
|
dnd_item_src_ = src;
|
|
|
|
dnd_item_dst_ = dst;
|
|
|
|
|
|
|
|
#ifdef ENABLE_PANEL_WIDGET_DND_CHECKS
|
|
|
|
// active ou desactive les actions selon la source et la cible
|
|
|
|
copy_elements_ -> setEnabled(src -> isReadable() && dst -> isWritable());
|
|
|
|
move_elements_ -> setEnabled(!src -> isRootCategory() && src -> isWritable() && dst -> isWritable());
|
|
|
|
#endif
|
|
|
|
|
|
|
|
// affiche un menu contextuel pour que l'utilisateur indique s'il souhaite
|
|
|
|
// effectuer un deplacement ou une copie
|
|
|
|
context_menu -> clear();
|
|
|
|
context_menu -> addAction(copy_elements_);
|
|
|
|
context_menu -> addAction(move_elements_);
|
|
|
|
context_menu -> addSeparator();
|
|
|
|
context_menu -> addAction(cancel_elements_);
|
|
|
|
|
2008-10-17 22:05:16 +00:00
|
|
|
context_menu -> popup(mapToGlobal(elements_panel -> mapTo(this, pos + QPoint(2, 2))));
|
2007-10-28 16:03:18 +00:00
|
|
|
}
|
2009-04-03 19:30:25 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
Cette classe memorise l'item source et l'item destination du dernier drag'n
|
|
|
|
drop. Cette methode effectue le deplacement de l'item source memorise dans
|
|
|
|
l'item destination memorise.
|
|
|
|
@see handleMoveElementsRequest
|
|
|
|
*/
|
|
|
|
void ElementsPanelWidget::moveElements() {
|
|
|
|
moveElements(dnd_item_src_, dnd_item_dst_);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Deplace l'item src dans l'item dst
|
|
|
|
*/
|
|
|
|
void ElementsPanelWidget::moveElements(ElementsCollectionItem *src, ElementsCollectionItem *dst) {
|
|
|
|
InteractiveMoveElementsHandler *interactive_handler = new InteractiveMoveElementsHandler();
|
|
|
|
src -> move(dst -> toCategory(), interactive_handler);
|
|
|
|
delete interactive_handler;
|
2012-11-12 21:11:07 +00:00
|
|
|
elements_panel -> reload(true);
|
2009-04-03 19:30:25 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Cette classe memorise l'item source et l'item destination du dernier drag'n
|
|
|
|
drop. Cette methode effectue la copie de l'item source memorise dans l'item
|
|
|
|
destination memorise.
|
|
|
|
@see handleMoveElementsRequest
|
|
|
|
*/
|
|
|
|
void ElementsPanelWidget::copyElements() {
|
|
|
|
copyElements(dnd_item_src_, dnd_item_dst_);
|
2012-11-13 09:29:01 +00:00
|
|
|
elements_panel -> reload(true);
|
2009-04-03 19:30:25 +00:00
|
|
|
}
|
|
|
|
|
2011-03-15 20:06:40 +00:00
|
|
|
/**
|
|
|
|
Reflects the fact that collections are being read (i.e from filesystem) in
|
|
|
|
the progress bar.
|
|
|
|
*/
|
|
|
|
void ElementsPanelWidget::collectionsRead() {
|
|
|
|
progress_bar_ -> setMinimum(0);
|
|
|
|
progress_bar_ -> setMaximum(1);
|
|
|
|
progress_bar_ -> setValue(0);
|
|
|
|
progress_bar_ -> setFormat(tr("Lecture...", "Reading of elements/categories files"));
|
|
|
|
progress_bar_ -> setVisible(true);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2011-03-16 22:56:46 +00:00
|
|
|
Reflects the fact that collections have been read (i.e from filesystem) in
|
|
|
|
the progress bar.
|
2011-03-15 20:06:40 +00:00
|
|
|
*/
|
|
|
|
void ElementsPanelWidget::collectionsReadFinished() {
|
2011-03-16 22:56:46 +00:00
|
|
|
// we do not hide the progress bar because it will be used by updateProgressBar
|
2011-03-15 20:06:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Updates the progress bar
|
|
|
|
@param current value that should be displayed
|
|
|
|
@param maximum maximum expected value; -1 means "use the previously known one"
|
|
|
|
*/
|
|
|
|
void ElementsPanelWidget::updateProgressBar(int current, int maximum) {
|
|
|
|
int provided_maximum = maximum == -1 ? progress_bar_ -> maximum() : maximum;
|
|
|
|
if (provided_maximum != progress_bar_ -> maximum()) {
|
|
|
|
progress_bar_ -> setMaximum(maximum);
|
|
|
|
}
|
|
|
|
if (!current) {
|
2011-03-16 22:56:46 +00:00
|
|
|
progress_bar_ -> setFormat(tr("Chargement : %p%", "Visual rendering of elements/categories files - %p is the progress percentage"));
|
2011-03-15 20:06:40 +00:00
|
|
|
progress_bar_ -> setVisible(true);
|
|
|
|
}
|
|
|
|
progress_bar_ -> setValue(current);
|
|
|
|
}
|
|
|
|
|
2013-01-29 23:03:09 +00:00
|
|
|
/**
|
|
|
|
Reflects the fact the whole panel content was loaded by hiding the progress
|
|
|
|
bar and enabling again the reload button.
|
|
|
|
*/
|
|
|
|
void ElementsPanelWidget::loadingFinished() {
|
|
|
|
QTimer::singleShot(500, progress_bar_, SLOT(hide()));
|
|
|
|
reload -> setEnabled(true);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
2009-04-03 19:30:25 +00:00
|
|
|
/**
|
|
|
|
Copie l'item src dans l'item dst
|
|
|
|
*/
|
|
|
|
void ElementsPanelWidget::copyElements(ElementsCollectionItem *src, ElementsCollectionItem *dst) {
|
|
|
|
InteractiveMoveElementsHandler *interactive_handler = new InteractiveMoveElementsHandler();
|
|
|
|
src -> copy(dst -> toCategory(), interactive_handler, true);
|
|
|
|
delete interactive_handler;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Edite la categorie selectionnee
|
|
|
|
*/
|
|
|
|
void ElementsPanelWidget::editCategory() {
|
|
|
|
if (ElementsCollectionItem *selected_item = elements_panel -> selectedItem()) {
|
|
|
|
if (selected_item -> isCategory()) {
|
|
|
|
launchCategoryEditor(selected_item -> location());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Edite l'element selectionne
|
|
|
|
*/
|
|
|
|
void ElementsPanelWidget::editElement() {
|
|
|
|
if (ElementsCollectionItem *selected_item = elements_panel -> selectedItem()) {
|
|
|
|
if (selected_item -> isElement()) {
|
|
|
|
launchElementEditor(selected_item -> location());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Supprime la categorie selectionnee
|
|
|
|
*/
|
|
|
|
void ElementsPanelWidget::deleteCategory() {
|
|
|
|
if (ElementsCollectionItem *selected_item = elements_panel -> selectedItem()) {
|
|
|
|
if (selected_item -> isCategory() || selected_item -> isCollection()) {
|
|
|
|
ElementsCategoryDeleter cat_deleter(selected_item -> location(), this);
|
2011-09-18 13:31:41 +00:00
|
|
|
if (cat_deleter.exec()) elements_panel -> reload(true);
|
2009-04-03 19:30:25 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Supprime l'element selectionne
|
|
|
|
*/
|
|
|
|
void ElementsPanelWidget::deleteElement() {
|
|
|
|
if (ElementsCollectionItem *selected_item = elements_panel -> selectedItem()) {
|
|
|
|
if (selected_item -> isElement()) {
|
|
|
|
ElementDeleter elmt_deleter(selected_item -> location(), this);
|
2011-09-18 13:31:41 +00:00
|
|
|
if (elmt_deleter.exec()) elements_panel -> reload(true);
|
2009-04-03 19:30:25 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Lance l'editeur d'element pour l'element filename
|
|
|
|
@param location Emplacement de l'element a editer
|
|
|
|
*/
|
|
|
|
void ElementsPanelWidget::launchElementEditor(const ElementsLocation &location) {
|
2010-03-28 16:27:48 +00:00
|
|
|
QETApp::instance() -> openElementLocations(QList<ElementsLocation>() << location);
|
2009-04-03 19:30:25 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Lance l'editeur de categorie pour la categorie path
|
2009-11-22 16:12:22 +00:00
|
|
|
@param location Emplacement de la categorie a editer
|
2009-04-03 19:30:25 +00:00
|
|
|
*/
|
|
|
|
void ElementsPanelWidget::launchCategoryEditor(const ElementsLocation &location) {
|
|
|
|
ElementsCategoryEditor ece(location, true);
|
|
|
|
if (ece.exec() == QDialog::Accepted) {
|
|
|
|
elements_panel -> reload();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
@return la categorie selectionnee s'il y en a une et que celle-ci est
|
|
|
|
accessible en ecriture ; sinon retourne 0
|
|
|
|
@see ElementsPanel::categoryForItem(QTreeWidgetItem *)
|
|
|
|
*/
|
|
|
|
ElementsCategory *ElementsPanelWidget::writableSelectedCategory() {
|
|
|
|
// recupere l'element selectionne
|
|
|
|
QTreeWidgetItem *selected_qtwi = elements_panel -> currentItem();
|
|
|
|
if (!selected_qtwi) return(0);
|
|
|
|
|
|
|
|
// l'element selectionne doit pouvoir correspondre a une categorie
|
2012-02-06 21:21:43 +00:00
|
|
|
if (!(selected_qtwi -> type() & QET::ElementsContainer)) return(0);
|
|
|
|
ElementsLocation category_location = elements_panel -> elementLocationForItem(selected_qtwi);
|
|
|
|
ElementsCollectionItem *category = QETApp::collectionItem(category_location, false);
|
|
|
|
ElementsCategory *selected_category = category -> toCategory();
|
2009-04-03 19:30:25 +00:00
|
|
|
if (!selected_category) return(0);
|
|
|
|
|
|
|
|
// la categorie doit etre accessible en ecriture
|
|
|
|
if (!selected_category -> isWritable()) return(0);
|
|
|
|
|
|
|
|
return(selected_category);
|
|
|
|
}
|