1
/***************************************************************************
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
9
***************************************************************************/
11
/***************************************************************************
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. *
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. *
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 *
28
***************************************************************************/
29
#include "LayerDialog.h"
30
#include "ApplicationWindow.h"
36
#include <QPushButton>
39
#include <QFontDialog>
41
#include <QMessageBox>
43
LayerDialog::LayerDialog( QWidget* parent, const char* name, bool modal, Qt::WFlags fl )
44
: QDialog( parent, name, modal, fl )
47
setName("LayerDialog");
48
setWindowTitle(tr( "QtiPlot - Arrange Layers" ));
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);
57
fitBox = new QCheckBox(tr("Automatic &layout"));
58
fitBox->setChecked(false);
59
gl1->addWidget(fitBox, 1, 1);
60
gl1->setRowStretch(2, 1);
62
QGroupBox *gb2 = new QGroupBox(tr("Alignement"));
63
QGridLayout *gl2 = new QGridLayout(gb2);
64
gl2->addWidget(new QLabel(tr("Horizontal")), 0, 0);
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);
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);
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);
92
GroupCanvasSize = new QGroupBox(tr("&Layer Canvas Size"));
93
GroupCanvasSize->setCheckable(true);
94
GroupCanvasSize->setChecked(false);
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);
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);
149
QVBoxLayout *vbox1 = new QVBoxLayout();
150
vbox1->addWidget(GroupGrid);
151
vbox1->addWidget(GroupCanvasSize);
153
buttonApply = new QPushButton(tr( "&Apply" ));
154
buttonOk = new QPushButton(tr( "&OK" ));
155
buttonCancel = new QPushButton(tr( "&Cancel" ));
157
QHBoxLayout *hbox1 = new QHBoxLayout();
159
hbox1->addWidget(buttonApply);
160
hbox1->addWidget(buttonOk);
161
hbox1->addWidget(buttonCancel);
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);
170
QVBoxLayout *vbox2 = new QVBoxLayout(this);
171
vbox2->addLayout(gl6);
172
vbox2->addLayout(hbox1);
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) ) );
180
void LayerDialog::enableLayoutOptions(bool ok)
182
GroupGrid->setEnabled(!ok);
183
GroupCanvasSize->setEnabled(!ok);
186
void LayerDialog::setMultiLayer(MultiLayer *g)
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());
205
void LayerDialog::update()
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;
215
multi_layer->setLayersNumber(graphs);
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));
227
int cols=boxX->value();
228
int rows=boxY->value();
230
if (cols>graphs && !fitBox->isChecked())
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));
238
if (rows>graphs && !fitBox->isChecked())
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));
246
if (!fitBox->isChecked())
248
multi_layer->setCols(cols);
249
multi_layer->setRows(rows);
252
if (GroupCanvasSize->isChecked())
253
multi_layer->setLayerCanvasSize(boxCanvasWidth->value(), boxCanvasHeight->value());
255
multi_layer->setAlignement(alignHorBox->currentItem(), alignVertBox->currentItem());
257
multi_layer->setMargins(boxLeftSpace->value(), boxRightSpace->value(),
258
boxTopSpace->value(), boxBottomSpace->value());
260
multi_layer->setSpacing(boxRowsGap->value(), boxColsGap->value());
261
multi_layer->arrangeLayers(fitBox->isChecked(), GroupCanvasSize->isChecked());
263
if (!GroupCanvasSize->isChecked())
264
{//show new layer canvas size
265
boxCanvasWidth->setValue(multi_layer->layerCanvasSize().width());
266
boxCanvasHeight->setValue(multi_layer->layerCanvasSize().height());
269
if (fitBox->isChecked())
270
{//show new grid settings
271
boxX->setValue(multi_layer->getCols());
272
boxY->setValue(multi_layer->getRows());
276
void LayerDialog::accept()