summaryrefslogtreecommitdiff
path: root/libopie2/opieui/oversatileview.h
blob: 8af21dccce174ae59d94ff75c395612bc8786281 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
/*
                             This file is part of the Opie Project

              =.             (C) 2003 Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de>
            .=l.
           .>+-=
 _;:,     .>    :=|.         This program is free software; you can
.> <`_,   >  .   <=          redistribute it and/or  modify it under
:`=1 )Y*s>-.--   :           the terms of the GNU Library General Public
.="- .-=="i,     .._         License as published by the Free Software
 - .   .-<_>     .<>         Foundation; either version 2 of the License,
     ._= =}       :          or (at your option) any later version.
    .%`+i>       _;_.
    .i_,=:_.      -<s.       This program is distributed in the hope that
     +  .  -:.       =       it will be useful,  but WITHOUT ANY WARRANTY;
    : ..    .:,     . . .    without even the implied warranty of
    =_        +     =;=|`    MERCHANTABILITY or FITNESS FOR A
  _.=:.       :    :=>`:     PARTICULAR PURPOSE. See the GNU
..}^=.=       =       ;      Library General Public License for more
++=   -.     .`     .:       details.
 :     =  ...= . :.=-
 -.   .:....=;==+<;          You should have received a copy of the GNU
  -_. . .   )=.  =           Library General Public License along with
    --        :-=`           this library; see the file COPYING.LIB.
                             If not, write to the Free Software Foundation,
                             Inc., 59 Temple Place - Suite 330,
                             Boston, MA 02111-1307, USA.

*/

#ifndef OVERSATILEVIEW_H
#define OVERSATILEVIEW_H

/* QT */

#include <qwidgetstack.h>
#include <qiconview.h>

/* OPIE */

#include <opie2/oapplication.h>

/* FORWARDS */

class QHeader;
class QIconSet;
class QIconViewItem;
class OListView;
class QListViewItem;
class QPopupMenu;
class QString;

#ifndef QT_NO_DRAGANDDROP
class QIconDragItem;
#endif

class OVersatileView : public QWidgetStack
{
  Q_OBJECT
  
  friend class OVersatileViewItem;

  //==============================================================================================//
  // OVersatileView High Level API
  //==============================================================================================//

  public:
    OVersatileView( QWidget* parent = 0, const char* name = 0, int mode = 0 );
    ~OVersatileView();

    QPopupMenu* contextMenu() const;
  
    void setSynchronization( bool sync );
    bool synchronization();
    
    enum ViewMode { Tree = 0, Icons };
    int viewMode();
    
    QIconView* iconView() const;
    OListView* listView() const;
    
    enum WarningPolicy { None = 0, Warn, WarnReturn };
    
    void setWarningPolicy( int ) const;  // warn, if calling a method which doesn't apply to the current viewmode
    bool warningPolicy() const;
    
    void setDefaultPixmaps( int mode, QPixmap& leaf, QPixmap& opened, QPixmap& closed );
    
  public slots:
    void setViewMode( int mode );
    void setIconViewMode();
    void setTreeViewMode();

  protected:
    virtual bool isValidViewMode( int mode ) const;
    virtual void popupContextMenu( OVersatileViewItem* item, const QPoint& pos, int col = 0 );
  
  private:
    int _viewmode;
    bool _synchronization;
    mutable int _warningpolicy;
    
    OListView* _listview;
    QIconView* _iconview;
    
    QPixmap _treeleaf;
    QPixmap _treeopened;
    QPixmap _treeclosed;

    QPixmap _iconleaf;
    QPixmap _iconopened;
    QPixmap _iconclosed;
    
    QPopupMenu* _contextmenu;
    
    int _iconstyle;
    int _treestyle;
  
  private slots:
      
    void contextMenuRequested( QListViewItem*, const QPoint&, int );
    void contextMenuRequested( QIconViewItem*, const QPoint& );

    // type converting signal forwarders
    
    void selectionChanged( QListViewItem * );
    void currentChanged( QListViewItem * );
    void clicked( QListViewItem * );
    void pressed( QListViewItem * );
    void doubleClicked( QListViewItem * );
    void returnPressed( QListViewItem * );
    void onItem( QListViewItem * );
    
    void selectionChanged( QIconViewItem * );
    void currentChanged( QIconViewItem * );
    void clicked( QIconViewItem * );
    void pressed( QIconViewItem * );
    void doubleClicked( QIconViewItem * );
    void returnPressed( QIconViewItem * );
    void onItem( QIconViewItem * );
    
    void expanded( QListViewItem * item ); // QListView
    void collapsed( QListViewItem * item ); // QListView

  signals:
    
    void contextMenuRequested( OVersatileViewItem * item, const QPoint& pos, int col );
    
