You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
551 lines
18 KiB
551 lines
18 KiB
<appendix id="src-examples">
|
|
<title>Source and Header Examples</title>
|
|
<para>
|
|
This appendix contains an example of a
|
|
<link linkend="header-example">header file listing</link> and a
|
|
<link linkend="source-example">source file listing</link>.
|
|
</para>
|
|
|
|
<section id="header-example">
|
|
<title>Header File Example</title>
|
|
<screen>
|
|
|
|
/***************************************************************************
|
|
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
|
|
</screen>
|
|
</section>
|
|
|
|
<section id="source-example">
|
|
<title>Source File Example</title>
|
|
|
|
<screen>
|
|
/***************************************************************************
|
|
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);
|
|
}
|
|
|
|
</screen>
|
|
|
|
</section>
|
|
</appendix>
|