~showard314/ubuntu/natty/qtiplot/Python2.7_fix

« back to all changes in this revision

Viewing changes to qtiplot/src/LayerDialog.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Gudjon I. Gudjonsson
  • Date: 2007-03-25 12:06:27 UTC
  • Revision ID: james.westby@ubuntu.com-20070325120627-5pvdufddr7i0r74x
Tags: upstream-0.9~rc2
ImportĀ upstreamĀ versionĀ 0.9~rc2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/***************************************************************************
 
2
    File                 : LayerDialog.cpp
 
3
    Project              : QtiPlot
 
4
    --------------------------------------------------------------------
 
5
    Copyright            : (C) 2006 by Ion Vasilief, Tilman Hoener zu Siederdissen
 
6
    Email (use @ for *)  : ion_vasilief*yahoo.fr, thzs*gmx.net
 
7
    Description          : Arrange layers dialog
 
8
 
 
9
 ***************************************************************************/
 
10
 
 
11
/***************************************************************************
 
12
 *                                                                         *
 
13
 *  This program is free software; you can redistribute it and/or modify   *
 
14
 *  it under the terms of the GNU General Public License as published by   *
 
15
 *  the Free Software Foundation; either version 2 of the License, or      *
 
16
 *  (at your option) any later version.                                    *
 
17
 *                                                                         *
 
18
 *  This program is distributed in the hope that it will be useful,        *
 
19
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of         *
 
20
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          *
 
21
 *  GNU General Public License for more details.                           *
 
22
 *                                                                         *
 
23
 *   You should have received a copy of the GNU General Public License     *
 
24
 *   along with this program; if not, write to the Free Software           *
 
25
 *   Foundation, Inc., 51 Franklin Street, Fifth Floor,                    *
 
26
 *   Boston, MA  02110-1301  USA                                           *
 
27
 *                                                                         *
 
28
 ***************************************************************************/
 
29
#include "LayerDialog.h"
 
30
#include "ApplicationWindow.h"
 
31
 
 
32
#include <QLayout>
 
33
#include <QSpinBox>
 
34
#include <QCheckBox>
 
35
#include <QGroupBox>
 
36
#include <QPushButton>
 
37
#include <QLabel>
 
38
#include <QComboBox>
 
39
#include <QFontDialog>
 
40
#include <QFont>
 
41
#include <QMessageBox>
 
42
 
 
43
LayerDialog::LayerDialog( QWidget* parent, const char* name, bool modal, Qt::WFlags fl )
 
44
: QDialog( parent, name, modal, fl )
 
