File: FXFileList.h

package info (click to toggle)
gogglesmm 1.2.5-6
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 16,812 kB
  • sloc: cpp: 231,960; ansic: 893; xml: 222; makefile: 33
file content (421 lines) | stat: -rw-r--r-- 16,820 bytes parent folder | download | duplicates (2)
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
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
/********************************************************************************
*                                                                               *
*                        F i l e    L i s t   W i d g e t                       *
*                                                                               *
*********************************************************************************
* Copyright (C) 1997,2022 by Jeroen van der Zijp.   All Rights Reserved.        *
*********************************************************************************
* This library is free software; you can redistribute it and/or modify          *
* it under the terms of the GNU Lesser General Public License as published by   *
* the Free Software Foundation; either version 3 of the License, or             *
* (at your option) any later version.                                           *
*                                                                               *
* This library 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 Lesser General Public License for more details.                           *
*                                                                               *
* You should have received a copy of the GNU Lesser General Public License      *
* along with this program.  If not, see <http://www.gnu.org/licenses/>          *
********************************************************************************/
#ifndef FXFILELIST_H
#define FXFILELIST_H

#ifndef FXICONLIST_H
#include "FXIconList.h"
#endif

namespace FX {


struct FXFileAssoc;
class FXFileList;
class FXIconSource;
class FXFileAssociations;


/// File List options
enum {
  FILELIST_SHOWHIDDEN   = 0x04000000, /// Show hidden files or directories
  FILELIST_SHOWDIRS     = 0x08000000, /// Show only directories
  FILELIST_SHOWFILES    = 0x10000000, /// Show only files
  FILELIST_SHOWIMAGES   = 0x20000000, /// Show preview of images
  FILELIST_NO_OWN_ASSOC = 0x40000000, /// Do not create associations for files
  FILELIST_NO_PARENT    = 0x80000000  /// Suppress display of '.' and '..'
  };


/// File item
class FXAPI FXFileItem : public FXIconItem {
  FXDECLARE(FXFileItem)
  friend class FXFileList;
protected:
  FXFileAssoc *assoc;           // File association record
  FXFileItem  *link;            // Link to next item
  FXlong       size;            // File size
  FXTime       date;            // File time
  FXuint       mode;            // Mode flags
private:
  FXFileItem(const FXFileItem&);
  FXFileItem& operator=(const FXFileItem&);
protected:
  FXFileItem():assoc(nullptr),link(nullptr),size(0),date(0){}
public:

  /// Constructor
  FXFileItem(const FXString& text,FXIcon* bi=nullptr,FXIcon* mi=nullptr,void* ptr=nullptr):FXIconItem(text,bi,mi,ptr),assoc(nullptr),link(nullptr),size(0L),date(0L),mode(0){}

  /// Return true if this is a file item
  FXbool isFile() const { return (mode&(FXIO::File))!=0; }

  /// Return true if this is a directory item
  FXbool isDirectory() const { return (mode&FXIO::Directory)!=0; }

  /// Return true if this is an executable item
  FXbool isExecutable() const { return (mode&FXIO::File)!=0 && (mode&FXIO::AllExec)!=0; }

  /// Return true if this is a symbolic link item
  FXbool isSymlink() const { return (mode&FXIO::SymLink)!=0; }

  /// Return true if this is a character device item
  FXbool isChardev() const { return (mode&FXIO::Character)!=0; }

  /// Return true if this is a block device item
  FXbool isBlockdev() const { return (mode&FXIO::Block)!=0; }

  /// Return true if this is an FIFO item
  FXbool isFifo() const { return (mode&FXIO::Fifo)!=0; }

  /// Return true if this is a socket
  FXbool isSocket() const { return (mode&FXIO::Socket)!=0; }

  /// Return true if item is a special navigational item like '.' or '..'
  FXbool isNavigational() const { return (label[0]=='.' && (label[1]=='\t' || (label[1]=='.' && label[2]=='\t'))); }

  /// Set the file-association object for this item
  void setAssoc(FXFileAssoc* a){ assoc=a; }

  /// Return the file-association object for this item
  FXFileAssoc* getAssoc() const { return assoc; }

  /// Set the file size for this item
  void setSize(FXlong s){ size=s; }

  /// Return the file size for this item
  FXlong getSize() const { return size; }

  /// Set the date for this item, in nanoseconds
  void setDate(FXTime d){ date=d; }

  /// Return the date for this item, in nanoseconds
  FXTime getDate() const { return date; }

