Source and Header Examples This appendix contains an example of a header file listing and a source file listing.
Header File Example /*************************************************************************** ksettingsdlg.h ------------------- copyright : (C) 2000,2001 by Michael Edwardes email : mte@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef KSETTINGSDLG_H #define KSETTINGSDLG_H // ---------------------------------------------------------------------------- // QT Includes #include <qcheckbox.h> #include <qradiobutton.h> #include <qbuttongroup.h> #include <qcolor.h> #include <qfont.h> // ---------------------------------------------------------------------------- // KDE Includes #include <kdialogbase.h> #include <kfontdialog.h> #include <kcolorbutton.h> #include <klineedit.h> // ---------------------------------------------------------------------------- // Project Includes /** * This class is used to manipulate all the settings available for * KMyMoney2. It currently stores the values for the list settings * and whether to show the start dialog when KMyMoney2 starts. * * It uses KDialogBase to implement it's interface. * * It uses the global KConfig object to read and write the application * settings. * * @see KDialogBase * * @author Michael Edwardes 2000-2001 * $Id: src-examples.docbook,v 1.3 2005/05/27 19:05:18 ipwizard Exp $ * * @short A class to manipulate the settings needed for running KMyMoney2 **/ class KSettingsDlg : public KDialogBase { Q_OBJECT private: /** Start prompt dialog */ QRadioButton *m_qradiobuttonStartPrompt; /** Start file */ QRadioButton *m_qradiobuttonStartFile; /** Color list */ KColorButton *m_kcolorbuttonList; /** Color background */ KColorButton *m_kcolorbuttonBack; /** Select font header */ KFontChooser *m_kfontchooserHeader; /** Font cell setting */ KFontChooser *m_kfontchooserCell; /** No rows to show in register */ KLineEdit *m_klineeditRowCount; /** Show grid in register ? */ QCheckBox *m_qcheckboxShowGrid; QRadioButton *m_qradiobuttonPerTransaction; QRadioButton *m_qradiobuttonOtherRow; /** Set page general */ void setPageGeneral(); /** Set page list settings */ void setPageList(); /** Write settings */ void configWrite(); /** Read settings */ void configRead(); /** Attributes to store the variables so they can be undone when * cancelling the apply. **/ QColor m_qcolorTempList; QColor m_qcolorTempListBG; QFont m_qfontTempHeader; QFont m_qfontTempCell; QString m_qstringTempRowCount; bool m_bTempShowGrid; bool m_bTempColourPerTransaction; bool m_bTempStartPrompt; bool m_bDoneApply; private slots: /** Called when OK pressed */ void slotOk(); /** Called when Apply pressed */ void slotApply(); /** Called when Cancel pressed */ void slotCancel(); /** Called when Reset pressed */ void slotUser1(); public: /** * Standard constructor. * * @param parent The QWidget this is used in. * @param name The QT name. * @param modal True if we want the dialog to be application modal. * * @return An object of type KSettingsDlg. * * @see ~KSettingsDlg **/ KSettingsDlg(QWidget *parent=0, const char *name=0, bool modal=true); /** * Standard destructor. * * @return Nothing. * * @see KSettingsDlg **/ ~KSettingsDlg(); signals: /** * Emitted when the Apply button is clicked to allow the application to * show the changes without having to close the dialog. * * @return Nothing **/ void signalApply(); }; #endif
Source File Example /*************************************************************************** ksettingsdlg.cpp ------------------- copyright : (C) 2000,2001 by Michael Edwardes email : mte@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * * it under the terms of the GNU General Public License as published by * * * the Free Software Foundation; either version 2 of the License, or * * * (at your option) any later version. * * * * ***************************************************************************/ // ---------------------------------------------------------------------------- // QT Includes #include <qlayout.h> #include <qvbox.h> #include <qlabel.h> #include <qgroupbox.h> #include <qtabwidget.h> #include <qvalidator.h> // ---------------------------------------------------------------------------- // KDE Includes #include <klocale.h> #include <kstddirs.h> #include <kiconloader.h> #include <kconfig.h> #include <kcolorbutton.h> #include <kmessagebox.h> // ---------------------------------------------------------------------------- // Project Includes #include "ksettingsdlg.h" /** Standard constructor for the class. * The constructor passes some additional parameters to the base class * KDialogBase * to set the buttons to be showed and the type of dialog to be shown. **/ KSettingsDlg::KSettingsDlg(QWidget *parent, const char *name, bool modal) : KDialogBase(IconList, i18n("Configure"), Ok|Cancel|Apply|User1, Ok, parent, name, modal, true, i18n("&Reset")) { // Setup the pages and then read the configuration object. setPageGeneral(); setPageList(); configRead(); m_bDoneApply=false; } /** Standard destructor for the class. **/ KSettingsDlg::~KSettingsDlg() { } /** Called to create the General page to be shown in the dialog. **/ void KSettingsDlg::setPageGeneral() { // Create the main frame to hold the widgets QVBox *qvboxMainFrame = addVBoxPage( i18n("General"), i18n("General settings"), DesktopIcon("misc")); // Create a group box to hold the available options QButtonGroup *qbuttongroup = new QButtonGroup(qvboxMainFrame, "GroupBox1"); qbuttongroup->setTitle( i18n( "Startup options" ) ); qbuttongroup->setColumnLayout(0, Qt::Vertical ); qbuttongroup->layout()->setSpacing( 0 ); qbuttongroup->layout()->setMargin( 0 ); // Create a layout to organize the widgets. QVBoxLayout *qvboxlayout = new QVBoxLayout(qbuttongroup->layout()); qvboxlayout->setAlignment( Qt::AlignTop ); qvboxlayout->setSpacing( 6 ); qvboxlayout->setMargin( 11 ); // Create a check box to be in the group box m_qradiobuttonStartPrompt = new QRadioButton("start_prompt", qbuttongroup); m_qradiobuttonStartPrompt->setText( i18n( "Start with dialog prompt (default)" ) ); qvboxlayout->addWidget(m_qradiobuttonStartPrompt); // Create another check box to the group box m_qradiobuttonStartFile = new QRadioButton("start_file", qbuttongroup); m_qradiobuttonStartFile->setText( i18n( "Start with last file used" ) ); qvboxlayout->addWidget(m_qradiobuttonStartFile); } /** Called to create the Main List page shown in the dialog. **/ void KSettingsDlg::setPageList() { // Create the page. QVBox *qvboxMainFrame = addVBoxPage( i18n("Main List"), i18n("List settings"), locate("appdata", "pics/setting_list.png")); // Create the tab widget QTabWidget *qtabwidget = new QTabWidget(qvboxMainFrame, "TabWidget2"); // Create the first page QWidget *qwidgetPage = new QWidget(this); // Create the layout for the page QVBoxLayout *qvboxlayoutPage = new QVBoxLayout(qwidgetPage); qvboxlayoutPage->setSpacing( 6 ); qvboxlayoutPage->setMargin( 11 ); // Create a horizontal layout to hold two widgets QHBoxLayout *qhboxlayout = new QHBoxLayout; qhboxlayout->setSpacing( 6 ); qhboxlayout->setMargin( 0 ); // Create the first widget QLabel *qlabel = new QLabel(i18n("Number of lines in the register view:"), qwidgetPage); qhboxlayout->addWidget(qlabel); // Create the second widget m_klineeditRowCount = new KLineEdit(qwidgetPage); QIntValidator *qintvalidator = new QIntValidator(1, 3, m_klineeditRowCount); m_klineeditRowCount->setValidator(qintvalidator); qhboxlayout->addWidget(m_klineeditRowCount); // Add the horizontal layout qvboxlayoutPage->addLayout(qhboxlayout); // Ceate another widget m_qcheckboxShowGrid = new QCheckBox(i18n("Show a grid in the register view"), qwidgetPage); qvboxlayoutPage->addWidget(m_qcheckboxShowGrid); // Create a group to hold two radio buttons QButtonGroup *qbuttongroup = new QButtonGroup(qwidgetPage, "ButtonGroup1"); qbuttongroup->setTitle(i18n("Row Colour options")); qbuttongroup->setColumnLayout(0, Qt::Vertical ); qbuttongroup->layout()->setSpacing( 0 ); qbuttongroup->layout()->setMargin( 0 ); // Create a layout QVBoxLayout *qvboxlayout = new QVBoxLayout(qbuttongroup->layout()); qvboxlayout->setAlignment( Qt::AlignTop ); qvboxlayout->setSpacing( 6 ); qvboxlayout->setMargin( 11 ); // Add the first radio button m_qradiobuttonPerTransaction = new QRadioButton(qbuttongroup, "m_per_trans"); m_qradiobuttonPerTransaction->setText( i18n("Use one colour per transaction") ); qvboxlayout->addWidget(m_qradiobuttonPerTransaction); // Add the second radio button m_qradiobuttonOtherRow = new QRadioButton(qbuttongroup, "m_every_other"); m_qradiobuttonOtherRow->setText( i18n( "Change colour every other row" )); qvboxlayout->addWidget(m_qradiobuttonOtherRow); qvboxlayoutPage->addWidget(qbuttongroup); // Add a vertical spacer to take up the remaining available space QSpacerItem* spacer = new QSpacerItem( 20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding ); qvboxlayoutPage->addItem( spacer ); // Add the page to the tab qtabwidget->insertTab(qwidgetPage, i18n("General")); // Create a new tab for the colour options QWidget *qwidgetColour = new QWidget(qtabwidget, "tab"); // Create a vertical layout QVBoxLayout *qvboxlayoutColour = new QVBoxLayout(qwidgetColour); qvboxlayoutColour->setSpacing( 6 ); qvboxlayoutColour->setMargin( 11 ); // Create a horizontal layout to include the label and button QHBoxLayout *qhboxlayoutColour = new QHBoxLayout; qhboxlayoutColour->setSpacing( 6 ); qhboxlayoutColour->setMargin( 0 ); // Add the label and button QLabel *qlabelListColour = new QLabel(i18n( "List view colour :" ), qwidgetColour); qhboxlayoutColour->addWidget(qlabelListColour); m_kcolorbuttonList = new KColorButton(qwidgetColour, "colour_list"); qhboxlayoutColour->addWidget(m_kcolorbuttonList); // Add the horizontal layout qvboxlayoutColour->addLayout(qhboxlayoutColour); // Create another horizontal layout to include the label and button QHBoxLayout *qhboxlayoutBGColour = new QHBoxLayout; qhboxlayoutBGColour->setSpacing( 6 ); qhboxlayoutBGColour->setMargin( 0 ); // Add the label and button QLabel *qlabelListBGColour = new QLabel(i18n( "List background colour :"), qwidgetColour); qhboxlayoutBGColour->addWidget(qlabelListBGColour); m_kcolorbuttonBack = new KColorButton(qwidgetColour, "colour_back"); qhboxlayoutBGColour->addWidget(m_kcolorbuttonBack); // Add the horizontal layout qvboxlayoutColour->addLayout(qhboxlayoutBGColour); // Add a vertical spacer to take up the remaining available space QSpacerItem* qspaceritemColour = new QSpacerItem( 20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding ); qvboxlayoutColour->addItem( qspaceritemColour ); // Add the page to the tab widget qtabwidget->insertTab(qwidgetColour, i18n( "Color")); // Create another tab adding a font chooser widget QVBox *qvboxInsideTab1 = new QVBox( this, "tab1" ); qvboxInsideTab1->setSpacing( 6 ); qvboxInsideTab1->setMargin( 11 ); m_kfontchooserHeader = new KFontChooser(qvboxInsideTab1); qtabwidget->insertTab(qvboxInsideTab1, i18n("Header Font")); // Create another tab adding a font chooser widget QVBox *qvboxInsideTab2 = new QVBox( this, "tab2" ); qvboxInsideTab2->setSpacing( 6 ); qvboxInsideTab2->setMargin( 11 ); m_kfontchooserCell = new KFontChooser(qvboxInsideTab2); qtabwidget->addTab(qvboxInsideTab2, i18n("Cell Font")); } /** Read all the settings in from the global KConfig object and set all the * widgets appropriately. **/ void KSettingsDlg::configRead() { KConfig *kconfig = KGlobal::config(); kconfig->setGroup("Settings Dialog"); QSize *qsizeDefaultSize = new QSize(470,470); this->resize(kconfig->readSizeEntry("Geometry", qsizeDefaultSize)); kconfig->setGroup("General Options"); m_bTempStartPrompt = kconfig->readBoolEntry("StartDialog", true); m_qradiobuttonStartPrompt->setChecked(m_bTempStartPrompt); m_qradiobuttonStartFile->setChecked(!m_bTempStartPrompt); kconfig->setGroup("List Options"); QFont qfontDefault = QFont("helvetica", 12); QColor qcolorDefault = Qt::white; QColor qcolorDefaultBG = Qt::gray; m_qcolorTempList = kconfig->readColorEntry("listColor", &qcolorDefault); m_kcolorbuttonList->setColor(m_qcolorTempList); m_qcolorTempListBG = kconfig->readColorEntry("listBGColor", &qcolorDefaultBG); m_kcolorbuttonBack->setColor(m_qcolorTempListBG); m_qfontTempHeader = kconfig->readFontEntry("listHeaderFont", &qfontDefault); m_kfontchooserHeader->setFont(m_qfontTempHeader); m_qfontTempCell = kconfig->readFontEntry("listCellFont", &qfontDefault); m_kfontchooserCell->setFont(m_qfontTempCell); m_qstringTempRowCount = kconfig->readEntry("RowCount", "2"); m_klineeditRowCount->setText(m_qstringTempRowCount); m_bTempShowGrid = kconfig->readBoolEntry("ShowGrid", true); m_qcheckboxShowGrid->setChecked(m_bTempShowGrid); m_bTempColourPerTransaction = kconfig->readBoolEntry("ColourPerTransaction", true); m_qradiobuttonPerTransaction->setChecked(m_bTempColourPerTransaction); m_qradiobuttonOtherRow->setChecked(!m_bTempColourPerTransaction); } /** Write out all the settings to the global KConfig object. **/ void KSettingsDlg::configWrite() { KConfig *kconfig = KGlobal::config(); kconfig->setGroup("Settings Dialog"); kconfig->writeEntry("Geometry", this->size() ); kconfig->setGroup("List Options"); kconfig->writeEntry("listColor", m_kcolorbuttonList->color()); kconfig->writeEntry("listBGColor", m_kcolorbuttonBack->color()); kconfig->writeEntry("listHeaderFont", m_kfontchooserHeader->font()); kconfig->writeEntry("listCellFont", m_kfontchooserCell->font()); kconfig->writeEntry("RowCount", m_klineeditRowCount->text()); kconfig->writeEntry("ShowGrid", m_qcheckboxShowGrid->isChecked()); kconfig->writeEntry("ColourPerTransaction", m_qradiobuttonPerTransaction->isChecked()); kconfig->setGroup("General Options"); kconfig->writeEntry("StartDialog", m_qradiobuttonStartPrompt->isChecked()); kconfig->sync(); } /** Called on OK being pressed */ void KSettingsDlg::slotOk() { int nCount = m_klineeditRowCount->text().toInt(); if (nCount <= 0 || nCount >= 4) { KMessageBox::information(this, i18n("The row count has to be between 1 and 3")); m_klineeditRowCount->setFocus(); return; } configWrite(); this->accept(); } /** Called on Apply being pressed */ void KSettingsDlg::slotApply() { int nCount = m_klineeditRowCount->text().toInt(); if (nCount <= 0 || nCount >= 4) { KMessageBox::information(this, i18n("The row count has to be between 1 and 3")); m_klineeditRowCount->setFocus(); return; } m_bDoneApply = true; configWrite(); emit signalApply(); } /** Called on Cancel being pressed. * It writes out all the original settings read when it was created. **/ void KSettingsDlg::slotCancel() { // make sure the config object is the same as we left it KConfig *kconfig = KGlobal::config(); kconfig->setGroup("List Options"); kconfig->writeEntry("listColor", m_qcolorTempList); kconfig->writeEntry("listBGColor", m_qcolorTempListBG); kconfig->writeEntry("listHeaderFont", m_qfontTempHeader); kconfig->writeEntry("listCellFont", m_qfontTempCell); kconfig->writeEntry("RowCount", m_qstringTempRowCount); kconfig->writeEntry("ShowGrid", m_bTempShowGrid); kconfig->writeEntry("ColourPerTransaction", m_bTempColourPerTransaction); kconfig->setGroup("General Options"); kconfig->writeEntry("StartDialog", m_bTempStartPrompt); kconfig->sync(); if (m_bDoneApply) accept(); else reject(); } /** Called when the user presses the User1 button. In our case that is the * reset button. * * It just resets all the attributes to the values read on creation. **/ void KSettingsDlg::slotUser1() { m_qradiobuttonStartPrompt->setChecked(m_bTempStartPrompt); m_kcolorbuttonList->setColor(m_qcolorTempList); m_kcolorbuttonBack->setColor(m_qcolorTempListBG); m_kfontchooserHeader->setFont(m_qfontTempHeader); m_kfontchooserCell->setFont(m_qfontTempCell); m_klineeditRowCount->setText(m_qstringTempRowCount); m_qcheckboxShowGrid->setChecked(m_bTempShowGrid); m_qradiobuttonPerTransaction->setChecked(m_bTempColourPerTransaction); m_qradiobuttonOtherRow->setChecked(!m_bTempColourPerTransaction); }