Add the possibility to hide a virtual window

This commit is contained in:
Markus Gans 2015-09-22 22:12:31 +02:00
parent a5197c6c64
commit 3e03f87a6c
13 changed files with 73 additions and 31 deletions

2
.gitignore vendored
View File

@ -25,7 +25,7 @@ test/.deps/
test/.libs/ test/.libs/
test/calculator test/calculator
test/dialog test/dialog
test/fstring test/string
test/hello test/hello
test/watch test/watch
test/input-dialog test/input-dialog

View File

@ -1,4 +1,5 @@
2015-09-22 Markus Gans <guru.mail@muenster.de> 2015-09-22 Markus Gans <guru.mail@muenster.de>
* Add the possibility to hide a virtual window
* Some code optimizations * Some code optimizations
2015-09-18 Markus Gans <guru.mail@muenster.de> 2015-09-18 Markus Gans <guru.mail@muenster.de>

View File

@ -626,7 +626,7 @@ void FDialog::show()
if ( ! isVisible() ) if ( ! isVisible() )
return; return;
FWidget::show(); FWindow::show();
// set the cursor to the focus widget // set the cursor to the focus widget
if ( FWidget::getFocusWidget() if ( FWidget::getFocusWidget()
@ -652,7 +652,7 @@ void FDialog::show()
//---------------------------------------------------------------------- //----------------------------------------------------------------------
void FDialog::hide() void FDialog::hide()
{ {
FWidget::hide(); FWindow::hide();
if ( isModal() ) if ( isModal() )
{ {

View File

@ -40,6 +40,7 @@ void FMenuBar::init()
xpos = 1; xpos = 1;
ypos = 1; ypos = 1;
createArea (vmenubar); createArea (vmenubar);
vmenubar->visible = true;
// initialize geometry values // initialize geometry values
setGeometry (1, 1, getColumnNumber(), 1, false); setGeometry (1, 1, getColumnNumber(), 1, false);
getRootWidget()->setTopPadding(1, true); getRootWidget()->setTopPadding(1, true);
@ -386,7 +387,7 @@ void FMenuBar::hide()
int fg, bg, screenWidth; int fg, bg, screenWidth;
char* blank; char* blank;
FWidget::hide(); FWindow::hide();
fg = wc.term_fg; fg = wc.term_fg;
bg = wc.term_bg; bg = wc.term_bg;

View File

@ -181,6 +181,8 @@ void FStatusBar::init()
xpos = 1; xpos = 1;
ypos = getLineNumber(); ypos = getLineNumber();
createArea (vstatusbar); createArea (vstatusbar);
vstatusbar->visible = true;
// initialize geometry values // initialize geometry values
setGeometry (1, ypos, getColumnNumber(), 1, false); setGeometry (1, ypos, getColumnNumber(), 1, false);
getRootWidget()->setBottomPadding(1, true); getRootWidget()->setBottomPadding(1, true);
@ -502,7 +504,7 @@ void FStatusBar::hide()
int fg, bg, lastLine, screenWidth; int fg, bg, lastLine, screenWidth;
char* blank; char* blank;
FWidget::hide(); FWindow::hide();
fg = wc.term_fg; fg = wc.term_fg;
bg = wc.term_bg; bg = wc.term_bg;

View File

@ -407,7 +407,6 @@ inline wchar_t* FString::c_to_wc_str (const char* s) const
if ( ! *s ) // handle empty string if ( ! *s ) // handle empty string
return const_cast<wchar_t*>(L""); return const_cast<wchar_t*>(L"");
size = int(strlen(s)) + 1; size = int(strlen(s)) + 1;
dest_size = size * int(CHAR_SIZE); dest_size = size * int(CHAR_SIZE);
src = s; src = s;
@ -1999,10 +1998,11 @@ FString FString::replaceControlCodes() const
FString FString::expandTabs (uInt tabstop) const FString FString::expandTabs (uInt tabstop) const
{ {
uLong last; uLong last;
std::vector<FString> tab_split;
FString instr(string); FString instr(string);
FString outstr(""); FString outstr("");
std::vector<FString> tab_split = instr.split("\t"); tab_split = instr.split("\t");
last = tab_split.size(); last = tab_split.size();
for (uInt i=0; i < last; i++) for (uInt i=0; i < last; i++)
{ {

View File

@ -977,6 +977,7 @@ void FTerm::init()
createVTerm(); createVTerm();
// create virtual desktop area // create virtual desktop area
createArea (vdesktop); createArea (vdesktop);
vdesktop->visible = true;
// make stdin non-blocking // make stdin non-blocking
setNonBlockingInput(); setNonBlockingInput();
@ -1593,6 +1594,7 @@ void FTerm::createArea (term_area*& area)
area->bottom_shadow = 0; area->bottom_shadow = 0;
area->changes = 0; area->changes = 0;
area->text = 0; area->text = 0;
area->visible = false;
area->widget = static_cast<FWidget*>(this); area->widget = static_cast<FWidget*>(this);
resizeArea (area); resizeArea (area);
@ -1719,6 +1721,7 @@ void FTerm::restoreVTerm (int x, int y, int w, int h)
int win_y = (*iter)->getGlobalY() - 1; int win_y = (*iter)->getGlobalY() - 1;
term_area* win = (*iter)->getVWin(); term_area* win = (*iter)->getVWin();
int line_len = win->width + win->right_shadow; int line_len = win->width + win->right_shadow;
if ( win->visible )
sc = &win->text[(y+ty-win_y) * line_len + (x+tx-win_x)]; sc = &win->text[(y+ty-win_y) * line_len + (x+tx-win_x)];
} }
++iter; ++iter;
@ -1734,6 +1737,7 @@ void FTerm::restoreVTerm (int x, int y, int w, int h)
{ {
int bar_x = menubar->getGlobalX() - 1; int bar_x = menubar->getGlobalX() - 1;
int bar_y = menubar->getGlobalY() - 1; int bar_y = menubar->getGlobalY() - 1;
if ( vmenubar->visible )
sc = &vmenubar->text[(y+ty-bar_y) * vmenubar->width + (x+tx-bar_x)]; sc = &vmenubar->text[(y+ty-bar_y) * vmenubar->width + (x+tx-bar_x)];
} }
@ -1746,6 +1750,7 @@ void FTerm::restoreVTerm (int x, int y, int w, int h)
{ {
int bar_x = statusbar->getGlobalX() - 1; int bar_x = statusbar->getGlobalX() - 1;
int bar_y = statusbar->getGlobalY() - 1; int bar_y = statusbar->getGlobalY() - 1;
if ( vstatusbar->visible )
sc = &vstatusbar->text[(y+ty-bar_y) * vstatusbar->width + (x+tx-bar_x)]; sc = &vstatusbar->text[(y+ty-bar_y) * vstatusbar->width + (x+tx-bar_x)];
} }
@ -1852,6 +1857,9 @@ void FTerm::updateVTerm (FTerm::term_area* area)
if ( area == 0 ) if ( area == 0 )
return; return;
if ( ! area->visible )
return;
ax = area->widget->getGlobalX() - 1; ax = area->widget->getGlobalX() - 1;
ay = area->widget->getGlobalY() - 1; ay = area->widget->getGlobalY() - 1;
aw = area->width; aw = area->width;
@ -2022,6 +2030,8 @@ void FTerm::putArea (const FPoint& pos, FTerm::term_area* area)
{ {
if ( area == 0 ) if ( area == 0 )
return; return;
if ( ! area->visible )
return;
putArea (pos.getX(), pos.getY(), area); putArea (pos.getX(), pos.getY(), area);
} }
@ -2034,6 +2044,8 @@ void FTerm::putArea (int ax, int ay, FTerm::term_area* area)
if ( area == 0 ) if ( area == 0 )
return; return;
if ( ! area->visible )
return;
ax--; ax--;
ay--; ay--;
@ -2132,6 +2144,7 @@ FTerm::char_data FTerm::getCoveredCharacter (int x, int y, FTerm* obj)
int win_y = (*iter)->getGlobalY() - 1; int win_y = (*iter)->getGlobalY() - 1;
term_area* win = (*iter)->getVWin(); term_area* win = (*iter)->getVWin();
int line_len = win->width + win->right_shadow; int line_len = win->width + win->right_shadow;
if ( win->visible )
cc = &win->text[(y-win_y) * line_len + (x-win_x)]; cc = &win->text[(y-win_y) * line_len + (x-win_x)];
} }
} }
@ -2373,6 +2386,7 @@ void FTerm::createVTerm()
vterm->bottom_shadow = 0; vterm->bottom_shadow = 0;
vterm->changes = 0; vterm->changes = 0;
vterm->text = 0; vterm->text = 0;
vterm->visible = true;
vterm->widget = static_cast<FWidget*>(this); vterm->widget = static_cast<FWidget*>(this);
resizeVTerm(); resizeVTerm();

View File

@ -187,6 +187,7 @@ class FTerm
FWidget* widget; FWidget* widget;
line_changes* changes; line_changes* changes;
char_data* text; char_data* text;
bool visible;
} term_area; } term_area;
static term_area* vterm; // virtual terminal static term_area* vterm; // virtual terminal

View File

@ -21,6 +21,7 @@ FWindow::FWindow(FWidget* parent)
FWindow::~FWindow() // destructor FWindow::~FWindow() // destructor
{ } { }
// protected methods of FWindow // protected methods of FWindow
//---------------------------------------------------------------------- //----------------------------------------------------------------------
bool FWindow::event (FEvent* ev) bool FWindow::event (FEvent* ev)
@ -65,7 +66,26 @@ void FWindow::onWindowRaised (FEvent*)
void FWindow::onWindowLowered (FEvent*) void FWindow::onWindowLowered (FEvent*)
{ } { }
// public methods of FWindow // public methods of FWindow
//----------------------------------------------------------------------
void FWindow::show()
{
term_area* area = getVWin();
if ( area )
area->visible = true;
FWidget::show();
}
//----------------------------------------------------------------------
void FWindow::hide()
{
term_area* area = getVWin();
if ( area )
area->visible = false;
FWidget::hide();
}
//---------------------------------------------------------------------- //----------------------------------------------------------------------
FWindow* FWindow::windowWidgetAt(const FPoint& pos) FWindow* FWindow::windowWidgetAt(const FPoint& pos)
{ {

View File

@ -35,6 +35,8 @@ class FWindow : public FWidget
~FWindow (); // destructor ~FWindow (); // destructor
const char* getClassName() const; const char* getClassName() const;
virtual void show();
virtual void hide();
static FWindow* windowWidgetAt (const FPoint&); static FWindow* windowWidgetAt (const FPoint&);
static FWindow* windowWidgetAt (int, int); static FWindow* windowWidgetAt (int, int);
static void addWindow (FWidget*); static void addWindow (FWidget*);

View File

@ -11,7 +11,7 @@ noinst_PROGRAMS = \
input-dialog \ input-dialog \
mandelbrot \ mandelbrot \
calculator \ calculator \
fstring \ string \
watch \ watch \
timer \ timer \
ui ui
@ -21,7 +21,7 @@ dialog_SOURCES = dialog.cpp
input_dialog_SOURCES = input-dialog.cpp input_dialog_SOURCES = input-dialog.cpp
mandelbrot_SOURCES = mandelbrot.cpp mandelbrot_SOURCES = mandelbrot.cpp
calculator_SOURCES = calculator.cpp calculator_SOURCES = calculator.cpp
fstring_SOURCES = fstring.cpp string_SOURCES = string.cpp
watch_SOURCES = watch.cpp watch_SOURCES = watch.cpp
timer_SOURCES = timer.cpp timer_SOURCES = timer.cpp
ui_SOURCES = ui.cpp ui_SOURCES = ui.cpp

View File

@ -83,7 +83,7 @@ POST_UNINSTALL = :
build_triplet = @build@ build_triplet = @build@
host_triplet = @host@ host_triplet = @host@
noinst_PROGRAMS = hello$(EXEEXT) dialog$(EXEEXT) input-dialog$(EXEEXT) \ noinst_PROGRAMS = hello$(EXEEXT) dialog$(EXEEXT) input-dialog$(EXEEXT) \
mandelbrot$(EXEEXT) calculator$(EXEEXT) fstring$(EXEEXT) \ mandelbrot$(EXEEXT) calculator$(EXEEXT) string$(EXEEXT) \
watch$(EXEEXT) timer$(EXEEXT) ui$(EXEEXT) watch$(EXEEXT) timer$(EXEEXT) ui$(EXEEXT)
subdir = test subdir = test
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
@ -110,9 +110,6 @@ am__v_lt_1 =
am_dialog_OBJECTS = dialog.$(OBJEXT) am_dialog_OBJECTS = dialog.$(OBJEXT)
dialog_OBJECTS = $(am_dialog_OBJECTS) dialog_OBJECTS = $(am_dialog_OBJECTS)
dialog_LDADD = $(LDADD) dialog_LDADD = $(LDADD)
am_fstring_OBJECTS = fstring.$(OBJEXT)
fstring_OBJECTS = $(am_fstring_OBJECTS)
fstring_LDADD = $(LDADD)
am_hello_OBJECTS = hello.$(OBJEXT) am_hello_OBJECTS = hello.$(OBJEXT)
hello_OBJECTS = $(am_hello_OBJECTS) hello_OBJECTS = $(am_hello_OBJECTS)
hello_LDADD = $(LDADD) hello_LDADD = $(LDADD)
@ -122,6 +119,9 @@ input_dialog_LDADD = $(LDADD)
am_mandelbrot_OBJECTS = mandelbrot.$(OBJEXT) am_mandelbrot_OBJECTS = mandelbrot.$(OBJEXT)
mandelbrot_OBJECTS = $(am_mandelbrot_OBJECTS) mandelbrot_OBJECTS = $(am_mandelbrot_OBJECTS)
mandelbrot_LDADD = $(LDADD) mandelbrot_LDADD = $(LDADD)
am_string_OBJECTS = string.$(OBJEXT)
string_OBJECTS = $(am_string_OBJECTS)
string_LDADD = $(LDADD)
am_timer_OBJECTS = timer.$(OBJEXT) am_timer_OBJECTS = timer.$(OBJEXT)
timer_OBJECTS = $(am_timer_OBJECTS) timer_OBJECTS = $(am_timer_OBJECTS)
timer_LDADD = $(LDADD) timer_LDADD = $(LDADD)
@ -165,12 +165,13 @@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@)
am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_0 = @echo " CXXLD " $@;
am__v_CXXLD_1 = am__v_CXXLD_1 =
SOURCES = $(calculator_SOURCES) $(dialog_SOURCES) $(fstring_SOURCES) \ SOURCES = $(calculator_SOURCES) $(dialog_SOURCES) $(hello_SOURCES) \
$(hello_SOURCES) $(input_dialog_SOURCES) $(mandelbrot_SOURCES) \ $(input_dialog_SOURCES) $(mandelbrot_SOURCES) \
$(timer_SOURCES) $(ui_SOURCES) $(watch_SOURCES) $(string_SOURCES) $(timer_SOURCES) $(ui_SOURCES) \
$(watch_SOURCES)
DIST_SOURCES = $(calculator_SOURCES) $(dialog_SOURCES) \ DIST_SOURCES = $(calculator_SOURCES) $(dialog_SOURCES) \
$(fstring_SOURCES) $(hello_SOURCES) $(input_dialog_SOURCES) \ $(hello_SOURCES) $(input_dialog_SOURCES) $(mandelbrot_SOURCES) \
$(mandelbrot_SOURCES) $(timer_SOURCES) $(ui_SOURCES) \ $(string_SOURCES) $(timer_SOURCES) $(ui_SOURCES) \
$(watch_SOURCES) $(watch_SOURCES)
am__can_run_installinfo = \ am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \ case $$AM_UPDATE_INFO_DIR in \
@ -325,7 +326,7 @@ dialog_SOURCES = dialog.cpp
input_dialog_SOURCES = input-dialog.cpp input_dialog_SOURCES = input-dialog.cpp
mandelbrot_SOURCES = mandelbrot.cpp mandelbrot_SOURCES = mandelbrot.cpp
calculator_SOURCES = calculator.cpp calculator_SOURCES = calculator.cpp
fstring_SOURCES = fstring.cpp string_SOURCES = string.cpp
watch_SOURCES = watch.cpp watch_SOURCES = watch.cpp
timer_SOURCES = timer.cpp timer_SOURCES = timer.cpp
ui_SOURCES = ui.cpp ui_SOURCES = ui.cpp
@ -381,10 +382,6 @@ dialog$(EXEEXT): $(dialog_OBJECTS) $(dialog_DEPENDENCIES) $(EXTRA_dialog_DEPENDE
@rm -f dialog$(EXEEXT) @rm -f dialog$(EXEEXT)
$(AM_V_CXXLD)$(CXXLINK) $(dialog_OBJECTS) $(dialog_LDADD) $(LIBS) $(AM_V_CXXLD)$(CXXLINK) $(dialog_OBJECTS) $(dialog_LDADD) $(LIBS)
fstring$(EXEEXT): $(fstring_OBJECTS) $(fstring_DEPENDENCIES) $(EXTRA_fstring_DEPENDENCIES)
@rm -f fstring$(EXEEXT)
$(AM_V_CXXLD)$(CXXLINK) $(fstring_OBJECTS) $(fstring_LDADD) $(LIBS)
hello$(EXEEXT): $(hello_OBJECTS) $(hello_DEPENDENCIES) $(EXTRA_hello_DEPENDENCIES) hello$(EXEEXT): $(hello_OBJECTS) $(hello_DEPENDENCIES) $(EXTRA_hello_DEPENDENCIES)
@rm -f hello$(EXEEXT) @rm -f hello$(EXEEXT)
$(AM_V_CXXLD)$(CXXLINK) $(hello_OBJECTS) $(hello_LDADD) $(LIBS) $(AM_V_CXXLD)$(CXXLINK) $(hello_OBJECTS) $(hello_LDADD) $(LIBS)
@ -397,6 +394,10 @@ mandelbrot$(EXEEXT): $(mandelbrot_OBJECTS) $(mandelbrot_DEPENDENCIES) $(EXTRA_ma
@rm -f mandelbrot$(EXEEXT) @rm -f mandelbrot$(EXEEXT)
$(AM_V_CXXLD)$(CXXLINK) $(mandelbrot_OBJECTS) $(mandelbrot_LDADD) $(LIBS) $(AM_V_CXXLD)$(CXXLINK) $(mandelbrot_OBJECTS) $(mandelbrot_LDADD) $(LIBS)
string$(EXEEXT): $(string_OBJECTS) $(string_DEPENDENCIES) $(EXTRA_string_DEPENDENCIES)
@rm -f string$(EXEEXT)
$(AM_V_CXXLD)$(CXXLINK) $(string_OBJECTS) $(string_LDADD) $(LIBS)
timer$(EXEEXT): $(timer_OBJECTS) $(timer_DEPENDENCIES) $(EXTRA_timer_DEPENDENCIES) timer$(EXEEXT): $(timer_OBJECTS) $(timer_DEPENDENCIES) $(EXTRA_timer_DEPENDENCIES)
@rm -f timer$(EXEEXT) @rm -f timer$(EXEEXT)
$(AM_V_CXXLD)$(CXXLINK) $(timer_OBJECTS) $(timer_LDADD) $(LIBS) $(AM_V_CXXLD)$(CXXLINK) $(timer_OBJECTS) $(timer_LDADD) $(LIBS)
@ -417,10 +418,10 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/calculator.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/calculator.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dialog.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dialog.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fstring.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hello.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hello.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/input-dialog.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/input-dialog.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mandelbrot.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mandelbrot.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/string.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/timer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/timer.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/watch.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/watch.Po@am__quote@