  /// Set file mode bits
  void setMode(FXuint m){ mode=m; }

  /// Return file mode bits
  FXuint getMode() const { return mode; }
  };


/**
* A File List widget provides an icon rich view of the file system.
* It automatically updates itself periodically by re-scanning the file system
* for any changes.  As it scans the displayed directory, it automatically
* determines the icons to be displayed by consulting the file associations registry
* settings.  A number of messages can be sent to the File List to control the
* filter pattern, sort category, sorting order, case sensitivity, and hidden file
* display mode.
* The File list widget supports drags and drops of files.
*/
class FXAPI FXFileList : public FXIconList {
  FXDECLARE(FXFileList)
protected:
  FXFileAssociations *associations;     // Association table
  FXIconSource       *iconloader;       // Icon loader
  FXFileItem         *list;             // File item list
  FXIcon             *big_folder;       // Big folder icon
  FXIcon             *mini_folder;      // Mini folder icon
  FXIcon             *big_doc;          // Big document icon
  FXIcon             *mini_doc;         // Mini document icon
  FXIcon             *big_app;          // Big application icon
  FXIcon             *mini_app;         // Mini application icon
  FXString            directory;        // Current directory
  FXString            pattern;          // Pattern of file names
  FXString            timeformat;       // File time formatting
  FXString            startdirectory;   // Start directory
  FXString            dropdirectory;    // Drop directory
  FXString            clipfiles;        // Clipped files
  FXString            dragfiles;        // Dragged files
  FXString            dropfiles;        // Dropped files
  FXDragAction        dropaction;       // Drop action
  FXuint              matchmode;        // File wildcard match mode
  FXint               imagesize;        // Image size
  FXTime              timestamp;        // Time when last refreshed
  FXuint              counter;          // Refresh counter
  FXbool              clipcut;          // Cut or copy
  FXbool              draggable;        // Dragable files
protected:
  FXFileList();
  FXbool listItems(FXbool force,FXbool notify);
  FXString getSelectedFiles() const;
  virtual FXIconItem *createItem(const FXString& text,FXIcon *big,FXIcon* mini,void* ptr);
  void delete_files(const FXString& files);
  void copy_files(const FXString& directory,const FXString& files);
  void move_files(const FXString& directory,const FXString& files);
  static FXint compareSectionNatural(const FXchar* s1,const FXchar* s2,FXint s,FXbool ci=false);
private:
  FXFileList(const FXFileList&);
  FXFileList &operator=(const FXFileList&);
public:
  long onOpenTimer(FXObject*,FXSelector,void*);
  long onRefreshTimer(FXObject*,FXSelector,void*);
  long onPreviewChore(FXObject*,FXSelector,void*);
  long onDNDEnter(FXObject*,FXSelector,void*);
  long onDNDLeave(FXObject*,FXSelector,void*);
  long onDNDMotion(FXObject*,FXSelector,void*);
  long onDNDDrop(FXObject*,FXSelector,void*);
  long onDNDRequest(FXObject*,FXSelector,void*);
  long onBeginDrag(FXObject*,FXSelector,void*);
  long onEndDrag(FXObject*,FXSelector,void*);
  long onDragged(FXObject*,FXSelector,void*);
  long onClipboardLost(FXObject*,FXSelector,void*);
  long onClipboardRequest(FXObject*,FXSelector,void*);
  long onCmdSetValue(FXObject*,FXSelector,void*);
  long onCmdGetStringValue(FXObject*,FXSelector,void*);
  long onCmdSetStringValue(FXObject*,FXSelector,void*);
  long onCmdDirectoryUp(FXObject*,FXSelector,void*);
  long onUpdDirectoryUp(FXObject*,FXSelector,void*);
  long onCmdSortByName(FXObject*,FXSelector,void*);
  long onUpdSortByName(FXObject*,FXSelector,void*);
  long onCmdSortByType(FXObject*,FXSelector,void*);
  long onUpdSortByType(FXObject*,FXSelector,void*);
  long onCmdSortBySize(FXObject*,FXSelector,void*);
  long onUpdSortBySize(FXObject*,FXSelector,void*);
  long onCmdSortByTime(FXObject*,FXSelector,void*);
  long onUpdSortByTime(FXObject*,FXSelector,void*);
  long onCmdSortByUser(FXObject*,FXSelector,void*);
  long onUpdSortByUser(FXObject*,FXSelector,void*);
  long onCmdSortByGroup(FXObject*,FXSelector,void*);
  long onUpdSortByGroup(FXObject*,FXSelector,void*);
  long onCmdSortReverse(FXObject*,FXSelector,void*);
  long onUpdSortReverse(FXObject*,FXSelector,void*);
  long onCmdSortCase(FXObject*,FXSelector,void*);
  long onUpdSortCase(FXObject*,FXSelector,void*);
  long onCmdSetPattern(FXObject*,FXSelector,void*);
  long onUpdSetPattern(FXObject*,FXSelector,void*);
  long onCmdSetDirectory(FXObject*,FXSelector,void*);
  long onUpdSetDirectory(FXObject*,FXSelector,void*);
  long onCmdToggleHidden(FXObject*,FXSelector,void*);
  long onUpdToggleHidden(FXObject*,FXSelector,void*);
  long onCmdShowHidden(FXObject*,FXSelector,void*);
  long onUpdShowHidden(FXObject*,FXSelector,void*);
  long onCmdHideHidden(FXObject*,FXSelector,void*);
  long onUpdHideHidden(FXObject*,FXSelector,void*);
  long onCmdToggleImages(FXObject*,FXSelector,void*);
  long onUpdToggleImages(FXObject*,FXSelector,void*);
  long onCmdHeader(FXObject*,FXSelector,void*);
  long onUpdHeader(FXObject*,FXSelector,void*);
  long onCmdRefresh(FXObject*,FXSelector,void*);
  long onUpdHaveSel(FXObject*,FXSelector,void*);
  long onCmdCutSel(FXObject*,FXSelector,void*);
  long onCmdCopySel(FXObject*,FXSelector,void*);
  long onCmdPasteSel(FXObject*,FXSelector,void*);
  long onCmdDeleteSel(FXObject*,FXSelector,void*);
  long onCmdDropAsk(FXObject*,FXSelector,void*);
  long onCmdDropCopy(FXObject*,FXSelector,void*);
  long onCmdDropMove(FXObject*,FXSelector,void*);
  long onCmdDropLink(FXObject*,FXSelector,void*);
public:
  static FXint ascending(const FXIconItem* a,const FXIconItem* b);
  static FXint descending(const FXIconItem* a,const FXIconItem* b);
  static FXint ascendingCase(const FXIconItem* a,const FXIconItem* b);
  static FXint descendingCase(const FXIconItem* a,const FXIconItem* b);
  static FXint ascendingType(const FXIconItem* a,const FXIconItem* b);
  static FXint descendingType(const FXIconItem* a,const FXIconItem* b);
  static FXint ascendingSize(const FXIconItem* a,const FXIconItem* b);
  static FXint descendingSize(const FXIconItem* a,const FXIconItem* b);
  static FXint ascendingTime(const FXIconItem* a,const FXIconItem* b);
  static FXint descendingTime(const FXIconItem* a,const FXIconItem* b);
  static FXint ascendingUser(const FXIconItem* a,const FXIconItem* b);
  static FXint descendingUser(const FXIconItem* a,const FXIconItem* b);
  static FXint ascendingGroup(const FXIconItem* a,const FXIconItem* b);
  static FXint descendingGroup(const FXIconItem* a,const FXIconItem* b);
public:
  enum {
    ID_OPENTIMER=FXIconList::ID_LAST,
    ID_REFRESHTIMER,
    ID_DROPASK,
    ID_DROPCOPY,
    ID_DROPMOVE,
    ID_DROPLINK,
    ID_PREVIEWCHORE,
    ID_SORT_BY_NAME,    /// Sort by name
    ID_SORT_BY_TYPE,    /// Sort by type
    ID_SORT_BY_SIZE,    /// Sort by size
    ID_SORT_BY_TIME,    /// Sort by access time
    ID_SORT_BY_USER,    /// Sort by owner name
    ID_SORT_BY_GROUP,   /// Sort by group name
    ID_SORT_REVERSE,    /// Reverse sort order
    ID_SORT_CASE,       /// Toggle sort case sensitivity
    ID_DIRECTORY_UP,    /// Move up one directory
    ID_SET_PATTERN,     /// Set match pattern
    ID_SET_DIRECTORY,   /// Set directory
    ID_SHOW_HIDDEN,     /// Show hidden files
    ID_HIDE_HIDDEN,     /// Hide hidden files
    ID_TOGGLE_HIDDEN,   /// Toggle display of hidden files
    ID_TOGGLE_IMAGES,   /// Toggle display of images
    ID_REFRESH,         /// Refresh immediately
    ID_CUT_SEL,         /// Cut selected files to clipboard
    ID_COPY_SEL,        /// Copy selected files to clipboard
    ID_DELETE_SEL,      /// Delete selected files
    ID_PASTE_SEL,       /// Paste selected files from clipboard
    ID_LAST
    };
public:

