source: trunk/FACT++/src/LocalControl.h@ 10310

Last change on this file since 10310 was 10310, checked in by tbretz, 14 years ago
Removed some little code which is in the base classes anyway.
File size: 3.2 KB
Line 
1#ifndef FACT_LocalControl
2#define FACT_LocalControl
3
4#include <ostream>
5
6class StateMachineImp;
7
8// **************************************************************************
9/** @class LocalControl
10
11@brief Implements a local control for a StateMachine based on a Readline class
12
13This template implements all functions which overwrite any function from the
14Readline class needed for a local control of a state machien. Since
15several derivatives of the Readline class implement different kind of
16Readline access, this class can be derived by any of them due to its
17template argument. However, the normal case will be deriving it from
18either Console or Shell.
19
20@tparam T
21 The base class for RemoteControl. Either Readlien or a class
22 deriving from it. This is usually either Console or Shell.
23
24**/
25// **************************************************************************
26#include <boost/filesystem.hpp>
27
28#include "WindowLog.h"
29#include "StateMachineImp.h"
30
31using namespace std;
32
33template <class T>
34class LocalControl : public T
35{
36private:
37 char **Completion(const char *text, int pos, int)
38 {
39 return pos>0 ? 0 : T::Complete(fStateMachine->GetEventNames(), text);
40 }
41
42protected:
43 StateMachineImp *fStateMachine;
44
45 std::ostream &lout;
46
47 std::string fName;
48
49 LocalControl(const char *name) : T(name),
50 fStateMachine(0), lout(T::GetStreamIn()),
51 fName(boost::filesystem::path(name).filename())
52 { }
53
54 //bool PrintGeneralHelp()
55 //bool PrintKeyBindings()
56 bool PrintCommands()
57 {
58 lout << endl << kBold << "List of commands:" << endl;
59 fStateMachine->PrintListOfEvents(lout);
60 lout << endl;
61
62 return true;
63 }
64
65 bool Process(const std::string &str)
66 {
67 if (T::Process(str))
68 return true;
69
70 return !fStateMachine->PostEvent(lout, str);
71 }
72
73public:
74
75 void SetReceiver(StateMachineImp &imp) { fStateMachine = &imp; }
76};
77
78// **************************************************************************
79/** @class LocalConsole
80
81@brief Derives the LocalControl from Control and adds prompt
82
83This is basically a LocalControl, which derives through the template
84argument from the Console class. It enhances the functionality of
85the local control with a proper updated prompt.
86
87 */
88// **************************************************************************
89#include "Console.h"
90#include "tools.h"
91
92class LocalConsole : public LocalControl<Console>
93{
94public:
95 LocalConsole(const char *name, bool continous=false)
96 : LocalControl<Console>(name)
97 {
98 SetContinous(continous);
99 }
100
101 string GetUpdatePrompt() const;
102};
103
104// **************************************************************************
105/** @class LocalShell
106
107@brief Derives the LocalControl from Shell and adds a colored prompt
108
109This is basically a LocalControl, which derives through the template
110argument from the Shell class. It enhances the functionality of
111the local control with a proper updated prompt.
112
113 */
114// **************************************************************************
115#include "Shell.h"
116
117class LocalShell : public LocalControl<Shell>
118{
119public:
120 LocalShell(const char *name, bool = false)
121 : LocalControl<Shell>(name) { }
122
123 string GetUpdatePrompt() const;
124};
125
126#endif
Note: See TracBrowser for help on using the repository browser.