kivio

kiviooptionsdialog.cpp

00001 /* This file is part of the KDE project
00002    Copyright (C) 2003 Peter Simonsson <psn@linux.se>
00003 
00004    This library is free software; you can redistribute it and/or
00005    modify it under the terms of the GNU Library General Public
00006    License as published by the Free Software Foundation; either
00007    version 2 of the License, or (at your option) any later version.
00008 
00009    This library is distributed in the hope that it will be useful,
00010    but WITHOUT ANY WARRANTY; without even the implied warranty of
00011    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012    Library General Public License for more details.
00013 
00014    You should have received a copy of the GNU Library General Public License
00015    along with this library; see the file COPYING.LIB.  If not, write to
00016    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00017    Boston, MA 02110-1301, USA.
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 // GuidesListViewItem::GuidesListViewItem(QListView* parent, KivioGuideLineData *gd, KoUnit::Unit u)
00052 // : KListViewItem(parent), m_data(gd)
00053 // {
00054 //   setPixmap(0, BarIcon(m_data->orientation() == Qt::Vertical ?
00055 //     "guides_vertical":"guides_horizontal"));
00056 //   QString s = KGlobal::_locale->formatNumber(KoUnit::toUserValue(m_data->position(), u), 2);
00057 //   s += " " + KoUnit::unitName(u);
00058 //   setText(1, s);
00059 // }
00060 // 
00061 // GuidesListViewItem::~GuidesListViewItem()
00062 // {
00063 //   delete m_data;
00064 // }
00065 // 
00066 // void GuidesListViewItem::setUnit(KoUnit::Unit u)
00067 // {
00068 //   QString s = KGlobal::_locale->formatNumber(KoUnit::toUserValue(m_data->position(), u), 2);
00069 //   s += " " + KoUnit::unitName(u);
00070 //   setText(1, s);
00071 // }
00072 // 
00073 // void GuidesListViewItem::setPosition(double p, KoUnit::Unit u)
00074 // {
00075 //   m_data->setPosition(KoUnit::fromUserValue(p, u));
00076 //   QString s = KGlobal::_locale->formatNumber(p, 2);
00077 //   s += " " + KoUnit::unitName(u);
00078 //   setText(1, s);
00079 // }
00080 // 
00081 // void GuidesListViewItem::setOrientation(Qt::Orientation o)
00082 // {
00083 //   m_data->setOrientation(o);
00084 //   setPixmap(0, BarIcon(m_data->orientation() == Qt::Vertical ?
00085 //     "guides_vertical":"guides_horizontal"));
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"
KDE Home | KDE Accessibility Home | Description of Access Keys