aboutsummaryrefslogblamecommitdiffstats
path: root/filewindow.cpp
blob: 817637da967e4a7744acde07208f6692e971f55f (plain) (tree)











































































































































































































































































































































                                                                           
// 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
Un proyecto texto-plano.xyz