Use PropertiesEditorWidget instead of QWidget for some widget (widget used to edit propertie of element)

git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@3932 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
blacksun
2015-05-03 17:32:28 +00:00
parent a123a50e18
commit 67189f49f3
10 changed files with 351 additions and 198 deletions

View File

@@ -16,13 +16,10 @@
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
*/
#include "elementpropertiesdialog.h"
#include "ghostelement.h"
#include "qeticons.h"
#include "diagramposition.h"
#include "diagram.h"
#include "elementinfowidget.h"
#include "masterpropertieswidget.h"
#include "linksingleelementwidget.h"
#include "elementpropertieswidget.h"
#include <QDialogButtonBox>
#include <QVBoxLayout>
/**
* @brief ElementPropertiesDialog::ElementPropertiesDialog
@@ -32,123 +29,18 @@
*/
ElementPropertiesDialog::ElementPropertiesDialog(Element *elmt, QWidget *parent) :
QDialog(parent),
element_ (elmt),
diagram_ (elmt->diagram())
element_ (elmt)
{
eiw_ = 0;
mpw_ = 0;
lsew_ = 0;
buildInterface();
}
m_editor = new ElementPropertiesWidget(elmt, this);
/**
* @brief ElementPropertiesDialog::generalWidget
* build the widget for the tab général
* @return
*/
QWidget* ElementPropertiesDialog::generalWidget() {
CustomElement *custom_element = qobject_cast<CustomElement *>(element_);
GhostElement *ghost_element = qobject_cast<GhostElement *>(element_);
connect(m_editor, SIGNAL(editElementRequired(ElementsLocation)), this , SLOT(editElement(ElementsLocation)));
connect(m_editor, SIGNAL(findElementRequired(ElementsLocation)), this, SLOT(findInPanel(ElementsLocation)));
// type de l'element
QString description_string;
if (ghost_element) {
description_string += tr("Élément manquant");
} else {
description_string += tr("Élément");
}
description_string += "\n";
// some element characteristic
description_string += QString(tr("Nom : %1\n")).arg(element_ -> name());
int folio_index = diagram_ -> folioIndex();
if (folio_index != -1) {
description_string += QString(tr("Folio : %1\n")).arg(folio_index + 1);
}
description_string += QString(tr("Position : %1\n")).arg(diagram_ -> convertPosition(element_ -> scenePos()).toString());
description_string += QString(tr("Dimensions : %1*%2\n")).arg(element_ -> size().width()).arg(element_ -> size().height());
description_string += QString(tr("Bornes : %1\n")).arg(element_ -> terminals().count());
description_string += QString(tr("Champs de texte : %1\n")).arg(element_ -> texts().count());
if (custom_element) {
description_string += QString(tr("Emplacement : %1\n")).arg(custom_element -> location().toString());
}
// widget himself
QWidget *general_widget = new QWidget (tab_);
QVBoxLayout *vlayout_ = new QVBoxLayout (general_widget);
general_widget -> setLayout(vlayout_);
//widget for the text
vlayout_->addWidget(new QLabel (description_string, general_widget));
//widget for the pixmap
QLabel *pix = new QLabel(general_widget);
pix->setPixmap(element_->pixmap());
vlayout_->addWidget(pix, 0, Qt::AlignHCenter);
vlayout_ -> addStretch();
//button widget
find_in_panel = new QPushButton(QET::Icons::ZoomDraw, tr("Retrouver dans le panel"), general_widget);
connect(find_in_panel, SIGNAL(clicked()), this, SLOT(findInPanel()));
edit_element = new QPushButton(QET::Icons::ElementEdit, tr("Éditer l'élément"), general_widget);
connect(edit_element, SIGNAL(clicked()), this, SLOT(editElement()));
QHBoxLayout *hlayout_ = new QHBoxLayout;
hlayout_->addWidget(find_in_panel);
hlayout_->addWidget(edit_element);
vlayout_->addLayout(hlayout_);
return general_widget;
}
/**
* @brief ElementPropertiesDialog::buildInterface
*build the interface of this dialog, the main tab can have
*different tab according to the edited element
*/
void ElementPropertiesDialog::buildInterface() {
setWindowTitle(tr("Propriétés de l'élément"));
tab_ = new QTabWidget(this);
//Add tab according to the element
switch (element_ -> linkType()) {
case Element::Simple:
eiw_ = new ElementInfoWidget(element_, this);
tab_ -> addTab(eiw_, tr("Information"));
break;
case Element::NextReport:
lsew_ = new LinkSingleElementWidget(element_, this);
tab_ -> addTab(lsew_, tr("Report de folio"));
break;
case Element::PreviousReport:
lsew_ = new LinkSingleElementWidget(element_, this);
tab_ -> addTab(lsew_, tr("Report de folio"));
break;
case Element::Master:
mpw_ = new MasterPropertiesWidget(element_, this);
tab_ -> addTab(mpw_, tr("Référence croisée (maitre)"));
eiw_ = new ElementInfoWidget(element_, this);
tab_ -> addTab(eiw_, tr("Informations"));
break;
case Element::Slave:
lsew_ = new LinkSingleElementWidget(element_, this);
tab_ -> addTab(lsew_, tr("Référence croisée (esclave)"));
break;
case Element::Terminale:
break;
default:
break;
}
tab_ -> addTab(generalWidget(), tr("Général"));
dbb = new QDialogButtonBox(QDialogButtonBox::Apply | QDialogButtonBox::Cancel | QDialogButtonBox::Reset,
Qt::Horizontal, this);
dbb = new QDialogButtonBox(QDialogButtonBox::Apply | QDialogButtonBox::Cancel | QDialogButtonBox::Reset, Qt::Horizontal, this);
connect(dbb, SIGNAL(clicked(QAbstractButton*)), this, SLOT(standardButtonClicked(QAbstractButton*)));
QVBoxLayout *main_layout = new QVBoxLayout(this);
main_layout -> addWidget(tab_);
main_layout -> addWidget(m_editor);
main_layout -> addWidget(dbb);
setLayout(main_layout);
}
@@ -161,56 +53,28 @@ void ElementPropertiesDialog::buildInterface() {
*/
void ElementPropertiesDialog::standardButtonClicked(QAbstractButton *button) {
int answer = dbb -> buttonRole(button);
bool accept = false;
switch (answer) {
case QDialogButtonBox::ResetRole:
if (mpw_) mpw_->reset();
m_editor->reset();
break;
case QDialogButtonBox::ApplyRole:
accept = true;
break;
case QDialogButtonBox::RejectRole:
this -> reject();
m_editor->apply();
accept();
break;
default:
this -> reject();
reject();
break;
}
if (accept) {
QUndoCommand *a = nullptr;
QUndoCommand *b = nullptr;
if (eiw_) a = eiw_ -> associatedUndo();
if (mpw_) b = mpw_ -> associatedUndo();
if (lsew_) lsew_ -> apply();
//If two undo, we push it in a macro
if (a && b) {
QUndoStack &stack = element_ -> diagram() -> undoStack();
stack.beginMacro(a -> text() + " + " + b -> text());
stack.push(a);
stack.push(b);
stack.endMacro();
}
else {
if (a) element_ -> diagram() -> undoStack().push(a);
if (b) element_ -> diagram() -> undoStack().push(b);
}
this -> accept();
}
}
/**
* @brief ElementPropertiesDialog::findInPanel
* Slot
*/
void ElementPropertiesDialog::findInPanel() {
if (CustomElement *custom_element = qobject_cast<CustomElement *>(element_)) {
emit findElementRequired(custom_element->location());
}
void ElementPropertiesDialog::findInPanel(const ElementsLocation &location)
{
emit findElementRequired(location);
reject();
}
@@ -218,10 +82,9 @@ void ElementPropertiesDialog::findInPanel() {
* @brief ElementPropertiesDialog::editElement
* Slot
*/
void ElementPropertiesDialog::editElement() {
if (CustomElement *custom_element = qobject_cast<CustomElement *>(element_)) {
emit findElementRequired(custom_element->location());
emit editElementRequired(custom_element->location());
}
void ElementPropertiesDialog::editElement(const ElementsLocation &location)
{
emit findElementRequired(location);
emit editElementRequired(location);
reject();
}