Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008 #ifndef __SP_UTILITY_COMMANDLINE_H__
00009 #define __SP_UTILITY_COMMANDLINE_H__
00010
00011
00012 #include "Base/spStandard.hpp"
00013
00014 #ifdef SP_COMPILE_WITH_COMMANDLINE
00015
00016
00017 #include "Base/spInputOutputControl.hpp"
00018 #include "Base/spTimer.hpp"
00019 #include "Base/spMaterialConfigTypes.hpp"
00020 #include "Base/spInputOutputString.hpp"
00021 #include "Base/spBaseExceptions.hpp"
00022 #include "RenderSystem/spRenderSystemFont.hpp"
00023 #include "Framework/Tools/spUtilityCommandLineTasks.hpp"
00024
00025
00026 namespace sp
00027 {
00028 namespace tool
00029 {
00030
00031
00033 enum ECommandLineFlags
00034 {
00035 CMDFLAG_SCROLL = 0x01,
00036 CMDFLAG_MEMENTO = 0x02,
00037 CMDFLAG_DISABLE_INPUT = 0x04,
00038
00039 CMDFLAG_COMMON =
00040 CMDFLAG_SCROLL |
00041 CMDFLAG_MEMENTO,
00042 };
00043
00044
00079 class SP_EXPORT CommandLineUI
00080 {
00081
00082 public:
00083
00084 CommandLineUI() throw(io::RenderSystemException, io::stringc);
00085 virtual ~CommandLineUI();
00086
00087
00088
00096 virtual void render(s32 Flags = CMDFLAG_COMMON);
00097
00103 virtual void draw(s32 Flags = CMDFLAG_COMMON);
00104
00110 virtual void updateInput(s32 Flags = CMDFLAG_COMMON);
00111
00113 virtual void updateScrollInput(s32 DefaultScrollSpeed = 3);
00114
00116 virtual void message(const io::stringc &Message, const video::color &Color = 255, u32 NewLineTab = 0);
00118 virtual void warning(const io::stringc &Message);
00120 virtual void error(const io::stringc &Message);
00121
00123 virtual void unknown(const io::stringc &Command);
00125 virtual void confirm(const io::stringc &Output);
00126
00128 virtual void image(video::Texture* Image);
00129
00131 virtual bool executeCommand(const io::stringc &Command);
00132
00133 void setupCursorTimer(u64 IntervalDuration);
00134
00142 bool execute(const io::stringc &Command);
00143
00145 virtual void clear(bool isHelpInfo = true);
00146
00148 bool isScrollingEnabled() const;
00154 virtual bool scroll(s32 Direction);
00159 virtual bool scrollPage(s32 Direction);
00161 virtual void scrollStart();
00163 virtual void scrollEnd();
00164
00166 void setScrollPosition(s32 Pos);
00168 s32 getMaxScrollPosition() const;
00170 s32 getScrollPage() const;
00171
00176 void setFont(video::Font* FontObj);
00177
00184 bool getCmdParam(const io::stringc &Command, io::stringc &Param);
00185
00186
00187
00189 inline video::Font* getFont() const
00190 {
00191 return ActiveFont_;
00192 }
00194 inline video::Font* getOrigFont() const
00195 {
00196 return OrigFont_;
00197 }
00198
00200 inline s32 getScrollPosition() const
00201 {
00202 return Scroll_;
00203 }
00204
00206 inline void setBackgroundColor(const video::color &Color)
00207 {
00208 BgColor_ = Color;
00209 }
00211 inline video::color getBackgroundColor() const
00212 {
00213 return BgColor_;
00214 }
00215
00217 inline void setForegroundColor(const video::color &Color)
00218 {
00219 FgColor_ = Color;
00220 }
00222 inline video::color getForegroundColor() const
00223 {
00224 return FgColor_;
00225 }
00226
00228 inline void setRect(const dim::rect2di &Rect)
00229 {
00230 Rect_ = Rect;
00231 }
00233 inline dim::rect2di getRect() const
00234 {
00235 return Rect_;
00236 }
00237
00239 inline void setLineLimit(u32 Limit)
00240 {
00241 MaxLines_ = Limit;
00242 }
00244 inline u32 getLineLimit() const
00245 {
00246 return MaxLines_;
00247 }
00248
00250 inline void setMementoLimit(u32 Limit)
00251 {
00252 Memento_.Limit = Limit;
00253 }
00255 inline u32 getMementoLimit() const
00256 {
00257 return Memento_.Limit;
00258 }
00259
00261 inline void blank()
00262 {
00263 message("");
00264 }
00265
00266 protected:
00267
00268
00269
00270 static const s32 TEXT_DISTANCE;
00271 static const s32 SCROLLBAR_WIDTH;
00272 static const s32 SCROLLBAR_DISTANCE;
00273
00274
00275
00276 struct SP_EXPORT STextLine
00277 {
00278 STextLine();
00279 STextLine(video::Font* LineFont, const io::stringc &LineText, const video::color &LineColor = 255);
00280 STextLine(video::Texture* LineImage);
00281 ~STextLine();
00282
00283
00284 s32 getHeight() const;
00285
00286 void draw(
00287 const dim::point2di &Origin, const dim::size2di &MaxLineSize,
00288 s32 &PosVert, f32 TransBgOffset
00289 ) const;
00290
00291
00292 video::Font* TextFont;
00293 video::Texture* Image;
00294 io::stringc Text;
00295 video::color Color;
00296 };
00297
00298 struct SP_EXPORT SCursor
00299 {
00300 SCursor();
00301 ~SCursor();
00302
00303
00304 void update();
00305
00306
00307 io::Timer IntervalTimer;
00308 bool isVisible;
00309 };
00310
00311 struct SP_EXPORT SMemento
00312 {
00313 SMemento();
00314 ~SMemento();
00315
00316
00317 void push(const io::stringc &Command);
00318
00319 void up(io::stringc &Str);
00320 void down(io::stringc &Str);
00321
00322
00323 u32 Limit;
00324 std::list<io::stringc> Commands;
00325 std::list<io::stringc>::iterator Current;
00326 };
00327
00328 struct SP_EXPORT SCommand
00329 {
00330 SCommand();
00331 ~SCommand();
00332
00333
00334 bool operator < (const SCommand &Other) const;
00335
00336
00337 io::stringc Name, Docu;
00338 };
00339
00340
00341
00342 virtual void drawBackground();
00343 virtual void drawTextLines();
00344 virtual void drawCursor();
00345 virtual void drawScrollbar();
00346
00347 virtual void drawTextLine(s32 &PosVert, const STextLine &Line);
00348
00349 virtual void addHelpLine(const io::stringc &Command, const io::stringc &Description);
00350 virtual void printHelpLines(c8 SeparationChar = '.', u32 MinSeparationChars = 3);
00351
00357 virtual bool findAutoCompletion(io::stringc &Command);
00358
00359 void registerCommand(const io::stringc &Name, const io::stringc &Docu);
00360
00361 void addNewLine(const STextLine &Line);
00362 void addNewLine(const io::stringc &Message, const video::color &Color);
00363
00364
00365
00366 video::color BgColor_, FgColor_;
00367 dim::rect2di Rect_;
00368
00369 SCursor Cursor_;
00370 SMemento Memento_;
00371
00372 u32 MaxLines_;
00373 s32 Scroll_;
00374
00375 std::vector<STextLine> TextLines_;
00376 std::vector<SCommand> RegisteredCommands_;
00377
00378 io::stringc CommandLine_;
00379
00380 private:
00381
00382
00383
00384 struct SHelpLine
00385 {
00386 io::stringc Command;
00387 io::stringc Description;
00388 };
00389
00390
00391
00392 s32 getMaxScrollPosition(s32 TextHeight, s32 VisibleHeight) const;
00393
00394 void clampScrolling(s32 TextHeight, s32 VisibleHeight);
00395 void clampScrolling();
00396
00397 void getScrollingRange(s32 &TextHeight, s32 &VisibleHeight) const;
00398
00399 void registerDefaultCommands();
00400
00401
00402
00403 video::Font* ActiveFont_;
00404 video::Font* OrigFont_;
00405
00406 s32 TextLineHeight_;
00407 f32 TransBgOffset_;
00408
00409 std::list<SHelpLine> TempHelpLines_;
00410 u32 MaxHelpCommand_;
00411
00412 };
00413
00414
00415 }
00416
00417 }
00418
00419
00420 #endif
00421
00422 #endif
00423
00424
00425
00426