/*************************************************************************** kmymoneyselector.h ------------------- begin : Thu Jun 29 2006 copyright : (C) 2006 by Thomas Baumgart email : Thomas Baumgart <ipwizard@users.sourceforge.net> ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef KMYMONEYSELECTOR_H #define KMYMONEYSELECTOR_H // ---------------------------------------------------------------------------- // QT Includes #include <tqwidget.h> #include <tqlistview.h> class TQHBoxLayout; // ---------------------------------------------------------------------------- // KDE Includes class KListView; // ---------------------------------------------------------------------------- // Project Includes #include <kmymoney/mymoneyutils.h> /** * This class implements a general selector for id based objects. It is based * on a tree view. Using this widget, one can select one or multiple * items depending on the mode of operation and the set of items * selected to be displayed. (see setSelectionMode() ). * * - Single selection mode\n * In this mode the widget allows to select a single entry out of * the set of displayed items. * * - Multi selection mode\n * In this mode, the widget allows to select one or more entries * out of the set of displayed items. Selection is performed * by marking the item in the view. */ class KMyMoneySelector : public TQWidget { Q_OBJECT TQ_OBJECT public: KMyMoneySelector(TQWidget *tqparent=0, const char *name=0, TQWidget::WFlags flags = 0); virtual ~KMyMoneySelector(); /** * This method sets the mode of operation of this widget. * Supported values are @p TQListView::Single and @p TQListView::Multi. * * @param mode @p TQListView::Single selects single selection mode and * @p TQListView::Multi selects multi selection mode * * @note When the widget is created, it defaults to TQListView::Single. * Any items loaded into the widget will be cleared if the mode changes. * Changing the selection mode also changes the type of the items * created through newItem(). You should therefor set the selection mode * before you create items. */ void setSelectionMode(const TQListView::SelectionMode mode); /** * returns the selection mode of the widget. * * @sa setSelectionMode() */ TQListView::SelectionMode selectionMode(void) const { return m_selMode; } /** * This method returns the list of selected item ids. If * no item is selected, the list is empty. The list is cleared * when the method is called. * * @param list reference to id list */ void selectedItems(TQStringList& list) const; /** * Convenience method for above method. Requires more resources. * Provided only for backward compatibility. * * @todo Deprecated after 1.0 */ TQStringList selectedItems(void) const; /** * This method returns the list of all item ids. * The list is cleared when the method is called. * * @param list reference to id list */ void itemList(TQStringList& list) const; /** * Convenience method for above method. Requires more resources. * Provided only for backward compatibility. * * @todo Deprecated after 1.0 */ TQStringList itemList(void) const; /** * This method returns an information if all items * currently shown are selected or not. * * @retval true All items shown are selected * @retval false Not all items are selected * * @note If the selection mode is set to Single, this * method always returns false. */ bool allItemsSelected(void) const; /** * This method sets the current selected item and marks the * checkbox according to @p state in multi-selection-mode. * * @param id id of account * @param state state of checkbox in multi-selection-mode * @p true checked * @p false not checked (default) */ void setSelected(const TQString& id, const bool state = false); /** * Return a pointer to the KListView object */ KListView* listView(void) const { return m_listView; }; /** * This method selects/deselects all items that * are currently in the item list according * to the parameter @p state. * * @param state select items if @p true, deselect otherwise */ void selectAllItems(const bool state); /** * This method selects/deselects all items that * are currently in this object's item list AND are present in the supplied * @p itemList of items to select, according to the @p state. * * @param itemList of item ids to apply @p state to * @param state select items if @p true, deselect otherwise */ void selectItems(const TQStringList& itemList, const bool state); /** * Protect an entry from selection. Protection is controlled by * the parameter @p protect. * * @param itemId id of item for which to modify the protection * @param protect if true, the entry specified by @p accId cannot be * selected. If false, it can be selected. Defaults to @p true. */ void protectItem(const TQString& itemId, const bool protect = true); /** * This method modifies the width of the widget to match its optimal size * so that all entries fit completely. */ void setOptimizedWidth(void); /** * This method removes an item with a given id from the list. * * @param id TQString containing id of item to be removed */ void removeItem(const TQString& id); /** * This method creates a new top level KMyMoneyCheckListItem object in the list view. * The type can be influenced with the @a type argument. It defaults * to TQCheckListItem::RadioButtonController. If @a id is empty, the item is not * selectable. It will be shown 'opened' (see TQListViewItem::setOpen()) * * @return pointer to newly created object */ TQListViewItem* newItem(const TQString& name, const TQString& key = TQString(), const TQString& id = TQString(), TQCheckListItem::Type type = TQCheckListItem::RadioButtonController); /** * Same as above, but create the item following the item pointed to by @c after. * If @c after is 0, then behave as previous method */ TQListViewItem* newItem(const TQString& name, TQListViewItem* after, const TQString& key = TQString(), const TQString& id = TQString(), TQCheckListItem::Type type = TQCheckListItem::RadioButtonController); /** * This method creates a new selectable object depending on the * selection mode. This is either a KListViewItem for single * selection mode or a KMyMoneyCheckListItem for multi selection mode * * @note The new item will be the first one in the selection * * @param tqparent pointer to tqparent item * @param name the displayed name * @param key String to be used for completion. If empty defaults to @a name * @param id the id used to identify the objects * * @return pointer to newly created object */ TQListViewItem* newItem(TQListViewItem* tqparent, const TQString& name, const TQString& key, const TQString& id); /** * This method creates a new selectable object depending on the * selection mode. This is either a KListViewItem for single * selection mode or a KMyMoneyCheckListItem for multi selection mode. * In contrast to the above method, the tqparent is always the view. * * @note The new item will be the first one in the selection * * @param name the displayed name * @param key String to be used for completion. If empty defaults to @a name * @param id the id used to identify the objects * * @return pointer to newly created object */ TQListViewItem* newTopItem(const TQString& name, const TQString& key, const TQString& id); /** * This method checks if a given @a item matches the given regular expression @a exp. * * @param exp const reference to a regular expression object * @param item pointer to TQListViewItem * * @retval true item matches * @retval false item does not match */ virtual bool match(const TQRegExp& exp, TQListViewItem* item) const; /** * This method delays the call for m_listView->ensureItemVisible(item) * for about 10ms. This seems to be necessary when the widget is not (yet) * visible on the screen after creation. * * @param item pointer to TQListViewItem that should be made visible * * @sa slotShowSelected() */ void ensureItemVisible(const TQListViewItem *item); /** * This method returns a pointer to the TQListViewItem with the id @a id. * If such an item is not contained in the list, @a 0 will be returned. * * @param id id to be used to find a TQListViewItem pointer for */ TQListViewItem* item(const TQString& id) const; /** * This method returns, if any of the items in the selector tqcontains * the text @a txt. * * @param txt const reference to string to be looked for * @retval true exact match found * @retval false no match found */ virtual bool tqcontains(const TQString& txt) const; /** * Clears all items of the selector and the associated listview. */ virtual void clear(void); /** * This method returns the optimal width for the widget */ int optimizedWidth(void) const; public slots: /** * This slot selects all items that are currently in * the item list of the widget. */ void slotSelectAllItems(void) { selectAllItems(true); }; /** * This slot deselects all items that are currently in * the item list of the widget. */ void slotDeselectAllItems(void) { selectAllItems(false); }; signals: void stateChanged(void); void itemSelected(const TQString& id); protected: /** * Helper method for selectedItems() to traverse the tree. * * @param list list of selected ids * @param item pointer to item to start with */ void selectedItems(TQStringList& list, TQListViewItem* item) const; /** * Helper method for allItemsSelected() to traverse the tree. * * @param item pointer to item to start with */ bool allItemsSelected(const TQListViewItem *item) const; /** * This is a helper method for selectAllItems(). * * @param item pointer to item to start with * @param state selection state (@a true = selected, @a false = not selected) */ void selectAllSubItems(TQListViewItem* item, const bool state); /** * This is a helper method for selectItems(). * * @param item pointer to item to start with * @param itemList list of ids to be selected * @param state selection state (@a true = selected, @a false = not selected) */ void selectSubItems(TQListViewItem* item, const TQStringList& itemList, const bool state); public slots: /** * Hide all listview items that do not match the regular expression @a exp. * This method returns the number of visible items * * @param exp const reference to TQRegExp that an item must match to stay visible * * @return number of visible items */ int slotMakeCompletion(const TQRegExp& exp); /** * This is an overloaded member function, provided for convenience. It behaves essentially like the above function. * * @param txt contains the pattern for a TQRegExp */ int slotMakeCompletion(const TQString& txt); protected slots: /** * This slot is usually connected to a timer signal and simply * calls m_listView->ensureItemVisible() for the last selected item * in this widget. * * @sa ensureItemVisible(), setSelected(const TQString&) */ void slotShowSelected(void); /** * This slot is connected to the KListView executed signal */ void slotItemSelected(TQListViewItem *it_v); /** * This slot processes the right mouse button press on a list view item. * * @param it_v pointer to list view item that was pressed * @param p the position where the mouse was pressed */ void slotListRightMouse(TQListViewItem* it_v, const TQPoint& p, int /* col */); protected: KListView* m_listView; TQStringList m_itemList; TQString m_baseName; TQListView::SelectionMode m_selMode; TQHBoxLayout* m_layout; private: const TQListViewItem* m_visibleItem; }; #endif