  /// Construct a file list
  FXFileList(FXComposite *p,FXObject* tgt=nullptr,FXSelector sel=0,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0);

  /// Create server-side resources
  virtual void create();

  /// Detach server-side resources
  virtual void detach();

  /// Destroy server-side resources
  virtual void destroy();

  /// Set current file; return true if success
  FXbool setCurrentFile(const FXString& file,FXbool notify=false);

  /// Return current file
  FXString getCurrentFile() const;

  /// Set current directory; return true if success
  FXbool setDirectory(const FXString& path,FXbool notify=false);

  /// Return current directory
  FXString getDirectory() const { return directory; }

  /// Return name of item at index
  FXString getItemFilename(FXint index) const;

  /// Return full pathname of item at index
  FXString getItemPathname(FXint index) const;

  /// Return true if item is a file
  FXbool isItemFile(FXint index) const;

  /// Return true if item is a directory
  FXbool isItemDirectory(FXint index) const;

  /// Return true if item is executable
  FXbool isItemExecutable(FXint index) const;

  /// Return true if this is a symbolic link item
  FXbool isItemSymlink(FXint index) const;

  /// Return true if item is navigational item like '.' or '..'
  FXbool isItemNavigational(FXint index) const;

  /// Return file association of item
  FXFileAssoc* getItemAssoc(FXint index) const;

