Properties dock : button edit element and find element work.

git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@4018 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
blacksun
2015-06-19 08:12:17 +00:00
parent 9ba7b0c39d
commit 2750c4434c
2 changed files with 38 additions and 31 deletions

View File

@@ -30,7 +30,7 @@
DiagramPropertiesEditorDockWidget::DiagramPropertiesEditorDockWidget(QWidget *parent) : DiagramPropertiesEditorDockWidget::DiagramPropertiesEditorDockWidget(QWidget *parent) :
PropertiesEditorDockWidget(parent), PropertiesEditorDockWidget(parent),
m_diagram(nullptr), m_diagram(nullptr),
m_edited_qgi_type(UnknowQGIType) m_edited_qgi_type (-1)
{} {}
/** /**
@@ -73,42 +73,47 @@ void DiagramPropertiesEditorDockWidget::setDiagram(Diagram *diagram)
void DiagramPropertiesEditorDockWidget::selectionChanged() void DiagramPropertiesEditorDockWidget::selectionChanged()
{ {
if (!m_diagram) return; if (!m_diagram) return;
//This editor can edit only one item.
if (m_diagram->selectedItems().size() == 1) //We can open an editor only when there is one selected item if (m_diagram->selectedItems().size() != 1)
{ {
QGraphicsItem *item = m_diagram->selectedItems().first(); clear();
m_edited_qgi_type = -1;
return;
}
//Edit an element QGraphicsItem *item = m_diagram->selectedItems().first();
if (Element *elmt = dynamic_cast<Element*>(item)) const int type_ = item->type();
{
if (m_edited_qgi_type == ElementQGIType && editors().size() == 1) switch (type_)
{
case Element::Type: {
//We already edit an element, just update the editor with a new element
if (m_edited_qgi_type == type_)
{ {
ElementPropertiesWidget *epw = dynamic_cast<ElementPropertiesWidget*>(editors().first()); static_cast<ElementPropertiesWidget*>(editors().first())->setElement(static_cast<Element*>(item));
if (epw) //In this case we only update each editor widget with the new element instead of create new widget. return;
{
epw->setElement(elmt);
return;
}
} }
clear(); clear();
m_edited_qgi_type = ElementQGIType; m_edited_qgi_type = type_;
addEditor(new ElementPropertiesWidget(elmt, this)); ElementPropertiesWidget *epw = new ElementPropertiesWidget(static_cast<Element*>(item), this);
} connect (epw, &ElementPropertiesWidget::editElementRequired , m_diagram, &Diagram::editElementRequired);
//Edit an image connect (epw, &ElementPropertiesWidget::findElementRequired, m_diagram, &Diagram::findElementRequired);
else if (DiagramImageItem *image = dynamic_cast<DiagramImageItem *>(item)) addEditor(epw);
{ break; }
case DiagramImageItem::Type: {
clear(); clear();
m_edited_qgi_type = ImageQGIType; m_edited_qgi_type = type_;
addEditor(new ImagePropertiesWidget(image, this)); addEditor(new ImagePropertiesWidget(static_cast<DiagramImageItem*>(item), this));
} break; }
//Unknow type, we clear the dock
else default:
m_edited_qgi_type = -1;
clear(); clear();
} }
else
clear();
foreach(PropertiesEditorWidget *pew, editors()) foreach (PropertiesEditorWidget *pew, editors())
pew->setLiveEdit(true); pew->setLiveEdit(true);
} }

View File

@@ -21,7 +21,6 @@
#include "PropertiesEditor/propertieseditordockwidget.h" #include "PropertiesEditor/propertieseditordockwidget.h"
class Diagram; class Diagram;
class QGraphicsItem;
class DiagramPropertiesEditorDockWidget : public PropertiesEditorDockWidget class DiagramPropertiesEditorDockWidget : public PropertiesEditorDockWidget
{ {
@@ -32,14 +31,17 @@ class DiagramPropertiesEditorDockWidget : public PropertiesEditorDockWidget
void setDiagram(Diagram *diagram); void setDiagram(Diagram *diagram);
private: //Make this method private because only this class manage the editor widget.
bool addEditor(PropertiesEditorWidget *editor, int index = 0) { return PropertiesEditorDockWidget::addEditor(editor, index); }
bool removeEditor(PropertiesEditorWidget *editor) { return PropertiesEditorDockWidget::removeEditor(editor); }
private slots: private slots:
void selectionChanged(); void selectionChanged();
void diagramWasDeleted(); void diagramWasDeleted();
private: private:
enum EditedQGIType {UnknowQGIType, ElementQGIType, ImageQGIType};
Diagram *m_diagram; Diagram *m_diagram;
EditedQGIType m_edited_qgi_type; int m_edited_qgi_type;
}; };
#endif // DIAGRAMPROPERTIESEDITORDOCKWIDGET_H #endif // DIAGRAMPROPERTIESEDITORDOCKWIDGET_H