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

View File

@@ -21,7 +21,6 @@
#include "PropertiesEditor/propertieseditordockwidget.h"
class Diagram;
class QGraphicsItem;
class DiagramPropertiesEditorDockWidget : public PropertiesEditorDockWidget
{
@@ -32,14 +31,17 @@ class DiagramPropertiesEditorDockWidget : public PropertiesEditorDockWidget
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:
void selectionChanged();
void diagramWasDeleted();
private:
enum EditedQGIType {UnknowQGIType, ElementQGIType, ImageQGIType};
Diagram *m_diagram;
EditedQGIType m_edited_qgi_type;
int m_edited_qgi_type;
};
#endif // DIAGRAMPROPERTIESEDITORDOCKWIDGET_H