/* This file is part of the KDE Libraries
Copyright (C) 1998 Thomas Tanghus (tanghus@earthling.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.
This program 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
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., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
#ifndef __KNOTEBOOK_H
#define __KNOTEBOOK_H
#include <ktabbar.h>
#include <kwizard.h>
/**
* KNoteBook is a tabbed dialog where each tab can have multiple pages.
* The widget has the advantages of both KTabCtl and QTabDialog plus some more.
*
* Features:
*
* - Multiple pages per tab with previous/next button and optional arrow buttons in the title..
*
* - An optional popup menu which takes you to a specific page in a specific section (tab).
*
* - Easy additions of Ok, Cancel, Default and Help buttons.
*
* - Automatic resizing/repainting/repositioning of buttons. Not like QTabDialog where
* there is always an Ok button.
*
* - Scrollable tab bar.
*
* - Can be used as both modal/non-modal dialog and a child widget.
*
* @short KNoteBook
* @author Thomas Tanghus <tanghus@earthling.net>
* @version 0.2
*/
class KNoteBook : public QWidget
{
Q_OBJECT
public:
/**
* Constructs a KNoteBook.
*
* @see QDialog::QDialog
*
* @param parent
*
* @param name
*
* @param modal
*
* @param f
*/
KNoteBook(QWidget *parent = 0, const char *name = 0, bool modal = false, WFlags f = 0);
/**
* Destructor
*/
KNoteBook::~KNoteBook();
/**
* Adds a new tab to the notebook and creates a new @ref KWizard to hold the pages.
* The tabs are numbered from 0 to n where 0 is the tab first added and n is the
* tab last added. if you add 4 tabs the last tab will be number 4.
* Subsequent calls to @ref addPage will add pages to this tab this
* tab until a new call to addTab().
*
* @param title The title of the new tab.
*
* @param subtitle Title of the optional page.
*
* @param w If 'w' is not 0 it will be added as a new page with the title 'subtitle'.
* This is equivalent to @ref addPage(w, title);
*/
void addTab(const char *title, const char *subtitle = 0, QWidget *w = 0);
/**
* Adds a new page to the last added tab.
* The pages are numbered from 1 to n where 1 is the page first added and n is the
* page last added. Subsequent calls to @ref addPage will add pages to the last added
* tab until a new call to addTab().
*
* @param title The title of the new page.
*
* @param w The widget that will be displayed when this page is selected.
*/
void addPage(QWidget *w, const char *title);
/**
* Turn to another tab. This method calls @ref showSection to show the corresponding KWizard.
*
* @param tab The tab to turn to
*/
void gotoTab(int tab);
QSize sizeHint() { return minimumSize(); };
void adjustSize() { resize(sizeHint()); };
/**
* Adds a Cancel button to the bottom of the dialog. The text will be a translated
* version of the string '&Cancel' thereby giving it the shortcut key 'c'.
* If any buttons are added a space will be created at the bottom of the dialog
* to fit the buttons. When clicked the button will emit the @ref cancelclicked signal.
* @see KLocal::translate
*/
void setCancelButton();
/**
* Adds a Cancel button to the bottom of the dialog.
* @param text A user supplied text to write to the button.
*/
void setCancelButton(const char *text);
/**
* Adds a Default button to the bottom of the dialog. The text will be a translated
* version of the string '&Default' thereby giving it the shortcut key 'd'.
* If any buttons are added a space will be created at the bottom of the dialog
* to fit the buttons. When clicked the button will emit the @ref defaultclicked signal.
* @see KLocal::translate
*/
void setDefaultButton();
/**
* Adds a Default button to the bottom of the dialog.
* @param text A user supplied text to write to the button.
*/
void setDefaultButton(const char *text);
/**
* Adds a Help button to the bottom right of the dialog. The text will be a translated
* version of the string '&Help' thereby giving it the shortcut key 'h'.
* If any buttons are added a space will be created at the bottom of the dialog
* to fit the buttons. When clicked the button will emit the @ref helpclicked signal.
*/
void setHelpButton();
/**
* Adds a Help button to the bottom of the dialog. This button will generate the
* signal @ref helpclicked where the int is the page to which the help was requested.
* @param text A user supplied text to write to the button.
*/
void setHelpButton(const char *);
/**
* Adds an Ok button to the bottom right of the dialog. The text will be a translated
* version of the string '&Ok' thereby giving it the shortcut key 'o'.
* If any buttons are added a space will be created at the bottom of the dialog
* to fit the buttons. When clicked the button will emit the @ref okclicked signal.
*/
void setOkButton();
/**
* Adds an Ok button to the bottom of the dialog. This button will generate the
* signal @ref okclicked where the int is the page to which the help was requested.
* @param text A user supplied text to write to the button.
*/
void setOkButton(const char *);
/**
* @return Returns the Ok buttonwidget or 0L if no button is added.
*/
QPushButton *getOkButton() { return ok; };
/**
* @return Returns the Cancel buttonwidget or 0L if no button is added.
*/
QPushButton *getCancelButton() { return cancel; };
/**
* @return Returns the Default buttonwidget or 0L if no button is added.
*/
QPushButton *getDefaultButton() { return def; };
/**
* @return Returns the Help buttonwidget or 0L if no button is added.
*/
QPushButton *getHelpButton() { return help; };
/**
* Let direction buttons reflect page.
* @param state If state is true the direction buttons (Previous and Next) will have the
* title of the corresponding page.
*/
void setDirectionsReflectsPage(bool state);
/**
* @return Returns whether the direction buttons reflects the title of the corresponding page.
*
* @see setDirectionsReflectsPage(bool state)
*/
bool directionsReflectsPage() { return directionsreflectspage; setSizes(); };
/**
* En/Disable the popup menu.
* @param state If state is true a menu containing the pages in the wizard
* will popup when the user RMB-clicks on the page-title.
*/
void setEnablePopupMenu(bool state) { enablepopupmenu = state; };
/**
* @return Returns whether the menu is enabled or not.
*/
bool enablePopupMenu() { return enablepopupmenu; };
/**
* @return Returns the handle of the popup menu.
*/
QPopupMenu *getMenu() { return menu; };
/**
* En/Disable the arrowbuttons.
* @param state If state is true two arrows will appear to the right of the title.
* @see KWizard::setEnableArrowButtons.
*/
void setEnableArrowButtons(bool state);
/**
* @return Returns whether the arrow buttons are enabled or not.
*/
bool enableArrowButtons() { return enablearrowbuttons; };
/**
* Returns the handle of the tab bar.
*/
KTabBar *getTabBar() { return tabbar; };
/**
* Returns the number of tabs in the notebook.
*/
int numTabs() { return numtabs; };
/**
* En/Disable a tab in the notebook
*/
void setTabEnabled(int tab, bool state) { tabbar->setTabEnabled(tab, state); };
/**
* @return Returns whether the tab is enabled or not.
*/
bool isTabEnabled(int tab) { return tabbar->isTabEnabled(tab); };
signals:
/**
* This signal is emitted when the user clicks on the Ok button.
*/
void okclicked();
/**
* This signal is emitted when the user clicks on the Cancel button.
*/
void cancelclicked();
/**
* This signal is emitted when the user clicks on the Default button.
*/
void defaultclicked(int);
/**
* This signal is emitted when the user clicks on the Help button.
* The int is the page which was showing when help was requested.
* @see setHelpButton
*
* @see getHelpButton
*/
void helpclicked(int);
protected slots:
/**
* Called by @ref gotoTab to show the appropriate KWizard.
*/
void showSection(int);
/**
* the menu is enabled by @ref enablePopupMenu this methos will let the menu
* popup at 'pos'.
*/
void popupMenu(QPoint pos);
void menuChoice(int);
void menuChoiceRedirect(int);
void directionButton(bool, bool);
void okClicked();
void cancelClicked();
void defaultClicked();
void helpClicked();
void tabScroll( ArrowType );
protected:
void init();
void resizeEvent(QResizeEvent *);
void paintEvent(QPaintEvent *);
void setSizes();
QSize childSize();
KWizard *currentwiz;
QList<KWizard> sections;
QPushButton *cancel, *ok, *def, *help;
KTabBar *tabbar;
QWidget *main;
QPopupMenu *menu;
int current, numtabs, currentmenu;
bool enablepopupmenu, enablearrowbuttons, directionsreflectspage;
};
#endif __KNOTEBOOK_H
Documentation generated by tanghus@tang1 on Sun Feb 15 18:01:30 CET 1998