45
{
 
46
        if ( !name )
 
47
                setName("LayerDialog");
 
48
        setWindowTitle(tr( "QtiPlot - Arrange Layers" ));
 
49
 
 
50
    QGroupBox *gb1 = new QGroupBox(tr("Layers"));
 
51
        QGridLayout *gl1 = new QGridLayout(gb1);
 
52
        gl1->addWidget(new QLabel(tr("Number")), 0, 0);
 
53
        layersBox = new QSpinBox();
 
54
        layersBox->setRange(0, 100);
 
55
        gl1->addWidget(layersBox, 0, 1);
 
56
 
 
57
        fitBox = new QCheckBox(tr("Automatic &layout"));
 
58
        fitBox->setChecked(false);
 
59
        gl1->addWidget(fitBox, 1, 1);
 
60
        gl1->setRowStretch(2, 1);
 
61
 
 
62
    QGroupBox *gb2 = new QGroupBox(tr("Alignement"));
 
63
        QGridLayout *gl2 = new QGridLayout(gb2);
 
64
        gl2->addWidget(new QLabel(tr("Horizontal")), 0, 0);
 
65
 
 
66
        alignHorBox = new QComboBox( false );
 
67
        alignHorBox->insertItem( tr( "Center" ) );
 
68
        alignHorBox->insertItem( tr( "Left" ) );
 
69
        alignHorBox->insertItem( tr( "Right" ) );
 
70
        gl2->addWidget(alignHorBox, 0, 1);
 
71
 
 
72
        gl2->addWidget(new QLabel( tr( "Vertical" )), 1, 0 );
 
73
        alignVertBox = new QComboBox( false );
 
74
        alignVertBox->insertItem( tr( "Center" ) );
 
75
        alignVertBox->insertItem( tr( "Top" ) );
 
76
        alignVertBox->insertItem( tr( "Bottom" ) );
 
77
        gl2->addWidget(alignVertBox, 1, 1);
 
78
        gl2->setRowStretch(2, 1);
 
79
 
 
80
    GroupGrid = new QGroupBox(tr("Grid"));
 
81
        QGridLayout *gl3 = new QGridLayout(GroupGrid);
 
82
        gl3->addWidget(new QLabel(tr("Columns")), 0, 0);
 
83
        boxX = new QSpinBox();
 
84
        boxX->setRange(1, 100);
 
85
        gl3->addWidget(boxX, 0, 1);
 
86
        gl3->addWidget(new QLabel( tr( "Rows" )), 1, 0);
 
87
        boxY = new QSpinBox();
 
88
        boxY->setRange(1, 100);
 
89
        gl3->addWidget(boxY, 1, 1);
 
90
 
 
91
 
 
92
        GroupCanvasSize = new QGroupBox(tr("&Layer Canvas Size"));
 
93
        GroupCanvasSize->setCheckable(true);
 
94
        GroupCanvasSize->setChecked(false);
 
95
 
 
96
        QGridLayout *gl5 = new QGridLayout(GroupCanvasSize);
 
97
        gl5->addWidget(new QLabel(tr("Width")), 0, 0);
 
98
        boxCanvasWidth = new QSpinBox();
 
99
        boxCanvasWidth->setRange(0, 10000);
 
100
        boxCanvasWidth->setSingleStep(50);
 
101
        boxCanvasWidth->setSuffix(tr(" pixels"));
 
102
        gl5->addWidget(boxCanvasWidth, 0, 1);
 
103
        gl5->addWidget(new QLabel( tr( "Height" )), 1, 0);
 
104
        boxCanvasHeight = new QSpinBox();
 
105
        boxCanvasHeight->setRange(0, 10000);
 
106
        boxCanvasHeight->setSingleStep(50);
 
107
        boxCanvasHeight->setSuffix(tr(" pixels"));
 
108
        gl5->addWidget(boxCanvasHeight, 1, 1);
 
109
 
 
110
    QGroupBox *gb4 = new QGroupBox(tr("Spacing"));
 
111
        QGridLayout *gl4 = new QGridLayout(gb4);
 
112
        gl4->addWidget(new QLabel(tr("Columns gap")), 0, 0);
 
113
        boxColsGap = new QSpinBox();
 
114
        boxColsGap->setRange(0, 1000);
 
115
        boxColsGap->setSingleStep(5);
 
116
        boxColsGap->setSuffix(tr(" pixels"));
 
117
        gl4->addWidget(boxColsGap, 0, 1);
 
118
        gl4->addWidget(new QLabel( tr( "Rows gap" )), 1, 0);
 
119
        boxRowsGap = new QSpinBox();
 
120
        boxRowsGap->setRange(0, 1000);
 
121
        boxRowsGap->setSingleStep(5);
 
122
        boxRowsGap->setSuffix(tr(" pixels"));
 
123
        gl4->addWidget(boxRowsGap, 1, 1);
 
124
        gl4->addWidget(new QLabel( tr( "Left margin" )), 2, 0);
 
125
        boxLeftSpace = new QSpinBox();
 
126
        boxLeftSpace->setRange(0, 1000);
 
127
        boxLeftSpace->setSingleStep(5);
 
128
        boxLeftSpace->setSuffix(tr(" pixels"));
 
129
        gl4->addWidget(boxLeftSpace, 2, 1);
 
130
        gl4->addWidget(new QLabel( tr( "Right margin" )), 3, 0);
 
131
        boxRightSpace = new QSpinBox();
 
132
        boxRightSpace->setRange(0, 1000);
 
133
        boxRightSpace->setSingleStep(5);
 
134
        boxRightSpace->setSuffix(tr(" pixels"));
 
135
        gl4->addWidget(boxRightSpace, 3, 1);
 
136
        gl4->addWidget(new QLabel( tr( "Top margin" )), 4, 0);
 
137
        boxTopSpace = new QSpinBox();
 
138
        boxTopSpace->setRange(0, 1000);
 
139
        boxTopSpace->setSingleStep(5);
 
140
        boxTopSpace->setSuffix(tr(" pixels"));
 
141
        gl4->addWidget(boxTopSpace, 4, 1);
 
142
        gl4->addWidget(new QLabel( tr( "Bottom margin") ), 5, 0);
 
143
        boxBottomSpace = new QSpinBox();
 
144
        boxBottomSpace->setRange(0, 1000);
 
145
        boxBottomSpace->setSingleStep(5);
 
146
        boxBottomSpace->setSuffix(tr(" pixels"));
 
147
        gl4->addWidget(boxBottomSpace, 5, 1);
 
148
 
 
149
        QVBoxLayout *vbox1 = new QVBoxLayout();
 
150
        vbox1->addWidget(GroupGrid);
 
151
        vbox1->addWidget(GroupCanvasSize);
 
152
 
 
153
        buttonApply = new QPushButton(tr( "&Apply" ));
 
154
        buttonOk = new QPushButton(tr( "&OK" ));
 
155
        buttonCancel = new QPushButton(tr( "&Cancel" ));
 
156
 
 
157
        QHBoxLayout *hbox1 = new QHBoxLayout();
 
158
    hbox1->addStretch();
 
159
        hbox1->addWidget(buttonApply);
 
160
        hbox1->addWidget(buttonOk);
 
161
        hbox1->addWidget(buttonCancel);
 
162
 
 
163
        QGridLayout *gl6 = new QGridLayout();
 
164
        gl6->addWidget(gb1, 0, 0);
 
165
        gl6->addWidget(gb2, 0, 1);
 
166
        gl6->addLayout(vbox1, 1, 0);
 
167
        gl6->addWidget(gb4, 1, 1);
 
168
        gl6->setRowStretch(2, 1);
 
169
 
 
170
        QVBoxLayout *vbox2 = new QVBoxLayout(this);
 
171
        vbox2->addLayout(gl6);
 
172
        vbox2->addLayout(hbox1);
 
173
 
 
174
        connect( buttonOk, SIGNAL( clicked() ), this, SLOT( accept() ) );
 
175
        connect( buttonApply, SIGNAL( clicked() ), this, SLOT(update() ) );
 
176
        connect( buttonCancel, SIGNAL( clicked() ), this, SLOT( reject() ) );
 
177
        connect( fitBox, SIGNAL( toggled(bool) ), this, SLOT(enableLayoutOptions(bool) ) );
 
178
}
 
