mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-02-14 05:19:58 +01:00
Ajout d'une action "Retrouver dans le panel" dans les proprietes des elements.
git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@654 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
@@ -622,11 +622,24 @@ void DiagramView::editElement(Element *element) {
|
||||
description_string += QString(tr("Emplacement\240: %1\n")).arg(custom_element -> location().toString());
|
||||
}
|
||||
|
||||
QMessageBox::information(
|
||||
this,
|
||||
tr("Propri\351t\351s de l'\351l\351ment s\351lectionn\351"),
|
||||
description_string
|
||||
);
|
||||
// titre et boutons du dialogue
|
||||
QString description_title = tr("Propri\351t\351s de l'\351l\351ment s\351lectionn\351");
|
||||
QPushButton *find_in_panel = new QPushButton(tr("Retrouver dans le panel"));
|
||||
|
||||
// dialogue en lui-meme
|
||||
QMessageBox edit_element_dialog;
|
||||
edit_element_dialog.setIcon(QMessageBox::Information);
|
||||
edit_element_dialog.setWindowTitle(description_title);
|
||||
edit_element_dialog.setText(description_title);
|
||||
edit_element_dialog.setInformativeText(description_string);
|
||||
edit_element_dialog.addButton(find_in_panel, QMessageBox::ApplyRole);
|
||||
edit_element_dialog.addButton(QMessageBox::Ok);
|
||||
edit_element_dialog.setDefaultButton(QMessageBox::Ok);
|
||||
edit_element_dialog.exec();
|
||||
|
||||
if (edit_element_dialog.clickedButton() == find_in_panel) {
|
||||
emit(findElementRequired(custom_element -> location()));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -43,6 +43,7 @@ class DiagramView : public QGraphicsView {
|
||||
Diagram *scene;
|
||||
QMenu *context_menu;
|
||||
QAction *paste_here;
|
||||
QAction *find_element_;
|
||||
QPoint paste_here_pos;
|
||||
bool is_adding_text;
|
||||
ElementsLocation next_location_;
|
||||
@@ -90,6 +91,8 @@ class DiagramView : public QGraphicsView {
|
||||
void titleChanged(DiagramView *, const QString &);
|
||||
/// Signal emis avant l'integration d'un element
|
||||
void aboutToAddElement();
|
||||
/// Signal emis lorsque l'utilisateur souhaite retrouver un element du schema dans les collections
|
||||
void findElementRequired(const ElementsLocation &);
|
||||
|
||||
public slots:
|
||||
void selectNothing();
|
||||
|
||||
@@ -661,7 +661,7 @@ void ElementsPanel::reload(bool reload_collections) {
|
||||
|
||||
// reselectionne le dernier element selectionne
|
||||
if (!last_selected_item.isNull()) {
|
||||
QTreeWidgetItem *qtwi = findPath(last_selected_item);
|
||||
QTreeWidgetItem *qtwi = findLocation(last_selected_item);
|
||||
if (qtwi) setCurrentItem(qtwi);
|
||||
}
|
||||
}
|
||||
@@ -706,15 +706,20 @@ void ElementsPanel::saveExpandedCategories() {
|
||||
}
|
||||
|
||||
/**
|
||||
@param path chemin virtuel a retrouver dans l'arborescence
|
||||
@return le QTreeWidgetItem correspondant au chemin path ou 0 si celui-ci n'est pas trouve
|
||||
@param location emplacement a retrouver dans l'arborescence
|
||||
@return le QTreeWidgetItem correspondant a l'emplacaement location ou 0 si celui-ci n'est pas trouve
|
||||
*/
|
||||
QTreeWidgetItem *ElementsPanel::findPath(const QString &path) const {
|
||||
QList<QTreeWidgetItem *> items = findItems("*", Qt::MatchRecursive|Qt::MatchWildcard);
|
||||
foreach(QTreeWidgetItem *item, items) {
|
||||
if (locations_[item].toString() == path) return(item);
|
||||
}
|
||||
return(0);
|
||||
QTreeWidgetItem *ElementsPanel::findLocation(const ElementsLocation &location) const {
|
||||
if (location.isNull()) return(0);
|
||||
return(locations_.key(location, 0));
|
||||
}
|
||||
|
||||
/**
|
||||
@param location emplacement a retrouver dans l'arborescence
|
||||
@return le QTreeWidgetItem correspondant a l'emplacaement location ou 0 si celui-ci n'est pas trouve
|
||||
*/
|
||||
QTreeWidgetItem *ElementsPanel::findLocation(const QString &location) const {
|
||||
return(findLocation(ElementsLocation(location)));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -794,23 +799,7 @@ void ElementsPanel::filter(const QString &m) {
|
||||
item -> setHidden(!item_matches);
|
||||
}
|
||||
|
||||
// remonte l'arborescence pour lister les categories contenant les elements filtres
|
||||
QSet<QTreeWidgetItem *> parent_items;
|
||||
foreach(QTreeWidgetItem *item, matching_items) {
|
||||
for (QTreeWidgetItem *parent_qtwi = item -> parent() ; parent_qtwi ; parent_qtwi = parent_qtwi -> parent()) {
|
||||
parent_items << parent_qtwi;
|
||||
}
|
||||
}
|
||||
|
||||
// etend les parents
|
||||
foreach(QTreeWidgetItem *parent_qtwi, parent_items) {
|
||||
if (!parent_qtwi -> isExpanded()) parent_qtwi -> setExpanded(true);
|
||||
}
|
||||
|
||||
// affiche les parents
|
||||
foreach(QTreeWidgetItem *parent_qtwi, parent_items) {
|
||||
if (parent_qtwi -> isHidden()) parent_qtwi -> setHidden(false);
|
||||
}
|
||||
ensureHierarchyIsVisible(matching_items);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -903,6 +892,23 @@ void ElementsPanel::diagramOrderChanged(QETProject *project, int from, int to) {
|
||||
qtwi_project -> insertChild(to, moved_qtwi_diagram);
|
||||
}
|
||||
|
||||
/**
|
||||
Affiche un element etant donne son emplacement
|
||||
@param location Emplacement de l'element a afficher
|
||||
*/
|
||||
bool ElementsPanel::scrollToElement(const ElementsLocation &location) {
|
||||
// recherche l'element dans le panel
|
||||
QTreeWidgetItem *item = findLocation(location);
|
||||
if (!item) return(false);
|
||||
|
||||
// s'assure que l'item ne soit pas filtre
|
||||
item -> setHidden(false);
|
||||
setCurrentItem(item);
|
||||
ensureHierarchyIsVisible(QList<QTreeWidgetItem *>() << item);
|
||||
scrollToItem(item);
|
||||
return(true);
|
||||
}
|
||||
|
||||
/**
|
||||
Met a jour le nom, l'info-bulle et l'icone de l'item representant un projet.
|
||||
@param project le projet dont il faut mettre a jour l'affichage
|
||||
@@ -935,3 +941,27 @@ void ElementsPanel::updateProjectItemInformations(QETProject *project) {
|
||||
QString ElementsPanel::diagramTitleToDisplay(Diagram *diagram) const {
|
||||
return(diagram -> title().isEmpty() ? tr("Sch\351ma sans titre") : diagram -> title());
|
||||
}
|
||||
|
||||
/**
|
||||
@param une liste de QTreeWidgetItem pour lesquels il faut s'assurer que eux
|
||||
et leurs parents sont visibles
|
||||
*/
|
||||
void ElementsPanel::ensureHierarchyIsVisible(QList<QTreeWidgetItem *> items) {
|
||||
// remonte l'arborescence pour lister les categories contenant les elements filtres
|
||||
QSet<QTreeWidgetItem *> parent_items;
|
||||
foreach(QTreeWidgetItem *item, items) {
|
||||
for (QTreeWidgetItem *parent_qtwi = item -> parent() ; parent_qtwi ; parent_qtwi = parent_qtwi -> parent()) {
|
||||
parent_items << parent_qtwi;
|
||||
}
|
||||
}
|
||||
|
||||
// etend les parents
|
||||
foreach(QTreeWidgetItem *parent_qtwi, parent_items) {
|
||||
if (!parent_qtwi -> isExpanded()) parent_qtwi -> setExpanded(true);
|
||||
}
|
||||
|
||||
// affiche les parents
|
||||
foreach(QTreeWidgetItem *parent_qtwi, parent_items) {
|
||||
if (parent_qtwi -> isHidden()) parent_qtwi -> setHidden(false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -92,6 +92,7 @@ class ElementsPanel : public QTreeWidget {
|
||||
void diagramWasRemoved(QETProject *, Diagram *);
|
||||
void diagramTitleChanged(QETProject *, Diagram *);
|
||||
void diagramOrderChanged(QETProject *, int, int);
|
||||
bool scrollToElement(const ElementsLocation &);
|
||||
|
||||
protected:
|
||||
void dragEnterEvent(QDragEnterEvent *);
|
||||
@@ -106,10 +107,12 @@ class ElementsPanel : public QTreeWidget {
|
||||
QTreeWidgetItem *addCategory (QTreeWidgetItem *, ElementsCategory *, const QString & = QString(), const QIcon & = QIcon());
|
||||
QTreeWidgetItem *addElement (QTreeWidgetItem *, ElementDefinition *, const QString & = QString());
|
||||
void saveExpandedCategories();
|
||||
QTreeWidgetItem *findPath(const QString &) const;
|
||||
QTreeWidgetItem *findLocation(const ElementsLocation &) const;
|
||||
QTreeWidgetItem *findLocation(const QString &) const;
|
||||
void deleteItem(QTreeWidgetItem *);
|
||||
void updateProjectItemInformations(QETProject *);
|
||||
QString diagramTitleToDisplay(Diagram *) const;
|
||||
void ensureHierarchyIsVisible(QList<QTreeWidgetItem *>);
|
||||
|
||||
// attributs
|
||||
private:
|
||||
|
||||
@@ -299,6 +299,7 @@ void ProjectView::addDiagram(DiagramView *diagram) {
|
||||
diagrams_ << diagram;
|
||||
rebuildDiagramsMap();
|
||||
connect(diagram, SIGNAL(titleChanged(DiagramView *, const QString &)), this, SLOT(updateTabTitle(DiagramView *, const QString &)));
|
||||
connect(diagram, SIGNAL(findElementRequired(const ElementsLocation &)), this, SIGNAL(findElementRequired(const ElementsLocation &)));
|
||||
|
||||
// signale l'ajout du schema
|
||||
emit(diagramAdded(diagram));
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
class QETProject;
|
||||
class DiagramView;
|
||||
class Diagram;
|
||||
class ElementsLocation;
|
||||
class QETTabWidget;
|
||||
/**
|
||||
Cette classe affiche les schemas d'un projet dans des onglets.
|
||||
@@ -70,6 +71,7 @@ class ProjectView : public QWidget {
|
||||
void diagramActivated(DiagramView *);
|
||||
void diagramOrderChanged(ProjectView *, int, int);
|
||||
void projectClosed(ProjectView *);
|
||||
void findElementRequired(const ElementsLocation &);
|
||||
|
||||
private:
|
||||
void loadDiagrams();
|
||||
|
||||
@@ -1252,6 +1252,9 @@ void QETDiagramEditor::addProjectView(ProjectView *project_view) {
|
||||
// gere les changements de l'ordre des schemas dans le projet
|
||||
connect(project_view, SIGNAL(diagramOrderChanged(ProjectView *, int, int)), this, SLOT(diagramOrderChanged(ProjectView *, int, int)));
|
||||
|
||||
// gere les demandes consistant a retrouver un element dans le panel
|
||||
connect(project_view, SIGNAL(findElementRequired(const ElementsLocation &)), this, SLOT(findElementInPanel(const ElementsLocation &)));
|
||||
|
||||
// affiche la fenetre
|
||||
if (maximise) project_view -> showMaximized();
|
||||
else project_view -> show();
|
||||
@@ -1675,6 +1678,46 @@ void QETDiagramEditor::diagramTitleChanged(DiagramView *dv) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@param location Emplacement de l'element a retrouver dans le panel
|
||||
d'elements.
|
||||
*/
|
||||
void QETDiagramEditor::findElementInPanel(const ElementsLocation &location) {
|
||||
bool element_found = pa -> elementsPanel().scrollToElement(location);
|
||||
if (!element_found) {
|
||||
// l'element n'a pas ete trouve
|
||||
|
||||
ElementsCollectionItem *element = QETApp::collectionItem(location);
|
||||
if (element) {
|
||||
// mais il semble exister tout de meme
|
||||
|
||||
// peut-etre vient-il d'un projet ouvert dans un autre editeur ?
|
||||
if (location.project() && !findProject(location.project())) {
|
||||
statusBar() -> showMessage(
|
||||
tr("Impossible de retrouver cet \351l\351ment dans le panel car il semble \351dit\351 dans une autre fen\352tre"),
|
||||
10000
|
||||
);
|
||||
} else {
|
||||
// il devrait etre affiche : on tente de recharger le panel
|
||||
statusBar() -> showMessage(
|
||||
tr("Impossible de retrouver cet \351l\351ment dans le panel... rechargement du panel..."),
|
||||
10000
|
||||
);
|
||||
pa -> reloadAndFilter();
|
||||
statusBar() -> clearMessage();
|
||||
element_found = pa -> elementsPanel().scrollToElement(location);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!element_found) {
|
||||
statusBar() -> showMessage(
|
||||
tr("Impossible de retrouver cet \351l\351ment dans le panel"),
|
||||
10000
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
Permet a l'utilisateur de configurer QET en lancant un dialogue approprie.
|
||||
@see ConfigDialog
|
||||
|
||||
@@ -26,6 +26,7 @@ class ProjectView;
|
||||
class Diagram;
|
||||
class DiagramView;
|
||||
class ElementsPanelWidget;
|
||||
class ElementsLocation;
|
||||
class RecentFiles;
|
||||
/**
|
||||
Cette classe represente la fenetre principale de QElectroTech et,
|
||||
@@ -144,6 +145,7 @@ class QETDiagramEditor : public QMainWindow {
|
||||
void diagramIsAboutToBeRemoved(DiagramView *);
|
||||
void diagramWasRemoved(DiagramView *);
|
||||
void diagramTitleChanged(DiagramView *);
|
||||
void findElementInPanel(const ElementsLocation &);
|
||||
|
||||
// attributs
|
||||
public:
|
||||
|
||||
Reference in New Issue
Block a user