[qet] [2720] folio report: improve GUI and add unlinkcommand

[ Thread Index | Date Index | More lists.tuxfamily.org/qet Archives ]


Revision: 2720
Author:   blacksun
Date:     2014-01-08 20:27:38 +0100 (Wed, 08 Jan 2014)
Log Message:
-----------
folio report: improve GUI and add unlinkcommand

Modified Paths:
--------------
    trunk/sources/diagramcommands.cpp
    trunk/sources/diagramcommands.h
    trunk/sources/ui/folioreportproperties.cpp
    trunk/sources/ui/folioreportproperties.h
    trunk/sources/ui/folioreportproperties.ui

Modified: trunk/sources/diagramcommands.cpp
===================================================================
--- trunk/sources/diagramcommands.cpp	2014-01-08 16:56:29 UTC (rev 2719)
+++ trunk/sources/diagramcommands.cpp	2014-01-08 19:27:38 UTC (rev 2720)
@@ -1143,12 +1143,16 @@
 	QUndoCommand(parent),
 	diagram_(elmt1->diagram()),
 	elmt_1(elmt1),
-	elmt_2(elmt2)
+	elmt_2(elmt2),
+	previous_report(0)
 {
 	if (elmt1->linkType() & Element::AllReport &&
-		elmt2->linkType() & Element::AllReport)
+		elmt2->linkType() & Element::AllReport) {
 		setText(QObject::tr("Lier deux reports de folio",
 							"title for undo LinkElementsCommand if two elements are folio report"));
+		if(!elmt1->isFree())
+			previous_report = elmt1->linkedElements().first();
+	}
 	else setText(QObject::tr("Lier deux éléments"));
 }
 
@@ -1165,6 +1169,8 @@
 void LinkElementsCommand::undo() {
 	diagram_->showMe();
 	elmt_1->unlinkElement(elmt_2);
+	if (previous_report)
+		elmt_1->linkToElement(previous_report);
 }
 
 /**
@@ -1175,3 +1181,44 @@
 	diagram_->showMe();
 	elmt_1->linkToElement(elmt_2);
 }
+
+/**
+ * @brief unlinkElementsCommand::unlinkElementsCommand
+ * Constructor, unlink elmt2 or all elements if elmt2 isn't specified
+ * @param elmt1 element to set undo command
+ * @param elmt2 element to be unlinked
+ * @param parent undo parent
+ */
+unlinkElementsCommand::unlinkElementsCommand(Element *elmt1, Element *elmt2, QUndoCommand *parent):
+	QUndoCommand(parent),
+	diagram_(elmt1->diagram()),
+	element_(elmt1)
+{
+	if (elmt2) elmt_list << elmt2;
+	else elmt_list << elmt1->linkedElements();
+	setText(QObject::tr("D\351lier %n \351l\351ment(s)", "", elmt_list.size()));
+}
+
+/**
+ * @brief unlinkElementsCommand::~unlinkElementsCommand
+ * destructor
+ */
+unlinkElementsCommand::~unlinkElementsCommand(){}
+
+/**
+ * @brief unlinkElementsCommand::undo
+ *undo command
+ */
+void unlinkElementsCommand::undo() {
+	foreach (Element *elmt, elmt_list)
+		element_->linkToElement(elmt);
+}
+
+/**
+ * @brief unlinkElementsCommand::redo
+ *redo command
+ */
+void unlinkElementsCommand::redo() {
+	foreach (Element *elmt, elmt_list)
+		element_->unlinkElement(elmt);
+}

Modified: trunk/sources/diagramcommands.h
===================================================================
--- trunk/sources/diagramcommands.h	2014-01-08 16:56:29 UTC (rev 2719)
+++ trunk/sources/diagramcommands.h	2014-01-08 19:27:38 UTC (rev 2720)
@@ -598,8 +598,24 @@
 
 	private:
 	//attributes
-	Diagram*diagram_;
-	Element *elmt_1, *elmt_2;
+	Diagram *diagram_;
+	Element *elmt_1, *elmt_2, *previous_report;
 };
 
+class unlinkElementsCommand : public QUndoCommand {
+	public:
+	//constructor destructor
+	unlinkElementsCommand (Element *elmt1, Element *elmt2 = 0, QUndoCommand *parent = 0);
+	virtual ~unlinkElementsCommand();
+	//methods
+	virtual void undo();
+	virtual void redo();
+
+	private:
+	//attributes
+	Diagram *diagram_;
+	Element *element_;
+	QList <Element *> elmt_list;
+};
+
 #endif

Modified: trunk/sources/ui/folioreportproperties.cpp
===================================================================
--- trunk/sources/ui/folioreportproperties.cpp	2014-01-08 16:56:29 UTC (rev 2719)
+++ trunk/sources/ui/folioreportproperties.cpp	2014-01-08 19:27:38 UTC (rev 2720)
@@ -5,6 +5,7 @@
 #include <elementprovider.h>
 #include <qetgraphicsitem/elementtextitem.h>
 #include <diagramcommands.h>
+#include "qeticons.h"
 
 /**
  * @brief FolioReportProperties::FolioReportProperties : Construcor
@@ -18,11 +19,9 @@
 	ui(new Ui::FolioReportProperties)
 {
 	ui->setupUi(this);
-
-	sm_ = new QSignalMapper(this);
-	connect(sm_, SIGNAL(mapped(int)) , this, SLOT(linkToElement(int)));
-
-	BuildRadioList();
+	unlink = false;
+	if(element_->isFree()) buildRadioList();
+	else buildUnlinkButton();
 }
 
 /**
@@ -36,7 +35,12 @@
 /**
  * @brief FolioReportProperties::BuildRadioList : build the radio list for each available folio report
  */
