qelectrotech-source-mirror/sources/ui/diagrampropertieseditordockwidget.cpp
2021-02-20 12:13:46 +01:00

111 lines
2.9 KiB
C++

/*
Copyright 2006-2021 The QElectroTech Team
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/>.
*/
#include "diagrampropertieseditordockwidget.h"
#include "../PropertiesEditor/propertieseditorwidget.h"
#include "../diagram.h"
#include "../factory/propertieseditorfactory.h"
/**
@brief DiagramPropertiesEditorDockWidget::DiagramPropertiesEditorDockWidget
Constructor
@param parent : parent widget
*/
DiagramPropertiesEditorDockWidget::DiagramPropertiesEditorDockWidget(QWidget *parent) :
PropertiesEditorDockWidget(parent),
m_diagram(nullptr),
m_edited_qgi_type (-1)
{}
/**
@brief DiagramPropertiesEditorDockWidget::setDiagram
Set the diagram to edit the selection.
Connect the diagram signal selectionChanged() to this slot selectionChanged();
If diagram = nullptr, we just disconnect all signal and remove editor.
@param diagram
*/
void DiagramPropertiesEditorDockWidget::setDiagram(Diagram *diagram)
{
if (m_diagram == diagram) return;
if (m_diagram)
{
disconnect(m_diagram, SIGNAL(selectionChanged()),
this, SLOT(selectionChanged()));
disconnect(m_diagram, SIGNAL(destroyed()),
this, SLOT(diagramWasDeleted()));
}
if (diagram)
{
m_diagram = diagram;
connect(m_diagram, SIGNAL(selectionChanged()),
this, SLOT(selectionChanged()), Qt::QueuedConnection);
connect(m_diagram, SIGNAL(destroyed()),
this, SLOT(diagramWasDeleted()));
selectionChanged();
}
else
{
m_diagram = nullptr;
m_edited_qgi_type = -1;
clear();
}
}
/**
@brief DiagramPropertiesEditorDockWidget::selectionChanged
The current selection of diagram was changed.
We fill the dock with the appropriate ElementPropertiesWidget of the current selection.
*/
void DiagramPropertiesEditorDockWidget::selectionChanged()
{
if (!m_diagram) {
return;
}
auto editor_ = PropertiesEditorFactory::propertiesEditor(
m_diagram->selectedItems(),
editors().count() ? editors().first() : nullptr,
this);
if (!editor_) {
clear();
return;
}
if (editors().count() &&
editors().first() != editor_) {
clear();
}
addEditor(editor_);
for (PropertiesEditorWidget *pew : editors()) {
pew->setLiveEdit(true);
}
}
/**
@brief DiagramPropertiesEditorDockWidget::diagramWasDeleted
Remove current editor and set m_diagram to nullptr.
*/
void DiagramPropertiesEditorDockWidget::diagramWasDeleted()
{
m_diagram = nullptr;
m_edited_qgi_type = -1;
clear();
}