summaryrefslogtreecommitdiffstats
path: root/kio/kfile/knotifydialog.h
diff options
context:
space:
mode:
Diffstat (limited to 'kio/kfile/knotifydialog.h')
-rw-r--r--kio/kfile/knotifydialog.h341
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