-void FolioReportProperties::BuildRadioList() {
+void FolioReportProperties::buildRadioList() {
+	sm_ = new QSignalMapper(this);
+	connect(sm_, SIGNAL(mapped(int)), this, SLOT(linkToElement(int)));
+	sm_show_ = new QSignalMapper(this);
+	connect(sm_show_, SIGNAL(mapped(int)), this, SLOT(showDiagram(int)));
+
 	//Research the invert report of @element_
 	int rep = element_->linkType() == Element::NextReport? Element::PreviousReport : Element::NextReport;
 	ElementProvider ep(element_->diagram()->project(), element_->diagram());
@@ -53,23 +57,71 @@
 																		  .arg(elmt->diagram() -> convertPosition(elmt -> scenePos()).toString());
 
 			//button himself
+			QHBoxLayout *hl = new QHBoxLayout(this);
 			QRadioButton *rb = new QRadioButton(button_text , this);
-			ui->available_report_layout->addWidget(rb);
+			QPushButton *pb = new QPushButton(QET::Icons::ZoomDraw,"",this);
+			hl->addWidget(rb);
+			hl->addStretch();
+			hl->addWidget(pb);
+			ui->available_report_layout->addLayout(hl);
 			element_list << elmt;
 			//map the radio button signal
 			connect(rb, SIGNAL(clicked()), sm_, SLOT(map()));
 			sm_ -> setMapping(rb, element_list.size()-1);
+			//map the push button show diagram
+			connect(pb, SIGNAL(clicked()), sm_show_, SLOT(map()));
+			sm_show_->setMapping(pb, element_list.size()-1);
 		}
 	}
 	ui->available_report_layout->addStretch();
 }
 
 /**
+ * @brief FolioReportProperties::buildUnlinkButton
+ *build button for ask user if want to unlink this element
+ */
+void FolioReportProperties::buildUnlinkButton() {
+	unlink_widget = new QWidget(this);
+	QHBoxLayout *unlink_layout = new QHBoxLayout(unlink_widget);
+	QLabel *lb = new QLabel(tr("Ce report est d\351j\340 lier."), 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->v_main_layout->insertWidget(0, unlink_widget);
+}
+
+/**
  * @brief FolioReportProperties::Apply
  * Apply the new properties for this folio report
  */
 void FolioReportProperties::Apply() {
-	if (element_to_link) {
+	if (unlink && !element_to_link)
+		element_->diagram()->undoStack().push(new unlinkElementsCommand(element_));
+	else if (element_to_link)
 		element_->diagram()->undoStack().push(new LinkElementsCommand(element_, element_to_link));
-	}
 }
+
+/**
+ * @brief FolioReportProperties::unlinkClicked
+ *this slot remove unlink_layout and call buildRadioList
+ */
+void FolioReportProperties::unlinkClicked() {
+	ui->v_main_layout->removeWidget(unlink_widget);
+	delete unlink_widget;
+	unlink = true;
+	buildRadioList();
+}
+
+/**
+ * @brief FolioReportProperties::showDiagram
+ * Show the wanted report element
+ * @param i position of wanted element in element_list
+ */
+void FolioReportProperties::showDiagram(const int i) {
+	Element *elmt = element_list.at(i);
+	elmt->diagram()->showMe();
+	foreach (QGraphicsItem *qgi, elmt->diagram()->selectedItems()) qgi->setSelected(false);
+	elmt->setSelected(true);
+}

Modified: trunk/sources/ui/folioreportproperties.h
===================================================================
--- trunk/sources/ui/folioreportproperties.h	2014-01-08 16:56:29 UTC (rev 2719)
+++ trunk/sources/ui/folioreportproperties.h	2014-01-08 19:27:38 UTC (rev 2720)
@@ -15,19 +15,22 @@
 	public:
 	explicit FolioReportProperties(Element *elmt, QWidget *parent = 0);
 	~FolioReportProperties();
-	void BuildRadioList();
+	void buildRadioList();
+	void buildUnlinkButton();
 	void Apply();
 
 	private slots:
 	void linkToElement(const int i) {element_to_link = element_list.at(i);}
+	void unlinkClicked();
+	void showDiagram(const int i);
 
 	private:
 	Element *element_, *element_to_link;
 	QList <Element *> element_list;
 	Ui::FolioReportProperties *ui;
-	QSignalMapper *sm_;
-
-
+	QSignalMapper *sm_, *sm_show_;
+	QWidget *unlink_widget;
+	bool unlink;
 };
 
 #endif // FOLIOREPORTPROPERTIES_H

Modified: trunk/sources/ui/folioreportproperties.ui
===================================================================
--- trunk/sources/ui/folioreportproperties.ui	2014-01-08 16:56:29 UTC (rev 2719)
+++ trunk/sources/ui/folioreportproperties.ui	2014-01-08 19:27:38 UTC (rev 2720)
@@ -14,8 +14,11 @@
    <string>Form</string>
   </property>
   <layout class="QHBoxLayout" name="horizontalLayout">
+   <property name="margin">
+    <number>9</number>
+   </property>
    <item>
-    <layout class="QHBoxLayout" name="main_H_layout">
+    <layout class="QVBoxLayout" name="v_main_layout">
      <item>
       <widget class="QGroupBox" name="Report_gb">
        <property name="toolTip">
@@ -61,6 +64,9 @@
             <property name="sizeConstraint">
              <enum>QLayout::SetMinimumSize</enum>
             </property>
+            <property name="margin">
+             <number>0</number>
+            </property>
            </layout>
           </widget>
          </widget>


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/