251af27355a2ba3ee9fd4dbf4e73f2a57baf69c5
[scilab.git] / scilab / modules / history_manager / src / cpp / HistoryManager.hxx
1 /*
2 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 * Copyright (C) 2007-2008 - INRIA - Allan CORNET
4 * Copyright (C) 2011 - DIGITEO - Allan CORNET
5 *
6  * Copyright (C) 2012 - 2016 - Scilab Enterprises
7  *
8  * This file is hereby licensed under the terms of the GNU GPL v2.0,
9  * pursuant to article 5.3.4 of the CeCILL v.2.1.
10  * This file was originally licensed under the terms of the CeCILL v2.1,
11  * and continues to be available under such terms.
12  * For more information, see the COPYING file which you should have received
13  * along with this program.
14 *
15 */
16
17 /*------------------------------------------------------------------------*/
18 #ifndef __HISTORYMANAGER_CPP_H__
19 #define __HISTORYMANAGER_CPP_H__
20 /*------------------------------------------------------------------------*/
21 #ifdef __cplusplus
22 /*------------------------------------------------------------------------*/
23 extern "C"
24 {
25 #include "dynlib_history_manager.h"
26 #include <time.h>
27 };
28 /*------------------------------------------------------------------------*/
29 #include <list>
30 #include "HistoryFile.hxx"
31 #include "HistorySearch.hxx"
32
33 #ifdef _MSC_VER
34 //disable warnings about exports STL items
35 #pragma warning (disable : 4251)
36 #endif
37
38 /*------------------------------------------------------------------------*/
39 class HISTORY_MANAGER_IMPEXP HistoryManager
40 {
41 public:
42
43     static HistoryManager* getInstance(void);
44     static void killInstance(void);
45
46     static BOOL historyIsEnabled(void);
47
48     /*
49     * add a line to History manager
50     * @param a line to add
51     * line isn't added if it is the same as previous (FALSE)
52     * @return TRUE or FALSE
53     */
54     BOOL appendLine(char *_pstLine);
55
56     /**
57     * append lines to History manager
58     * @param array of string
59     * @param size of the array of string
60     * @return TRUE or FALSE
61     */
62     BOOL appendLines(char **_pstLines, int _iLines);
63
64     /**
65     * Display history
66     */
67     void displayHistory(void);
68
69     /**
70     * get filename of history
71     * @return a filename
72     */
73     char* getFilename(void);
74
75     /**
76     * set filename of history
77     * @param filename of history
78     * @return TRUE or FALSE
79     */
80     BOOL setFilename(char* _pstFilename);
81
82     /**
83     * set default filename of history
84     * @return TRUE or FALSE
85     */
86     BOOL setDefaultFilename(void);
87
88     /**
89     * save history in a file
90     * @param a filename if NULL saves in default filename
91     * default filename --> SCIHOME/history.scilab
92     * @return TRUE or FALSE
93     */
94     BOOL writeToFile(char* _pstFilename);
95
96     /**
97     * load history from a file
98     * @param a filename if NULL load from default filename
99     * default filename --> SCIHOME/<scilab version>history.scilab
100     * @return TRUE or FALSE
101     */
102     BOOL loadFromFile(char* _pstFilename);
103
104     /**
105     * reset history manager
106     */
107     BOOL reset(void);
108
109     /**
110     * Get all lines in history
111     * @param output size of the array of string
112     * @return an array of strings
113     */
114     char** getAllLines(int* _iLines);
115
116     /**
117     * returns the first line in history
118     * @return a string
119     */
120     char* getFirstLine(void);
121
122     /**
123     * returns the last line in history
124     * @return a string
125     */
126     char* getLastLine(void);
127
128     /**
129     * get number of lines of history
130     * @return a number >= 0
131     */
132     int getNumberOfLines(void);
133
134     /**
135     * Get the Nth Line in history
136     * @param N
137     * @return the Nth Line
138     */
139     char* getNthLine(int _iLine);
140
141     /**
142     * delete the Nth Line in history
143     * @param N
144     * @return TRUE or FALSE
145     */
146     BOOL deleteNthLine(int _iLine);
147
148     /**
149     * Allow to save consecutive duplicate lines
150     * @param doit : TRUE (to allow) or FALSE
151     */
152     void setSaveConsecutiveDuplicateLines(BOOL _bAllow);
153
154     /**
155     * get state about to save consecutive duplicate lines
156     * @return TRUE or FALSE
157     */
158     BOOL getSaveConsecutiveDuplicateLines(void);
159
160     /**
161     * set after how many lines history is saved
162     * @param num : number of lines
163     */
164     void setAfterHowManyLinesHistoryIsSaved(int _iNum);
165
166     /**
167     * get after how many lines history is saved
168     * @return a int : number of lines
169     */
170     int getAfterHowManyLinesHistoryIsSaved(void);
171
172     /**
173     * set new token to search in history
174     * @param token (a string)
175     * @return TRUE or FALSE
176     */
177     BOOL setToken(const char* _pstToken);
178
179     /**
180     * get token searched in history
181     * @return token (a string)
182     */
183     char* getToken(void);
184
185     /**
186     * resettoken searched in history
187     * @return TRUE or FALSE
188     */
189     BOOL resetToken(void);
190
191     /**
192     * Get the previous line in search
193     * @return a line
194     */
195     char* getPreviousLine(void);
196
197     /**
198     * Get the next line in Scilab history
199     * @return a line or NULL
200     * after an appendLine iterator go to end
201     */
202     char* getNextLine(void);
203
204     /**
205     * get info about history file was truncated
206     * @return TRUE or FALSE
207     */
208     BOOL isTruncated(void);
209
210     /**
211     *
212     */
213     BOOL setNumberOfLinesMax(int _iMaxLines);
214
215     /**
216     *
217     */
218     int getNumberOfLinesMax(void);
219
220     /**
221     * search if line is a beginning of a session
222     * @return TRUE or FALSE
223     */
224     BOOL isBeginningSessionLine(char* _pstLine);
225
226 protected:
227
228 private:
229
230     /**
231     * Constructor
232     */
233     HistoryManager();
234
235     /**
236     * Destructor
237     */
238     ~HistoryManager();
239
240     static HistoryManager* m_pHM;
241     HistoryFile m_HF;
242     HistorySearch m_HS;
243
244     std::list<std::string> m_Commands;
245
246     BOOL m_bAllowConsecutiveCommand;
247     int m_iSaveLimit;
248     int m_iSavedLines;
249
250     /**
251     * add as first line  beginning session info
252     */
253     void fixHistorySession(void);
254
255     BOOL m_bTruncated;
256
257 };
258 /*------------------------------------------------------------------------*/
259 #endif /* __cplusplus */
260 /*------------------------------------------------------------------------*/
261 #endif /* __HISTORYMANAGER_CPP_H__ */