diff options
Diffstat (limited to 'filewindow.cpp')
-rw-r--r-- | filewindow.cpp | 332 |
1 files changed, 332 insertions, 0 deletions
diff --git a/filewindow.cpp b/filewindow.cpp new file mode 100644 index 0000000..817637d --- /dev/null +++ b/filewindow.cpp @@ -0,0 +1,332 @@ +// filewindow.cpp +// Revision 23-jan-2005 + +#include "file.h" + +#include "blassic.h" +#include "error.h" +#include "graphics.h" +#include "edit.h" + +#include "trace.h" + +namespace blassic { + +namespace file { + +//*********************************************** +// BlFileWindow +//*********************************************** + +class BlFileWindow : public BlFile { +public: + BlFileWindow (BlChannel ch); + BlFileWindow (BlChannel ch, int x1, int x2, int y1, int y2); + ~BlFileWindow (); + void reset (int x1, int x2, int y1, int y2); + bool isfile () const; + bool istextwindow () const; + virtual bool eof (); + virtual void flush (); + virtual size_t getwidth () const; + virtual void movecharforward (); + virtual void movecharforward (size_t n); + virtual void movecharback (); + virtual void movecharback (size_t n); + virtual void movecharup (); + virtual void movecharup (size_t n); + virtual void movechardown (); + virtual void movechardown (size_t n); + virtual void showcursor (); + virtual void hidecursor (); + virtual std::string getkey (); + virtual std::string inkey (); + void getline (std::string & str, bool endline= true); + std::string read (size_t n); + void tab (); + void tab (size_t n); + void endline (); + void gotoxy (int x, int y); + virtual void setcolor (int color); + virtual int getcolor (); + virtual void setbackground (int color); + virtual int getbackground (); + virtual void cls (); + std::string copychr (BlChar from, BlChar to); + int pos (); + int vpos (); + void tag (); + void tagoff (); + bool istagactive (); + void inverse (bool active); + bool getinverse (); + void bright (bool active); + bool getbright (); + bool poll (); + void scroll (int nlines); +private: + void outstring (const std::string & str); + void outchar (char c); + + BlChannel ch; +}; + +BlFile * newBlFileWindow (BlChannel ch) +{ + return new BlFileWindow (ch); +} + +BlFile * newBlFileWindow (BlChannel ch, int x1, int x2, int y1, int y2) +{ + return new BlFileWindow (ch, x1, x2, y1, y2); +} + +BlFileWindow::BlFileWindow (BlChannel ch) : + BlFile (OpenMode (Input | Output) ), + ch (ch) +{ + if (ch != 0) + throw ErrBlassicInternal; +} + +BlFileWindow::BlFileWindow (BlChannel ch, int x1, int x2, int y1, int y2) : + BlFile (OpenMode (Input | Output) ), + ch (ch) +{ + graphics::definewindow (ch, x1, x2, y1, y2); +} + +BlFileWindow::~BlFileWindow () +{ + graphics::undefinewindow (ch); +} + +void BlFileWindow::reset (int x1, int x2, int y1, int y2) +{ + graphics::definewindow (ch, x1, x2, y1, y2); +} + +bool BlFileWindow::isfile () const +{ + return false; +} + +bool BlFileWindow::istextwindow () const +{ + return true; +} + +bool BlFileWindow::eof () +{ + return false; +} + +void BlFileWindow::flush () +{ + // Nothing to do +} + +size_t BlFileWindow::getwidth () const +{ + return graphics::getlinewidth (ch); +} + +void BlFileWindow::movecharforward () +{ + graphics::movecharforward (ch, 1); +} + +void BlFileWindow::movecharforward (size_t n) +{ + graphics::movecharforward (ch, n); +} + +void BlFileWindow::movecharback () +{ + graphics::movecharback (ch, 1); +} + +void BlFileWindow::movecharback (size_t n) +{ + graphics::movecharback (ch, n); +} + +void BlFileWindow::movecharup () +{ + graphics::movecharup (ch, 1); +} + +void BlFileWindow::movecharup (size_t n) +{ + graphics::movecharup (ch, n); +} + +void BlFileWindow::movechardown () +{ + graphics::movechardown (ch, 1); +} + +void BlFileWindow::movechardown (size_t n) +{ + graphics::movechardown (ch, n); +} + +void BlFileWindow::showcursor () +{ + graphics::showcursor (ch); +} + +void BlFileWindow::hidecursor () +{ + graphics::hidecursor (ch); +} + +std::string BlFileWindow::getkey () +{ + return graphics::getkey (); +} + +std::string BlFileWindow::inkey () +{ + return graphics::inkey (); +} + +void BlFileWindow::getline (std::string & str, bool endline) +{ + using blassic::edit::editline; + + std::string auxstr; + int inicol= graphics::xpos (ch); + while (! editline (* this, auxstr, 0, inicol, endline) ) + continue; + swap (str, auxstr); +} + +std::string BlFileWindow::read (size_t) +{ + throw ErrNotImplemented; +} + +void BlFileWindow::tab () +{ + graphics::tab (ch); +} + +void BlFileWindow::tab (size_t n) +{ + graphics::tab (ch, n); +} + +void BlFileWindow::endline () +{ + outstring ("\r\n"); +} + +void BlFileWindow::gotoxy (int x, int y) +{ + graphics::gotoxy (ch, x, y); +} + +void BlFileWindow::setcolor (int color) +{ + graphics::setcolor (ch, color); +} + +int BlFileWindow::getcolor () +{ + return graphics::getcolor (ch); +} + +void BlFileWindow::setbackground (int color) +{ + graphics::setbackground (ch, color); +} + +int BlFileWindow::getbackground () +{ + return graphics::getbackground (ch); +} + +void BlFileWindow::outstring (const std::string & str) +{ + TRACEFUNC (tr, "BlFileWindow::outstring"); + TRMESSAGE (tr, str); + + graphics::stringout (ch, str); +} + +void BlFileWindow::outchar (char c) +{ + graphics::charout (ch, c); +} + +void BlFileWindow::cls () +{ + graphics::cls (ch); +} + +std::string BlFileWindow::copychr (BlChar from, BlChar to) +{ + return graphics::copychr (ch, from, to); +} + +int BlFileWindow::pos () +{ + return graphics::xpos (ch); +} + +int BlFileWindow::vpos () +{ + return graphics::ypos (ch); +} + +void BlFileWindow::tag () +{ + graphics::tag (ch); +} + +void BlFileWindow::tagoff () +{ + graphics::tagoff (ch); +} + +bool BlFileWindow::istagactive () +{ + return graphics::istagactive (ch); +} + +void BlFileWindow::inverse (bool active) +{ + graphics::inverse (ch, active); +} + +bool BlFileWindow::getinverse () +{ + return graphics::getinverse (ch); +} + +void BlFileWindow::bright (bool active) +{ + graphics::bright (ch, active); +} + +bool BlFileWindow::getbright () +{ + return graphics::getbright (ch); +} + +bool BlFileWindow::poll () +{ + return graphics::pollin (); +} + +void BlFileWindow::scroll (int nlines) +{ + graphics::scroll (ch, nlines); +} + +} // namespace file + +} // namespace blassic + +// End of filewindow.cpp |