| /**************************************************************************** |
| ** |
| ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). |
| ** All rights reserved. |
| ** Contact: Nokia Corporation (qt-info@nokia.com) |
| ** |
| ** This file is part of the Qt3Support module of the Qt Toolkit. |
| ** |
| ** $QT_BEGIN_LICENSE:LGPL$ |
| ** GNU Lesser General Public License Usage |
| ** This file may be used under the terms of the GNU Lesser General Public |
| ** License version 2.1 as published by the Free Software Foundation and |
| ** appearing in the file LICENSE.LGPL included in the packaging of this |
| ** file. Please review the following information to ensure the GNU Lesser |
| ** General Public License version 2.1 requirements will be met: |
| ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. |
| ** |
| ** In addition, as a special exception, Nokia gives you certain additional |
| ** rights. These rights are described in the Nokia Qt LGPL Exception |
| ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. |
| ** |
| ** GNU General Public License Usage |
| ** Alternatively, this file may be used under the terms of the GNU General |
| ** Public License version 3.0 as published by the Free Software Foundation |
| ** and appearing in the file LICENSE.GPL included in the packaging of this |
| ** file. Please review the following information to ensure the GNU General |
| ** Public License version 3.0 requirements will be met: |
| ** http://www.gnu.org/copyleft/gpl.html. |
| ** |
| ** Other Usage |
| ** Alternatively, this file may be used in accordance with the terms and |
| ** conditions contained in a signed written agreement between you and Nokia. |
| ** |
| ** |
| ** |
| ** |
| ** |
| ** $QT_END_LICENSE$ |
| ** |
| ****************************************************************************/ |
| |
| #ifndef Q3LISTBOX_H |
| #define Q3LISTBOX_H |
| |
| #include <Qt3Support/q3scrollview.h> |
| #include <QtGui/qpixmap.h> |
| |
| QT_BEGIN_HEADER |
| |
| QT_BEGIN_NAMESPACE |
| |
| QT_MODULE(Qt3SupportLight) |
| |
| #ifndef QT_NO_LISTBOX |
| |
| class Q3ListBoxPrivate; |
| class Q3ListBoxItem; |
| class QString; |
| class QStringList; |
| |
| class Q_COMPAT_EXPORT Q3ListBox : public Q3ScrollView |
| { |
| friend class Q3ListBoxItem; |
| friend class Q3ListBoxPrivate; |
| |
| Q_OBJECT |
| Q_ENUMS(SelectionMode LayoutMode) |
| Q_PROPERTY(uint count READ count) |
| Q_PROPERTY(int numItemsVisible READ numItemsVisible) |
| Q_PROPERTY(int currentItem READ currentItem WRITE setCurrentItem USER true) |
| Q_PROPERTY(QString currentText READ currentText) |
| Q_PROPERTY(int topItem READ topItem WRITE setTopItem DESIGNABLE false) |
| Q_PROPERTY(SelectionMode selectionMode READ selectionMode WRITE setSelectionMode) |
| Q_PROPERTY(bool multiSelection READ isMultiSelection WRITE setMultiSelection DESIGNABLE false) |
| Q_PROPERTY(LayoutMode columnMode READ columnMode WRITE setColumnMode) |
| Q_PROPERTY(LayoutMode rowMode READ rowMode WRITE setRowMode) |
| Q_PROPERTY(int numColumns READ numColumns) |
| Q_PROPERTY(int numRows READ numRows) |
| Q_PROPERTY(bool variableWidth READ variableWidth WRITE setVariableWidth) |
| Q_PROPERTY(bool variableHeight READ variableHeight WRITE setVariableHeight) |
| |
| public: |
| Q3ListBox(QWidget* parent=0, const char* name=0, Qt::WindowFlags f=0 ); |
| ~Q3ListBox(); |
| |
| uint count() const; |
| |
| void insertStringList(const QStringList&, int index=-1); |
| // ### fix before Qt 4.0 |
| #if 0 |
| void insertStrList(const QStrList *, int index=-1); |
| void insertStrList(const QStrList &, int index=-1); |
| #endif |
| void insertStrList(const char **, |
| int numStrings=-1, int index=-1); |
| |
| void insertItem(const Q3ListBoxItem *, int index=-1); |
| void insertItem(const Q3ListBoxItem *, const Q3ListBoxItem *after); |
| void insertItem(const QString &text, int index=-1); |
| void insertItem(const QPixmap &pixmap, int index=-1); |
| void insertItem(const QPixmap &pixmap, const QString &text, int index=-1); |
| |
| void removeItem(int index); |
| |
| QString text(int index) const; |
| const QPixmap *pixmap(int index) const; |
| |
| void changeItem(const Q3ListBoxItem *, int index); |
| void changeItem(const QString &text, int index); |
| void changeItem(const QPixmap &pixmap, int index); |
| void changeItem(const QPixmap &pixmap, const QString &text, int index); |
| |
| void takeItem(const Q3ListBoxItem *); |
| |
| int numItemsVisible() const; |
| |
| int currentItem() const; |
| QString currentText() const { return text(currentItem()); } |
| virtual void setCurrentItem(int index); |
| virtual void setCurrentItem(Q3ListBoxItem *); |
| void centerCurrentItem() { ensureCurrentVisible(); } |
| int topItem() const; |
| virtual void setTopItem(int index); |
| virtual void setBottomItem(int index); |
| |
| long maxItemWidth() const; |
| |
| enum SelectionMode { Single, Multi, Extended, NoSelection }; |
| virtual void setSelectionMode(SelectionMode); |
| SelectionMode selectionMode() const; |
| |
| void setMultiSelection(bool multi); |
| bool isMultiSelection() const; |
| |
| QVariant inputMethodQuery(Qt::InputMethodQuery query) const; |
| |
| virtual void setSelected(Q3ListBoxItem *, bool); |
| void setSelected(int, bool); |
| bool isSelected(int) const; |
| bool isSelected(const Q3ListBoxItem *) const; |
| Q3ListBoxItem* selectedItem() const; |
| |
| QSize sizeHint() const; |
| QSize minimumSizeHint() const; |
| |
| Q3ListBoxItem *item(int index) const; |
| int index(const Q3ListBoxItem *) const; |
| |
| enum StringComparisonMode { |
| CaseSensitive = 0x00001, // 0 0001 |
| BeginsWith = 0x00002, // 0 0010 |
| EndsWith = 0x00004, // 0 0100 |
| Contains = 0x00008, // 0 1000 |
| ExactMatch = 0x00010 // 1 0000 |
| }; |
| typedef uint ComparisonFlags; |
| Q3ListBoxItem *findItem(const QString &text, ComparisonFlags compare = BeginsWith) const; |
| |
| void triggerUpdate(bool doLayout); |
| |
| bool itemVisible(int index); |
| bool itemVisible(const Q3ListBoxItem *); |
| |
| enum LayoutMode { FixedNumber, |
| FitToWidth, FitToHeight = FitToWidth, |
| Variable }; |
| virtual void setColumnMode(LayoutMode); |
| virtual void setColumnMode(int); |
| virtual void setRowMode(LayoutMode); |
| virtual void setRowMode(int); |
| |
| LayoutMode columnMode() const; |
| LayoutMode rowMode() const; |
| |
| int numColumns() const; |
| int numRows() const; |
| |
| bool variableWidth() const; |
| virtual void setVariableWidth(bool); |
| |
| bool variableHeight() const; |
| virtual void setVariableHeight(bool); |
| |
| void viewportPaintEvent(QPaintEvent *); |
| |
| bool dragSelect() const { return true; } |
| void setDragSelect(bool) {} |
| bool autoScroll() const { return true; } |
| void setAutoScroll(bool) {} |
| bool autoScrollBar() const { return vScrollBarMode() == Auto; } |
| void setAutoScrollBar(bool enable) { setVScrollBarMode(enable ? Auto : AlwaysOff); } |
| bool scrollBar() const { return vScrollBarMode() != AlwaysOff; } |
| void setScrollBar(bool enable) { setVScrollBarMode(enable ? AlwaysOn : AlwaysOff); } |
| bool autoBottomScrollBar() const { return hScrollBarMode() == Auto; } |
| void setAutoBottomScrollBar(bool enable) { setHScrollBarMode(enable ? Auto : AlwaysOff); } |
| bool bottomScrollBar() const { return hScrollBarMode() != AlwaysOff; } |
| void setBottomScrollBar(bool enable) { setHScrollBarMode(enable ? AlwaysOn : AlwaysOff); } |
| bool smoothScrolling() const { return false; } |
| void setSmoothScrolling(bool) {} |
| bool autoUpdate() const { return true; } |
| void setAutoUpdate(bool) {} |
| void setFixedVisibleLines(int lines) { setRowMode(lines); } |
| int inSort(const Q3ListBoxItem *); |
| int inSort(const QString& text); |
| int cellHeight(int i) const { return itemHeight(i); } |
| int cellHeight() const { return itemHeight(); } |
| int cellWidth() const { return maxItemWidth(); } |
| int cellWidth(int i) const { Q_ASSERT(i==0); Q_UNUSED(i) return maxItemWidth(); } |
| int numCols() const { return numColumns(); } |
| |
| int itemHeight(int index = 0) const; |
| Q3ListBoxItem * itemAt(const QPoint &) const; |
| |
| QRect itemRect(Q3ListBoxItem *item) const; |
| |
| Q3ListBoxItem *firstItem() const; |
| |
| void sort(bool ascending = true); |
| |
| public Q_SLOTS: |
| void clear(); |
| virtual void ensureCurrentVisible(); |
| virtual void clearSelection(); |
| virtual void selectAll(bool select); |
| virtual void invertSelection(); |
| |
| Q_SIGNALS: |
| void highlighted(int index); |
| void selected(int index); |
| void highlighted(const QString &); |
| void selected(const QString &); |
| void highlighted(Q3ListBoxItem *); |
| void selected(Q3ListBoxItem *); |
| |
| void selectionChanged(); |
| void selectionChanged(Q3ListBoxItem *); |
| void currentChanged(Q3ListBoxItem *); |
| void clicked(Q3ListBoxItem *); |
| void clicked(Q3ListBoxItem *, const QPoint &); |
| void pressed(Q3ListBoxItem *); |
| void pressed(Q3ListBoxItem *, const QPoint &); |
| |
| void doubleClicked(Q3ListBoxItem *); |
| void returnPressed(Q3ListBoxItem *); |
| void rightButtonClicked(Q3ListBoxItem *, const QPoint &); |
| void rightButtonPressed(Q3ListBoxItem *, const QPoint &); |
| void mouseButtonPressed(int, Q3ListBoxItem*, const QPoint&); |
| void mouseButtonClicked(int, Q3ListBoxItem*, const QPoint&); |
| |
| void contextMenuRequested(Q3ListBoxItem *, const QPoint &); |
| |
| void onItem(Q3ListBoxItem *item); |
| void onViewport(); |
| |
| protected: |
| void changeEvent(QEvent *); |
| void mousePressEvent(QMouseEvent *); |
| void mouseReleaseEvent(QMouseEvent *); |
| void mouseDoubleClickEvent(QMouseEvent *); |
| void mouseMoveEvent(QMouseEvent *); |
| void contentsContextMenuEvent(QContextMenuEvent *); |
| |
| void keyPressEvent(QKeyEvent *e); |
| void focusInEvent(QFocusEvent *e); |
| void focusOutEvent(QFocusEvent *e); |
| void resizeEvent(QResizeEvent *); |
| void showEvent(QShowEvent *); |
| |
| bool eventFilter(QObject *o, QEvent *e); |
| |
| void updateItem(int index); |
| void updateItem(Q3ListBoxItem *); |
| |
| void updateCellWidth() { } |
| int totalWidth() const { return contentsWidth(); } |
| int totalHeight() const { return contentsHeight(); } |
| |
| virtual void paintCell(QPainter *, int row, int col); |
| |
| void toggleCurrentItem(); |
| bool isRubberSelecting() const; |
| |
| void doLayout() const; |
| |
| int findItem(int yPos) const { return index(itemAt(QPoint(0,yPos))); } |
| |
| protected Q_SLOTS: |
| void clearInputString(); |
| |
| private Q_SLOTS: |
| void refreshSlot(); |
| void doAutoScroll(); |
| void adjustItems(); |
| |
| private: |
| Q_DISABLE_COPY(Q3ListBox) |
| |
| void mousePressEventEx(QMouseEvent *); |
| void tryGeometry(int, int) const; |
| int currentRow() const; |
| int currentColumn() const; |
| void updateSelection(); |
| void repaintSelection(); |
| void drawRubber(); |
| void doRubberSelection(const QRect &old, const QRect &rubber); |
| void handleItemChange(Q3ListBoxItem *old, bool shift, bool control); |
| void selectRange(Q3ListBoxItem *from, Q3ListBoxItem *to, bool invert, bool includeFirst, bool clearSel = false); |
| |
| void emitChangedSignal(bool); |
| |
| int columnAt(int) const; |
| int rowAt(int) const; |
| |
| Q3ListBoxPrivate * d; |
| |
| static Q3ListBox * changedListBox; |
| }; |
| |
| |
| class Q_COMPAT_EXPORT Q3ListBoxItem |
| { |
| public: |
| Q3ListBoxItem(Q3ListBox* listbox = 0); |
| Q3ListBoxItem(Q3ListBox* listbox, Q3ListBoxItem *after); |
| virtual ~Q3ListBoxItem(); |
| |
| virtual QString text() const; |
| virtual const QPixmap *pixmap() const; |
| |
| virtual int height(const Q3ListBox *) const; |
| virtual int width(const Q3ListBox *) const; |
| |
| bool isSelected() const { return s; } |
| bool isCurrent() const; |
| |
| bool selected() const { return isSelected(); } |
| bool current() const { return isCurrent(); } |
| |
| Q3ListBox *listBox() const; |
| |
| void setSelectable(bool b) { selectable = b; } |
| bool isSelectable() const { return selectable; } |
| |
| Q3ListBoxItem *next() const; |
| Q3ListBoxItem *prev() const; |
| |
| virtual int rtti() const; |
| enum { RTTI = 0 }; |
| |
| protected: |
| virtual void paint(QPainter *) = 0; |
| virtual void setText(const QString &text) { txt = text; } |
| void setCustomHighlighting(bool); |
| |
| private: |
| Q_DISABLE_COPY(Q3ListBoxItem) |
| |
| QString txt; |
| uint selectable : 1; |
| uint s : 1; |
| uint dirty:1; |
| uint custom_highlight : 1; |
| uint unused : 28; |
| Q3ListBoxItem * p, * n; |
| Q3ListBox* lbox; |
| friend class Q3ListBox; |
| friend class Q3ListBoxPrivate; |
| friend class Q3ComboBox; |
| friend class Q3ComboBoxPopupItem; |
| }; |
| |
| |
| class Q_COMPAT_EXPORT Q3ListBoxText : public Q3ListBoxItem |
| { |
| public: |
| Q3ListBoxText(Q3ListBox* listbox, const QString & text=QString()); |
| Q3ListBoxText(const QString & text=QString()); |
| Q3ListBoxText(Q3ListBox* listbox, const QString & text, Q3ListBoxItem *after); |
| ~Q3ListBoxText(); |
| |
| int height(const Q3ListBox *) const; |
| int width(const Q3ListBox *) const; |
| |
| int rtti() const; |
| enum { RTTI = 1 }; |
| |
| protected: |
| void paint(QPainter *); |
| |
| private: |
| Q_DISABLE_COPY(Q3ListBoxText) |
| }; |
| |
| |
| class Q_COMPAT_EXPORT Q3ListBoxPixmap : public Q3ListBoxItem |
| { |
| public: |
| Q3ListBoxPixmap(Q3ListBox* listbox, const QPixmap &); |
| Q3ListBoxPixmap(const QPixmap &); |
| Q3ListBoxPixmap(Q3ListBox* listbox, const QPixmap & pix, Q3ListBoxItem *after); |
| Q3ListBoxPixmap(Q3ListBox* listbox, const QPixmap &, const QString&); |
| Q3ListBoxPixmap(const QPixmap &, const QString&); |
| Q3ListBoxPixmap(Q3ListBox* listbox, const QPixmap & pix, const QString&, Q3ListBoxItem *after); |
| ~Q3ListBoxPixmap(); |
| |
| const QPixmap *pixmap() const { return ± } |
| |
| int height(const Q3ListBox *) const; |
| int width(const Q3ListBox *) const; |
| |
| int rtti() const; |
| enum { RTTI = 2 }; |
| |
| protected: |
| void paint(QPainter *); |
| |
| private: |
| Q_DISABLE_COPY(Q3ListBoxPixmap) |
| |
| QPixmap pm; |
| }; |
| |
| #endif // QT_NO_LISTBOX |
| |
| QT_END_NAMESPACE |
| |
| QT_END_HEADER |
| |
| #endif // Q3LISTBOX_H |