qelectrotech-source-mirror/sources/ui/linksingleelementwidget.cpp
blacksun b74c5804be Replace the class folioReportProperties by the class linkSingleElementWidget.
The new class does the same thing but is more flexible, this class is used by report and slave element
to find element to be linked and/or unlink an already linked element.


git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@2921 bfdf4180-ca20-0410-9c96-a3a8aa849046
2014-03-12 09:32:56 +00:00

195 lines
5.6 KiB
C++

/*
Copyright 2006-2014 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 "linksingleelementwidget.h"
#include "ui_linksingleelementwidget.h"
#include "diagram.h"
#include "element.h"
#include "elementprovider.h"
#include "diagramcommands.h"
/**
* @brief LinkSingleElementWidget::LinkSingleElementWidget
* Default constructor
* @param elmt
* the edited element
* @param parent
* the parent widget
*/
LinkSingleElementWidget::LinkSingleElementWidget(Element *elmt, QWidget *parent) :
QWidget(parent),
ui(new Ui::LinkSingleElementWidget),
element_(elmt),
esw_(0),
diagram_list(element_->diagram()->project()->diagrams()),
unlink_widget(0),
unlink_(false)
{
ui->setupUi(this);
if (elmt->linkType() & Element::Slave)
filter_ = Element::Master;
else if (elmt->linkType() & Element::AllReport)
filter_ = elmt->linkType() == Element::NextReport? Element::PreviousReport : Element::NextReport;
else
filter_ = Element::Simple;
buildInterface();
connect(ui->folio_combo_box, SIGNAL(currentIndexChanged(int)), this, SLOT(reBuildList()));
}
/**
* @brief LinkSingleElementWidget::~LinkSingleElementWidget
* Default destructor
*/
LinkSingleElementWidget::~LinkSingleElementWidget()
{
delete ui;
}
/**
* @brief LinkSingleElementWidget::apply
* Apply the new property of the edited element
*/
void LinkSingleElementWidget::apply() {
if (esw_->selectedElement())
element_->diagram()->undoStack().push(new LinkElementsCommand(element_, esw_->selectedElement()));
else if (unlink_)
element_->diagram()->undoStack().push(new unlinkElementsCommand(element_));
}
/**
* @brief LinkSingleElementWidget::buildInterface
* Build the interface of this widget
*/
void LinkSingleElementWidget::buildInterface() {
ui->folio_combo_box->addItem(tr("Tous"));
//Fill the combo box for filter the result by folio
foreach (Diagram *d, diagram_list) {
QString title = d->title();
if (title.isEmpty()) title = tr("Sans titre");
title.prepend(QString::number(d->folioIndex() + 1) + " ");
ui->folio_combo_box->addItem(title);
}
//Element is free build list
if(element_->isFree()) {
buildList();
ui->button_linked->setDisabled(true);
}
//Element isn't free build an empty list and add 'unlink' button
else {
buildUnlinkButton();
QList <Element *> elmt_list;
esw_ = new ElementSelectorWidget(elmt_list, this);
ui->content_layout->addWidget(esw_);
}
}
/**
* @brief LinkSingleElementWidget::buildList
* Build the element list of this widget,
* the list is fill with the element find in the
* required folio (folio selected with the combo box)
*/
void LinkSingleElementWidget::buildList() {
QList <Element *> elmt_list;
int i = ui->folio_combo_box->currentIndex();
//find in all diagram of this project
if (i == 0) {
ElementProvider ep(element_->diagram()->project());
if (filter_ & Element::AllReport)
elmt_list = ep.freeElement(filter_);
else
elmt_list = ep.find(filter_);
}
//find in single diagram
else {
ElementProvider ep (diagram_list.at(i-1));
if (filter_ & Element::AllReport)
elmt_list = ep.freeElement(filter_);
else
elmt_list = ep.find(filter_);
}
//If element is linked, remove is parent from the list
if(!element_->isFree()) elmt_list.removeAll(element_->linkedElements().first());
esw_ = new ElementSelectorWidget(elmt_list, this);
ui->content_layout->addWidget(esw_);
}
/**
* @brief LinkSingleElementWidget::buildUnlinkButton
* Build a widget with button 'unlink' if the edited
* element is already linked with a master element
*/
void LinkSingleElementWidget::buildUnlinkButton() {
unlink_widget = new QWidget(this);
QHBoxLayout *unlink_layout = new QHBoxLayout(unlink_widget);
QLabel *lb = new QLabel(tr("Cet \351l\351ment est d\351j\340 li\351."), unlink_widget);
QPushButton *pb = new QPushButton(tr("D\351lier"), unlink_widget);
connect(pb, SIGNAL(clicked()), this, SLOT(unlinkClicked()));
unlink_layout->addWidget(lb);
unlink_layout->addStretch();
unlink_layout->addWidget(pb);
ui->main_layout->insertWidget(0, unlink_widget);
}
/**
* @brief LinkSingleElementWidget::reBuildList
* Rebuild the list of element
*/
void LinkSingleElementWidget::reBuildList() {
if (element_->isFree() || unlink_) {
ui->content_layout->removeWidget(esw_);
delete esw_;
buildList();
}
}
/**
* @brief LinkSingleElementWidget::unlinkClicked
* Action when 'unlink' button is clicked
*/
void LinkSingleElementWidget::unlinkClicked() {
ui->main_layout->removeWidget(unlink_widget);
delete unlink_widget;
unlink_widget = 0;
unlink_ = true;
reBuildList();
}
/**
* @brief FolioReportProperties::on_button_this_clicked
* Action when push button "this report" is clicked
*/
void LinkSingleElementWidget::on_button_this_clicked() {
esw_->showElement(element_);
}
/**
* @brief FolioReportProperties::on_button_linked_clicked
* Action when push button "linked report" is clicked
*/
void LinkSingleElementWidget::on_button_linked_clicked() {
if (element_->isFree()) return;
esw_->showElement(element_->linkedElements().first());
}