diff options
Diffstat (limited to 'kdeui/kcombobox.h')
-rw-r--r-- | kdeui/kcombobox.h | 825 |
1 files changed, 0 insertions, 825 deletions
diff --git a/kdeui/kcombobox.h b/kdeui/kcombobox.h deleted file mode 100644 index d7d07e4b6..000000000 --- a/kdeui/kcombobox.h +++ /dev/null @@ -1,825 +0,0 @@ -/* This file is part of the KDE libraries - - Copyright (c) 2000,2001 Dawit Alemayehu <adawit@kde.org> - Copyright (c) 2000,2001 Carsten Pfeiffer <pfeiffer@kde.org> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License (LGPL) 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#ifndef _KCOMBOBOX_H -#define _KCOMBOBOX_H - -#include <tqlineedit.h> -#include <tqcombobox.h> -#include <tqvbox.h> -#include <tqlabel.h> -#include <tqlayout.h> -#include <tqtoolbutton.h> -#include <tqheader.h> - -#include <kcompletion.h> -#include <kdialogbase.h> -#include <klistview.h> - -class TQListBoxItem; -class TQPopupMenu; -class TQLineEdit; - -class KCompletionBox; -class KURL; - -/** - * @short An enhanced combo box. - * - * A combined button, line-edit and a popup list widget. - * - * \b Detail \n - * - * This widget inherits from TQComboBox and implements the following - * additional functionalities: a completion object that provides both automatic - * and manual text completion as well as text rotation features, configurable - * key-bindings to activate these features, and a popup-menu item that can be - * used to allow the user to change the text completion mode on the fly. - * - * To support these new features KComboBox emits a few additional signals - * such as completion( const TQString& ) and textRotation( KeyBindgingType ). - * The completion signal can be connected to a slot that will assist the user in - * filling out the remaining text while the rotation signal can be used to traverse - * through all possible matches whenever text completion results in multiple matches. - * Additionally, a returnPressed() and a returnPressed( const TQString& ) - * signals are emitted when the user presses the Enter/Return key. - * - * KCombobox by default creates a completion object when you invoke the - * completionObject( bool ) member function for the first time or - * explicitly use setCompletionObject( KCompletion*, bool ) to assign your - * own completion object. Additionally, to make this widget more functional, - * KComboBox will by default handle text rotation and completion events - * internally whenever a completion object is created through either one of the - * methods mentioned above. If you do not need this functionality, simply use - * @p setHandleSignals(bool) or alternatively set the boolean parameter in the - * @p setCompletionObject call to false. - * - * Beware: The completion object can be deleted on you, especially if a call - * such as setEditable(false) is made. Store the pointer at your own risk, - * and consider using TQGuardedPtr<KCompletion>. - * - * The default key-bindings for completion and rotation is determined from the - * global settings in KStdAccel. These values, however, can be overridden - * locally by invoking KCompletionBase::setKeyBinding(). The values can - * easily be reverted back to the default setting, by simply calling - * useGlobalSettings(). An alternate method would be to default individual - * key-bindings by usning setKeyBinding() with the default second argument. - * - * A non-editable combobox only has one completion mode, @p CompletionAuto. - * Unlike an editable combobox the CompletionAuto mode, works by matching - * any typed key with the first letter of entries in the combobox. Please note - * that if you call setEditable( false ) to change an editable combobox to a - * non-editable one, the text completion object associated with the combobox will - * no longer exist unless you created the completion object yourself and assigned - * it to this widget or you called setAutoDeleteCompletionObject( false ). In other - * words do not do the following: - * - * \code - * KComboBox* combo = new KCompletionBox(true, this, "mywidget"); - * KCompletion* comp = combo->completionObject(); - * combo->setEditable( false ); - * comp->clear(); // CRASH: completion object does not exist anymore. - * \endcode - * - * - * A read-only KComboBox will have the same background color as a - * disabled KComboBox, but its foreground color will be the one used for - * the read-write mode. This differs from QComboBox's implementation - * and is done to give visual distinction between the three different modes: - * disabled, read-only, and read-write. - * - * \b Usage \n - * - * To enable the basic completion feature: - * - * \code - * KComboBox *combo = new KComboBox( true, this, "mywidget" ); - * KCompletion *comp = combo->completionObject(); - * // Connect to the return pressed signal - optional - * connect(combo,TQT_SIGNAL(returnPressed(const TQString&)),comp,TQT_SLOT(addItem(const TQString&))); - * - * // Provide the to be completed strings. Note that those are separate from the combo's - * // contents. - * comp->insertItems( someQStringList ); - * \endcode - * - * To use your own completion object: - * - * \code - * KComboBox *combo = new KComboBox( this,"mywidget" ); - * KURLCompletion *comp = new KURLCompletion(); - * combo->setCompletionObject( comp ); - * // Connect to the return pressed signal - optional - * connect(combo,TQT_SIGNAL(returnPressed(const TQString&)),comp,TQT_SLOT(addItem(const TQString&))); - * \endcode - * - * Note that you have to either delete the allocated completion object - * when you don't need it anymore, or call - * setAutoDeleteCompletionObject( true ); - * - * Miscellaneous function calls: - * - * \code - * // Tell the widget not to handle completion and rotation - * combo->setHandleSignals( false ); - * // Set your own completion key for manual completions. - * combo->setKeyBinding( KCompletionBase::TextCompletion, Qt::End ); - * // Hide the context (popup) menu - * combo->setContextMenuEnabled( false ); - * \endcode - * - * @author Dawit Alemayehu <adawit@kde.org> - */ -class KDEUI_EXPORT KComboBox : public TQComboBox, public KCompletionBase -{ - Q_OBJECT - Q_PROPERTY( bool autoCompletion READ autoCompletion WRITE setAutoCompletion ) - Q_PROPERTY( bool contextMenuEnabled READ isContextMenuEnabled WRITE setContextMenuEnabled ) - Q_PROPERTY( bool urlDropsEnabled READ isURLDropsEnabled WRITE setURLDropsEnabled ) - Q_PROPERTY( bool trapReturnKey READ trapReturnKey WRITE setTrapReturnKey ) - -public: - - /** - * Constructs a read-only or rather select-only combo box with a - * parent object and a name. - * - * @param parent The parent object of this widget - * @param name The name of this widget - */ - KComboBox( TQWidget *parent=0, const char *name=0 ); - - /** - * Constructs a "read-write" or "read-only" combo box depending on - * the value of the first argument( @p rw ) with a parent, a - * name. - * - * @param rw When @p true, widget will be editable. - * @param parent The parent object of this widget. - * @param name The name of this widget. - */ - KComboBox( bool rw, TQWidget *parent=0, const char *name=0 ); - - /** - * Destructor. - */ - virtual ~KComboBox(); - - /** - * Sets @p url into the edit field of the combobox. It uses - * KURL::prettyURL() so that the url is properly decoded for - * displaying. - */ - void setEditURL( const KURL& url ); - - /** - * Inserts @p url at position @p index into the combobox. The item will - * be appended if @p index is negative. KURL::prettyURL() is used - * so that the url is properly decoded for displaying. - */ - void insertURL( const KURL& url, int index = -1 ); - - /** - * Inserts @p url with the pixmap &p pixmap at position @p index into - * the combobox. The item will be appended if @p index is negative. - * KURL::prettyURL() is used so that the url is properly decoded - * for displaying. - */ - void insertURL( const TQPixmap& pixmap, const KURL& url, int index = -1 ); - - /** - * Replaces the item at position @p index with @p url. - * KURL::prettyURL() is used so that the url is properly decoded - * for displaying. - */ - void changeURL( const KURL& url, int index ); - - /** - * Replaces the item at position @p index with @p url and pixmap @p pixmap. - * KURL::prettyURL() is used so that the url is properly decoded - * for displaying. - */ - void changeURL( const TQPixmap& pixmap, const KURL& url, int index ); - - /** - * Returns the current cursor position. - * - * This method always returns a -1 if the combo-box is @em not - * editable (read-write). - * - * @return Current cursor position. - */ - int cursorPosition() const { return ( lineEdit() ) ? lineEdit()->cursorPosition() : -1; } - - /** - * Re-implemented from TQComboBox. - * - * If @p true, the completion mode will be set to automatic. - * Otherwise, it is defaulted to the global setting. This - * method has been replaced by the more comprehensive - * setCompletionMode(). - * - * @param autocomplete Flag to enable/disable automatic completion mode. - */ - virtual void setAutoCompletion( bool autocomplete ); - - /** - * Re-implemented from TQComboBox. - * - * Returns @p true if the current completion mode is set - * to automatic. See its more comprehensive replacement - * completionMode(). - * - * @return @p true when completion mode is automatic. - */ - bool autoCompletion() const { - return completionMode() == KGlobalSettings::CompletionAuto; - } - - /** - * Enables or disable the popup (context) menu. - * - * This method only works if this widget is editable, i.e. - * read-write and allows you to enable/disable the context - * menu. It does nothing if invoked for a none-editable - * combo-box. Note that by default the mode changer item - * is made visiable whenever the context menu is enabled. - * Use hideModechanger() if you want to hide this - * item. Also by default, the context menu is created if - * this widget is editable. Call this function with the - * argument set to false to disable the popup menu. - * - * @param showMenu If @p true, show the context menu. - */ - virtual void setContextMenuEnabled( bool showMenu ); - - /** - * Returns @p true when the context menu is enabled. - */ - bool isContextMenuEnabled() const { return m_bEnableMenu; } - - /** - * Enables/Disables handling of URL drops. If enabled and the user - * drops an URL, the decoded URL will be inserted. Otherwise the default - * behavior of TQComboBox is used, which inserts the encoded URL. - * - * @param enable If @p true, insert decoded URLs - */ - void setURLDropsEnabled( bool enable ); - - /** - * Returns @p true when decoded URL drops are enabled - */ - bool isURLDropsEnabled() const; - - /** - * Convenience method which iterates over all items and checks if - * any of them is equal to @p text. - * - * If @p text is an empty string, @p false - * is returned. - * - * @return @p true if an item with the string @p text is in the combobox. - */ - bool contains( const TQString& text ) const; - - /** - * By default, KComboBox recognizes Key_Return and Key_Enter - * and emits the returnPressed() signals, but it also lets the - * event pass, for example causing a dialog's default-button to - * be called. - * - * Call this method with @p trap equal to true to make KComboBox - * stop these events. The signals will still be emitted of course. - * - * Only affects read-writable comboboxes. - * - * @see setTrapReturnKey() - */ - void setTrapReturnKey( bool trap ); - - /** - * @return @p true if keyevents of Key_Return or Key_Enter will - * be stopped or if they will be propagated. - * - * @see setTrapReturnKey () - */ - bool trapReturnKey() const; - - /** - * Re-implemented for internal reasons. API not affected. - */ - virtual bool eventFilter( TQObject *, TQEvent * ); - - /** - * @returns the completion-box, that is used in completion mode - * KGlobalSettings::CompletionPopup and KGlobalSettings::CompletionPopupAuto. - * This method will create a completion-box by calling - * KLineEdit::completionBox, if none is there, yet. - * - * @param create Set this to false if you don't want the box to be created - * i.e. to test if it is available. - */ - KCompletionBox * completionBox( bool create = true ); - - /** - * Re-implemented for internal reasons. API remains unaffected. - * NOTE: Only editable comboboxes can have a line editor. As such - * any attempt to assign a line-edit to a non-editable combobox will - * simply be ignored. - */ - virtual void setLineEdit( TQLineEdit * ); - -signals: - /** - * Emitted when the user presses the Enter key. - * - * Note that this signal is only emitted when the widget is editable. - */ - void returnPressed(); - - /** - * Emitted when the user presses the Enter key. - * - * The argument is the current text being edited. This signal is just like - * returnPressed() except it contains the current text as its argument. - * - * Note that this signal is only emitted when the - * widget is editable. - */ - void returnPressed( const TQString& ); - - /** - * Emitted when the completion key is pressed. - * - * The argument is the current text being edited. - * - * Note that this signal is @em not available when the widget is non-editable - * or the completion mode is set to @p KGlobalSettings::CompletionNone. - */ - void completion( const TQString& ); - - /** - * Emitted when the shortcut for substring completion is pressed. - */ - void substringCompletion( const TQString& ); - - /** - * Emitted when the text rotation key-bindings are pressed. - * - * The argument indicates which key-binding was pressed. In this - * case this can be either one of four values: @p PrevCompletionMatch, - * @p NextCompletionMatch, @p RotateUp or @p RotateDown. See - * @p setKeyBinding() for details. - * - * Note that this signal is @em NOT emitted if the completion - * mode is set to CompletionNone. - */ - void textRotation( KCompletionBase::KeyBindingType ); - - /** - * Emitted whenever the completion mode is changed by the user - * through the context menu. - */ - void completionModeChanged( KGlobalSettings::Completion ); - - /** - * Emitted before the context menu is displayed. - * - * The signal allows you to add your own entries into the context menu. - * Note that you MUST NOT store the pointer to the TQPopupMenu since it is - * created and deleted on demand. Otherwise, you can crash your app. - * - * @param p the context menu about to be displayed - */ - void aboutToShowContextMenu( TQPopupMenu * p ); - -public slots: - - /** - * Iterates through all possible matches of the completed text - * or the history list. - * - * Depending on the value of the argument, this function either - * iterates through the history list of this widget or the all - * possible matches in whenever multiple matches result from a - * text completion request. Note that the all-possible-match - * iteration will not work if there are no previous matches, i.e. - * no text has been completed and the *nix shell history list - * rotation is only available if the insertion policy for this - * widget is set either @p QComobBox::AtTop or @p TQComboBox::AtBottom. - * For other insertion modes whatever has been typed by the user - * when the rotation event was initiated will be lost. - * - * @param type The key-binding invoked. - */ - void rotateText( KCompletionBase::KeyBindingType type ); - - /** - * Sets the completed text in the line-edit appropriately. - * - * This function is a re-implementation of @p setCompletedText. - */ - virtual void setCompletedText( const TQString& ); - - /** - * Sets @p items into the completion-box if completionMode() is - * CompletionPopup. The popup will be shown immediately. - */ - void setCompletedItems( const TQStringList& items ); - - /** - * Selects the first item that matches @p item. If there is no such item, - * it is inserted at position @p index if @p insert is true. Otherwise, - * no item is selected. - */ - void setCurrentItem( const TQString& item, bool insert = false, int index = -1 ); - - /** - * Simply calls QComboBox' implementation. Only here to not become - * shadowed. - */ - void setCurrentItem(int index) { TQComboBox::setCurrentItem(index); } - -protected slots: - - /** - * @deprecated - */ - virtual void itemSelected( TQListBoxItem* ) {} - - /** - * Completes text according to the completion mode. - * - * Note: this method is @p not invoked if the completion mode is - * set to CompletionNone. Also if the mode is set to @p CompletionShell - * and multiple matches are found, this method will complete the - * text to the first match with a beep to inidicate that there are - * more matches. Then any successive completion key event iterates - * through the remaining matches. This way the rotation functionality - * is left to iterate through the list as usual. - */ - virtual void makeCompletion( const TQString& ); - -protected: - /* - * This function simply sets the lineedit text and - * highlights the text appropriately if the boolean - * value is set to true. - * - * @param - * @param - */ - virtual void setCompletedText( const TQString& /* */, bool /*marked*/ ); - - /** - * Reimplemented for internal reasons, the API is not affected. - */ - virtual void create( WId = 0, bool initializeWindow = true, - bool destroyOldWindow = true ); - - virtual void wheelEvent( TQWheelEvent *ev ); - -private slots: - void lineEditDeleted(); - -private: - /** - * Initializes the variables upon construction. - */ - void init(); - bool m_bEnableMenu; // ### BCI: unused, remove in KDE4 - bool m_trapReturnKey; // ### BCI: unused, remove in KDE4 - -protected: - virtual void virtual_hook( int id, void* data ); - -private: - class KComboBoxPrivate; - KComboBoxPrivate* const d; -}; - - -class KPixmapProvider; - -/** - * @short A combobox for offering a history and completion - * - * A combobox which implements a history like a unix shell. You can navigate - * through all the items by using the Up or Down arrows (configurable of - * course). Additionally, weighted completion is available. So you should - * load and save the completion list to preserve the weighting between - * sessions. - * - * KHistoryCombo obeys the HISTCONTROL environment variable to determine - * whether duplicates in the history should be tolerated in - * addToHistory() or not. During construction of KHistoryCombo, - * duplicates will be disabled when HISTCONTROL is set to "ignoredups" or - * "ignoreboth". Otherwise, duplicates are enabled by default. - * - * @author Carsten Pfeiffer <pfeiffer@kde.org> - */ -class KDEUI_EXPORT KHistoryCombo : public KComboBox -{ - Q_OBJECT - Q_PROPERTY( TQStringList historyItems READ historyItems WRITE setHistoryItems ) - -public: - /** - * Constructs a "read-write" combobox. A read-only history combobox - * doesn't make much sense, so it is only available as read-write. - * Completion will be used automatically for the items in the combo. - * - * The insertion-policy is set to NoInsertion, you have to add the items - * yourself via the slot addToHistory. If you want every item added, - * use - * - * \code - * connect( combo, TQT_SIGNAL( activated( const TQString& )), - * combo, TQT_SLOT( addToHistory( const TQString& ))); - * \endcode - * - * Use TQComboBox::setMaxCount() to limit the history. - * - * @p parent the parent object of this widget. - * @p name the name of this widget. - */ - KHistoryCombo( TQWidget *parent = 0L, const char *name = 0L ); - - // ### merge these two constructors - /** - * Same as the previous constructor, but additionally has the option - * to specify whether you want to let KHistoryCombo handle completion - * or not. If set to @p true, KHistoryCombo will sync the completion to the - * contents of the combobox. - */ - KHistoryCombo( bool useCompletion, - TQWidget *parent = 0L, const char *name = 0L ); - - /** - * Destructs the combo, the completion-object and the pixmap-provider - */ - ~KHistoryCombo(); - - /** - * Inserts @p items into the combobox. @p items might get - * truncated if it is longer than maxCount() - * - * @see historyItems - */ - inline void setHistoryItems( TQStringList items ) { - setHistoryItems(items, false); - } - - /** - * Inserts @p items into the combobox. @p items might get - * truncated if it is longer than maxCount() - * - * Set @p setCompletionList to true, if you don't have a list of - * completions. This tells KHistoryCombo to use all the items for the - * completion object as well. - * You won't have the benefit of weighted completion though, so normally - * you should do something like - * \code - * KConfig *config = kapp->config(); - * TQStringList list; - * - * // load the history and completion list after creating the history combo - * list = config->readListEntry( "Completion list" ); - * combo->completionObject()->setItems( list ); - * list = config->readListEntry( "History list" ); - * combo->setHistoryItems( list ); - * - * [...] - * - * // save the history and completion list when the history combo is - * // destroyed - * list = combo->completionObject()->items() - * config->writeEntry( "Completion list", list ); - * list = combo->historyItems(); - * config->writeEntry( "History list", list ); - * \endcode - * - * Be sure to use different names for saving with KConfig if you have more - * than one KHistoryCombo. - * - * Note: When @p setCompletionList is true, the items are inserted into the - * KCompletion object with mode KCompletion::Insertion and the mode is set - * to KCompletion::Weighted afterwards. - * - * @see historyItems - * @see KComboBox::completionObject - * @see KCompletion::setItems - * @see KCompletion::items - */ - void setHistoryItems( TQStringList items, bool setCompletionList ); - - /** - * Returns the list of history items. Empty, when this is not a read-write - * combobox. - * - * @see setHistoryItems - */ - TQStringList historyItems() const; - - /** - * Removes all items named @p item. - * - * @return @p true if at least one item was removed. - * - * @see addToHistory - */ - bool removeFromHistory( const TQString& item ); - - /** - * Sets a pixmap provider, so that items in the combobox can have a pixmap. - * KPixmapProvider is just an abstract class with the one pure virtual - * method KPixmapProvider::pixmapFor(). This method is called whenever - * an item is added to the KHistoryComboBox. Implement it to return your - * own custom pixmaps, or use the KURLPixmapProvider from libkio, - * which uses KMimeType::pixmapForURL to resolve icons. - * - * Set @p prov to 0L if you want to disable pixmaps. Default no pixmaps. - * - * @see pixmapProvider - */ - void setPixmapProvider( KPixmapProvider *prov ); - - /** - * @returns the current pixmap provider. - * @see setPixmapProvider - * @see KPixmapProvider - */ - KPixmapProvider * pixmapProvider() const { return myPixProvider; } - - /** - * Resets the current position of the up/down history. Call this - * when you manually call setCurrentItem() or clearEdit(). - */ - void reset() { slotReset(); } - - /** - * When enabling it you have to connect to "removed" signal and save changes - */ - void setHistoryEditorEnabled( bool enable ); - bool isHistoryEditorEnabled() const; - -public slots: - /** - * Adds an item to the end of the history list and to the completion list. - * If maxCount() is reached, the first item of the list will be - * removed. - * - * If the last inserted item is the same as @p item, it will not be - * inserted again. - * - * If duplicatesEnabled() is false, any equal existing item will be - * removed before @p item is added. - * - * Note: By using this method and not the Q and KComboBox insertItem() - * methods, you make sure that the combobox stays in sync with the - * completion. It would be annoying if completion would give an item - * not in the combobox, and vice versa. - * - * @see removeFromHistory - * @see TQComboBox::setDuplicatesEnabled - */ - void addToHistory( const TQString& item ); - - /** - * Clears the history and the completion list. - */ - void clearHistory(); - -signals: - /** - * Emitted when the history was cleared by the entry in the popup menu. - */ - void cleared(); - - void removed( const TQString& item ); - -protected: - /** - * Handling key-events, the shortcuts to rotate the items. - */ - virtual void keyPressEvent( TQKeyEvent * ); - - /** - * Handling wheel-events, to rotate the items. - */ - virtual void wheelEvent( TQWheelEvent *ev ); - - /** - * Inserts @p items into the combo, honoring pixmapProvider() - * Does not update the completionObject. - * - * Note: duplicatesEnabled() is not honored here. - * - * Called from setHistoryItems() and setPixmapProvider() - */ - void insertItems( const TQStringList& items ); - - /** - * @returns if we can modify the completion object or not. - */ - bool useCompletion() const { return compObj(); } - -private slots: - /** - * Resets the iterate index to -1 - */ - void slotReset(); - - /** - * Called from the popupmenu, - * calls clearHistory() and emits cleared() - */ - void slotClear(); - - /** - * Called from the popupmenu, - */ - void slotEdit(); - - /** - * Appends our own context menu entry. - */ - void addContextMenuItems( TQPopupMenu* ); - - void slotRemoveFromHistory( const TQString & ); - -private: - void init( bool useCompletion ); - void rotateUp(); - void rotateDown(); - - /** - * The current position (index) in the combobox, used for Up and Down - */ - int myIterateIndex; - - /** - * The text typed before Up or Down was pressed. - */ - TQString myText; - - /** - * Indicates that the user at least once rotated Up through the entire list - * Needed to allow going back after rotation. - */ - bool myRotated; - KPixmapProvider *myPixProvider; - -protected: - virtual void virtual_hook( int id, void* data ); -private: - class KHistoryComboPrivate; - KHistoryComboPrivate* const d; -}; - -class KDEUI_EXPORT KHistoryComboEditor : public KDialogBase -{ - Q_OBJECT - -public: - KHistoryComboEditor( const TQStringList& entries, TQWidget *parent = 0L ); - ~KHistoryComboEditor(); - -signals: - void removeFromHistory( const TQString& ); - -protected slots: - virtual void slotUser1(); // User1 is "Delete Entry" button - void slotSelectionChanged( TQListViewItem * item ); - -protected: - virtual void virtual_hook( int id, void* data ); - -private: - KListView *m_pListView; - - class KHistoryComboEditorPrivate; - KHistoryComboEditorPrivate* const d; -}; - -#endif - |