  /// Return the file size for this item
  FXlong getItemSize(FXint index) const;

  /// Return the date for this item, in nanoseconds
  FXTime getItemDate(FXint index) const;

  /// Return the mode bits for this item
  FXuint getItemMode(FXint index) const;

  /// Select files matching wildcard pattern
  FXbool selectMatching(const FXString& ptrn="*",FXuint mode=FXPath::PathName|FXPath::NoEscape,FXbool notify=false);

  /// Change wildcard matching pattern
  void setPattern(const FXString& ptrn="*",FXbool notify=false);

  /// Return wildcard pattern
  FXString getPattern() const { return pattern; }

  /// Change wildcard matching mode (see FXPath)
  void setMatchMode(FXuint mode=FXPath::PathName|FXPath::NoEscape,FXbool notify=false);

  /// Return wildcard matching mode
  FXuint getMatchMode() const { return matchmode; }

  /// Show or hide hidden files
  void showHiddenFiles(FXbool flag,FXbool notify=false);

  /// Return true if showing hidden files
  FXbool showHiddenFiles() const;

  /// Show directories only
  void showOnlyDirectories(FXbool flag,FXbool notify=false);

  /// Return true if showing directories only
  FXbool showOnlyDirectories() const;

  /// Show files only
  void showOnlyFiles(FXbool flag,FXbool notify=false);

  /// Return true if showing files only
  FXbool showOnlyFiles() const;

  /// Show parent directories
  void showParents(FXbool flag,FXbool notify=false);

  /// Return true if showing parent directories
  FXbool showParents() const;

  /// Show or hide preview images
  void showImages(FXbool flag,FXbool notify=false);

  /// Return true if image preview on
  FXbool showImages() const;

  /// Change images preview size
  void setImageSize(FXint size,FXbool notify=false);

  /// Return images preview size
  FXint getImageSize() const { return imagesize; }

  /// Set draggable files
  void setDraggableFiles(FXbool flag,FXbool notify=false);

  /// Are draggable files
  FXbool getDraggableFiles() const { return draggable; }

  /// Set file time format
  void setTimeFormat(const FXString& fmt,FXbool notify=false);

  /// Return file time format
  const FXString& getTimeFormat() const { return timeformat; }

  /// Change file associations; delete the old one unless it was shared
  void setAssociations(FXFileAssociations* assoc,FXbool owned=false,FXbool notify=false);

  /// Return file associations
  FXFileAssociations* getAssociations() const { return associations; }

  /// Change icon loader
  void setIconSource(FXIconSource* src){ iconloader=src; }

  /// Return icon loader
  FXIconSource* getIconSource() const { return iconloader; }

  /// Save to stream
  virtual void save(FXStream& store) const;

  /// Load from stream
  virtual void load(FXStream& store);

  /// Destructor
  virtual ~FXFileList();
  };

}

#endif