kiviooptionsdialog.cpp
1/* This file is part of the KDE project
2 Copyright (C) 2003 Peter Simonsson <psn@linux.se>
3
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public
6 License as published by the Free Software Foundation; either
7 version 2 of the License, or (at your option) any later version.
8
9 This library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Library General Public License for more details.
13
14 You should have received a copy of the GNU Library General Public License
15 along with this library; see the file COPYING.LIB. If not, write to
16 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 Boston, MA 02110-1301, USA.
18*/
19
20#include "kiviooptionsdialog.h"
21#include "kivio_view.h"
22#include "kivio_doc.h"
23#include "kivio_page.h"
24#include "kivioglobal.h"
25#include "kivio_grid_data.h"
26#include "kivio_canvas.h"
27#include "kivio_settings.h"
28#include "kivio_config.h"
29
30#include <tdelocale.h>
31#include <KoApplication.h>
32#include <kiconloader.h>
33#include <kpushbutton.h>
34#include <KoPageLayoutDia.h>
35#include <kurlrequester.h>
36#include <kcolorbutton.h>
37#include <KoUnitWidgets.h>
38#include <tdeglobal.h>
39#include <kdebug.h>
40#include <tdefontdialog.h>
41
42#include <tqlabel.h>
43#include <tqbuttongroup.h>
44#include <tqgroupbox.h>
45#include <tqcombobox.h>
46#include <tqcheckbox.h>
47#include <tqradiobutton.h>
48#include <tqlayout.h>
49#include <tqtabwidget.h>
50
51// GuidesListViewItem::GuidesListViewItem(TQListView* parent, KivioGuideLineData *gd, KoUnit::Unit u)
52// : TDEListViewItem(parent), m_data(gd)
53// {
54// setPixmap(0, BarIcon(m_data->orientation() == TQt::Vertical ?
55// "guides_vertical":"guides_horizontal"));
56// TQString s = TDEGlobal::_locale->formatNumber(KoUnit::toUserValue(m_data->position(), u), 2);
57// s += " " + KoUnit::unitName(u);
58// setText(1, s);
59// }
60//
61// GuidesListViewItem::~GuidesListViewItem()
62// {
63// delete m_data;
64// }
65//
66// void GuidesListViewItem::setUnit(KoUnit::Unit u)
67// {
68// TQString s = TDEGlobal::_locale->formatNumber(KoUnit::toUserValue(m_data->position(), u), 2);
69// s += " " + KoUnit::unitName(u);
70// setText(1, s);
71// }
72//
73// void GuidesListViewItem::setPosition(double p, KoUnit::Unit u)
74// {
75// m_data->setPosition(KoUnit::fromUserValue(p, u));
76// TQString s = TDEGlobal::_locale->formatNumber(p, 2);
77// s += " " + KoUnit::unitName(u);
78// setText(1, s);
79// }
80//
81// void GuidesListViewItem::setOrientation(TQt::Orientation o)
82// {
83// m_data->setOrientation(o);
84// setPixmap(0, BarIcon(m_data->orientation() == TQt::Vertical ?
85// "guides_vertical":"guides_horizontal"));
86// }
87
88/*****************************************************************************/
89
90KivioOptionsDialog::KivioOptionsDialog(KivioView* parent, const char* name)
91 : KDialogBase(IconList, i18n("Settings"), Ok|Cancel|Apply|Default, Ok, parent, name)
92{
93 initPage();
94 initGrid();
95 unitChanged(parent->doc()->unit());
96}
97
98void KivioOptionsDialog::initPage()
99{
100 TQFrame* page = addPage(i18n("Page"), i18n("Page Settings"),
101 kapp->iconLoader()->loadIcon("application-x-zerosize", TDEIcon::Toolbar, 32));
102 m_pageIndex = pageIndex(page);
103
104 KivioView* view = static_cast<KivioView*>(parent());
105 KoUnit::Unit unit = KoUnit::unit(Kivio::Config::unit());
107 m_font = Kivio::Config::font();
108
109 TQLabel* unitLbl = new TQLabel(i18n("Default &units:"), page);
110 m_unitCombo = new TQComboBox(page);
111 m_unitCombo->insertStringList(KoUnit::listOfUnitName());
112 m_unitCombo->setCurrentItem(unit);
113 unitLbl->setBuddy(m_unitCombo);
114 TQLabel* layoutLbl = new TQLabel(i18n("Default layout:"), page);
115 m_layoutTxtLbl = new TQLabel(page);
116 m_layoutTxtLbl->setFrameStyle(TQFrame::LineEditPanel | TQFrame::Sunken);
117 m_layoutTxtLbl->setSizePolicy(TQSizePolicy(
118 TQSizePolicy::Minimum, TQSizePolicy::Fixed));
119 setLayoutText(m_layout);
120 KPushButton* layoutBtn = new KPushButton(i18n("Change..."), page);
121 layoutBtn->setSizePolicy(TQSizePolicy(
122 TQSizePolicy::Fixed, TQSizePolicy::Fixed));
123 TQLabel* fontLbl = new TQLabel(i18n("Default font:"), page);
124 m_fontTxtLbl = new TQLabel(page);
125 m_fontTxtLbl->setFrameStyle(TQFrame::LineEditPanel | TQFrame::Sunken);
126 m_fontTxtLbl->setSizePolicy(TQSizePolicy(
127 TQSizePolicy::Minimum, TQSizePolicy::Fixed));
128 setFontText(m_font);
129 KPushButton* fontBtn = new KPushButton(i18n("Change..."), page);
130 layoutBtn->setSizePolicy(TQSizePolicy(
131 TQSizePolicy::Fixed, TQSizePolicy::Fixed));
132 m_marginsChBox = new TQCheckBox(i18n("Show page &margins"), page);
133 m_marginsChBox->setChecked(view->isShowPageMargins());
134 m_rulersChBox = new TQCheckBox(i18n("Show page &rulers"), page);
135 m_rulersChBox->setChecked(view->isShowRulers());
136
137 TQGridLayout* gl = new TQGridLayout(page);
138 gl->setSpacing(KDialog::spacingHint());
139 gl->addWidget(unitLbl, 0, 0);
140 gl->addMultiCellWidget(m_unitCombo, 0, 0, 1, 2);
141 gl->addWidget(layoutLbl, 1, 0);
142 gl->addWidget(m_layoutTxtLbl, 1, 1);
143 gl->addWidget(layoutBtn, 1, 2);
144 gl->addWidget(fontLbl, 2, 0);
145 gl->addWidget(m_fontTxtLbl, 2, 1);
146 gl->addWidget(fontBtn, 2, 2);
147 gl->addMultiCellWidget(m_marginsChBox, 3, 3, 0, 2);
148 gl->addMultiCellWidget(m_rulersChBox, 4, 4, 0, 2);
149 gl->addMultiCell(new TQSpacerItem(0, 0), 5, 5, 0, 2);
150
151 connect(layoutBtn, TQ_SIGNAL(clicked()), TQ_SLOT(pageLayoutDlg()));
152 connect(fontBtn, TQ_SIGNAL(clicked()), TQ_SLOT(fontDlg()));
153 connect(m_unitCombo, TQ_SIGNAL(activated(int)), TQ_SLOT(unitChanged(int)));
154}
155
156void KivioOptionsDialog::initGrid()
157{
158 TQFrame* page = addPage(i18n("Grid"), i18n("Grid Settings"), BarIcon( "grid", TDEIcon::SizeMedium ));
159 m_gridIndex = pageIndex(page);
160
161 KoUnit::Unit unit = static_cast<KivioView*>(parent())->doc()->unit();
162 KivioGridData d = static_cast<KivioView*>(parent())->doc()->grid();
163 double pgw = m_layout.ptWidth;
164 double pgh = m_layout.ptHeight;
165 double fw = Kivio::Config::gridXSpacing();
166 double fh = Kivio::Config::gridYSpacing();
167 double sw = Kivio::Config::gridXSnap();
168 double sh = Kivio::Config::gridYSnap();
169
170 m_gridChBox = new TQCheckBox(i18n("Show &grid"), page);
171 m_gridChBox->setChecked(Kivio::Config::showGrid());
172 m_snapChBox = new TQCheckBox(i18n("Snap to g&rid"), page);
173 m_snapChBox->setChecked(Kivio::Config::snapGrid());
174 TQLabel* gridColorLbl = new TQLabel(i18n("Grid &color:"), page);
175 m_gridColorBtn = new KColorButton(Kivio::Config::gridColor(), page);
176 gridColorLbl->setBuddy(m_gridColorBtn);
177 TQGroupBox* spacingGrp = new TQGroupBox(2, TQt::Horizontal, i18n("Spacing"), page);
178 TQLabel* spaceHorizLbl = new TQLabel(i18n("&Horizontal:"), spacingGrp);
179 m_spaceHorizUSpin = new KoUnitDoubleSpinBox(spacingGrp, 0.0, pgw, 0.1,
180 fw, unit);
181 spaceHorizLbl->setBuddy(m_spaceHorizUSpin);
182 TQLabel* spaceVertLbl = new TQLabel(i18n("&Vertical:"), spacingGrp);
183 m_spaceVertUSpin = new KoUnitDoubleSpinBox(spacingGrp, 0.0, pgh, 0.1,
184 fh, unit);
185 spaceVertLbl->setBuddy(m_spaceVertUSpin);
186 TQGroupBox* snapGrp = new TQGroupBox(2, TQt::Horizontal, i18n("Snap Distance"), page);
187 TQLabel* snapHorizLbl = new TQLabel(i18n("H&orizontal:"), snapGrp);
188 m_snapHorizUSpin = new KoUnitDoubleSpinBox(snapGrp, 0.0, fw, 0.1,
189 sw, unit);
190 snapHorizLbl->setBuddy(m_snapHorizUSpin);
191 TQLabel* snapVertLbl = new TQLabel(i18n("V&ertical:"), snapGrp);
192 m_snapVertUSpin = new KoUnitDoubleSpinBox(snapGrp, 0.0, fh, 0.1,
193 sh, unit);
194 snapVertLbl->setBuddy(m_snapVertUSpin);
195
196 TQGridLayout* gl = new TQGridLayout(page);
197 gl->setSpacing(KDialog::spacingHint());
198 gl->addMultiCellWidget(m_gridChBox, 0, 0, 0, 2);
199 gl->addMultiCellWidget(m_snapChBox, 1, 1, 0, 2);
200 gl->addWidget(gridColorLbl, 2, 0);
201 gl->addWidget(m_gridColorBtn, 2, 1);
202 gl->addItem(new TQSpacerItem(0, 0), 2, 2);
203 gl->addMultiCellWidget(spacingGrp, 3, 3, 0, 2);
204 gl->addMultiCellWidget(snapGrp, 4, 4, 0, 2);
205 gl->addMultiCell(new TQSpacerItem(0, 0), 5, 5, 0, 2);
206
207 connect(m_spaceHorizUSpin, TQ_SIGNAL(valueChanged(double)), TQ_SLOT(setMaxHorizSnap(double)));
208 connect(m_spaceVertUSpin, TQ_SIGNAL(valueChanged(double)), TQ_SLOT(setMaxVertSnap(double)));
209}
210
211void KivioOptionsDialog::applyPage()
212{
213 KivioView* view = static_cast<KivioView*>(parent());
214 view->doc()->setUnit(static_cast<KoUnit::Unit>(m_unitCombo->currentItem()));
215 Kivio::Config::setUnit(KoUnit::unitName(view->doc()->unit()));
217 Kivio::Config::setFont(m_font);
218 view->doc()->setDefaultFont(m_font);
219 view->togglePageMargins(m_marginsChBox->isChecked());
220 view->toggleShowRulers(m_rulersChBox->isChecked());
221}
222
223void KivioOptionsDialog::applyGrid()
224{
225 KivioGridData d;
226 Kivio::Config::setGridXSpacing(m_spaceHorizUSpin->value());
227 Kivio::Config::setGridYSpacing(m_spaceVertUSpin->value());
228 Kivio::Config::setGridXSnap(m_snapHorizUSpin->value());
229 Kivio::Config::setGridYSnap(m_snapVertUSpin->value());
230 Kivio::Config::setShowGrid(m_gridChBox->isChecked());
231 Kivio::Config::setSnapGrid(m_snapChBox->isChecked());
232 Kivio::Config::setGridColor(m_gridColorBtn->color());
233 KivioView* view = static_cast<KivioView*>(parent());
234 view->doc()->updateView(0);
235}
236
237void KivioOptionsDialog::defaultPage()
238{
240 m_font = Kivio::Config::font();
241 m_unitCombo->setCurrentItem(KoUnit::unit(Kivio::Config::unit()));
242 unitChanged(m_unitCombo->currentItem());
243 setLayoutText(m_layout);
244 setFontText(m_font);
245 m_marginsChBox->setChecked(true);
246 m_rulersChBox->setChecked(true);
247}
248
249void KivioOptionsDialog::defaultGrid()
250{
251 m_spaceHorizUSpin->changeValue(Kivio::Config::gridXSpacing());
252 m_spaceVertUSpin->changeValue(Kivio::Config::gridYSpacing());
253 m_snapHorizUSpin->changeValue(Kivio::Config::gridXSnap());
254 m_snapVertUSpin->changeValue(Kivio::Config::gridYSnap());
255 m_gridChBox->setChecked(Kivio::Config::showGrid());
256 m_snapChBox->setChecked(Kivio::Config::snapGrid());
257 m_gridColorBtn->setColor(Kivio::Config::gridColor());
258}
259
260void KivioOptionsDialog::setLayoutText(const KoPageLayout& l)
261{
262 KoUnit::Unit unit = static_cast<KoUnit::Unit>(m_unitCombo->currentItem());
263 TQString txt = i18n("Format: %1, Width: %2 %4, Height: %3 %5").arg(
264 KoPageFormat::formatString(l.format)).arg(KoUnit::toUserValue(l.ptWidth, unit))
265 .arg(KoUnit::toUserValue(l.ptHeight, unit)).arg(KoUnit::unitName(unit)).arg(
266 KoUnit::unitName(unit));
267 m_layoutTxtLbl->setText(txt);
268}
269
270void KivioOptionsDialog::pageLayoutDlg()
271{
272 KoHeadFoot headfoot;
273 int tabs = FORMAT_AND_BORDERS | DISABLE_UNIT;
274 KoUnit::Unit unit = static_cast<KoUnit::Unit>(m_unitCombo->currentItem());
275
276 if(KoPageLayoutDia::pageLayout(m_layout, headfoot, tabs, unit))
277 {
278 setLayoutText(m_layout);
279 }
280}
281
282void KivioOptionsDialog::unitChanged(int u)
283{
284 KoUnit::Unit unit = static_cast<KoUnit::Unit>(u);
285 setLayoutText(m_layout);
286 m_snapHorizUSpin->setUnit(unit);
287 m_snapVertUSpin->setUnit(unit);
288 m_spaceHorizUSpin->setUnit(unit);
289 m_spaceVertUSpin->setUnit(unit);
290}
291
292void KivioOptionsDialog::slotOk()
293{
294 slotApply();
295 accept();
296}
297
298void KivioOptionsDialog::slotApply()
299{
300 applyPage();
301 applyGrid();
302 Kivio::Config::self()->writeConfig();
303}
304
305void KivioOptionsDialog::slotDefault()
306{
307 bool defaults = Kivio::Config::self()->useDefaults(true);
308 defaultPage();
309 defaultGrid();
310 Kivio::Config::self()->useDefaults(defaults);
311}
312
313void KivioOptionsDialog::setMaxHorizSnap(double v)
314{
315 KoUnit::Unit unit = static_cast<KoUnit::Unit>(m_unitCombo->currentItem());
316 m_snapHorizUSpin->setMaxValue(KoUnit::fromUserValue(v, unit));
317}
318
319void KivioOptionsDialog::setMaxVertSnap(double v)
320{
321 KoUnit::Unit unit = static_cast<KoUnit::Unit>(m_unitCombo->currentItem());
322 m_snapVertUSpin->setMaxValue(KoUnit::fromUserValue(v, unit));
323}
324
325void KivioOptionsDialog::setFontText(const TQFont& f)
326{
327 TQString txt = f.family() + " " + TQString::number(f.pointSize());
328 m_fontTxtLbl->setText(txt);
329}
330
331void KivioOptionsDialog::fontDlg()
332{
333 if(TDEFontDialog::getFont(m_font, false, this) == TQDialog::Accepted) {
334 setFontText(m_font);
335 }
336}
337
338#include "kiviooptionsdialog.moc"
static KoPageLayout defaultPageLayout()
Get the default page layout.
static void setDefaultPageLayout(const KoPageLayout &layout)
Set the default page layout.