    /*#ifndef QT_NO_DRAGANDDROP
    void dropped( QDropEvent *e, const QValueList<QIconDragItem> &lst );  // QIconView
    #endif
    void itemRenamed( OVersatileViewItem *item, const QString & );  // QIconView
    void itemRenamed( OVersatileViewItem *item );  // QIconView
    */

  //==============================================================================================//
  // "Derived" API - Case 1: Methods existing either only in QListView or only in QIconView
  //==============================================================================================//

public:

    /*
    enum Arrangement {  // QIconView
    LeftToRight = 0,
    TopToBottom
    };
    enum ResizeMode {   // QIconView
    Fixed = 0,
    Adjust
    };
    enum ItemTextPos {  // QIconView
    Bottom = 0,
    Right
    };
    */
    
    //
    // only in QListView
    //
    
    int treeStepSize() const;  // QListView
    virtual void setTreeStepSize( int );  // QListView

    QHeader * header() const;  // QListView

    virtual int addColumn( const QString &label, int size = -1);  // QListView
    virtual int addColumn( const QIconSet& iconset, const QString &label, int size = -1);  // QListView
    void removeColumn( int index ); // #### make virtual in next major release!  // QListView
    virtual void setColumnText( int column, const QString &label );  // QListView
    virtual void setColumnText( int column, const QIconSet& iconset, const QString &label );  // QListView
    QString columnText( int column ) const;  // QListView
    virtual void setColumnWidth( int column, int width );  // QListView
    int columnWidth( int column ) const;  // QListView
    enum WidthMode { Manual, Maximum };  // QListView
    virtual void setColumnWidthMode( int column, WidthMode );  // QListView
    WidthMode columnWidthMode( int column ) const;  // QListView
    int columns() const;  // QListView

    virtual void setColumnAlignment( int, int );  // QListView
    int columnAlignment( int ) const;  // QListView

    OVersatileViewItem * itemAt( const QPoint & screenPos ) const;  // QListView
    QRect itemRect( const OVersatileViewItem * ) const;  // QListView
    int itemPos( const OVersatileViewItem * );  // QListView

    bool isSelected( const OVersatileViewItem * ) const;  // QListView  // also in QIconViewItem but not in QIconView *shrug*

    virtual void setMultiSelection( bool enable );  // QListView
    bool isMultiSelection() const;  // QListView

    OVersatileViewItem * selectedItem() const;  // QListView
    virtual void setOpen( OVersatileViewItem *, bool );  // QListView
    bool isOpen( const OVersatileViewItem * ) const;  // QListView

    OVersatileViewItem * firstChild() const;  // QListView
    int childCount() const;  // QListView

    virtual void setAllColumnsShowFocus( bool );  // QListView
    bool allColumnsShowFocus() const;  // QListView

    virtual void setItemMargin( int );  // QListView
    int itemMargin() const;  // QListView

    virtual void setRootIsDecorated( bool );  // QListView
    bool rootIsDecorated() const;  // QListView

    void setShowSortIndicator( bool show );  // QListView
    bool showSortIndicator() const;  // QListView
    
    int index( const OVersatileViewItem *item ) const;  // QIconView

  public slots:
    void triggerUpdate();  // QListView

  signals:
    void expanded( OVersatileViewItem *item ); // QListView
    void collapsed( OVersatileViewItem *item ); // QListView

    //
    // only in QIconView
    //

  public:    
    uint count() const;  // QIconView
    
    OVersatileViewItem *firstItem() const;  // QIconView
    OVersatileViewItem *lastItem() const;  // QIconView

    OVersatileViewItem *findItem( const QPoint &pos ) const; // QIconView
    OVersatileViewItem *findItem( const QString &text ) const; // QIconView

    OVersatileViewItem* findFirstVisibleItem( const QRect &r ) const;  // QIconView
    OVersatileViewItem* findLastVisibleItem( const QRect &r ) const;  // QIconView

    virtual void setGridX( int rx );  // QIconView
    virtual void setGridY( int ry );  // QIconView
    int gridX() const;  // QIconView
    int gridY() const;  // QIconView
    virtual void setSpacing( int sp );  // QIconView
    int spacing() const;  // QIconView
    virtual void setItemTextPos( QIconView::ItemTextPos pos );  // QIconView
    QIconView::ItemTextPos itemTextPos() const;  // QIconView
    virtual void setItemTextBackground( const QBrush &b );  // QIconView
    QBrush itemTextBackground() const;  // QIconView
    virtual void setArrangement( QIconView::Arrangement am );  // QIconView
    QIconView::Arrangement arrangement() const;  // QIconView
    virtual void setResizeMode( QIconView::ResizeMode am );  // QIconView
    QIconView::ResizeMode resizeMode() const;  // QIconView
    virtual void setMaxItemWidth( int w );  // QIconView
    int maxItemWidth() const;  // QIconView
    virtual void setMaxItemTextLength( int w );  // QIconView
    int maxItemTextLength() const;  // QIconView
    virtual void setAutoArrange( bool b );  // QIconView
    bool autoArrange() const;  // QIconView
    virtual void setShowToolTips( bool b );  // QIconView
    bool showToolTips() const;  // QIconView

