00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "kiviooptionsdialog.h"
00021 #include "kivio_view.h"
00022 #include "kivio_doc.h"
00023 #include "kivio_page.h"
00024 #include "kivioglobal.h"
00025 #include "kivio_grid_data.h"
00026 #include "kivio_canvas.h"
00027 #include "kivio_settings.h"
00028 #include "kivio_config.h"
00029
00030 #include <klocale.h>
00031 #include <KoApplication.h>
00032 #include <kiconloader.h>
00033 #include <kpushbutton.h>
00034 #include <KoPageLayoutDia.h>
00035 #include <kurlrequester.h>
00036 #include <kcolorbutton.h>
00037 #include <KoUnitWidgets.h>
00038 #include <kglobal.h>
00039 #include <kdebug.h>
00040 #include <kfontdialog.h>
00041
00042 #include <qlabel.h>
00043 #include <qbuttongroup.h>
00044 #include <qgroupbox.h>
00045 #include <qcombobox.h>
00046 #include <qcheckbox.h>
00047 #include <qradiobutton.h>
00048 #include <qlayout.h>
00049 #include <qtabwidget.h>
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090 KivioOptionsDialog::KivioOptionsDialog(KivioView* parent, const char* name)
00091 : KDialogBase(IconList, i18n("Settings"), Ok|Cancel|Apply|Default, Ok, parent, name)
00092 {
00093 initPage();
00094 initGrid();
00095 unitChanged(parent->doc()->unit());
00096 }
00097
00098 void KivioOptionsDialog::initPage()
00099 {
00100 QFrame* page = addPage(i18n("Page"), i18n("Page Settings"),
00101 kapp->iconLoader()->loadIcon("empty", KIcon::Toolbar, 32));
00102 m_pageIndex = pageIndex(page);
00103
00104 KivioView* view = static_cast<KivioView*>(parent());
00105 KoUnit::Unit unit = KoUnit::unit(Kivio::Config::unit());
00106 m_layout = Kivio::Config::defaultPageLayout();
00107 m_font = Kivio::Config::font();
00108
00109 QLabel* unitLbl = new QLabel(i18n("Default &units:"), page);
00110 m_unitCombo = new QComboBox(page);
00111 m_unitCombo->insertStringList(KoUnit::listOfUnitName());
00112 m_unitCombo->setCurrentItem(unit);
00113 unitLbl->setBuddy(m_unitCombo);
00114 QLabel* layoutLbl = new QLabel(i18n("Default layout:"), page);
00115 m_layoutTxtLbl = new QLabel(page);
00116 m_layoutTxtLbl->setFrameStyle(QFrame::LineEditPanel | QFrame::Sunken);
00117 m_layoutTxtLbl->setSizePolicy(QSizePolicy(
00118 QSizePolicy::Minimum, QSizePolicy::Fixed));
00119 setLayoutText(m_layout);
00120 KPushButton* layoutBtn = new KPushButton(i18n("Change..."), page);
00121 layoutBtn->setSizePolicy(QSizePolicy(
00122 QSizePolicy::Fixed, QSizePolicy::Fixed));
00123 QLabel* fontLbl = new QLabel(i18n("Default font:"), page);
00124 m_fontTxtLbl = new QLabel(page);
00125 m_fontTxtLbl->setFrameStyle(QFrame::LineEditPanel | QFrame::Sunken);
00126 m_fontTxtLbl->setSizePolicy(QSizePolicy(
00127 QSizePolicy::Minimum, QSizePolicy::Fixed));
00128 setFontText(m_font);
00129 KPushButton* fontBtn = new KPushButton(i18n("Change..."), page);
00130 layoutBtn->setSizePolicy(QSizePolicy(
00131 QSizePolicy::Fixed, QSizePolicy::Fixed));
00132 m_marginsChBox = new QCheckBox(i18n("Show page &margins"), page);
00133 m_marginsChBox->setChecked(view->isShowPageMargins());
00134 m_rulersChBox = new QCheckBox(i18n("Show page &rulers"), page);
00135 m_rulersChBox->setChecked(view->isShowRulers());
00136
00137 QGridLayout* gl = new QGridLayout(page);
00138 gl->setSpacing(KDialog::spacingHint());
00139 gl->addWidget(unitLbl, 0, 0);
00140 gl->addMultiCellWidget(m_unitCombo, 0, 0, 1, 2);
00141 gl->addWidget(layoutLbl, 1, 0);
00142 gl->addWidget(m_layoutTxtLbl, 1, 1);
00143 gl->addWidget(layoutBtn, 1, 2);
00144 gl->addWidget(fontLbl, 2, 0);
00145 gl->addWidget(m_fontTxtLbl, 2, 1);
00146 gl->addWidget(fontBtn, 2, 2);
00147 gl->addMultiCellWidget(m_marginsChBox, 3, 3, 0, 2);
00148 gl->addMultiCellWidget(m_rulersChBox, 4, 4, 0, 2);
00149 gl->addMultiCell(new QSpacerItem(0, 0), 5, 5, 0, 2);
00150
00151 connect(layoutBtn, SIGNAL(clicked()), SLOT(pageLayoutDlg()));
00152 connect(fontBtn, SIGNAL(clicked()), SLOT(fontDlg()));
00153 connect(m_unitCombo, SIGNAL(activated(int)), SLOT(unitChanged(int)));
00154 }
00155
00156 void KivioOptionsDialog::initGrid()
00157 {
00158 QFrame* page = addPage(i18n("Grid"), i18n("Grid Settings"), BarIcon( "grid", KIcon::SizeMedium ));
00159 m_gridIndex = pageIndex(page);
00160
00161 KoUnit::Unit unit = static_cast<KivioView*>(parent())->doc()->unit();
00162 KivioGridData d = static_cast<KivioView*>(parent())->doc()->grid();
00163 double pgw = m_layout.ptWidth;
00164 double pgh = m_layout.ptHeight;
00165 double fw = Kivio::Config::gridXSpacing();
00166 double fh = Kivio::Config::gridYSpacing();
00167 double sw = Kivio::Config::gridXSnap();
00168 double sh = Kivio::Config::gridYSnap();
00169
00170 m_gridChBox = new QCheckBox(i18n("Show &grid"), page);
00171 m_gridChBox->setChecked(Kivio::Config::showGrid());
00172 m_snapChBox = new QCheckBox(i18n("Snap to g&rid"), page);
00173 m_snapChBox->setChecked(Kivio::Config::snapGrid());
00174 QLabel* gridColorLbl = new QLabel(i18n("Grid &color:"), page);
00175 m_gridColorBtn = new KColorButton(Kivio::Config::gridColor(), page);
00176 gridColorLbl->setBuddy(m_gridColorBtn);
00177 QGroupBox* spacingGrp = new QGroupBox(2, Qt::Horizontal, i18n("Spacing"), page);
00178 QLabel* spaceHorizLbl = new QLabel(i18n("&Horizontal:"), spacingGrp);
00179 m_spaceHorizUSpin = new KoUnitDoubleSpinBox(spacingGrp, 0.0, pgw, 0.1,
00180 fw, unit);
00181 spaceHorizLbl->setBuddy(m_spaceHorizUSpin);
00182 QLabel* spaceVertLbl = new QLabel(i18n("&Vertical:"), spacingGrp);
00183 m_spaceVertUSpin = new KoUnitDoubleSpinBox(spacingGrp, 0.0, pgh, 0.1,
00184 fh, unit);
00185 spaceVertLbl->setBuddy(m_spaceVertUSpin);
00186 QGroupBox* snapGrp = new QGroupBox(2, Qt::Horizontal, i18n("Snap Distance"), page);
00187 QLabel* snapHorizLbl = new QLabel(i18n("H&orizontal:"), snapGrp);
00188 m_snapHorizUSpin = new KoUnitDoubleSpinBox(snapGrp, 0.0, fw, 0.1,
00189 sw, unit);
00190 snapHorizLbl->setBuddy(m_snapHorizUSpin);
00191 QLabel* snapVertLbl = new QLabel(i18n("V&ertical:"), snapGrp);
00192 m_snapVertUSpin = new KoUnitDoubleSpinBox(snapGrp, 0.0, fh, 0.1,
00193 sh, unit);
00194 snapVertLbl->setBuddy(m_snapVertUSpin);
00195
00196 QGridLayout* gl = new QGridLayout(page);
00197 gl->setSpacing(KDialog::spacingHint());
00198 gl->addMultiCellWidget(m_gridChBox, 0, 0, 0, 2);
00199 gl->addMultiCellWidget(m_snapChBox, 1, 1, 0, 2);
00200 gl->addWidget(gridColorLbl, 2, 0);
00201 gl->addWidget(m_gridColorBtn, 2, 1);
00202 gl->addItem(new QSpacerItem(0, 0), 2, 2);
00203 gl->addMultiCellWidget(spacingGrp, 3, 3, 0, 2);
00204 gl->addMultiCellWidget(snapGrp, 4, 4, 0, 2);
00205 gl->addMultiCell(new QSpacerItem(0, 0), 5, 5, 0, 2);
00206
00207 connect(m_spaceHorizUSpin, SIGNAL(valueChanged(double)), SLOT(setMaxHorizSnap(double)));
00208 connect(m_spaceVertUSpin, SIGNAL(valueChanged(double)), SLOT(setMaxVertSnap(double)));
00209 }
00210
00211 void KivioOptionsDialog::applyPage()
00212 {
00213 KivioView* view = static_cast<KivioView*>(parent());
00214 view->doc()->setUnit(static_cast<KoUnit::Unit>(m_unitCombo->currentItem()));
00215 Kivio::Config::setUnit(KoUnit::unitName(view->doc()->unit()));
00216 Kivio::Config::setDefaultPageLayout(m_layout);
00217 Kivio::Config::setFont(m_font);
00218 view->doc()->setDefaultFont(m_font);
00219 view->togglePageMargins(m_marginsChBox->isChecked());
00220 view->toggleShowRulers(m_rulersChBox->isChecked());
00221 }
00222
00223 void KivioOptionsDialog::applyGrid()
00224 {
00225 KivioGridData d;
00226 Kivio::Config::setGridXSpacing(m_spaceHorizUSpin->value());
00227 Kivio::Config::setGridYSpacing(m_spaceVertUSpin->value());
00228 Kivio::Config::setGridXSnap(m_snapHorizUSpin->value());
00229 Kivio::Config::setGridYSnap(m_snapVertUSpin->value());
00230 Kivio::Config::setShowGrid(m_gridChBox->isChecked());
00231 Kivio::Config::setSnapGrid(m_snapChBox->isChecked());
00232 Kivio::Config::setGridColor(m_gridColorBtn->color());
00233 KivioView* view = static_cast<KivioView*>(parent());
00234 view->doc()->updateView(0);
00235 }
00236
00237 void KivioOptionsDialog::defaultPage()
00238 {
00239 m_layout = Kivio::Config::defaultPageLayout();
00240 m_font = Kivio::Config::font();
00241 m_unitCombo->setCurrentItem(KoUnit::unit(Kivio::Config::unit()));
00242 unitChanged(m_unitCombo->currentItem());
00243 setLayoutText(m_layout);
00244 setFontText(m_font);
00245 m_marginsChBox->setChecked(true);
00246 m_rulersChBox->setChecked(true);
00247 }
00248
00249 void KivioOptionsDialog::defaultGrid()
00250 {
00251 m_spaceHorizUSpin->changeValue(Kivio::Config::gridXSpacing());
00252 m_spaceVertUSpin->changeValue(Kivio::Config::gridYSpacing());
00253 m_snapHorizUSpin->changeValue(Kivio::Config::gridXSnap());
00254 m_snapVertUSpin->changeValue(Kivio::Config::gridYSnap());
00255 m_gridChBox->setChecked(Kivio::Config::showGrid());
00256 m_snapChBox->setChecked(Kivio::Config::snapGrid());
00257 m_gridColorBtn->setColor(Kivio::Config::gridColor());
00258 }
00259
00260 void KivioOptionsDialog::setLayoutText(const KoPageLayout& l)
00261 {
00262 KoUnit::Unit unit = static_cast<KoUnit::Unit>(m_unitCombo->currentItem());
00263 QString txt = i18n("Format: %1, Width: %2 %4, Height: %3 %5").arg(
00264 KoPageFormat::formatString(l.format)).arg(KoUnit::toUserValue(l.ptWidth, unit))
00265 .arg(KoUnit::toUserValue(l.ptHeight, unit)).arg(KoUnit::unitName(unit)).arg(
00266 KoUnit::unitName(unit));
00267 m_layoutTxtLbl->setText(txt);
00268 }
00269
00270 void KivioOptionsDialog::pageLayoutDlg()
00271 {
00272 KoHeadFoot headfoot;
00273 int tabs = FORMAT_AND_BORDERS | DISABLE_UNIT;
00274 KoUnit::Unit unit = static_cast<KoUnit::Unit>(m_unitCombo->currentItem());
00275
00276 if(KoPageLayoutDia::pageLayout(m_layout, headfoot, tabs, unit))
00277 {
00278 setLayoutText(m_layout);
00279 }
00280 }
00281
00282 void KivioOptionsDialog::unitChanged(int u)
00283 {
00284 KoUnit::Unit unit = static_cast<KoUnit::Unit>(u);
00285 setLayoutText(m_layout);
00286 m_snapHorizUSpin->setUnit(unit);
00287 m_snapVertUSpin->setUnit(unit);
00288 m_spaceHorizUSpin->setUnit(unit);
00289 m_spaceVertUSpin->setUnit(unit);
00290 }
00291
00292 void KivioOptionsDialog::slotOk()
00293 {
00294 slotApply();
00295 accept();
00296 }
00297
00298 void KivioOptionsDialog::slotApply()
00299 {
00300 applyPage();
00301 applyGrid();
00302 Kivio::Config::self()->writeConfig();
00303 }
00304
00305 void KivioOptionsDialog::slotDefault()
00306 {
00307 bool defaults = Kivio::Config::self()->useDefaults(true);
00308 defaultPage();
00309 defaultGrid();
00310 Kivio::Config::self()->useDefaults(defaults);
00311 }
00312
00313 void KivioOptionsDialog::setMaxHorizSnap(double v)
00314 {
00315 KoUnit::Unit unit = static_cast<KoUnit::Unit>(m_unitCombo->currentItem());
00316 m_snapHorizUSpin->setMaxValue(KoUnit::fromUserValue(v, unit));
00317 }
00318
00319 void KivioOptionsDialog::setMaxVertSnap(double v)
00320 {
00321 KoUnit::Unit unit = static_cast<KoUnit::Unit>(m_unitCombo->currentItem());
00322 m_snapVertUSpin->setMaxValue(KoUnit::fromUserValue(v, unit));
00323 }
00324
00325 void KivioOptionsDialog::setFontText(const QFont& f)
00326 {
00327 QString txt = f.family() + " " + QString::number(f.pointSize());
00328 m_fontTxtLbl->setText(txt);
00329 }
00330
00331 void KivioOptionsDialog::fontDlg()
00332 {
00333 if(KFontDialog::getFont(m_font, false, this) == QDialog::Accepted) {
00334 setFontText(m_font);
00335 }
00336 }
00337
00338 #include "kiviooptionsdialog.moc"