diff options
Diffstat (limited to 'kio/kfile/knotifydialog.h')
-rw-r--r-- | kio/kfile/knotifydialog.h | 341 |
1 files changed, 341 insertions, 0 deletions
diff --git a/kio/kfile/knotifydialog.h b/kio/kfile/knotifydialog.h new file mode 100644 index 000000000..3d4074fd0 --- /dev/null +++ b/kio/kfile/knotifydialog.h @@ -0,0 +1,341 @@ +/* + Copyright (C) 2000,2002 Carsten Pfeiffer <pfeiffer@kde.org> + Copyright (C) 2002 Neil Stevens <neil@qualityassistant.com> + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation; + + 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, If not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#ifndef KNOTIFYDIALOG_H +#define KNOTIFYDIALOG_H + +#include <klistview.h> +#include <kdialogbase.h> +#include <kinstance.h> +#include <kglobal.h> + +#include "knotifywidgetbase.h" + +class QShowEvent; + +namespace KNotify +{ + class KNotifyWidget; +} + +/** + * KNotifyDialog presents an interface for configuring an application's + * KNotify events. + * + * Rather than requiring the user to wade through the entire list of + * applications' events in KControl, your application can make the list + * of its own notifications available here. + * + * Typical usage is calling the static configure() method: + * \code + * (void) KNotifyDialog::configure( someParentWidget ); + * \endcode + * + * @since 3.1 + * @author Carsten Pfeiffer <pfeiffer@kde.org> + */ +class KIO_EXPORT KNotifyDialog : public KDialogBase +{ + Q_OBJECT + +public: + /** + * If you want a non-modal dialog, you need to instantiate KNotifyDialog + * yourself instead of using the configure() method. + * + * KDE4.0 modal default will be false. + * + * @param parent The parent widget for the dialog + * @param name The widget name + * @param modal If true, this will be a modal dialog, otherwise non-modal. + * @param aboutData A pointer to a KAboutData object. KAboutData::appName() + * will be used to find the KNotify events (in the eventsrc file). + * Set this to 0L if you want to add all events yourself with + * addApplicationEvents(). + */ + KNotifyDialog( QWidget *parent = 0, const char *name = 0, + bool modal = true, + const KAboutData *aboutData = + KGlobal::instance()->aboutData() ); + /** + * Destroys the KNotifyDialog + */ + virtual ~KNotifyDialog(); + + /** + * Convenience method to create exec() a modal KNotifyDialog. + * + * @param parent The parent widget for the dialog + * @param name The widget name + * @param aboutData A pointer to a KAboutData object. KAboutData::appName() + * will be used to find the KNotify events (in the eventsrc file). + * @see exec for the return values. + * @return The value of QDialog::exec() + */ + static int configure( QWidget *parent = 0, const char *name = 0, + const KAboutData *aboutData = KGlobal::instance()->aboutData() ); + + /** + * With this method, you can add the KNotify events of one eventsrc + * files to the view. + * KNotifyDialog can handle events for multiple applications (i.e. eventsrc files). + * Successive calls with a different @p appName will add them. + * @param appName The application's name, i.e. the name passed to the + * KApplication constructor or KAboutData. + * @see clearApplicationEvents() + */ + virtual void addApplicationEvents( const char *appName ); + + /** + * With this method, you can add the KNotify events of one eventsrc + * files to the view. + * KNotifyDialog can handle events for multiple applications (i.e. eventsrc files). + * Successive calls with a different @p path will add them. + * @param path The absolute or relative path to the eventsrc file to be configured. + * A relative path would be e.g. "kwin/eventsrc". + * @see clearApplicationEvents() + */ + virtual void addApplicationEvents( const QString& path ); + + /** + * Removes all the events added with addApplicationEvents() + * @see addApplicationEvents() + */ + virtual void clearApplicationEvents(); + +private slots: + void slotDefault(); + +private: + enum + { + COL_FILENAME = 1 + }; + + void updateView(); + + KNotify::KNotifyWidget * m_notifyWidget; + + class Private; + Private *d; +}; + + +namespace KNotify +{ + class Application; + class Event; + class ListViewItem; + typedef QPtrList<Event> EventList; + typedef QPtrListIterator<Application> ApplicationListIterator; + typedef QPtrListIterator<Event> EventListIterator; + + /** + * @internal + */ + class KIO_EXPORT Application + { + public: + Application( const QString &path ); + ~Application(); + + QString text() const { return m_description; } + QString icon() const { return m_icon; } + const EventList& eventList(); + void reloadEvents( bool revertToDefaults = false ); + void save(); + + QString appName() const { return m_appname; } + + private: + QString m_icon; + QString m_description; + QString m_appname; + EventList *m_events; + + KConfig *kc; // The file that defines the events. + KConfig *config; // The file that contains the settings for the events + }; + + + class KIO_EXPORT ApplicationList : public QPtrList<Application> + { + virtual int compareItems ( QPtrCollection::Item item1, + QPtrCollection::Item item2 ) + { + return (static_cast<Application*>( item1 )->text() >= + static_cast<Application*>( item2 )->text()) ? 1 : -1; + } + }; + + /** + * @internal + */ + class KIO_EXPORT KNotifyWidget : public KNotifyWidgetBase + { + Q_OBJECT + + public: + KNotifyWidget( QWidget* parent = 0, const char* name = 0, + bool handleAllApps = false ); + ~KNotifyWidget(); + + KListView * eventsView() { + return m_listview; + } + + void addVisibleApp( Application *app ); + ApplicationList& visibleApps() { return m_visibleApps; } + ApplicationList& allApps() { return m_allApps; } + + /** + * Returns 0L if no application events could be found + * The returned pointer must be freed by the caller (easiest done + * by putting it into an ApplicationList with setAutoDelete( true )). + */ + Application * addApplicationEvents( const QString& path ); + + void resetDefaults( bool ask ); + void sort( bool ascending = true ); + + public slots: + /** + * Clears the view and all the Application events. + */ + virtual void clear(); + /** + * Clears only the view and the visible Application events. + * E.g. useful if you want to set new visible events with + * addVisibleApp() + */ + virtual void clearVisible(); + virtual void save(); + virtual void showAdvanced( bool show ); + void toggleAdvanced(); + + + signals: + void changed( bool hasChanges ); + + protected: + /** + * May return 0L, if there is no current event selected. + */ + Event * currentEvent(); + virtual void showEvent( QShowEvent * ); + virtual void enableAll( int what, bool enable ); + + void reload( bool revertToDefaults = false ); + + protected slots: + void playSound(); + + private slots: + void slotItemClicked( QListViewItem *item, const QPoint& point, + int col ); + void slotEventChanged( QListViewItem * ); + void soundToggled( bool on ); + void loggingToggled( bool on ); + void executeToggled( bool on ); + void messageBoxChanged(); + void stderrToggled( bool on ); + void taskbarToggled( bool on ); + + void soundFileChanged( const QString& text ); + void logfileChanged( const QString& text ); + void commandlineChanged( const QString& text ); + + void openSoundDialog( KURLRequester * ); + void openLogDialog( KURLRequester * ); + void openExecDialog( KURLRequester * ); + + void enableAll(); + + private: + void updateWidgets( ListViewItem *item ); + void updatePixmaps( ListViewItem *item ); + + static QString makeRelative( const QString& ); + void addToView( const EventList& events ); + void widgetChanged( QListViewItem *item, + int what, bool on, QWidget *buddy = 0L ); + void selectItem( QListViewItem *item ); + + ApplicationList m_visibleApps; + ApplicationList m_allApps; + + class Private; + Private *d; + + }; + + +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// + + + /** + * @internal + */ + class Event + { + friend class Application; + + public: + QString text() const { return description; } + + int presentation; + int dontShow; + QString logfile; + QString soundfile; + QString commandline; + + const Application *application() const { return m_app; } + + private: + Event( const Application *app ) { + presentation = 0; + dontShow = 0; + m_app = app; + } + QString name; + QString description; + QString configGroup; + + const Application *m_app; + }; + + /** + * @internal + */ + class ListViewItem : public QListViewItem + { + public: + ListViewItem( QListView *view, Event *event ); + + Event& event() { return *m_event; } + virtual int compare (QListViewItem * i, int col, bool ascending) const; + + private: + Event * m_event; + }; + +} + + +#endif |