    bool sorting() const;  // QIconView
    bool sortDirection() const;  // QIconView

    virtual void setItemsMovable( bool b );  // QIconView
    bool itemsMovable() const;  // QIconView
    virtual void setWordWrapIconText( bool b );  // QIconView
    bool wordWrapIconText() const;  // QIconView

  public slots:
    virtual void arrangeItemsInGrid( const QSize &grid, bool update = TRUE );  // QIconView
    virtual void arrangeItemsInGrid( bool update = TRUE );  // QIconView
    virtual void updateContents();  // QIconView
  
  signals:
    /*#ifndef QT_NO_DRAGANDDROP
    void dropped( QDropEvent *e, const QValueList<QIconDragItem> &lst );  // QIconView
    #endif
    */
    void moved();  // QIconView
    void itemRenamed( OVersatileViewItem *item, const QString & );  // QIconView
    void itemRenamed( OVersatileViewItem *item );  // QIconView

  //==============================================================================================//
  // "Derived" API - Case 2: Methods existing in QListView and QIconView with the same signatures
  //==============================================================================================//

  public:
    enum SelectionMode {
    Single = 0,
    Multi,
    Extended,
    NoSelection
    };

    virtual void clear();

    virtual void setFont( const QFont & );
    virtual void setPalette( const QPalette & );

    virtual void takeItem( OVersatileViewItem * );

    void setSelectionMode( SelectionMode mode );
    SelectionMode selectionMode() const;

    virtual void selectAll( bool select );
    virtual void clearSelection();
    virtual void invertSelection();
  
    void ensureItemVisible( const OVersatileViewItem * );
    virtual void repaintItem( const OVersatileViewItem * ) const;

    virtual void setCurrentItem( OVersatileViewItem * );
    OVersatileViewItem * currentItem() const;

    // bool eventFilter( QObject * o, QEvent * );   // use QWidgetStack implementation

    // QSize minimumSizeHint() const;               // use QWidgetStack implementation
    // QSizePolicy sizePolicy() const;              // use QWidgetStack implementation
    // QSize sizeHint() const;                      // use QWidgetStack implementation

  signals:
    void selectionChanged();
    void selectionChanged( OVersatileViewItem * );
    void currentChanged( OVersatileViewItem * );
    void clicked( OVersatileViewItem * );
    void pressed( OVersatileViewItem * );

    void doubleClicked( OVersatileViewItem * );
    void returnPressed( OVersatileViewItem * );
  
    void onItem( OVersatileViewItem * );
    void onViewport();
  
  //==============================================================================================//
  // "Derived" API - Case 2: Methods existing in QListView and QIconView with differing signatures
  //==============================================================================================//
  
  /*
  
  public:
    virtual void insertItem( OVersatileViewItem * );  // QListView
    virtual void insertItem( OVersatileViewItem *item, OVersatileViewItem *after = 0L );  // QIconView

    virtual void setSelected( OVersatileViewItem *, bool );  // QListView
    virtual void setSelected( OVersatileViewItem *item, bool s, bool cb = FALSE );  // QIconView

    virtual void setSorting( int column, bool increasing = TRUE );  // QListView
    void setSorting( bool sort, bool ascending = TRUE );  // QIconView

    void sort(); // #### make virtual in next major release  // QListView
    virtual void sort( bool ascending = TRUE );  // QIconView

  */
  
  signals:
    void clicked( OVersatileViewItem *, const QPoint &, int );  // QListView
    void clicked( OVersatileViewItem *, const QPoint & );  // QIconView
    
    void pressed( OVersatileViewItem *, const QPoint &, int );  // QListView
    void pressed( OVersatileViewItem *, const QPoint & );  // QIconView
    
    void rightButtonClicked( OVersatileViewItem* item, const QPoint& pos );  // QIconView
    void rightButtonClicked( OVersatileViewItem *, const QPoint&, int );  // QListView
    
    void rightButtonPressed( OVersatileViewItem* item, const QPoint& pos );  // QIconView   
    void rightButtonPressed( OVersatileViewItem *, const QPoint&, int );  // QListView
    
    void mouseButtonPressed( int, OVersatileViewItem *, const QPoint& , int );  // QListView
    void mouseButtonPressed( int button, OVersatileViewItem* item, const QPoint& pos );  // QIconView
    
    void mouseButtonClicked( int, OVersatileViewItem *,  const QPoint&, int );  // QListView
    void mouseButtonClicked( int button, OVersatileViewItem* item, const QPoint& pos );  // QIconView

};

#endif