2014-02-22 17:24:20 +00:00
|
|
|
/*
|
|
|
|
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/>.
|
|
|
|
*/
|
2014-02-18 20:44:54 +00:00
|
|
|
#include "masterpropertieswidget.h"
|
|
|
|
#include "ui_masterpropertieswidget.h"
|
2014-02-22 17:24:20 +00:00
|
|
|
#include <QListWidgetItem>
|
|
|
|
#include <diagramposition.h>
|
|
|
|
#include <elementprovider.h>
|
2014-02-26 23:57:22 +00:00
|
|
|
#include <diagramcommands.h>
|
2014-02-18 20:44:54 +00:00
|
|
|
|
2014-02-26 23:57:22 +00:00
|
|
|
/**
|
|
|
|
* @brief MasterPropertiesWidget::MasterPropertiesWidget
|
|
|
|
* Default constructor
|
|
|
|
* @param elmt
|
|
|
|
* @param parent
|
|
|
|
*/
|
2014-02-22 17:24:20 +00:00
|
|
|
MasterPropertiesWidget::MasterPropertiesWidget(Element *elmt, QWidget *parent) :
|
2014-02-18 20:44:54 +00:00
|
|
|
QWidget(parent),
|
2014-02-22 17:24:20 +00:00
|
|
|
ui(new Ui::MasterPropertiesWidget),
|
|
|
|
element_(elmt)
|
2014-02-18 20:44:54 +00:00
|
|
|
{
|
|
|
|
ui->setupUi(this);
|
2014-02-22 17:24:20 +00:00
|
|
|
buildInterface();
|
2014-02-26 23:57:22 +00:00
|
|
|
connect(ui->free_list, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(showElementFromLWI(QListWidgetItem*)));
|
|
|
|
connect(ui->linked_list, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(showElementFromLWI(QListWidgetItem*)));
|
2014-02-18 20:44:54 +00:00
|
|
|
}
|
|
|
|
|
2014-02-26 23:57:22 +00:00
|
|
|
/**
|
|
|
|
* @brief MasterPropertiesWidget::~MasterPropertiesWidget
|
|
|
|
* Destructor
|
|
|
|
*/
|
2014-02-18 20:44:54 +00:00
|
|
|
MasterPropertiesWidget::~MasterPropertiesWidget()
|
|
|
|
{
|
2014-02-26 23:57:22 +00:00
|
|
|
foreach(Element *elmt, lwi_hash.values()) elmt->setHighlighted(false);
|
2014-02-18 20:44:54 +00:00
|
|
|
delete ui;
|
|
|
|
}
|
2014-02-22 17:24:20 +00:00
|
|
|
|
2014-02-26 23:57:22 +00:00
|
|
|
/**
|
|
|
|
* @brief MasterPropertiesWidget::apply
|
|
|
|
* Do what we need when apply new conf
|
|
|
|
*/
|
|
|
|
void MasterPropertiesWidget::apply() {
|
|
|
|
QList <Element *> to_link;
|
|
|
|
QList <Element *> linked_ = element_->linkedElements();
|
|
|
|
|
|
|
|
for (int i=0; i<ui->linked_list->count(); i++) {
|
|
|
|
to_link << lwi_hash[ui->linked_list->item(i)];
|
|
|
|
}
|
|
|
|
|
|
|
|
//If same element are find in to_link and linked, that means
|
|
|
|
// element are already linked, so we remove element on the two list
|
|
|
|
//if linked_ contains element at the end of the operation,
|
|
|
|
//that means this element must be unlinked from @element_
|
|
|
|
foreach (Element *elmt, to_link) {
|
|
|
|
if(linked_.contains(elmt)) {
|
|
|
|
to_link.removeAll(elmt);
|
|
|
|
linked_.removeAll(elmt);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// if two list, contain element, we link and unlink @element_ with corresponding
|
|
|
|
//undo command, and add first command for parent of the second, user see only one
|
|
|
|
//undo command
|
|
|
|
if (linked_.count() && to_link.count()) {
|
|
|
|
LinkElementsCommand *lec = new LinkElementsCommand(element_, to_link);
|
|
|
|
new unlinkElementsCommand(element_, linked_, lec);
|
|
|
|
element_->diagram()->undoStack().push(lec);
|
|
|
|
}
|
|
|
|
//Else do the single undo command corresponding to the link.
|
|
|
|
else if (to_link.count()) {
|
|
|
|
LinkElementsCommand *lec = new LinkElementsCommand(element_, to_link);
|
|
|
|
element_->diagram()->undoStack().push(lec);
|
|
|
|
}
|
|
|
|
else if (linked_.count()) {
|
|
|
|
unlinkElementsCommand *uec = new unlinkElementsCommand(element_, linked_);
|
|
|
|
element_->diagram()->undoStack().push(uec);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief MasterPropertiesWidget::reset
|
|
|
|
* Reset curent widget, clear eveything and rebuild widget.
|
|
|
|
*/
|
|
|
|
void MasterPropertiesWidget::reset() {
|
|
|
|
foreach (QListWidgetItem *lwi, lwi_hash.keys()) {
|
|
|
|
delete lwi;
|
|
|
|
}
|
|
|
|
lwi_hash.clear();
|
|
|
|
buildInterface();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief MasterPropertiesWidget::buildInterface
|
|
|
|
* Build the interface of the widget
|
|
|
|
*/
|
2014-02-22 17:24:20 +00:00
|
|
|
void MasterPropertiesWidget::buildInterface() {
|
2014-02-26 23:57:22 +00:00
|
|
|
//build the free list
|
2014-02-22 17:24:20 +00:00
|
|
|
ElementProvider elmt_prov(element_->diagram()->project());
|
|
|
|
|
|
|
|
foreach(Element *elmt, elmt_prov.freeElement(Element::Slave)) {
|
|
|
|
//label for list widget
|
|
|
|
QString widget_text;
|
|
|
|
QString title = elmt->diagram()->title();
|
|
|
|
if (title.isEmpty()) title = tr("Sans titre");
|
|
|
|
widget_text += QString(tr("Folio\240 %1 (%2), position %3.")).arg(elmt->diagram()->folioIndex() + 1)
|
|
|
|
.arg(title)
|
|
|
|
.arg(elmt->diagram() -> convertPosition(elmt -> scenePos()).toString());
|
|
|
|
QListWidgetItem *lwi_ = new QListWidgetItem(elmt->pixmap(), widget_text);
|
2014-02-26 23:57:22 +00:00
|
|
|
lwi_hash.insert(lwi_, elmt);
|
2014-02-22 17:24:20 +00:00
|
|
|
ui->free_list->addItem(lwi_);
|
|
|
|
}
|
2014-02-26 23:57:22 +00:00
|
|
|
|
|
|
|
//build the linked list
|
|
|
|
foreach(Element *elmt, element_->linkedElements()) {
|
|
|
|
//label for list widget
|
|
|
|
QString widget_text;
|
|
|
|
QString title = elmt->diagram()->title();
|
|
|
|
if (title.isEmpty()) title = tr("Sans titre");
|
|
|
|
widget_text += QString(tr("Folio\240 %1 (%2), position %3.")).arg(elmt->diagram()->folioIndex() + 1)
|
|
|
|
.arg(title)
|
|
|
|
.arg(elmt->diagram() -> convertPosition(elmt -> scenePos()).toString());
|
|
|
|
QListWidgetItem *lwi_ = new QListWidgetItem(elmt->pixmap(), widget_text);
|
|
|
|
lwi_hash.insert(lwi_, elmt);
|
|
|
|
ui->linked_list->addItem(lwi_);
|
|
|
|
}
|
2014-02-22 17:24:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief MasterPropertiesWidget::on_link_button_clicked
|
|
|
|
* move curent item in the free_list to linked_list
|
|
|
|
*/
|
|
|
|
void MasterPropertiesWidget::on_link_button_clicked() {
|
|
|
|
//take the curent item from free_list and push it to linked_list
|
|
|
|
ui->linked_list->addItem(
|
|
|
|
ui->free_list->takeItem(
|
|
|
|
ui->free_list->currentRow()));
|
|
|
|
}
|
|
|
|
|
2014-02-26 23:57:22 +00:00
|
|
|
/**
|
|
|
|
* @brief MasterPropertiesWidget::on_unlink_button_clicked
|
|
|
|
* move curent item in linked_list to free_list
|
|
|
|
*/
|
2014-02-22 17:24:20 +00:00
|
|
|
void MasterPropertiesWidget::on_unlink_button_clicked() {
|
|
|
|
//take the curent item from linked_list and push it to free_list
|
|
|
|
ui->free_list->addItem(
|
|
|
|
ui->linked_list->takeItem(
|
|
|
|
ui->linked_list->currentRow()));
|
|
|
|
}
|
2014-02-26 23:57:22 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief MasterPropertiesWidget::showElementFromLWI
|
|
|
|
* Show the element corresponding to the given QListWidgetItem
|
|
|
|
* @param lwi
|
|
|
|
*/
|
|
|
|
void MasterPropertiesWidget::showElementFromLWI(QListWidgetItem *lwi) {
|
|
|
|
foreach(Element *elmt, lwi_hash.values()) elmt->setHighlighted(false);
|
|
|
|
Element *elmt = lwi_hash[lwi];
|
|
|
|
elmt->diagram()->showMe();
|
|
|
|
elmt->setHighlighted(true);
|
|
|
|
}
|