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.
k3b/src/k3binteractiondialog.h

281 lines
7.7 KiB

/*
*
* $Id: k3binteractiondialog.h 619556 2007-01-03 17:38:12Z trueg $
* Copyright (C) 2003 Sebastian Trueg <trueg@k3b.org>
*
* This file is part of the K3b project.
* Copyright (C) 1998-2007 Sebastian Trueg <trueg@k3b.org>
*
* 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.
* See the file "COPYING" for the exact licensing terms.
*/
#ifndef _K3B_INTERACTION_DIALOG_H_
#define _K3B_INTERACTION_DIALOG_H_
#include <kdialog.h>
class TQGridLayout;
class TQLabel;
class KPushButton;
class TQButton;
class K3bThemedHeader;
class KConfigBase;
class KGuiItem;
/**
* This is the base dialog for all the dialogs in K3b that start
* some job. Use setMainWidget to set the contents or let mainWidget()
* create an empty plain page.
* The default implementations of the slots just emit the
* corresponding signals.
*/
class K3bInteractionDialog : public KDialog
{
Q_OBJECT
TQ_OBJECT
public:
/**
* The constructor.
* loadUserDefaults will be called automatically when the dialog is showing.
*
* @param title the text to be displayed in the K3b header (not the widget frame)
* @param subTitle additional text that will be displayed after the title in smaller size
* @param buttonMask combination of Buttons
* @param defaultButton may also be null to deactivate the feature
* @param configgroup The config group used for the loadUserDefaults and saveUserDefaults methods
*/
K3bInteractionDialog( TQWidget* parent = 0,
const char* name = 0,
const TQString& title = TQString(),
const TQString& subTitle = TQString(),
int buttonMask = START_BUTTON|CANCEL_BUTTON,
int defaultButton = START_BUTTON,
const TQString& configgroup = TQString(),
bool modal = true,
WFlags fl = 0 );
virtual ~K3bInteractionDialog();
void setMainWidget( TQWidget* w );
void setTitle( const TQString& title, const TQString& subTitle = TQString() );
void setDefaultButton( int b );
/**
* Reimplemented for internal reasons. The API does not change.
*/
int exec();
/**
* @param returnOnHide if false the dialog can be hidden and shown without being closed.
* one needs to call close() to actually close the dialog.
*/
int exec( bool returnOnHide );
/**
* reimplemented to allow initialization after the dialog has been opened.
*/
void show();
/**
* Reimplemented for internal reasons. The API does not change.
*/
void hide();
/**
* Reimplemented for internal reasons. The API does not change.
*/
bool close( bool alsoDelete );
inline bool close() { return close( false ); }
/**
* If no mainWidget has been set a plain page will be created.
*/
TQWidget* mainWidget();
enum Buttons {
START_BUTTON = 1,
SAVE_BUTTON = 2,
CANCEL_BUTTON = 4
};
TQSize tqsizeHint() const;
const TQString& configGroup() const { return m_configGroup; }
/**
* K3b's dialogs use this method to determine if it is safe to hide when starting
* some action. Take for example the copy dialog which starts a copy job with a progress
* dialog. Both the job and the progress dialog are deleted by the copy dialog after the
* progress dialog has been closed. If the copy dialog would hide itself before starting
* the job and exitLoopOnHide() would return true the hiding would result in the exec call
* of the copy dialog to return. And what would that mean for the code after the hide()
* statement (deleting of the job and so on).
*
* \return true in case this dialog will not exit it's private event loop
* in case it is hidden.
*
* \see exec(bool)
*/
bool exitLoopOnHide() const { return m_exitLoopOnHide; }
enum StartUpSettings {
LOAD_K3B_DEFAULTS = 1,
LOAD_SAVED_SETTINGS = 2,
LOAD_LAST_SETTINGS = 3
};
signals:
void started();
void canceled();
void saved();
public slots:
/**
* \deprecated use setButtonText
*/
void setStartButtonText( const TQString& text,
const TQString& tooltip = TQString(),
const TQString& whatsthis = TQString() );
/**
* \deprecated use setButtonText
*/
void setCancelButtonText( const TQString& text,
const TQString& tooltip = TQString(),
const TQString& whatsthis = TQString() );
/**
* \deprecated use setButtonText
*/
void setSaveButtonText( const TQString& text,
const TQString& tooltip = TQString(),
const TQString& whatsthis = TQString() );
void setButtonGui( int button,
const KGuiItem& );
void setButtonText( int button,
const TQString& text,
const TQString& tooltip = TQString(),
const TQString& whatsthis = TQString() );
void setButtonEnabled( int button, bool enabled );
void setButtonShown( int button, bool enabled );
/**
* If set true the init() method will be called via a TQTimer to ensure event
* handling be done before (default: false).
*/
void setDelayedInitialization( bool b ) { m_delayedInit = b; }
protected slots:
// FIXME: replace these with protected methods which are called from private slots.
virtual void slotStartClicked();
/**
* The default implementation emits the canceled() signal
* and calls close()
*/
virtual void slotCancelClicked();
virtual void slotSaveClicked();
/**
* This slot will call the toggleAll() method protecting from infinite loops
* caused by one element influencing another element which in turn influences
* the first.
*
* Connect this slot to GUI elements (like Checkboxes) that change
* the state of the whole dialog.
*/
void slotToggleAll();
protected:
/**
* Reimplement this method in case you are using slotToggleAll()
*/
virtual void toggleAll();
/**
* Reimplement this to support the save/load user default buttons.
* @p config is already set to the correct group.
*
* The save/load buttons are only activated if the config group is
* set in the constructor.
*/
virtual void saveUserDefaults( KConfigBase* config );
/**
* Reimplement this to support the save/load user default buttons.
* @p config is already set to the correct group.
*
* The save/load buttons are only activated if the config group is
* set in the constructor.
*/
virtual void loadUserDefaults( KConfigBase* config );
/**
* Reimplement this to support the "k3b defaults" button.
* set all GUI options to reasonable defaults.
*/
virtual void loadK3bDefaults();
/**
* This is called after the dialog has been shown.
* Use this for initialization that should happen
* when the user already sees the dialog.
*/
virtual void init() {}
/**
* reimplemented from TQDialog
*/
virtual bool eventFilter( TQObject*, TQEvent* );
protected slots:
/**
* Reimplemented for internal reasons. The API does not change.
*/
virtual void done( int );
private slots:
void slotLoadK3bDefaults();
void slotLoadUserDefaults();
void slotSaveUserDefaults();
void slotLoadLastSettings();
void slotStartClickedInternal();
void slotDelayedInit();
private:
void initConnections();
void initToolTipsAndWhatsThis();
void saveLastSettings();
void loadStartupSettings();
KPushButton* getButton( int );
K3bThemedHeader* m_dialogHeader;
KPushButton* m_buttonStart;
KPushButton* m_buttonSave;
KPushButton* m_buttonCancel;
TQWidget* m_mainWidget;
TQButton* m_buttonLoadSettings;
TQButton* m_buttonSaveSettings;
TQGridLayout* mainGrid;
int m_defaultButton;
TQString m_configGroup;
bool m_exitLoopOnHide;
bool m_inLoop;
bool m_inToggleMode;
bool m_delayedInit;
};
#endif