179
 
 
180
void LayerDialog::enableLayoutOptions(bool ok)
 
181
{
 
182
        GroupGrid->setEnabled(!ok);
 
183
        GroupCanvasSize->setEnabled(!ok);
 
184
}
 
185
 
 
186
void LayerDialog::setMultiLayer(MultiLayer *g)
 
187
{
 
188
        multi_layer = g;
 
189
 
 
190
        layersBox->setValue(g->layers());
 
191
        boxX->setValue(g->getCols());
 
192
        boxY->setValue(g->getRows());
 
193
        boxColsGap->setValue(g->colsSpacing());
 
194
        boxRowsGap->setValue(g->rowsSpacing());
 
195
        boxLeftSpace->setValue(g->leftMargin());
 
196
        boxRightSpace->setValue(g->rightMargin());
 
197
        boxTopSpace->setValue(g->topMargin());
 
198
        boxBottomSpace->setValue(g->bottomMargin());
 
199
        boxCanvasWidth->setValue(g->layerCanvasSize().width());
 
200
        boxCanvasHeight->setValue(g->layerCanvasSize().height());
 
201
        alignHorBox->setCurrentItem(g->horizontalAlignement());
 
202
        alignVertBox->setCurrentItem(g->verticalAlignement());
 
203
}
 
