diff options
Diffstat (limited to 'src/qt3support/itemviews/q3listbox.h')
-rw-r--r-- | src/qt3support/itemviews/q3listbox.h | 429 |
1 files changed, 429 insertions, 0 deletions
diff --git a/src/qt3support/itemviews/q3listbox.h b/src/qt3support/itemviews/q3listbox.h new file mode 100644 index 0000000..376dd65 --- /dev/null +++ b/src/qt3support/itemviews/q3listbox.h @@ -0,0 +1,429 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the Qt3Support module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, 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.0, 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. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $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 |