0031939: Coding - correction of spelling errors in comments [part 4]
[occt.git] / src / IFSelect / IFSelect_SessionPilot.hxx
1 // Created on: 1993-07-27
2 // Created by: Christian CAILLET
3 // Copyright (c) 1993-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
5 //
6 // This file is part of Open CASCADE Technology software library.
7 //
8 // This library is free software; you can redistribute it and/or modify it under
9 // the terms of the GNU Lesser General Public License version 2.1 as published
10 // by the Free Software Foundation, with special exception defined in the file
11 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12 // distribution for complete text of the license and disclaimer of any warranty.
13 //
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
16
17 #ifndef _IFSelect_SessionPilot_HeaderFile
18 #define _IFSelect_SessionPilot_HeaderFile
19
20 #include <Standard.hxx>
21 #include <Standard_Type.hxx>
22
23 #include <TCollection_AsciiString.hxx>
24 #include <Standard_Integer.hxx>
25 #include <TColStd_Array1OfAsciiString.hxx>
26 #include <TColStd_Array1OfInteger.hxx>
27 #include <Standard_Boolean.hxx>
28 #include <TColStd_SequenceOfAsciiString.hxx>
29 #include <IFSelect_Activator.hxx>
30 #include <Standard_CString.hxx>
31 #include <IFSelect_ReturnStatus.hxx>
32 #include <IFSelect_PrintCount.hxx>
33 class IFSelect_WorkSession;
34 class Standard_Transient;
35 class IFSelect_WorkLibrary;
36 class TCollection_AsciiString;
37 class IFSelect_SignCounter;
38
39 class IFSelect_SessionPilot;
40 DEFINE_STANDARD_HANDLE(IFSelect_SessionPilot, IFSelect_Activator)
41
42 //! A SessionPilot is intended to make easier the use of a WorkSession.
43 //! It receives commands, under alphanumeric form,
44 //! then calls a library of Activators to interpret and run them.
45 //!
46 //! Then, WorkSession just records data required to work :
47 //! Rules for Selection, Dispatch ... ; File Data (InterfaceModel
48 //! and results of Evaluations and Transfer as required).
49 //! SessionPilot records and works with alphanumeric commands and
50 //! their results (under a very simple form). It calls a list of
51 //! Activators to perform the actions.
52 //!
53 //! A Command can have several forms :
54 //! - classic execution, to list, evaluate, or enrich the session
55 //! - command which creates a new item (a Selection for instance)
56 //! such a command should not add it to the session, but make it
57 //! recorded by the Pilot (method RecordItem). The Pilot will
58 //! add the item in the session, with no name
59 //! -> such a command may be called :
60 //! - directly, it will add an item with no name
61 //! - by command xset, in the following form :
62 //! xset name command ...  calls the command and adds the item
63 //! to the session under the specified name (if not yet known)
64 //!
65 //! Thus, to a specific Norm or way of working, only Activators
66 //! change. A specific Initialisation can be done by starting
67 //! with a specific set of commands.
68 //!
69 //! In addition, SessionPilot is a sub-type of Activator, to
70 //! recognize some built-in commands : exit/x, help/?, control of
71 //! command line, and commands xstep xset ... See method Do
72 //!
73 //! At least, empty lines and comment lines (beginning by '#')
74 //! are skipped (comment lines are display if read from file)
75 class IFSelect_SessionPilot : public IFSelect_Activator
76 {
77
78 public:
79
80   //! Creates an empty SessionPilot, with a prompt which will be
81   //! displayed on querying commands. If not precised (""), this
82   //! prompt is set to "Test-XSTEP>"
83   Standard_EXPORT IFSelect_SessionPilot(const Standard_CString prompt = "");
84   
85   //! Returns the WorkSession which is worked on
86   Standard_EXPORT Handle(IFSelect_WorkSession) Session() const;
87   
88   //! Returns the WorKlibrary (Null if not set). WorkLibrary is used
89   //! to Read and Write Files, according to the Norm
90   Standard_EXPORT Handle(IFSelect_WorkLibrary) Library() const;
91   
92   //! Returns the Record Mode for Commands. Default is False.
93   Standard_EXPORT Standard_Boolean RecordMode() const;
94   
95   //! Sets a WorkSession to be worked on
96   Standard_EXPORT void SetSession (const Handle(IFSelect_WorkSession)& WS);
97   
98   //! Sets a WorkLibrary
99   Standard_EXPORT void SetLibrary (const Handle(IFSelect_WorkLibrary)& WL);
100   
101   //! Changes the RecordMode.
102   Standard_EXPORT void SetRecordMode (const Standard_Boolean mode);
103   
104   //! Sets the value of the Command Line to be interpreted
105   //! Also prepares the interpretation (splitting by blanks)
106   Standard_EXPORT void SetCommandLine (const TCollection_AsciiString& command);
107   
108   //! Returns the Command Line to be interpreted
109   Standard_EXPORT const TCollection_AsciiString& CommandLine() const;
110   
111   //! Returns the part of the command line which begins at argument
112   //! <numarg> between 0 and NbWords-1 (by default, all the line)
113   //! Empty string if out of range
114   Standard_EXPORT Standard_CString CommandPart (const Standard_Integer numarg = 0) const;
115   
116   //! Returns the count of words of the Command Line, separated by
117   //! blanks : 0 if empty, one if a command without args, else it
118   //! gives the count of args minus one.
119   //! Warning : limited to 10 (command title + 9 args)
120   Standard_EXPORT Standard_Integer NbWords() const;
121   
122   //! Returns a word given its rank in the Command Line. Begins at 0
123   //! which is the Command Title, 1 is the 1st arg., etc...
124   Standard_EXPORT const TCollection_AsciiString& Word (const Standard_Integer num) const;
125   
126   //! Returns a word given its rank, as a CString.
127   //! As for Word, begins at 0 (the command name), etc...
128   Standard_EXPORT Standard_CString Arg (const Standard_Integer num) const;
129   
130   //! Removes a word given its rank. Returns True if Done, False if
131   //! <num> is out of range
132   Standard_EXPORT Standard_Boolean RemoveWord (const Standard_Integer num);
133   
134   //! Returns the count of recorded Commands
135   Standard_EXPORT Standard_Integer NbCommands() const;
136   
137   //! Returns a recorded Command, given its rank (from 1)
138   Standard_EXPORT const TCollection_AsciiString& Command (const Standard_Integer num) const;
139   
140   //! Allows to associate a Transient Value with the last execution
141   //! as a partial result
142   //! Returns RetDone if item is not Null, RetFail if item is Null
143   //! Remark : it is nullified for each Perform
144   Standard_EXPORT IFSelect_ReturnStatus RecordItem (const Handle(Standard_Transient)& item);
145   
146   //! Returns the Transient Object which was recorded with the
147   //! current Line Command. If none was, returns a Null Handle
148   Standard_EXPORT Handle(Standard_Transient) RecordedItem() const;
149   
150   //! Clears the recorded information (commands, objects)
151   Standard_EXPORT void Clear();
152   
153   //! Reads commands from a Script File, named <file>. By default
154   //! (file = ""), reads from standard input with a prompt
155   //! Else (reading from a file), the read commands are displayed
156   //! onto standard output. Allows nested reads. Reading is stopped
157   //! either by command x or exit, or by reaching end of file
158   //! Return Value follows the rules of Do : RetEnd for normal end,
159   //! RetFail if script could not be opened
160   Standard_EXPORT IFSelect_ReturnStatus ReadScript (const Standard_CString file = "");
161   
162   //! Executes the Command, itself (for built-in commands, which
163   //! have priority) or by using the list of Activators.
164   //! The value returned is : RetVoid if nothing done (void command)
165   //! RetDone if execution OK, RetEnd if END OF SESSION, RetError if
166   //! command unknown or incorrect, RetFail if error on execution
167   //! If execution is OK and RecordMode is set, this Command Line is
168   //! recorded to the list (see below).
169   Standard_EXPORT IFSelect_ReturnStatus Perform();
170   
171   //! Executes the Commands, except that the command name (word 0)
172   //! is aliased. The rest of the command line is unchanged
173   //! If <alias> is empty, Executes with no change
174   //!
175   //! Error status is returned if the alias is unknown as command
176   Standard_EXPORT IFSelect_ReturnStatus ExecuteAlias (const TCollection_AsciiString& aliasname);
177   
178   //! Sets the Command then tries to execute it. Return value :
179   //! same as for Perform
180   Standard_EXPORT IFSelect_ReturnStatus Execute (const TCollection_AsciiString& command);
181   
182   //! Executes a Counter in a general way
183   //! If <numword> is greater than count of command words, it counts
184   //! all the model. Else it considers the word <numword> as the
185   //! identifier of a Selection
186   //! <mode> gives the mode of printing results, default is
187   //! CountByItem
188   Standard_EXPORT IFSelect_ReturnStatus ExecuteCounter (const Handle(IFSelect_SignCounter)& counter, const Standard_Integer numword, const IFSelect_PrintCount mode = IFSelect_CountByItem);
189   
190   //! Interprets a string value as an entity number :
191   //! if it gives an integer, returns its value
192   //! else, considers it as ENtityLabel (preferably case sensitive)
193   //! in case of failure, returns 0
194   Standard_EXPORT Standard_Integer Number (const Standard_CString val) const;
195   
196   //! Processes specific commands, which are :
197   //! x or exit for end of session
198   //! ? or help for help messages
199   //! xcommand to control command lines (Record Mode, List, Clear,
200   //! File Output ...)
201   //! xsource to execute a command file (no nesting allowed),
202   //! in case of error, source is stopped and keyword recovers
203   //! xstep is a simple prefix (useful in a wider environment, to
204   //! avoid conflicts on command names)
205   //! xset control commands which create items with names
206   Standard_EXPORT IFSelect_ReturnStatus Do (const Standard_Integer number, const Handle(IFSelect_SessionPilot)& session) Standard_OVERRIDE;
207   
208   //! Help for specific commands (apart from general command help)
209   Standard_EXPORT Standard_CString Help (const Standard_Integer number) const Standard_OVERRIDE;
210
211   DEFINE_STANDARD_RTTIEXT(IFSelect_SessionPilot,IFSelect_Activator)
212
213 private:
214
215   Handle(IFSelect_WorkSession) thesession;
216   TCollection_AsciiString theprompt;
217   TCollection_AsciiString thecommand;
218   Standard_Integer thenbwords;
219   TColStd_Array1OfAsciiString thewords;
220   TColStd_Array1OfInteger thewordeb;
221   Standard_Boolean therecord;
222   Standard_Integer thenumrec;
223   Handle(Standard_Transient) theobjrec;
224   TColStd_SequenceOfAsciiString thecomlist;
225
226 };
227
228 #endif // _IFSelect_SessionPilot_HeaderFile