204
 
 
205
void LayerDialog::update()
 
206
{
 
207
        int graphs = layersBox->value();
 
208
                int old_graphs = multi_layer->layers();
 
209
                int dn = multi_layer->layers() - graphs;
 
210
                if (dn > 0 && QMessageBox::question(0, tr("QtiPlot - Delete Layers?"),
 
211
                                        tr("You are about to delete %1 existing layers.").arg(dn)+"\n"+
 
212
                                        tr("Are you sure you want to continue this operation?"),
 
213
                                        tr("&Continue"), tr("&Cancel"), QString(), 0, 1 )) return;
 
214
 
 
215
                multi_layer->setLayersNumber(graphs);
 
216
 
 
217
                if (!graphs)
 
218
                        return;
 
219
 
 
220
                if (dn < 0)
 
221
                {// Customize new layers with user default settings
 
222
                        ApplicationWindow *app = (ApplicationWindow *)this->parent();
 
223
                        for (int i = old_graphs+1; i <= graphs; i++)
 
224
                                app->customGraph(multi_layer->layer(i));
 
225
                }
 
226
 
 
227
                int cols=boxX->value();
 
228
                int rows=boxY->value();
 
229
 
 
230
                if (cols>graphs && !fitBox->isChecked())
 
231
                {
 
232
                        QMessageBox::about(0,tr("QtiPlot - Columns input error"),
 
233
                                        tr("The number of columns you've entered is greater than the number of graphs (%1)!").arg(graphs));
 
234
                        boxX->setFocus();
 
235
                        return;
 
236
                }
 
237
 
 
238
                if (rows>graphs && !fitBox->isChecked())
 
239
                {
 
240
                        QMessageBox::about(0,tr("QtiPlot - Rows input error"),
 
241
                                        tr("The number of rows you've entered is greater than the number of graphs (%1)!").arg(graphs));
 
242
                        boxY->setFocus();
 
243
                        return;
 
244
                }
 
245
 
 
246
                if (!fitBox->isChecked())
 
247
                {
 
248
                        multi_layer->setCols(cols);
 
249
                        multi_layer->setRows(rows);
 
250
                }
 
251
 
 
252
                if (GroupCanvasSize->isChecked())
 
253
                        multi_layer->setLayerCanvasSize(boxCanvasWidth->value(), boxCanvasHeight->value());
 
254
 
 
255
                multi_layer->setAlignement(alignHorBox->currentItem(), alignVertBox->currentItem());
 
256
 
 
257
                multi_layer->setMargins(boxLeftSpace->value(), boxRightSpace->value(),
 
258
                                boxTopSpace->value(), boxBottomSpace->value());
 
259
 
 
260
                multi_layer->setSpacing(boxRowsGap->value(), boxColsGap->value());
 
261
                multi_layer->arrangeLayers(fitBox->isChecked(), GroupCanvasSize->isChecked());
 
262
 
 
263
                if (!GroupCanvasSize->isChecked())
 
264
                {//show new layer canvas size
 
265
                        boxCanvasWidth->setValue(multi_layer->layerCanvasSize().width());
 
266
                        boxCanvasHeight->setValue(multi_layer->layerCanvasSize().height());
 
267
                }
 
268
 
 
269
                if (fitBox->isChecked())
 
270
                {//show new grid settings
 
271
                        boxX->setValue(multi_layer->getCols());
 
272
                        boxY->setValue(multi_layer->getRows());
 
273
                }
 
274
}
 
275
 
 
276
void LayerDialog::accept()
 
277
{
 
278
        update();
 
279
        close();
 
280
}
 
281