1 | /****************************************************************************
|
---|
2 | **
|
---|
3 | ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
---|
4 | ** Contact: Qt Software Information ([email protected])
|
---|
5 | **
|
---|
6 | ** This file is part of the Qt3Support module of the Qt Toolkit.
|
---|
7 | **
|
---|
8 | ** $QT_BEGIN_LICENSE:LGPL$
|
---|
9 | ** Commercial Usage
|
---|
10 | ** Licensees holding valid Qt Commercial licenses may use this file in
|
---|
11 | ** accordance with the Qt Commercial License Agreement provided with the
|
---|
12 | ** Software or, alternatively, in accordance with the terms contained in
|
---|
13 | ** a written agreement between you and Nokia.
|
---|
14 | **
|
---|
15 | ** GNU Lesser General Public License Usage
|
---|
16 | ** Alternatively, this file may be used under the terms of the GNU Lesser
|
---|
17 | ** General Public License version 2.1 as published by the Free Software
|
---|
18 | ** Foundation and appearing in the file LICENSE.LGPL included in the
|
---|
19 | ** packaging of this file. Please review the following information to
|
---|
20 | ** ensure the GNU Lesser General Public License version 2.1 requirements
|
---|
21 | ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
---|
22 | **
|
---|
23 | ** In addition, as a special exception, Nokia gives you certain
|
---|
24 | ** additional rights. These rights are described in the Nokia Qt LGPL
|
---|
25 | ** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
|
---|
26 | ** package.
|
---|
27 | **
|
---|
28 | ** GNU General Public License Usage
|
---|
29 | ** Alternatively, this file may be used under the terms of the GNU
|
---|
30 | ** General Public License version 3.0 as published by the Free Software
|
---|
31 | ** Foundation and appearing in the file LICENSE.GPL included in the
|
---|
32 | ** packaging of this file. Please review the following information to
|
---|
33 | ** ensure the GNU General Public License version 3.0 requirements will be
|
---|
34 | ** met: http://www.gnu.org/copyleft/gpl.html.
|
---|
35 | **
|
---|
36 | ** If you are unsure which license is appropriate for your use, please
|
---|
37 | ** contact the sales department at [email protected].
|
---|
38 | ** $QT_END_LICENSE$
|
---|
39 | **
|
---|
40 | ****************************************************************************/
|
---|
41 |
|
---|
42 | #ifndef Q3LISTBOX_H
|
---|
43 | #define Q3LISTBOX_H
|
---|
44 |
|
---|
45 | #include <Qt3Support/q3scrollview.h>
|
---|
46 | #include <QtGui/qpixmap.h>
|
---|
47 |
|
---|
48 | QT_BEGIN_HEADER
|
---|
49 |
|
---|
50 | QT_BEGIN_NAMESPACE
|
---|
51 |
|
---|
52 | QT_MODULE(Qt3SupportLight)
|
---|
53 |
|
---|
54 | #ifndef QT_NO_LISTBOX
|
---|
55 |
|
---|
56 | class Q3ListBoxPrivate;
|
---|
57 | class Q3ListBoxItem;
|
---|
58 | class QString;
|
---|
59 | class QStringList;
|
---|
60 |
|
---|
61 | class Q_COMPAT_EXPORT Q3ListBox : public Q3ScrollView
|
---|
62 | {
|
---|
63 | friend class Q3ListBoxItem;
|
---|
64 | friend class Q3ListBoxPrivate;
|
---|
65 |
|
---|
66 | Q_OBJECT
|
---|
67 | Q_ENUMS(SelectionMode LayoutMode)
|
---|
68 | Q_PROPERTY(uint count READ count)
|
---|
69 | Q_PROPERTY(int numItemsVisible READ numItemsVisible)
|
---|
70 | Q_PROPERTY(int currentItem READ currentItem WRITE setCurrentItem USER true)
|
---|
71 | Q_PROPERTY(QString currentText READ currentText)
|
---|
72 | Q_PROPERTY(int topItem READ topItem WRITE setTopItem DESIGNABLE false)
|
---|
73 | Q_PROPERTY(SelectionMode selectionMode READ selectionMode WRITE setSelectionMode)
|
---|
74 | Q_PROPERTY(bool multiSelection READ isMultiSelection WRITE setMultiSelection DESIGNABLE false)
|
---|
75 | Q_PROPERTY(LayoutMode columnMode READ columnMode WRITE setColumnMode)
|
---|
76 | Q_PROPERTY(LayoutMode rowMode READ rowMode WRITE setRowMode)
|
---|
77 | Q_PROPERTY(int numColumns READ numColumns)
|
---|
78 | Q_PROPERTY(int numRows READ numRows)
|
---|
79 | Q_PROPERTY(bool variableWidth READ variableWidth WRITE setVariableWidth)
|
---|
80 | Q_PROPERTY(bool variableHeight READ variableHeight WRITE setVariableHeight)
|
---|
81 |
|
---|
82 | public:
|
---|
83 | Q3ListBox(QWidget* parent=0, const char* name=0, Qt::WindowFlags f=0 );
|
---|
84 | ~Q3ListBox();
|
---|
85 |
|
---|
86 | uint count() const;
|
---|
87 |
|
---|
88 | void insertStringList(const QStringList&, int index=-1);
|
---|
89 | // ### fix before Qt 4.0
|
---|
90 | #if 0
|
---|
91 | void insertStrList(const QStrList *, int index=-1);
|
---|
92 | void insertStrList(const QStrList &, int index=-1);
|
---|
93 | #endif
|
---|
94 | void insertStrList(const char **,
|
---|
95 | int numStrings=-1, int index=-1);
|
---|
96 |
|
---|
97 | void insertItem(const Q3ListBoxItem *, int index=-1);
|
---|
98 | void insertItem(const Q3ListBoxItem *, const Q3ListBoxItem *after);
|
---|
99 | void insertItem(const QString &text, int index=-1);
|
---|
100 | void insertItem(const QPixmap &pixmap, int index=-1);
|
---|
101 | void insertItem(const QPixmap &pixmap, const QString &text, int index=-1);
|
---|
102 |
|
---|
103 | void removeItem(int index);
|
---|
104 |
|
---|
105 | QString text(int index) const;
|
---|
106 | const QPixmap *pixmap(int index) const;
|
---|
107 |
|
---|
108 | void changeItem(const Q3ListBoxItem *, int index);
|
---|
109 | void changeItem(const QString &text, int index);
|
---|
110 | void changeItem(const QPixmap &pixmap, int index);
|
---|
111 | void changeItem(const QPixmap &pixmap, const QString &text, int index);
|
---|
112 |
|
---|
113 | void takeItem(const Q3ListBoxItem *);
|
---|
114 |
|
---|
115 | int numItemsVisible() const;
|
---|
116 |
|
---|
117 | int currentItem() const;
|
---|
118 | QString currentText() const { return text(currentItem()); }
|
---|
119 | virtual void setCurrentItem(int index);
|
---|
120 | virtual void setCurrentItem(Q3ListBoxItem *);
|
---|
121 | void centerCurrentItem() { ensureCurrentVisible(); }
|
---|
122 | int topItem() const;
|
---|
123 | virtual void setTopItem(int index);
|
---|
124 | virtual void setBottomItem(int index);
|
---|
125 |
|
---|
126 | long maxItemWidth() const;
|
---|
127 |
|
---|
128 | enum SelectionMode { Single, Multi, Extended, NoSelection };
|
---|
129 | virtual void setSelectionMode(SelectionMode);
|
---|
130 | SelectionMode selectionMode() const;
|
---|
131 |
|
---|
132 | void setMultiSelection(bool multi);
|
---|
133 | bool isMultiSelection() const;
|
---|
134 |
|
---|
135 | QVariant inputMethodQuery(Qt::InputMethodQuery query) const;
|
---|
136 |
|
---|
137 | virtual void setSelected(Q3ListBoxItem *, bool);
|
---|
138 | void setSelected(int, bool);
|
---|
139 | bool isSelected(int) const;
|
---|
140 | bool isSelected(const Q3ListBoxItem *) const;
|
---|
141 | Q3ListBoxItem* selectedItem() const;
|
---|
142 |
|
---|
143 | QSize sizeHint() const;
|
---|
144 | QSize minimumSizeHint() const;
|
---|
145 |
|
---|
146 | Q3ListBoxItem *item(int index) const;
|
---|
147 | int index(const Q3ListBoxItem *) const;
|
---|
148 |
|
---|
149 | enum StringComparisonMode {
|
---|
150 | CaseSensitive = 0x00001, // 0 0001
|
---|
151 | BeginsWith = 0x00002, // 0 0010
|
---|
152 | EndsWith = 0x00004, // 0 0100
|
---|
153 | Contains = 0x00008, // 0 1000
|
---|
154 | ExactMatch = 0x00010 // 1 0000
|
---|
155 | };
|
---|
156 | typedef uint ComparisonFlags;
|
---|
157 | Q3ListBoxItem *findItem(const QString &text, ComparisonFlags compare = BeginsWith) const;
|
---|
158 |
|
---|
159 | void triggerUpdate(bool doLayout);
|
---|
160 |
|
---|
161 | bool itemVisible(int index);
|
---|
162 | bool itemVisible(const Q3ListBoxItem *);
|
---|
163 |
|
---|
164 | enum LayoutMode { FixedNumber,
|
---|
165 | FitToWidth, FitToHeight = FitToWidth,
|
---|
166 | Variable };
|
---|
167 | virtual void setColumnMode(LayoutMode);
|
---|
168 | virtual void setColumnMode(int);
|
---|
169 | virtual void setRowMode(LayoutMode);
|
---|
170 | virtual void setRowMode(int);
|
---|
171 |
|
---|
172 | LayoutMode columnMode() const;
|
---|
173 | LayoutMode rowMode() const;
|
---|
174 |
|
---|
175 | int numColumns() const;
|
---|
176 | int numRows() const;
|
---|
177 |
|
---|
178 | bool variableWidth() const;
|
---|
179 | virtual void setVariableWidth(bool);
|
---|
180 |
|
---|
181 | bool variableHeight() const;
|
---|
182 | virtual void setVariableHeight(bool);
|
---|
183 |
|
---|
184 | void viewportPaintEvent(QPaintEvent *);
|
---|
185 |
|
---|
186 | bool dragSelect() const { return true; }
|
---|
187 | void setDragSelect(bool) {}
|
---|
188 | bool autoScroll() const { return true; }
|
---|
189 | void setAutoScroll(bool) {}
|
---|
190 | bool autoScrollBar() const { return vScrollBarMode() == Auto; }
|
---|
191 | void setAutoScrollBar(bool enable) { setVScrollBarMode(enable ? Auto : AlwaysOff); }
|
---|
192 | bool scrollBar() const { return vScrollBarMode() != AlwaysOff; }
|
---|
193 | void setScrollBar(bool enable) { setVScrollBarMode(enable ? AlwaysOn : AlwaysOff); }
|
---|
194 | bool autoBottomScrollBar() const { return hScrollBarMode() == Auto; }
|
---|
195 | void setAutoBottomScrollBar(bool enable) { setHScrollBarMode(enable ? Auto : AlwaysOff); }
|
---|
196 | bool bottomScrollBar() const { return hScrollBarMode() != AlwaysOff; }
|
---|
197 | void setBottomScrollBar(bool enable) { setHScrollBarMode(enable ? AlwaysOn : AlwaysOff); }
|
---|
198 | bool smoothScrolling() const { return false; }
|
---|
199 | void setSmoothScrolling(bool) {}
|
---|
200 | bool autoUpdate() const { return true; }
|
---|
201 | void setAutoUpdate(bool) {}
|
---|
202 | void setFixedVisibleLines(int lines) { setRowMode(lines); }
|
---|
203 | int inSort(const Q3ListBoxItem *);
|
---|
204 | int inSort(const QString& text);
|
---|
205 | int cellHeight(int i) const { return itemHeight(i); }
|
---|
206 | int cellHeight() const { return itemHeight(); }
|
---|
207 | int cellWidth() const { return maxItemWidth(); }
|
---|
208 | int cellWidth(int i) const { Q_ASSERT(i==0); Q_UNUSED(i) return maxItemWidth(); }
|
---|
209 | int numCols() const { return numColumns(); }
|
---|
210 |
|
---|
211 | int itemHeight(int index = 0) const;
|
---|
212 | Q3ListBoxItem * itemAt(const QPoint &) const;
|
---|
213 |
|
---|
214 | QRect itemRect(Q3ListBoxItem *item) const;
|
---|
215 |
|
---|
216 | Q3ListBoxItem *firstItem() const;
|
---|
217 |
|
---|
218 | void sort(bool ascending = true);
|
---|
219 |
|
---|
220 | public Q_SLOTS:
|
---|
221 | void clear();
|
---|
222 | virtual void ensureCurrentVisible();
|
---|
223 | virtual void clearSelection();
|
---|
224 | virtual void selectAll(bool select);
|
---|
225 | virtual void invertSelection();
|
---|
226 |
|
---|
227 | Q_SIGNALS:
|
---|
228 | void highlighted(int index);
|
---|
229 | void selected(int index);
|
---|
230 | void highlighted(const QString &);
|
---|
231 | void selected(const QString &);
|
---|
232 | void highlighted(Q3ListBoxItem *);
|
---|
233 | void selected(Q3ListBoxItem *);
|
---|
234 |
|
---|
235 | void selectionChanged();
|
---|
236 | void selectionChanged(Q3ListBoxItem *);
|
---|
237 | void currentChanged(Q3ListBoxItem *);
|
---|
238 | void clicked(Q3ListBoxItem *);
|
---|
239 | void clicked(Q3ListBoxItem *, const QPoint &);
|
---|
240 | void pressed(Q3ListBoxItem *);
|
---|
241 | void pressed(Q3ListBoxItem *, const QPoint &);
|
---|
242 |
|
---|
243 | void doubleClicked(Q3ListBoxItem *);
|
---|
244 | void returnPressed(Q3ListBoxItem *);
|
---|
245 | void rightButtonClicked(Q3ListBoxItem *, const QPoint &);
|
---|
246 | void rightButtonPressed(Q3ListBoxItem *, const QPoint &);
|
---|
247 | void mouseButtonPressed(int, Q3ListBoxItem*, const QPoint&);
|
---|
248 | void mouseButtonClicked(int, Q3ListBoxItem*, const QPoint&);
|
---|
249 |
|
---|
250 | void contextMenuRequested(Q3ListBoxItem *, const QPoint &);
|
---|
251 |
|
---|
252 | void onItem(Q3ListBoxItem *item);
|
---|
253 | void onViewport();
|
---|
254 |
|
---|
255 | protected:
|
---|
256 | void changeEvent(QEvent *);
|
---|
257 | void mousePressEvent(QMouseEvent *);
|
---|
258 | void mouseReleaseEvent(QMouseEvent *);
|
---|
259 | void mouseDoubleClickEvent(QMouseEvent *);
|
---|
260 | void mouseMoveEvent(QMouseEvent *);
|
---|
261 | void contentsContextMenuEvent(QContextMenuEvent *);
|
---|
262 |
|
---|
263 | void keyPressEvent(QKeyEvent *e);
|
---|
264 | void focusInEvent(QFocusEvent *e);
|
---|
265 | void focusOutEvent(QFocusEvent *e);
|
---|
266 | void resizeEvent(QResizeEvent *);
|
---|
267 | void showEvent(QShowEvent *);
|
---|
268 |
|
---|
269 | bool eventFilter(QObject *o, QEvent *e);
|
---|
270 |
|
---|
271 | void updateItem(int index);
|
---|
272 | void updateItem(Q3ListBoxItem *);
|
---|
273 |
|
---|
274 | void updateCellWidth() { }
|
---|
275 | int totalWidth() const { return contentsWidth(); }
|
---|
276 | int totalHeight() const { return contentsHeight(); }
|
---|
277 |
|
---|
278 | virtual void paintCell(QPainter *, int row, int col);
|
---|
279 |
|
---|
280 | void toggleCurrentItem();
|
---|
281 | bool isRubberSelecting() const;
|
---|
282 |
|
---|
283 | void doLayout() const;
|
---|
284 |
|
---|
285 | int findItem(int yPos) const { return index(itemAt(QPoint(0,yPos))); }
|
---|
286 |
|
---|
287 | protected Q_SLOTS:
|
---|
288 | void clearInputString();
|
---|
289 |
|
---|
290 | private Q_SLOTS:
|
---|
291 | void refreshSlot();
|
---|
292 | void doAutoScroll();
|
---|
293 | void adjustItems();
|
---|
294 |
|
---|
295 | private:
|
---|
296 | Q_DISABLE_COPY(Q3ListBox)
|
---|
297 |
|
---|
298 | void mousePressEventEx(QMouseEvent *);
|
---|
299 | void tryGeometry(int, int) const;
|
---|
300 | int currentRow() const;
|
---|
301 | int currentColumn() const;
|
---|
302 | void updateSelection();
|
---|
303 | void repaintSelection();
|
---|
304 | void drawRubber();
|
---|
305 | void doRubberSelection(const QRect &old, const QRect &rubber);
|
---|
306 | void handleItemChange(Q3ListBoxItem *old, bool shift, bool control);
|
---|
307 | void selectRange(Q3ListBoxItem *from, Q3ListBoxItem *to, bool invert, bool includeFirst, bool clearSel = false);
|
---|
308 |
|
---|
309 | void emitChangedSignal(bool);
|
---|
310 |
|
---|
311 | int columnAt(int) const;
|
---|
312 | int rowAt(int) const;
|
---|
313 |
|
---|
314 | Q3ListBoxPrivate * d;
|
---|
315 |
|
---|
316 | static Q3ListBox * changedListBox;
|
---|
317 | };
|
---|
318 |
|
---|
319 |
|
---|
320 | class Q_COMPAT_EXPORT Q3ListBoxItem
|
---|
321 | {
|
---|
322 | public:
|
---|
323 | Q3ListBoxItem(Q3ListBox* listbox = 0);
|
---|
324 | Q3ListBoxItem(Q3ListBox* listbox, Q3ListBoxItem *after);
|
---|
325 | virtual ~Q3ListBoxItem();
|
---|
326 |
|
---|
327 | virtual QString text() const;
|
---|
328 | virtual const QPixmap *pixmap() const;
|
---|
329 |
|
---|
330 | virtual int height(const Q3ListBox *) const;
|
---|
331 | virtual int width(const Q3ListBox *) const;
|
---|
332 |
|
---|
333 | bool isSelected() const { return s; }
|
---|
334 | bool isCurrent() const;
|
---|
335 |
|
---|
336 | bool selected() const { return isSelected(); }
|
---|
337 | bool current() const { return isCurrent(); }
|
---|
338 |
|
---|
339 | Q3ListBox *listBox() const;
|
---|
340 |
|
---|
341 | void setSelectable(bool b) { selectable = b; }
|
---|
342 | bool isSelectable() const { return selectable; }
|
---|
343 |
|
---|
344 | Q3ListBoxItem *next() const;
|
---|
345 | Q3ListBoxItem *prev() const;
|
---|
346 |
|
---|
347 | virtual int rtti() const;
|
---|
348 | enum { RTTI = 0 };
|
---|
349 |
|
---|
350 | protected:
|
---|
351 | virtual void paint(QPainter *) = 0;
|
---|
352 | virtual void setText(const QString &text) { txt = text; }
|
---|
353 | void setCustomHighlighting(bool);
|
---|
354 |
|
---|
355 | private:
|
---|
356 | Q_DISABLE_COPY(Q3ListBoxItem)
|
---|
357 |
|
---|
358 | QString txt;
|
---|
359 | uint selectable : 1;
|
---|
360 | uint s : 1;
|
---|
361 | uint dirty:1;
|
---|
362 | uint custom_highlight : 1;
|
---|
363 | uint unused : 28;
|
---|
364 | Q3ListBoxItem * p, * n;
|
---|
365 | Q3ListBox* lbox;
|
---|
366 | friend class Q3ListBox;
|
---|
367 | friend class Q3ListBoxPrivate;
|
---|
368 | friend class Q3ComboBox;
|
---|
369 | friend class Q3ComboBoxPopupItem;
|
---|
370 | };
|
---|
371 |
|
---|
372 |
|
---|
373 | class Q_COMPAT_EXPORT Q3ListBoxText : public Q3ListBoxItem
|
---|
374 | {
|
---|
375 | public:
|
---|
376 | Q3ListBoxText(Q3ListBox* listbox, const QString & text=QString());
|
---|
377 | Q3ListBoxText(const QString & text=QString());
|
---|
378 | Q3ListBoxText(Q3ListBox* listbox, const QString & text, Q3ListBoxItem *after);
|
---|
379 | ~Q3ListBoxText();
|
---|
380 |
|
---|
381 | int height(const Q3ListBox *) const;
|
---|
382 | int width(const Q3ListBox *) const;
|
---|
383 |
|
---|
384 | int rtti() const;
|
---|
385 | enum { RTTI = 1 };
|
---|
386 |
|
---|
387 | protected:
|
---|
388 | void paint(QPainter *);
|
---|
389 |
|
---|
390 | private:
|
---|
391 | Q_DISABLE_COPY(Q3ListBoxText)
|
---|
392 | };
|
---|
393 |
|
---|
394 |
|
---|
395 | class Q_COMPAT_EXPORT Q3ListBoxPixmap : public Q3ListBoxItem
|
---|
396 | {
|
---|
397 | public:
|
---|
398 | Q3ListBoxPixmap(Q3ListBox* listbox, const QPixmap &);
|
---|
399 | Q3ListBoxPixmap(const QPixmap &);
|
---|
400 | Q3ListBoxPixmap(Q3ListBox* listbox, const QPixmap & pix, Q3ListBoxItem *after);
|
---|
401 | Q3ListBoxPixmap(Q3ListBox* listbox, const QPixmap &, const QString&);
|
---|
402 | Q3ListBoxPixmap(const QPixmap &, const QString&);
|
---|
403 | Q3ListBoxPixmap(Q3ListBox* listbox, const QPixmap & pix, const QString&, Q3ListBoxItem *after);
|
---|
404 | ~Q3ListBoxPixmap();
|
---|
405 |
|
---|
406 | const QPixmap *pixmap() const { return ± }
|
---|
407 |
|
---|
408 | int height(const Q3ListBox *) const;
|
---|
409 | int width(const Q3ListBox *) const;
|
---|
410 |
|
---|
411 | int rtti() const;
|
---|
412 | enum { RTTI = 2 };
|
---|
413 |
|
---|
414 | protected:
|
---|
415 | void paint(QPainter *);
|
---|
416 |
|
---|
417 | private:
|
---|
418 | Q_DISABLE_COPY(Q3ListBoxPixmap)
|
---|
419 |
|
---|
420 | QPixmap pm;
|
---|
421 | };
|
---|
422 |
|
---|
423 | #endif // QT_NO_LISTBOX
|
---|
424 |
|
---|
425 | QT_END_NAMESPACE
|
---|
426 |
|
---|
427 | QT_END_HEADER
|
---|
428 |
|
---|
429 | #endif // Q3LISTBOX_H
|
---|