/* This file is part of the KDE project
   Copyright (C)  2001 Montel Laurent <lmontel@mandrakesoft.com>

   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Library General Public
   License as published by the Free Software Foundation; either
   version 2 of the License, or (at your option) any later version.

   This library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Library General Public License for more details.

   You should have received a copy of the GNU Library General Public License
   along with this library; see the file COPYING.LIB.  If not, write to
   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 * Boston, MA 02110-1301, USA.
*/

#ifndef __kwconfig__
#define __kwconfig__

#include <kdialogbase.h>

namespace KFormula {
    class ConfigurePage;
}

class KWView;
class TQCheckBox;
class KIntNumInput;
class KoUnitDoubleSpinBox;
class TDEConfig;
class TQComboBox;
class KIntNumInput;
class KCommand;
class KWDocument;
class TDEListView;
class TQVGroupBox;
class TQLabel;

namespace KSpell2 {
    class ConfigWidget;
}

class ConfigureSpellPage : public TQObject
{
    Q_OBJECT
  
public:
    ConfigureSpellPage( KWView *view, TQVBox *box, char *name = 0 );
    void apply();
    void slotDefault();
private:
    KWView* m_pView;
    TDEConfig* config;
    KSpell2::ConfigWidget *m_spellConfigWidget;
};

class ConfigureInterfacePage : public TQObject
{
    Q_OBJECT
  
public:
    ConfigureInterfacePage( KWView *view, TQVBox *box, char *name = 0 );
    void apply();
    void slotDefault();
    void setUnit( KoUnit::Unit unit );

signals:
    // For KWConfig
    void unitChanged( int );
private:
    KWView* m_pView;
    TDEConfig* config;
    TQComboBox *m_unitCombo;
    KoUnitDoubleSpinBox* gridX,*gridY;
    KoUnitDoubleSpinBox* indent;
    KIntNumInput* recentFiles;
    TQCheckBox *showStatusBar, *showScrollBar, *pgUpDownMovesCaret;
    int oldNbRecentFiles;
    KIntNumInput *m_nbPagePerRow;
};

class ConfigureMiscPage : public TQObject
{
    Q_OBJECT
  
public:
    ConfigureMiscPage( KWView *view, TQVBox *box, char *name = 0 );
    KCommand* apply();
    void slotDefault();
    void setUnit( KoUnit::Unit unit );
private:
    KWView* m_pView;
    TDEConfig* config;
    KIntNumInput* m_undoRedoLimit;
    int m_oldNbRedo;
    bool m_oldFormattingEndParag, m_oldFormattingSpace, m_oldFormattingTabs, m_oldFormattingBreak;
    TQCheckBox* m_displayLink, *m_displayComment, *m_underlineLink, *m_displayFieldCode;
    TQCheckBox* m_cbViewFormattingEndParag, *m_cbViewFormattingSpace;
    TQCheckBox* m_cbViewFormattingTabs, *m_cbViewFormattingBreak;
};

class ConfigureDefaultDocPage : public TQObject
{
    Q_OBJECT
  
public:
    ConfigureDefaultDocPage( KWView *view, TQVBox *box, char *name = 0 );
    ~ConfigureDefaultDocPage();
    KCommand* apply();
    void slotDefault();
    void setUnit( KoUnit::Unit unit );
public slots:
    void selectNewDefaultFont();
private:
    KWView* m_pView;
    TDEConfig* config;
    TQFont *font;
    TQLabel *fontName;
    TQLabel *tabStop;

    KoUnitDoubleSpinBox* m_columnSpacing;

    KIntNumInput* autoSave;
    int oldAutoSaveValue;
    double m_oldTabStopWidth;

    int m_oldStartingPage;
    bool m_oldBackupFile;
    KIntNumInput* m_variableNumberOffset;
    KoUnitDoubleSpinBox *m_tabStopWidth;
    TQCheckBox *m_cursorInProtectedArea;
    TQCheckBox *m_createBackupFile;
//     TQCheckBox *m_directInsertCursor;
    TQCheckBox *m_autoHyphenation;
    TQComboBox *m_globalLanguage;
    TQString m_oldLanguage;
    bool m_oldHyphenation;
};

class ConfigurePathPage : public TQObject
{
    Q_OBJECT
  
public:
    ConfigurePathPage( KWView *view, TQVBox *box, char *name = 0 );
    void slotDefault();
    void apply();
private slots:
    void slotModifyPath();
    void slotSelectionChanged(TQListViewItem *);
private:
    KWView* m_pView;
    TDEConfig* config;
    TDEListView* m_pPathView;
    TQPushButton *m_modifyPath;
};

class ConfigureTTSPage : public TQObject
{
    Q_OBJECT
  
public:
    ConfigureTTSPage( KWView *view, TQVBox *box, char *name = 0 );
    void slotDefault();
    void apply();
private slots:
    void screenReaderOptionChanged();
private:
    TDEConfig* config;
    TQCheckBox* m_cbSpeakPointerWidget;
    TQCheckBox* m_cbSpeakFocusWidget;
    TQVGroupBox* m_gbScreenReaderOptions;
    TQCheckBox* m_cbSpeakTooltips;
    TQCheckBox* m_cbSpeakWhatsThis;
    TQCheckBox* m_cbSpeakDisabled;
    TQCheckBox* m_cbSpeakAccelerators;
    TQLabel* m_lblAcceleratorPrefix;
    TQLineEdit* m_leAcceleratorPrefixWord;
    KIntNumInput* m_iniPollingInterval;
};

class KWConfig : public KDialogBase
{
    Q_OBJECT
  
public:
    enum { KW_TDESPELL=1,KP_INTERFACE=2,KP_MISC=4, KP_DOCUMENT=8, KP_FORMULA=16, KP_PATH = 32};
    KWConfig( KWView* parent );
    void openPage(int flags);
public slots:
    void slotApply();
    void slotDefault();
    void unitChanged( int );
private:
    ConfigureSpellPage *m_spellPage;
    ConfigureInterfacePage *m_interfacePage;
    ConfigureMiscPage *m_miscPage;
    ConfigureDefaultDocPage *m_defaultDocPage;
    KFormula::ConfigurePage *m_formulaPage;
    ConfigurePathPage *m_pathPage;
    ConfigureTTSPage *m_ttsPage;
    KWDocument *m_doc;
};



#endif