1 /********************************************************************************
2 *                                                                               *
3 *                     R e c e n t   F i l e s   L i s t                         *
4 *                                                                               *
5 *********************************************************************************
6 * Copyright (C) 1998,2006 by Jeroen van der Zijp.   All Rights Reserved.        *
7 *********************************************************************************
8 * This library is free software; you can redistribute it and/or                 *
9 * modify it under the terms of the GNU Lesser General Public                    *
10 * License as published by the Free Software Foundation; either                  *
11 * version 2.1 of the License, or (at your option) any later version.            *
12 *                                                                               *
13 * This library is distributed in the hope that it will be useful,               *
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of                *
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU             *
16 * Lesser General Public License for more details.                               *
17 *                                                                               *
18 * You should have received a copy of the GNU Lesser General Public              *
19 * License along with this library; if not, write to the Free Software           *
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.    *
21 *********************************************************************************
22 * $Id: FXRecentFiles.h 3297 2015-12-14 20:30:04Z arthurcnorman $                     *
23 ********************************************************************************/
24 #ifndef FXRECENTFILES_H
25 #define FXRECENTFILES_H
26 
27 #ifndef FXOBJECT_H
28 #include "FXObject.h"
29 #endif
30 
31 namespace FX {
32 
33 
34 class FXApp;
35 
36 
37 /**
38 * The recent files object manages a most recently used (MRU) file list by
39 * means of the standard system registry.
40 * When connected to a widget, like a menu command, the recent files object
41 * updates the menu commands label to the associated recent file name; when
42 * the menu command is invoked, the recent file object sends its target a
43 * SEL_COMMAND message with the message data set to the associated file name,
44 * of the type const char*.
45 * When adding or removing file names, the recent files object automatically
46 * updates the system registry to record these changes.
47 */
48 class FXAPI FXRecentFiles : public FXObject {
49   FXDECLARE(FXRecentFiles)
50 private:
51   FXApp      *app;            // Backlink to application
52   FXObject   *target;         // Target object to send message
53   FXSelector  message;        // Message to send
54   FXString    group;          // MRU File group
55   FXint       maxfiles;       // Maximum number of files to track
56 private:
57   FXRecentFiles(const FXRecentFiles&);
58   FXRecentFiles &operator=(const FXRecentFiles&);
59 public:
60   long onCmdClear(FXObject*,FXSelector,void*);
61   long onCmdFile(FXObject*,FXSelector,void*);
62   long onUpdFile(FXObject*,FXSelector,void*);
63   long onUpdAnyFiles(FXObject*,FXSelector,void*);
64 public:
65   enum{
66     ID_CLEAR,
67     ID_ANYFILES,
68     ID_FILE_1,
69     ID_FILE_2,
70     ID_FILE_3,
71     ID_FILE_4,
72     ID_FILE_5,
73     ID_FILE_6,
74     ID_FILE_7,
75     ID_FILE_8,
76     ID_FILE_9,
77     ID_FILE_10,
78     ID_LAST
79     };
80 public:
81 
82   /// Make new recent files group, using global application instance
83   FXRecentFiles();
84 
85   /// Make new recent files group with default groupname
86   FXRecentFiles(FXApp* a);
87 
88   /// Make new recent files group with groupname gp
89   FXRecentFiles(FXApp* a,const FXString& gp,FXObject *tgt=NULL,FXSelector sel=0);
90 
91   /// Get application
getApp()92   FXApp* getApp() const { return app; }
93 
94   /// Change number of files we're tracking
setMaxFiles(FXint mx)95   void setMaxFiles(FXint mx){ maxfiles=mx; }
96 
97   /// Return the maximum number of files being tracked
getMaxFiles()98   FXint getMaxFiles() const { return maxfiles; }
99 
100   /// Set group name
setGroupName(const FXString & name)101   void setGroupName(const FXString& name){ group=name; }
102 
103   /// Return group name
getGroupName()104   FXString getGroupName() const { return group; }
105 
106   /// Change the target
setTarget(FXObject * t)107   void setTarget(FXObject *t){ target=t; }
108 
109   /// Get the target
getTarget()110   FXObject *getTarget() const { return target; }
111 
112   /// Change the message
setSelector(FXSelector sel)113   void setSelector(FXSelector sel){ message=sel; }
114 
115   /// Return the message id
getSelector()116   FXSelector getSelector() const { return message; }
117 
118   /// Obtain the filename at index
119   FXString getFile(FXint index) const;
120 
121   /// Change the filename at index
122   void setFile(FXint index,const FXString& filename);
123 
124   /// Append a file
125   void appendFile(const FXString& filename);
126 
127   /// Remove a file
128   void removeFile(const FXString& filename);
129 
130   /// Clear the list of files
131   void clear();
132 
133   /// Save to a stream
134   virtual void save(FXStream& store) const;
135 
136   /// Load from a stream
137   virtual void load(FXStream& store);
138 
139   /// Destructor
140   virtual ~FXRecentFiles();
141   };
142 
143 }
144 
145 #endif
146