summaryrefslogtreecommitdiffstats
path: root/src/searchlist.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/searchlist.h')
-rw-r--r--src/searchlist.h144
1 files changed, 144 insertions, 0 deletions
diff --git a/src/searchlist.h b/src/searchlist.h
new file mode 100644
index 0000000..ffa7ac8
--- /dev/null
+++ b/src/searchlist.h
@@ -0,0 +1,144 @@
+/***************************************************************************
+ *
+ * Copyright (C) 2005 Elad Lahav (elad_lahav@users.sourceforge.net)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ***************************************************************************/
+
+#ifndef SEARCHLIST_H
+#define SEARCHLIST_H
+
+#include <qwidget.h>
+#include <qvbox.h>
+#include <qlineedit.h>
+#include <qlistview.h>
+#include <qtooltip.h>
+
+class SearchList;
+
+/**
+ * Defines a line text edit for searchable list view.
+ * The widget is based on QLineEdit with additional key functions
+ * Supported key events (up and down) are emitted as signals
+ * @author Albert Yosher
+ */
+class SearchLineEdit : public QLineEdit
+{
+ Q_OBJECT
+public:
+ SearchLineEdit(QWidget* pParent) : QLineEdit(pParent) {};
+ ~SearchLineEdit() {};
+
+signals:
+ /**
+ * Emitted when one of the up/down or page up/page down keys were pressed
+ * inside this edit widget.
+ * @param pEvent The event received for this key press
+ */
+ void keyPressed(QKeyEvent* pEvent);
+
+private:
+ virtual void keyPressEvent(QKeyEvent*);
+};
+
+/**
+ * A tool-tip class for the search list.
+ * Enables sub-classes of the list to provide a customised tool-tip for each
+ * list item.
+ * @author Gabor Fekete
+ */
+class ListToolTip : public QToolTip
+{
+public:
+ ListToolTip(SearchList* pParent);
+
+protected:
+ virtual void maybeTip(const QPoint& pt);
+
+private:
+ /** The owner widget. */
+ SearchList* m_pList;
+};
+
+
+/**
+ * Defines a searchable list view.
+ * The widget is composed of a list view, and an edit box used to enter
+ * search data. Whenever the text in the edit box changes, the list view is
+ * set to point to the first item that matches the new text.
+ * @author Elad Lahav
+ */
+class SearchList : public QVBox
+{
+ Q_OBJECT
+
+public:
+ SearchList(int nSearchCol, QWidget* pParent = 0, const char* szName = 0);
+ ~SearchList();
+
+ /**
+ * @return A pointer to the list part of the widget.
+ */
+ QListView* getList() { return m_pList; }
+
+ /**
+ * Constructs a tool-tip for the given item.
+ * @param pItem The item for which a tip is required
+ * @param sTip The constructed tip string (on return)
+ * @return True to display the tip, false otherwise
+ */
+ virtual bool getTip(QListViewItem* pItem, QString& sTip) = 0;
+
+public slots:
+ void slotSetFocus();
+
+protected:
+ /** The search edit-box. */
+ QLineEdit* m_pEdit;
+
+ /** The list part of the widget. */
+ QListView* m_pList;
+
+ /**
+ * Called whenever the user selects an item in the list by either double-
+ * clicking it, or by highlighting the item and pressing the ENTER key.
+ * @param pItem The selected list item
+ */
+ virtual void processItemSelected(QListViewItem* pItem) = 0;
+
+protected slots:
+ void slotFindItem(const QString&);
+ void slotItemSelected(QListViewItem*);
+ void slotItemSelected();
+ void slotKeyPressed(QKeyEvent*);
+
+private:
+ /** Specifies the search column, i.e., the list column whose strings are
+ compared with the text in the search edit-box. */
+ int m_nSearchCol;
+
+ /** A tool-tip for the list entries. */
+ ListToolTip* m_pToolTip;
+};
+
+#endif