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.
tdelibs/kio/kfile/knotifydialog.h

342 lines
9.7 KiB

/*
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