1 /****************************************************************************
2 **
3 ** This file is part of the LibreCAD project, a 2D CAD program
4 **
5 ** Copyright (C) 2010 R. van Twisk (librecad@rvt.dds.nl)
6 ** Copyright (C) 2001-2003 RibbonSoft. All rights reserved.
7 **
8 **
9 ** This file may be distributed and/or modified under the terms of the
10 ** GNU General Public License version 2 as published by the Free Software
11 ** Foundation and appearing in the file gpl-2.0.txt included in the
12 ** packaging of this file.
13 **
14 ** This program is distributed in the hope that it will be useful,
15 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
16 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 ** GNU General Public License for more details.
18 **
19 ** You should have received a copy of the GNU General Public License
20 ** along with this program; if not, write to the Free Software
21 ** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
22 **
23 ** This copyright notice MUST APPEAR in all copies of the script!
24 **
25 **********************************************************************/
26 #include "qg_dlgoptionsvariables.h"
27 
28 /*#include <qvariant.h>
29 #include <qmessagebox.h>
30 #include "rs_units.h"*/
31 #include "rs_filterdxf.h"
32 
33 /*
34  *  Constructs a QG_DlgOptionsVariables as a child of 'parent', with the
35  *  name 'name' and widget flags set to 'f'.
36  *
37  *  The dialog will by default be modeless, unless you set 'modal' to
38  *  true to construct a modal dialog.
39  */
QG_DlgOptionsVariables(QWidget * parent,bool modal,Qt::WindowFlags fl)40 QG_DlgOptionsVariables::QG_DlgOptionsVariables(QWidget* parent, bool modal, Qt::WindowFlags fl)
41     : QDialog(parent, fl)
42 {
43     setModal(modal);
44     setupUi(this);
45 
46     init();
47 }
48 
49 /*
50  *  Destroys the object and frees any allocated resources
51  */
~QG_DlgOptionsVariables()52 QG_DlgOptionsVariables::~QG_DlgOptionsVariables()
53 {
54     // no need to delete child widgets, Qt does it all for us
55 }
56 
57 /*
58  *  Sets the strings of the subwidgets using the current
59  *  language.
60  */
languageChange()61 void QG_DlgOptionsVariables::languageChange()
62 {
63     retranslateUi(this);
64 }
65 
init()66 void QG_DlgOptionsVariables::init() {
67     graphic = NULL;
68 
69     // variables
70     tabVariables->verticalHeader()->hide();
71     tabVariables->verticalHeader()->setFixedWidth(0);
72     tabVariables->setColumnReadOnly(0, true);
73     tabVariables->setColumnReadOnly(1, true);
74     tabVariables->setColumnReadOnly(2, true);
75 }
76 
77 
78 /**
79  * Sets the graphic and updates the GUI to match the drawing.
80  */
setGraphic(RS_Graphic * g)81 void QG_DlgOptionsVariables::setGraphic(RS_Graphic* g) {
82     graphic = g;
83     updateVariables();
84 }
85 
86 
87 /**
88  * Updates the Variables tab from the graphic values.
89  */
updateVariables()90 void QG_DlgOptionsVariables::updateVariables() {
91     if (graphic==NULL) {
92         return;
93     }
94 
95     QVector<int> r(tabVariables->numRows());
96     for (int i=0; i<tabVariables->numRows(); ++i) {
97         r[i] = i;
98     }
99     tabVariables->removeRows(r);
100     QHash<QString, RS_Variable>vars = graphic->getVariableDict();
101     QHash<QString, RS_Variable>::iterator it = vars.begin();
102     while (it != vars.end()) {
103         tabVariables->insertRows(tabVariables->numRows(), 1);
104 
105         tabVariables->setText(tabVariables->numRows()-1, 0, it.key());
106         tabVariables->setText(tabVariables->numRows()-1, 1, QString("%1").arg(it.value().getCode()));
107         QString str = "";
108         switch (it.value().getType()) {
109             case RS2::VariableVoid:
110                 break;
111             case RS2::VariableInt:
112                 str = QString("%1").arg(it.value().getInt());
113                 break;
114             case RS2::VariableDouble:
115                 str = QString("%1").arg(it.value().getDouble());
116                 break;
117             case RS2::VariableString:
118                 str = QString("%1").arg(it.value().getString());
119                 break;
120             case RS2::VariableVector:
121                 str = QString("%1/%2")
122                       .arg(it.value().getVector().x)
123                       .arg(it.value().getVector().y);
124                 if (RS_FilterDXF::isVariableTwoDimensional(it.key())==false) {
125                     str+= QString("/%1").arg(it.value().getVector().z);
126                 }
127                 break;
128         }
129         tabVariables->setText(tabVariables->numRows()-1, 2, str);
130         ++it;
131     }
132 }
133