$search
00001 #ifndef NO_GPL 00002 /*************************************************************************** 00003 tag: Peter Soetens Thu Jul 3 15:31:33 CEST 2008 TaskBrowser.hpp 00004 00005 TaskBrowser.hpp - description 00006 ------------------- 00007 begin : Thu July 03 2008 00008 copyright : (C) 2008 Peter Soetens 00009 email : peter.soetens@fmtc.be 00010 00011 *************************************************************************** 00012 * * 00013 * This program is free software; you can redistribute it and/or modify * 00014 * it under the terms of the GNU General Public License as published by * 00015 * the Free Software Foundation; either version 2 of the License, or * 00016 * (at your option) any later version. * 00017 * * 00018 * This program is distributed in the hope that it will be useful, * 00019 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 00020 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * 00021 * General Public License for more details. * 00022 * * 00023 * You should have received a copy of the GNU General Public * 00024 * License along with this program; if not, write to the Free Software * 00025 * Foundation, Inc., 59 Temple Place, * 00026 * Suite 330, Boston, MA 02111-1307 USA * 00027 ***************************************************************************/ 00028 #else 00029 /*************************************************************************** 00030 tag: Peter Soetens Tue Dec 21 22:43:08 CET 2004 TaskBrowser.hpp 00031 00032 TaskBrowser.hpp - description 00033 ------------------- 00034 begin : Tue December 21 2004 00035 copyright : (C) 2004 Peter Soetens 00036 email : peter.soetens@mech.kuleuven.ac.be 00037 00038 *************************************************************************** 00039 * This library is free software; you can redistribute it and/or * 00040 * modify it under the terms of the GNU Lesser General Public * 00041 * License as published by the Free Software Foundation; either * 00042 * version 2.1 of the License, or (at your option) any later version. * 00043 * * 00044 * This library is distributed in the hope that it will be useful, * 00045 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 00046 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * 00047 * Lesser General Public License for more details. * 00048 * * 00049 * You should have received a copy of the GNU Lesser General Public * 00050 * License along with this library; if not, write to the Free Software * 00051 * Foundation, Inc., 59 Temple Place, * 00052 * Suite 330, Boston, MA 02111-1307 USA * 00053 * * 00054 ***************************************************************************/ 00055 #endif 00056 00057 #ifndef ORO_TASKBROWSER_HPP 00058 #define ORO_TASKBROWSER_HPP 00059 00060 00061 #include <rtt/RTT.hpp> 00062 #include <rtt/TaskContext.hpp> 00063 #include <rtt/Service.hpp> 00064 #include <deque> 00065 #include <string> 00066 #include <sstream> 00067 #include <vector> 00068 #if defined(HAS_READLINE) && !defined(HAS_EDITLINE) && defined(_POSIX_VERSION) 00069 #include <signal.h> 00070 #endif 00071 00072 #include <ocl/OCL.hpp> 00073 00074 namespace OCL 00075 { 00086 class OCL_API TaskBrowser 00087 : public RTT::TaskContext 00088 { 00089 // the 'current' task context 00090 static RTT::TaskContext* taskcontext; 00091 // the TC we are using for completion. 00092 static RTT::TaskContext* peer; 00093 // the TaskBrowser 00094 static RTT::TaskContext* tb; 00095 // the current Context: is tb or taskcontext 00096 static RTT::TaskContext* context; 00097 static RTT::Service::shared_ptr taskobject; 00098 RTT::internal::DataSource<bool>::shared_ptr accepted; 00099 00100 int debug; 00101 /* A static variable for holding the line. */ 00102 char *line_read; 00103 int lastc; // last command's number 00104 00105 std::string storedname; 00106 int storedline; 00107 bool usehex; 00108 00109 std::deque<RTT::TaskContext*> taskHistory; 00110 00111 // store TC + program/state name + line number 00112 typedef std::map<std::pair<RTT::TaskContext*,std::string>,int> PTrace; 00113 PTrace ptraces; 00114 PTrace straces; 00115 00118 base::DataSourceBase::shared_ptr last_expr; 00119 #if defined(HAS_READLINE) || defined(HAS_EDITLINE) 00120 #if defined(_POSIX_VERSION) && !defined(HAS_EDITLINE) 00121 static void rl_sigwinch_handler(int sig, siginfo_t *si, void *ctxt); 00122 #endif 00123 /* Read a string, and return a pointer to it. 00124 Returns NULL on EOF. */ 00125 char *rl_gets (); 00126 00127 // use this vector to generate candidate strings 00128 static std::vector<std::string> candidates; 00129 // Add successful matches of candidate strings to completes. 00130 static std::vector<std::string> completes; 00131 static std::vector<std::string>::iterator complete_iter; 00132 00133 static std::string component_found; 00134 static std::string component; 00135 static std::string peerpath; 00136 static std::string text; 00137 00138 // helper function 00139 static char* dupstr( const char *s ); 00140 00141 static void find_completes(); 00142 00143 static void find_ops(); 00144 static void find_peers(std::string::size_type startpos); 00145 00146 static char ** orocos_hmi_completion ( const char *text, int start, int end ); 00147 00148 static char *command_generator( const char *_text, int state ); 00149 #endif 00150 static RTT::TaskContext* findPeer( std::string comm ); 00151 00152 protected: 00153 00154 void listText(std::stringstream& txtss,int start, int end, int ln, char s); 00155 00156 void doPrint( RTT::base::DataSourceBase::shared_ptr ds, bool recurse); 00157 00158 void enterTask(); 00159 void leaveTask(); 00160 00161 bool macrorecording; 00162 std::string macrotext; 00163 std::string macroname; 00164 std::stringstream sresult; 00165 void recordMacro(std::string name); 00166 void cancelMacro(); 00167 void endMacro(); 00168 00169 void checkPorts(); 00170 Service::shared_ptr stringToService(std::string const& names); 00171 public: 00172 00176 enum ColorTheme { nocolors, 00177 darkbg, 00178 whitebg 00179 }; 00180 00181 void setColorTheme( ColorTheme t ); 00182 00188 void switchTaskContext(std::string& path); 00189 00196 void switchTaskContext( RTT::TaskContext* tc, bool store = true); 00197 00201 void switchBack(); 00202 00208 void browserAction(std::string& act ); 00209 00213 void printResult( RTT::base::DataSourceBase* ds, bool recurse); 00214 00218 void printHelp(); 00219 00223 void printHelp(std::string command); 00224 00228 void printInfo(const std::string& peerpath); 00229 00233 void printSource( const std::string m ); 00234 00238 void printOperation( const std::string m, Service::shared_ptr ops ); 00239 00243 bool printService( const std::string name); 00244 00248 void printProgram( const std::string& pn, int line = -1, RTT::TaskContext* progpeer = 0 ); 00249 00253 void printProgram( int line = -1 ); 00254 00259 TaskBrowser( RTT::TaskContext* c ); 00260 00261 ~TaskBrowser(); 00262 00268 void loop(); 00269 00276 void evaluate(std::string& comm ); 00277 00281 void switchTask( RTT::TaskContext* c); 00282 00286 static std::string prompt; 00290 static std::string coloron; 00294 static std::string underline; 00298 static std::string coloroff; 00299 00303 static std::string red; 00304 00308 static std::string green; 00309 00313 static std::string blue; 00314 00318 void evalCommand(std::string& comm ); 00319 00320 00321 }; 00322 00323 } 00324 00325 #endif