|
|
/* This file is part of the KDE project Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> Copyright (c) 1999, 2000 Preston Brown <pbrown@kde.org> Copyright (c) 2000 Simon Hausmann <hausmann@kde.org> This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library 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. */ /* * This file holds the definitions for all classes used to * display a properties dialog. */ #ifndef __propsdlg_h #define __propsdlg_h #include <qstring.h> #include <qlist.h> #include <kurl.h> #include <kfileitem.h> #include <kdialogbase.h> class QLineEdit; class QCheckBox; class QPushButton; class KLineEdit; class KURLRequester; class KIconButton; class KPropsDlgPlugin; #define KPropsPage KPropsDlgPlugin namespace KIO { class Job; } /** * The main properties dialog class. * A Properties Dialog is a dialog which displays various information * about a particular file or URL. This main class holds various * related classes, which are instantiated in the form of tab entries * in the tabbed dialog that this class provides. The various tabs * themselves will let the user view or change information about the file * or URL. * * This class must be created with (void)new PropertiesDialog(...) * It will take care of deleting itself. */ class KPropertiesDialog : public KDialogBase { Q_OBJECT public: /** * @return whether there are any property pages available for the * given file items */ static bool canDisplay( KFileItemList _items ); /** * Bring up a Properties dialog. Normal constructor for * file-manager-like applications. Normally you will use this * method rather than the one below. * * @param item file item whose properties should be displayed. * @param parent is the parent of the dialog widget. * @param name is the internal name. * @param modal tells the dialog whether it should be modal. * @param autoShow tells the dialog whethr it should show itself automatically. */ KPropertiesDialog( KFileItem * item, QWidget* parent = 0L, const char* name = 0L, bool modal = false, bool autoShow = true); /** * Bring up a Properties dialog. Normal constructor for * file-manager-like applications. * * @param _items list of file items whose properties should be * displayed. NOTE : the current limitations of PropertiesDialog * makes it use only the FIRST item in the list. This method is * provided for future expansion when the properties dialog may be * able to get/set properties for a group of items all at once. * * @param parent is the parent of the dialog widget. * @param name is the internal name. * @param modal tells the dialog whether it should be modal. * @param autoShow tells the dialog whethr it should show itself automatically. */ KPropertiesDialog( KFileItemList _items, QWidget *parent = 0L, const char* name = 0L, bool modal = false, bool autoShow = true); /** * Bring up a Properties dialog. Convenience constructor for * non-file-manager applications. * * @param _url the URL whose properties should be displayed * @param _mode the mode, as returned by stat(). Don't set if unknown. * @param parent is the parent of the dialog widget. * @param name is the internal name. * @param modal tells the dialog whether it should be modal. * @param autoShow tells the dialog whethr it should show itself automatically. */ KPropertiesDialog( const KURL& _url, mode_t _mode = (mode_t) -1, QWidget* parent = 0L, const char* name = 0L, bool modal = false, bool autoShow = true); /** * Create a properties dialog for a new .desktop file (whose name * is not known yet), based on a template. Special constructor for * "File / New" in file-manager applications. * * @param _templUrl template used for reading only * @param _currentDir directory where the file will be written to * @param _defaultName something to put in the name field, * like mimetype.desktop * @param parent is the parent of the dialog widget. * @param name is the internal name. * @param modal tells the dialog whether it should be modal. * @param autoShow tells the dialog whethr it should show itself automatically. */ KPropertiesDialog( const KURL& _tempUrl, const KURL& _currentDir, const QString& _defaultName, QWidget* parent = 0L, const char* name = 0L, bool modal = false, bool autoShow = true); /** * Create an empty properties dialog (for applications that want use * a standard dialog, but for things not doable via the plugin-mechanism. * * @param title is the string display as the "filename" in the caption of the dialog. * @param parent is the parent of the dialog widget. * @param name is the internal name. * @param modal tells the dialog whether it should be modal. */ KPropertiesDialog (const QString& title, QWidget* parent = 0L, const char* name = 0L, bool modal = false); /** * Cleans up the properties dialog and frees any associated resources, * including the dialog itself. Note that when a properties dialog is * closed it cleans up and deletes itself. */ virtual ~KPropertiesDialog(); /** * Adds a "3rd party" properties plugin to the dialog. Useful * for extending the properties mechanism. * * To create a new lugin type, inherit from the base class KPropsPlugin * and implement all the methods. * * @param plugin is a pointer to the PropsPlugin. The Properties * dialog will do destruction for you. The KPropsPlugin MUST * have been created with the KPropertiesDialog as its parent. * @see KPropsDlgPlugin */ void insertPlugin (KPropsDlgPlugin *plugin); /** * @return a parsed URL. * Valid only if dialog shown for one file/url. */ const KURL& kurl() const { return m_singleUrl; } /** * @return the file item for which the dialog is shown * HACK : returns the first item of the list */ KFileItem *item() { return m_items.first(); } KFileItemList items() const { return m_items; } /** * @return a pointer to the dialog * @deprecated */ KDialogBase* dialog() { return this; } const KDialogBase* dialog() const { return this; } /** * If we are building this dialog from a template, * @return the current directory * QString::null means no template used */ const KURL& currentDir() const { return m_currentDir; } /** * If we are building this dialog from a template, * @return the default name (see 3rd constructor) * QString::null means no template used */ const QString& defaultName() const { return m_defaultName; } /** * Updates the item url (either called by rename or because * a global apps/mimelnk desktop file is being saved) * @param _name new URL */ void updateUrl( const KURL& _newUrl ); /** * #see FilePropsPlugin::applyChanges * @param _name new filename, encoded. */ void rename( const QString& _name ); /** * To abort applying changes */ void abortApplying(); public slots: /** * Called when the user presses 'Ok'. */ virtual void slotOk(); // Deletes the PropertiesDialog instance virtual void slotCancel(); // Deletes the PropertiesDialog instance signals: /** * Notify that we have finished with the properties (be it Apply or Cancel) */ void propertiesClosed(); void applied(); void canceled(); private: /** * Common initialization for all constructors */ void init (bool modal = false, bool autoShow = true); /** * Inserts all pages in the dialog. */ void insertPages(); /** * The URL of the props dialog (when shown for only one file) */ KURL m_singleUrl; /** * List of items this props dialog is shown for */ KFileItemList m_items; /** For templates */ QString m_defaultName; KURL m_currentDir; /** * List of all plugins inserted ( first one first ) */ QList<KPropsDlgPlugin> m_pageList; private slots: void slotDeleteMyself(); private: class KPropertiesDialogPrivate; KPropertiesDialogPrivate *d; }; /** * A Plugin in the Properties dialog * This is an abstract class. You must inherit from this class * to build a new kind of page. */ class KPropsDlgPlugin : public QObject { Q_OBJECT public: /** * Constructor * To insert tabs into the properties dialog, use the add methods provided by * KDialogBase (via props->dialog() ) */ KPropsDlgPlugin( KPropertiesDialog *_props ); virtual ~KPropsDlgPlugin(); /** * Apply all changes to the file. * This function is called when the user presses 'Ok'. The last plugin inserted * is called first. */ virtual void applyChanges(); /** * Convenience method for most ::supports methods * @return true if the file is a local, regular, readable, desktop file */ static bool isDesktopFile( KFileItem * _item ); void setDirty( bool b ); bool isDirty() const; public slots: void setDirty(); // same as setDirty( true ) signals: /** * Emit this event when the user changed anything the plugin's tabs. * The hosting PropertiesDialog will call @ref applyChanges only if the * PropsPlugin emits the changed event. */ void changed(); protected: /** * Pointer to the dialog */ KPropertiesDialog *properties; int fontHeight; private: class KPropsDlgPluginPrivate; KPropsDlgPluginPrivate *d; }; /** * 'General' plugin * This plugin displays the name of the file, its size and access times. * @internal */ class KFilePropsPlugin : public KPropsDlgPlugin { Q_OBJECT public: /** * Constructor */ KFilePropsPlugin( KPropertiesDialog *_props ); virtual ~KFilePropsPlugin(); /** * Applies all changes made. This plugin must be always the first * plugin in the dialog, since this function may rename the file which * may confuse other applyChanges functions. */ virtual void applyChanges(); /** * Tests whether the files specified by _items need a 'General' plugin. */ static bool supports( KFileItemList _items ); /** * Called after all plugins applied their changes */ void postApplyChanges(); protected slots: void slotCopyFinished( KIO::Job * ); void slotFileRenamed( KIO::Job *, const KURL &, const KURL & ); void slotDirSizeFinished( KIO::Job * ); void slotSizeStop(); void slotSizeDetermine(); private: void determineRelativePath( const QString & path ); QWidget *iconArea; QWidget *nameArea; QLabel *m_sizeLabel; QPushButton *m_sizeDetermineButton; QPushButton *m_sizeStopButton; QString m_sRelativePath; bool m_bFromTemplate; /** * The initial filename */ QString oldName; class KFilePropsPluginPrivate; KFilePropsPluginPrivate *d; }; /** * 'Permissions' plugin * In this plugin you can modify permissions and change * the owner of a file. * @internal */ class KFilePermissionsPropsPlugin : public KPropsDlgPlugin { Q_OBJECT public: /** * Constructor */ KFilePermissionsPropsPlugin( KPropertiesDialog *_props ); virtual ~KFilePermissionsPropsPlugin(); virtual void applyChanges(); /** * Tests whether the file specified by _items needs a 'Permissions' plugin. */ static bool supports( KFileItemList _items ); private slots: void slotChmodResult( KIO::Job * ); private: QCheckBox *permBox[3][4]; QComboBox *grpCombo; KLineEdit *usrEdit, *grpEdit; /** * Old permissions */ mode_t permissions; /** * Old group */ QString strGroup; /** * Old owner */ QString strOwner; /** * Changeable Permissions */ static mode_t fperm[3][4]; class KFilePermissionsPropsPluginPrivate; KFilePermissionsPropsPluginPrivate *d; }; /** * Used to edit the files containing * [Desktop Entry] * Type=Application * * Such files are used to represent a program in kpanel and kfm. * @internal */ class KExecPropsPlugin : public KPropsDlgPlugin { Q_OBJECT public: /** * Constructor */ KExecPropsPlugin( KPropertiesDialog *_props ); virtual ~KExecPropsPlugin(); virtual void applyChanges(); static bool supports( KFileItemList _items ); public slots: void slotBrowseExec(); private slots: void enableCheckedEdit(); void enableSuidEdit(); private: KLineEdit *execEdit; QCheckBox *terminalCheck; QCheckBox *suidCheck; KLineEdit *terminalEdit; KLineEdit *suidEdit; KLineEdit *swallowExecEdit; KLineEdit *swallowTitleEdit; QButton *execBrowse; QString execStr; QString swallowExecStr; QString swallowTitleStr; QString termOptionsStr; bool termBool; bool suidBool; QString suidUserStr; class KExecPropsPluginPrivate; KExecPropsPluginPrivate *d; }; /** * Used to edit the files containing * [Desktop Entry] * URL=.... * * Such files are used to represent a program in kpanel and kfm. * @internal */ class KURLPropsPlugin : public KPropsDlgPlugin { Q_OBJECT public: /** * Constructor */ KURLPropsPlugin( KPropertiesDialog *_props ); virtual ~KURLPropsPlugin(); virtual void applyChanges(); static bool supports( KFileItemList _items ); private: KURLRequester *URLEdit; KIconButton *iconBox; QString URLStr; QString iconStr; QPixmap pixmap; QString pixmapFile; private: class KURLPropsPluginPrivate; KURLPropsPluginPrivate *d; }; /** * Used to edit the files containing * [Desktop Entry] * Type=Application * * Such files are used to represent a program in kpanel and kfm. * @internal */ class KApplicationPropsPlugin : public KPropsDlgPlugin { Q_OBJECT public: /** * Constructor */ KApplicationPropsPlugin( KPropertiesDialog *_props ); virtual ~KApplicationPropsPlugin(); virtual void applyChanges(); static bool supports( KFileItemList _items ); public slots: void slotDelExtension(); void slotAddExtension(); private: void addMimeType( const QString & name ); QLineEdit *commentEdit; QLineEdit *nameEdit; QListBox *extensionsList; QListBox *availableExtensionsList; QPushButton *addExtensionButton; QPushButton *delExtensionButton; class KApplicationPropsPluginPrivate; KApplicationPropsPluginPrivate *d; }; /** * Used to edit the files containing * [Desktop Entry] * Type=MimeType * @internal */ class KBindingPropsPlugin : public KPropsDlgPlugin { Q_OBJECT public: /** * Constructor */ KBindingPropsPlugin( KPropertiesDialog *_props ); virtual ~KBindingPropsPlugin(); virtual void applyChanges(); static bool supports( KFileItemList _items ); private: QLineEdit *commentEdit; QLineEdit *patternEdit; QLineEdit *mimeEdit; QString m_sMimeStr; QCheckBox * cbAutoEmbed; class KBindingPropsPluginPrivate; KBindingPropsPluginPrivate *d; }; /** * Properties plugin for device .desktop files * @internal */ class KDevicePropsPlugin : public KPropsDlgPlugin { Q_OBJECT public: KDevicePropsPlugin( KPropertiesDialog *_props ); virtual ~KDevicePropsPlugin(); virtual void applyChanges(); static bool supports( KFileItemList _items ); private slots: void slotActivated( int ); private: QComboBox* device; QLineEdit* mountpoint; QCheckBox* readonly; QLineEdit* fstype; //KIconButton* mounted; KIconButton* unmounted; QStringList m_devicelist; int indexDevice; int indexMountPoint; int indexFSType; QPixmap pixmap; QString pixmapFile; class KDevicePropsPluginPrivate; KDevicePropsPluginPrivate *d; }; #endif
Generated by: dfaure on Tue Feb 27 12:47:11 2001, using kdoc 2.0a50. |