New zoom interaction-elements to maximize a FDialog
This commit is contained in:
parent
fa037ee3ec
commit
e462db30a9
|
@ -1,3 +1,12 @@
|
||||||
|
2016-09-11 Markus Gans <guru.mail@muenster.de>
|
||||||
|
* New zoom interaction-elements to maximize a FDialog
|
||||||
|
|
||||||
|
2016-09-08 Markus Gans <guru.mail@muenster.de>
|
||||||
|
* Different color when focusing the title bar button
|
||||||
|
* Move clearArea() from FWidget to FTerm
|
||||||
|
* Move setWidth(), setHeight() and setGeometry from
|
||||||
|
FDialog to FWindow
|
||||||
|
|
||||||
2016-09-04 Markus Gans <guru.mail@muenster.de>
|
2016-09-04 Markus Gans <guru.mail@muenster.de>
|
||||||
* FButton, FLineEdit and FProgressbar has shadow now enabled
|
* FButton, FLineEdit and FProgressbar has shadow now enabled
|
||||||
by default
|
by default
|
||||||
|
|
358
src/fdialog.cpp
358
src/fdialog.cpp
|
@ -16,11 +16,14 @@ FDialog::FDialog(FWidget* parent)
|
||||||
: FWindow(parent)
|
: FWindow(parent)
|
||||||
, tb_text()
|
, tb_text()
|
||||||
, result_code(FDialog::Reject)
|
, result_code(FDialog::Reject)
|
||||||
, maximized(false)
|
, zoom_button_pressed(false)
|
||||||
|
, zoom_button_active(false)
|
||||||
, TitleBarClickPos()
|
, TitleBarClickPos()
|
||||||
, oldGeometry()
|
, oldGeometry()
|
||||||
, dialog_menu()
|
, dialog_menu()
|
||||||
, dgl_menuitem()
|
, dgl_menuitem()
|
||||||
|
, zoom_item()
|
||||||
|
, close_item()
|
||||||
{
|
{
|
||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
|
@ -30,11 +33,14 @@ FDialog::FDialog (const FString& txt, FWidget* parent)
|
||||||
: FWindow(parent)
|
: FWindow(parent)
|
||||||
, tb_text(txt)
|
, tb_text(txt)
|
||||||
, result_code(FDialog::Reject)
|
, result_code(FDialog::Reject)
|
||||||
, maximized(false)
|
, zoom_button_pressed(false)
|
||||||
|
, zoom_button_active(false)
|
||||||
, TitleBarClickPos()
|
, TitleBarClickPos()
|
||||||
, oldGeometry()
|
, oldGeometry()
|
||||||
, dialog_menu()
|
, dialog_menu()
|
||||||
, dgl_menuitem()
|
, dgl_menuitem()
|
||||||
|
, zoom_item()
|
||||||
|
, close_item()
|
||||||
{
|
{
|
||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
|
@ -80,7 +86,6 @@ FDialog::~FDialog() // destructor
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FDialog::init()
|
void FDialog::init()
|
||||||
{
|
{
|
||||||
FMenuItem* close_item;
|
|
||||||
FWidget* old_focus;
|
FWidget* old_focus;
|
||||||
FWidget* rootObj = getRootWidget();
|
FWidget* rootObj = getRootWidget();
|
||||||
|
|
||||||
|
@ -136,8 +141,18 @@ void FDialog::init()
|
||||||
dgl_menuitem->unsetFocusable();
|
dgl_menuitem->unsetFocusable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
zoom_item = new FMenuItem ("&Zoom", dialog_menu);
|
||||||
|
zoom_item->setStatusbarMessage ("Enlarge or restore the window size");
|
||||||
|
zoom_item->setDisable();
|
||||||
|
|
||||||
|
zoom_item->addCallback
|
||||||
|
(
|
||||||
|
"clicked",
|
||||||
|
_METHOD_CALLBACK (this, &FDialog::cb_zoom)
|
||||||
|
);
|
||||||
|
|
||||||
close_item = new FMenuItem ("&Close", dialog_menu);
|
close_item = new FMenuItem ("&Close", dialog_menu);
|
||||||
close_item->setStatusbarMessage ("Close window");
|
close_item->setStatusbarMessage ("Close this window");
|
||||||
|
|
||||||
close_item->addCallback
|
close_item->addCallback
|
||||||
(
|
(
|
||||||
|
@ -155,18 +170,13 @@ void FDialog::drawBorder()
|
||||||
y1 = ypos+ymin;
|
y1 = ypos+ymin;
|
||||||
y2 = ypos+ymin-2+height;
|
y2 = ypos+ymin-2+height;
|
||||||
|
|
||||||
|
//if ( resize )
|
||||||
|
// setColor (wc.dialog_resize_fg, backgroundColor);
|
||||||
|
|
||||||
if ( isNewFont() )
|
if ( isNewFont() )
|
||||||
{
|
{
|
||||||
short fg;
|
|
||||||
|
|
||||||
if ( ! isRootWidget() && getParentWidget() )
|
|
||||||
fg = getParentWidget()->getForegroundColor();
|
|
||||||
else
|
|
||||||
fg = wc.term_fg;
|
|
||||||
|
|
||||||
for (int y=y1; y <= y2; y++)
|
for (int y=y1; y <= y2; y++)
|
||||||
{
|
{
|
||||||
setColor (fg, backgroundColor);
|
|
||||||
gotoxy (x1, y);
|
gotoxy (x1, y);
|
||||||
// border left ⎸
|
// border left ⎸
|
||||||
print (fc::NF_border_line_left);
|
print (fc::NF_border_line_left);
|
||||||
|
@ -175,20 +185,17 @@ void FDialog::drawBorder()
|
||||||
print (fc::NF_rev_border_line_right);
|
print (fc::NF_rev_border_line_right);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( (flags & fc::shadow) == 0 )
|
|
||||||
{
|
|
||||||
setColor (fg, backgroundColor);
|
|
||||||
gotoxy (x1, y2);
|
gotoxy (x1, y2);
|
||||||
// lower left corner border ⎣
|
// lower left corner border ⎣
|
||||||
print (fc::NF_border_corner_lower_left);
|
print (fc::NF_border_corner_lower_left);
|
||||||
|
|
||||||
for (int x=1; x < width-1; x++) // low line _
|
for (int x=1; x < width-1; x++) // low line _
|
||||||
print (fc::NF_border_line_bottom);
|
print (fc::NF_border_line_bottom);
|
||||||
|
|
||||||
gotoxy (x2, y2);
|
gotoxy (x2, y2);
|
||||||
// lower right corner border ⎦
|
// lower right corner border ⎦
|
||||||
print (fc::NF_rev_border_corner_lower_right);
|
print (fc::NF_rev_border_corner_lower_right);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
gotoxy (x1, y1);
|
gotoxy (x1, y1);
|
||||||
|
@ -220,11 +227,15 @@ void FDialog::drawBorder()
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FDialog::drawTitleBar()
|
void FDialog::drawTitleBar()
|
||||||
{
|
{
|
||||||
int i,x;
|
int i,x,length, zoom_btn;
|
||||||
uInt length = tb_text.getLength();
|
const int menu_btn = 3;
|
||||||
|
|
||||||
// draw the title button
|
// draw the title button
|
||||||
gotoxy (xpos+xmin-1, ypos+ymin-1);
|
gotoxy (xpos+xmin-1, ypos+ymin-1);
|
||||||
|
|
||||||
|
if ( dialog_menu->isVisible() )
|
||||||
|
setColor (wc.titlebar_button_focus_fg, wc.titlebar_button_focus_bg);
|
||||||
|
else
|
||||||
setColor (wc.titlebar_button_fg, wc.titlebar_button_bg);
|
setColor (wc.titlebar_button_fg, wc.titlebar_button_bg);
|
||||||
|
|
||||||
if ( isMonochron() )
|
if ( isMonochron() )
|
||||||
|
@ -274,7 +285,15 @@ void FDialog::drawTitleBar()
|
||||||
else
|
else
|
||||||
setColor (wc.titlebar_inactive_fg, wc.titlebar_inactive_bg);
|
setColor (wc.titlebar_inactive_fg, wc.titlebar_inactive_bg);
|
||||||
|
|
||||||
i = width - 3 - int(length);
|
if ( (flags & fc::resizeable) == 0 )
|
||||||
|
zoom_btn = 0;
|
||||||
|
else if ( isNewFont() )
|
||||||
|
zoom_btn = 2;
|
||||||
|
else
|
||||||
|
zoom_btn = 3;
|
||||||
|
|
||||||
|
length = int(tb_text.getLength());
|
||||||
|
i = width - length - menu_btn - zoom_btn;
|
||||||
i = int(i/2);
|
i = int(i/2);
|
||||||
|
|
||||||
for (x=1; x <= i; x++)
|
for (x=1; x <= i; x++)
|
||||||
|
@ -285,12 +304,78 @@ void FDialog::drawTitleBar()
|
||||||
print (tb_text);
|
print (tb_text);
|
||||||
|
|
||||||
// fill the rest of the bar
|
// fill the rest of the bar
|
||||||
for (; x+1+int(length) < width-1; x++)
|
for (; x+1+length < width-zoom_btn-1; x++)
|
||||||
print (' ');
|
print (' ');
|
||||||
|
|
||||||
if ( getMaxColor() < 16 )
|
if ( getMaxColor() < 16 )
|
||||||
unsetBold();
|
unsetBold();
|
||||||
|
|
||||||
|
// draw the zoom/unzoom button
|
||||||
|
if ( (flags & fc::resizeable) != 0 )
|
||||||
|
{
|
||||||
|
if ( zoom_button_pressed )
|
||||||
|
setColor (wc.titlebar_button_focus_fg, wc.titlebar_button_focus_bg);
|
||||||
|
else
|
||||||
|
setColor (wc.titlebar_button_fg, wc.titlebar_button_bg);
|
||||||
|
|
||||||
|
if ( isZoomed() )
|
||||||
|
{
|
||||||
|
if ( isNewFont() )
|
||||||
|
{
|
||||||
|
print (fc::NF_rev_down_pointing_triangle1);
|
||||||
|
print (fc::NF_rev_down_pointing_triangle2);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( isMonochron() )
|
||||||
|
{
|
||||||
|
print ('[');
|
||||||
|
print (fc::BlackDownPointingTriangle); // ▼
|
||||||
|
print (']');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
print (' ');
|
||||||
|
|
||||||
|
if ( isCygwinTerminal() )
|
||||||
|
print ('v');
|
||||||
|
else
|
||||||
|
print (fc::BlackDownPointingTriangle); // ▼
|
||||||
|
|
||||||
|
print (' ');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else // is not zoomed
|
||||||
|
{
|
||||||
|
if ( isNewFont() )
|
||||||
|
{
|
||||||
|
print (fc::NF_rev_up_pointing_triangle1);
|
||||||
|
print (fc::NF_rev_up_pointing_triangle2);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( isMonochron() )
|
||||||
|
{
|
||||||
|
print ('[');
|
||||||
|
print (fc::BlackUpPointingTriangle); // ▲
|
||||||
|
print (']');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
print (' ');
|
||||||
|
|
||||||
|
if ( isCygwinTerminal() )
|
||||||
|
print ('^');
|
||||||
|
else
|
||||||
|
print (fc::BlackUpPointingTriangle); // ▲
|
||||||
|
|
||||||
|
print (' ');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ( isMonochron() )
|
if ( isMonochron() )
|
||||||
setReverse(false);
|
setReverse(false);
|
||||||
|
|
||||||
|
@ -320,6 +405,16 @@ void FDialog::leaveMenu()
|
||||||
flush_out();
|
flush_out();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
void FDialog::cb_zoom (FWidget*, void*)
|
||||||
|
{
|
||||||
|
dialog_menu->unselectItem();
|
||||||
|
dialog_menu->hide();
|
||||||
|
setClickedWidget(0);
|
||||||
|
drawTitleBar();
|
||||||
|
zoomWindow();
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FDialog::cb_close (FWidget*, void*)
|
void FDialog::cb_close (FWidget*, void*)
|
||||||
{
|
{
|
||||||
|
@ -372,61 +467,26 @@ void FDialog::done(int result)
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FDialog::drawDialogShadow()
|
void FDialog::drawDialogShadow()
|
||||||
{
|
{
|
||||||
if ((flags & fc::trans_shadow) != 0)
|
if ( isMonochron() && (flags & fc::trans_shadow) == 0 )
|
||||||
{
|
|
||||||
// transparent shadow
|
|
||||||
drawShadow();
|
|
||||||
|
|
||||||
if ( isNewFont() && ((flags & fc::scrollable) == 0) )
|
|
||||||
{
|
|
||||||
// left of the shadow ▀▀
|
|
||||||
gotoxy (xpos+xmin-1, ypos+ymin-1+height);
|
|
||||||
setColor (wc.shadow_fg, wc.shadow_bg);
|
|
||||||
// current background color will be ignored
|
|
||||||
setInheritBackground();
|
|
||||||
|
|
||||||
for (int x=0; x <= 1; x++)
|
|
||||||
print (fc::NF_border_line_upper); // high line ⎺
|
|
||||||
|
|
||||||
unsetInheritBackground();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( isMonochron() )
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
drawShadow();
|
drawShadow();
|
||||||
// left of the shadow ▀▀
|
|
||||||
gotoxy (xpos+xmin-1, ypos+ymin-1+height);
|
gotoxy (xpos+xmin-1, ypos+ymin-1+height);
|
||||||
|
|
||||||
if ( isNewFont() && ((flags & fc::scrollable) == 0) )
|
|
||||||
{
|
|
||||||
setColor (wc.shadow_fg, wc.shadow_bg);
|
|
||||||
// current background color will be ignored
|
|
||||||
setInheritBackground();
|
|
||||||
print (fc::NF_border_line_upper); // high line ⎺
|
|
||||||
unsetInheritBackground();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
setTransparent();
|
setTransparent();
|
||||||
print(' ');
|
print(' ');
|
||||||
unsetTransparent();
|
unsetTransparent();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FDialog::draw()
|
void FDialog::draw()
|
||||||
{
|
{
|
||||||
if ( maximized && ! isRootWidget() )
|
/*if ( isZoomed() && ! isRootWidget() )
|
||||||
{
|
{
|
||||||
xpos = 1;
|
xpos = 1;
|
||||||
ypos = 1;
|
ypos = 1;
|
||||||
width = xmax;
|
width = xmax;
|
||||||
height = ymax;
|
height = ymax;
|
||||||
}
|
}*/
|
||||||
|
|
||||||
updateVTerm(false);
|
updateVTerm(false);
|
||||||
// fill the background
|
// fill the background
|
||||||
|
@ -439,62 +499,9 @@ void FDialog::draw()
|
||||||
drawBorder();
|
drawBorder();
|
||||||
drawTitleBar();
|
drawTitleBar();
|
||||||
|
|
||||||
if ( ! maximized && (flags & fc::shadow) != 0 )
|
if ( (flags & fc::shadow) != 0 )
|
||||||
drawDialogShadow();
|
drawDialogShadow();
|
||||||
|
|
||||||
if ( (flags & fc::resizeable) != 0 )
|
|
||||||
{
|
|
||||||
if ( isMonochron() )
|
|
||||||
setReverse(false);
|
|
||||||
|
|
||||||
if ( maximized )
|
|
||||||
{
|
|
||||||
if ( isNewFont() )
|
|
||||||
{
|
|
||||||
gotoxy (xpos+xmin+width-3, ypos+ymin-1);
|
|
||||||
setColor (wc.titlebar_button_fg, wc.titlebar_button_bg);
|
|
||||||
print (fc::NF_rev_down_pointing_triangle1);
|
|
||||||
print (fc::NF_rev_down_pointing_triangle2);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
gotoxy (xpos+xmin+width-4, ypos+ymin-1);
|
|
||||||
setColor (wc.titlebar_button_fg, wc.titlebar_button_bg);
|
|
||||||
print (' ');
|
|
||||||
|
|
||||||
if ( isCygwinTerminal() )
|
|
||||||
print ('v');
|
|
||||||
else
|
|
||||||
print (fc::BlackDownPointingTriangle); // ▼
|
|
||||||
|
|
||||||
print (' ');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( isNewFont() )
|
|
||||||
{
|
|
||||||
gotoxy (xpos+xmin+width-3, ypos+ymin-1);
|
|
||||||
setColor (wc.titlebar_button_fg, wc.titlebar_button_bg);
|
|
||||||
print (fc::NF_rev_up_pointing_triangle1);
|
|
||||||
print (fc::NF_rev_up_pointing_triangle2);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
gotoxy (xpos+xmin+width-4, ypos+ymin-1);
|
|
||||||
setColor (wc.titlebar_button_fg, wc.titlebar_button_bg);
|
|
||||||
print (' ');
|
|
||||||
|
|
||||||
if ( isCygwinTerminal() )
|
|
||||||
print ('^');
|
|
||||||
else
|
|
||||||
print (fc::BlackUpPointingTriangle); // ▲
|
|
||||||
|
|
||||||
print (' ');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( isMonochron() )
|
if ( isMonochron() )
|
||||||
setReverse(false);
|
setReverse(false);
|
||||||
|
|
||||||
|
@ -540,13 +547,28 @@ void FDialog::onMouseDown (FMouseEvent* ev)
|
||||||
{
|
{
|
||||||
int mouse_x = ev->getX();
|
int mouse_x = ev->getX();
|
||||||
int mouse_y = ev->getY();
|
int mouse_y = ev->getY();
|
||||||
|
int zoom_btn;
|
||||||
|
|
||||||
|
if ( (flags & fc::resizeable) == 0 )
|
||||||
|
zoom_btn = 0;
|
||||||
|
else if ( isNewFont() )
|
||||||
|
zoom_btn = 2;
|
||||||
|
else
|
||||||
|
zoom_btn = 3;
|
||||||
|
|
||||||
|
if ( zoom_button_pressed || zoom_button_active )
|
||||||
|
{
|
||||||
|
zoom_button_pressed = false;
|
||||||
|
zoom_button_active = false;
|
||||||
|
drawTitleBar();
|
||||||
|
}
|
||||||
|
|
||||||
if ( ev->getButton() == fc::LeftButton )
|
if ( ev->getButton() == fc::LeftButton )
|
||||||
{
|
{
|
||||||
bool has_raised;
|
bool has_raised;
|
||||||
|
|
||||||
// click on titlebar or window: raise + activate
|
// click on titlebar or window: raise + activate
|
||||||
if ( mouse_x >= 4 && mouse_x <= width && mouse_y == 1 )
|
if ( mouse_x >= 4 && mouse_x <= width-zoom_btn && mouse_y == 1 )
|
||||||
TitleBarClickPos.setPoint (ev->getGlobalX(), ev->getGlobalY());
|
TitleBarClickPos.setPoint (ev->getGlobalX(), ev->getGlobalY());
|
||||||
else
|
else
|
||||||
TitleBarClickPos.setPoint (0,0);
|
TitleBarClickPos.setPoint (0,0);
|
||||||
|
@ -563,17 +585,27 @@ void FDialog::onMouseDown (FMouseEvent* ev)
|
||||||
if ( mouse_x < 4 && mouse_y == 1 )
|
if ( mouse_x < 4 && mouse_y == 1 )
|
||||||
{
|
{
|
||||||
if ( dialog_menu->isVisible() )
|
if ( dialog_menu->isVisible() )
|
||||||
|
{
|
||||||
leaveMenu();
|
leaveMenu();
|
||||||
|
drawTitleBar();
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
setOpenMenu(dialog_menu);
|
setOpenMenu(dialog_menu);
|
||||||
dialog_menu->move (xpos, ypos+1);
|
dialog_menu->move (xpos, ypos+1);
|
||||||
dialog_menu->setVisible();
|
dialog_menu->setVisible();
|
||||||
|
drawTitleBar();
|
||||||
dialog_menu->show();
|
dialog_menu->show();
|
||||||
dialog_menu->raiseWindow(dialog_menu);
|
dialog_menu->raiseWindow(dialog_menu);
|
||||||
dialog_menu->redraw();
|
dialog_menu->redraw();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if ( mouse_x > width-zoom_btn && mouse_y == 1 )
|
||||||
|
{
|
||||||
|
zoom_button_pressed = true;
|
||||||
|
zoom_button_active = true;
|
||||||
|
drawTitleBar();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else // ev->getButton() != fc::LeftButton
|
else // ev->getButton() != fc::LeftButton
|
||||||
{
|
{
|
||||||
|
@ -612,6 +644,14 @@ void FDialog::onMouseUp (FMouseEvent* ev)
|
||||||
{
|
{
|
||||||
int titlebar_x = TitleBarClickPos.getX();
|
int titlebar_x = TitleBarClickPos.getX();
|
||||||
int titlebar_y = TitleBarClickPos.getY();
|
int titlebar_y = TitleBarClickPos.getY();
|
||||||
|
int zoom_btn;
|
||||||
|
|
||||||
|
if ( (flags & fc::resizeable) == 0 )
|
||||||
|
zoom_btn = 0;
|
||||||
|
else if ( isNewFont() )
|
||||||
|
zoom_btn = 2;
|
||||||
|
else
|
||||||
|
zoom_btn = 3;
|
||||||
|
|
||||||
if ( ev->getButton() == fc::LeftButton )
|
if ( ev->getButton() == fc::LeftButton )
|
||||||
{
|
{
|
||||||
|
@ -650,14 +690,40 @@ void FDialog::onMouseUp (FMouseEvent* ev)
|
||||||
updateTerminal();
|
updateTerminal();
|
||||||
flush_out();
|
flush_out();
|
||||||
}
|
}
|
||||||
|
else if ( mouse_x > width - zoom_btn
|
||||||
|
&& mouse_y == 1
|
||||||
|
&& zoom_button_pressed )
|
||||||
|
{
|
||||||
|
// zoom to maximum or restore the window size
|
||||||
|
zoomWindow();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( zoom_button_pressed || zoom_button_active )
|
||||||
|
{
|
||||||
|
zoom_button_pressed = false;
|
||||||
|
zoom_button_active = false;
|
||||||
|
drawTitleBar();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FDialog::onMouseMove (FMouseEvent* ev)
|
void FDialog::onMouseMove (FMouseEvent* ev)
|
||||||
{
|
{
|
||||||
|
int zoom_btn;
|
||||||
|
|
||||||
|
if ( (flags & fc::resizeable) == 0 )
|
||||||
|
zoom_btn = 0;
|
||||||
|
else if ( isNewFont() )
|
||||||
|
zoom_btn = 2;
|
||||||
|
else
|
||||||
|
zoom_btn = 3;
|
||||||
|
|
||||||
if ( ev->getButton() == fc::LeftButton )
|
if ( ev->getButton() == fc::LeftButton )
|
||||||
{
|
{
|
||||||
|
int mouse_x = ev->getX();
|
||||||
|
int mouse_y = ev->getY();
|
||||||
|
|
||||||
if ( ! TitleBarClickPos.isNull() )
|
if ( ! TitleBarClickPos.isNull() )
|
||||||
{
|
{
|
||||||
FPoint currentPos(getGeometry().getX(), getGeometry().getY());
|
FPoint currentPos(getGeometry().getX(), getGeometry().getY());
|
||||||
|
@ -684,6 +750,18 @@ void FDialog::onMouseMove (FMouseEvent* ev)
|
||||||
delete _ev;
|
delete _ev;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( mouse_x > width - zoom_btn && mouse_y == 1 && zoom_button_active )
|
||||||
|
{
|
||||||
|
zoom_button_pressed = true;
|
||||||
|
drawTitleBar();
|
||||||
|
}
|
||||||
|
else if ( zoom_button_pressed )
|
||||||
|
{
|
||||||
|
zoom_button_pressed = false;
|
||||||
|
drawTitleBar();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -882,6 +960,9 @@ void FDialog::move (int x, int y)
|
||||||
if ( x+width < 1 || x > getColumnNumber() || y < 1 || y > getLineNumber() )
|
if ( x+width < 1 || x > getColumnNumber() || y < 1 || y > getLineNumber() )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if ( isZoomed() )
|
||||||
|
return;
|
||||||
|
|
||||||
dx = xpos - x;
|
dx = xpos - x;
|
||||||
dy = ypos - y;
|
dy = ypos - y;
|
||||||
old_x = getGlobalX();
|
old_x = getGlobalX();
|
||||||
|
@ -998,37 +1079,6 @@ void FDialog::activateDialog()
|
||||||
updateTerminal();
|
updateTerminal();
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
|
||||||
void FDialog::setWidth (int w, bool adjust)
|
|
||||||
{
|
|
||||||
int old_width = width;
|
|
||||||
FWidget::setWidth (w, adjust);
|
|
||||||
|
|
||||||
if ( vwin && width != old_width )
|
|
||||||
resizeArea (vwin);
|
|
||||||
}
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
|
||||||
void FDialog::setHeight (int h, bool adjust)
|
|
||||||
{
|
|
||||||
int old_height = height;
|
|
||||||
FWidget::setHeight (h, adjust);
|
|
||||||
|
|
||||||
if ( vwin && height != old_height )
|
|
||||||
resizeArea (vwin);
|
|
||||||
}
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
|
||||||
void FDialog::setGeometry (int x, int y, int w, int h, bool adjust)
|
|
||||||
{
|
|
||||||
int old_width = width;
|
|
||||||
int old_height = height;
|
|
||||||
FWidget::setGeometry (x, y, w, h, adjust);
|
|
||||||
|
|
||||||
if ( vwin && (width != old_width || height != old_height) )
|
|
||||||
resizeArea (vwin);
|
|
||||||
}
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
bool FDialog::setFocus (bool on)
|
bool FDialog::setFocus (bool on)
|
||||||
{
|
{
|
||||||
|
@ -1128,21 +1178,15 @@ bool FDialog::setScrollable (bool on)
|
||||||
bool FDialog::setResizeable (bool on)
|
bool FDialog::setResizeable (bool on)
|
||||||
{
|
{
|
||||||
if ( on )
|
if ( on )
|
||||||
|
{
|
||||||
flags |= fc::resizeable;
|
flags |= fc::resizeable;
|
||||||
|
zoom_item->setEnable();
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
flags &= ~fc::resizeable;
|
flags &= ~fc::resizeable;
|
||||||
|
zoom_item->setDisable();
|
||||||
|
}
|
||||||
|
|
||||||
return on;
|
return on;
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
|
||||||
bool FDialog::setMaximized()
|
|
||||||
{
|
|
||||||
if ( maximized )
|
|
||||||
return true;
|
|
||||||
|
|
||||||
maximized = true;
|
|
||||||
//setGeometry (1, 1, xmax, ymax);
|
|
||||||
|
|
||||||
return maximized;
|
|
||||||
}
|
|
||||||
|
|
|
@ -52,11 +52,14 @@ class FDialog : public FWindow
|
||||||
private:
|
private:
|
||||||
FString tb_text; // title bar text
|
FString tb_text; // title bar text
|
||||||
int result_code;
|
int result_code;
|
||||||
bool maximized;
|
bool zoom_button_pressed;
|
||||||
|
bool zoom_button_active;
|
||||||
FPoint TitleBarClickPos;
|
FPoint TitleBarClickPos;
|
||||||
FRect oldGeometry; // required by move()
|
FRect oldGeometry; // required by move()
|
||||||
FMenu* dialog_menu;
|
FMenu* dialog_menu;
|
||||||
FMenuItem* dgl_menuitem;
|
FMenuItem* dgl_menuitem;
|
||||||
|
FMenuItem* zoom_item;
|
||||||
|
FMenuItem* close_item;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
FDialog (const FDialog&);
|
FDialog (const FDialog&);
|
||||||
|
@ -65,6 +68,7 @@ class FDialog : public FWindow
|
||||||
void drawBorder();
|
void drawBorder();
|
||||||
void drawTitleBar();
|
void drawTitleBar();
|
||||||
void leaveMenu();
|
void leaveMenu();
|
||||||
|
void cb_zoom (FWidget*, void*);
|
||||||
void cb_close (FWidget*, void*);
|
void cb_close (FWidget*, void*);
|
||||||
static void addDialog (FWidget*);
|
static void addDialog (FWidget*);
|
||||||
static void delDialog (FWidget*);
|
static void delDialog (FWidget*);
|
||||||
|
@ -100,11 +104,6 @@ class FDialog : public FWindow
|
||||||
void move (const FPoint&);
|
void move (const FPoint&);
|
||||||
void move (int, int);
|
void move (int, int);
|
||||||
|
|
||||||
void setWidth (int, bool = true);
|
|
||||||
void setHeight (int, bool = true);
|
|
||||||
// make every setGeometry from FWidget available
|
|
||||||
using FWidget::setGeometry;
|
|
||||||
void setGeometry (int, int, int, int, bool = true);
|
|
||||||
bool setFocus(bool);
|
bool setFocus(bool);
|
||||||
bool setFocus();
|
bool setFocus();
|
||||||
bool unsetFocus();
|
bool unsetFocus();
|
||||||
|
@ -120,8 +119,6 @@ class FDialog : public FWindow
|
||||||
bool setResizeable();
|
bool setResizeable();
|
||||||
bool unsetResizeable();
|
bool unsetResizeable();
|
||||||
bool isResizeable();
|
bool isResizeable();
|
||||||
bool setMaximized();
|
|
||||||
bool isMaximized() const;
|
|
||||||
bool setTransparentShadow(bool);
|
bool setTransparentShadow(bool);
|
||||||
bool setTransparentShadow();
|
bool setTransparentShadow();
|
||||||
bool unsetTransparentShadow();
|
bool unsetTransparentShadow();
|
||||||
|
@ -187,10 +184,6 @@ inline bool FDialog::unsetResizeable()
|
||||||
inline bool FDialog::isResizeable()
|
inline bool FDialog::isResizeable()
|
||||||
{ return ((flags & fc::resizeable) != 0); }
|
{ return ((flags & fc::resizeable) != 0); }
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
|
||||||
inline bool FDialog::isMaximized() const
|
|
||||||
{ return maximized; }
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
inline bool FDialog::setTransparentShadow()
|
inline bool FDialog::setTransparentShadow()
|
||||||
{ return setTransparentShadow(true); }
|
{ return setTransparentShadow(true); }
|
||||||
|
|
|
@ -2921,6 +2921,101 @@ void FTerm::putArea (int ax, int ay, FTerm::term_area* area)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
void FTerm::clearArea()
|
||||||
|
{
|
||||||
|
term_area* area;
|
||||||
|
FWindow* area_widget;
|
||||||
|
FWidget* widget;
|
||||||
|
FOptiAttr::char_data default_char;
|
||||||
|
int total_width;
|
||||||
|
uInt w;
|
||||||
|
|
||||||
|
default_char.code = ' ';
|
||||||
|
default_char.fg_color = next_attribute.fg_color;
|
||||||
|
default_char.bg_color = next_attribute.bg_color;
|
||||||
|
default_char.bold = next_attribute.bold;
|
||||||
|
default_char.dim = next_attribute.dim;
|
||||||
|
default_char.italic = next_attribute.italic;
|
||||||
|
default_char.underline = next_attribute.underline;
|
||||||
|
default_char.blink = next_attribute.blink;
|
||||||
|
default_char.reverse = next_attribute.reverse;
|
||||||
|
default_char.standout = next_attribute.standout;
|
||||||
|
default_char.invisible = next_attribute.invisible;
|
||||||
|
default_char.protect = next_attribute.protect;
|
||||||
|
default_char.crossed_out = next_attribute.crossed_out;
|
||||||
|
default_char.dbl_underline = next_attribute.dbl_underline;
|
||||||
|
default_char.alt_charset = next_attribute.alt_charset;
|
||||||
|
default_char.pc_charset = next_attribute.pc_charset;
|
||||||
|
default_char.transparent = next_attribute.transparent;
|
||||||
|
default_char.trans_shadow = next_attribute.trans_shadow;
|
||||||
|
default_char.inherit_bg = next_attribute.inherit_bg;
|
||||||
|
|
||||||
|
widget = static_cast<FWidget*>(this);
|
||||||
|
area_widget = FWindow::getWindowWidget(widget);
|
||||||
|
|
||||||
|
if ( area_widget )
|
||||||
|
area = area_widget->getVWin();
|
||||||
|
else
|
||||||
|
area = vdesktop;
|
||||||
|
|
||||||
|
if ( ! area )
|
||||||
|
return;
|
||||||
|
|
||||||
|
total_width = area->width + area->right_shadow;
|
||||||
|
w = uInt(total_width);
|
||||||
|
|
||||||
|
if ( area->right_shadow == 0 )
|
||||||
|
{
|
||||||
|
int area_size = area->width * area->height;
|
||||||
|
std::fill_n (area->text, area_size, default_char);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FOptiAttr::char_data t_char = default_char;
|
||||||
|
t_char.transparent = true;
|
||||||
|
|
||||||
|
for (int y=0; y < area->height; y++)
|
||||||
|
{
|
||||||
|
int pos = y * total_width;
|
||||||
|
std::fill_n (&area->text[pos], total_width, default_char);
|
||||||
|
std::fill_n (&area->text[pos+area->width], area->right_shadow, t_char);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int y=0; y < area->bottom_shadow; y++)
|
||||||
|
{
|
||||||
|
int pos = total_width * (y + area->height);
|
||||||
|
std::fill_n (&area->text[pos], total_width, t_char);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i=0; i < area->height; i++)
|
||||||
|
{
|
||||||
|
|
||||||
|
area->changes[i].xmin = 0;
|
||||||
|
area->changes[i].xmax = w - 1;
|
||||||
|
|
||||||
|
if ( default_char.transparent
|
||||||
|
|| default_char.trans_shadow
|
||||||
|
|| default_char.inherit_bg )
|
||||||
|
area->changes[i].trans_count = w;
|
||||||
|
else if ( area->right_shadow != 0 )
|
||||||
|
area->changes[i].trans_count = uInt(area->right_shadow);
|
||||||
|
else
|
||||||
|
area->changes[i].trans_count = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i=0; i < area->bottom_shadow; i++)
|
||||||
|
{
|
||||||
|
int y = area->height + i;
|
||||||
|
area->changes[y].xmin = 0;
|
||||||
|
area->changes[y].xmax = w - 1;
|
||||||
|
area->changes[y].trans_count = w;
|
||||||
|
}
|
||||||
|
|
||||||
|
updateVTerm (area);
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
FOptiAttr::char_data FTerm::getCharacter ( int char_type
|
FOptiAttr::char_data FTerm::getCharacter ( int char_type
|
||||||
, int x
|
, int x
|
||||||
|
|
|
@ -300,6 +300,7 @@ class FTerm
|
||||||
void getArea (int, int, int, int, FTerm::term_area*);
|
void getArea (int, int, int, int, FTerm::term_area*);
|
||||||
void putArea (const FPoint&, FTerm::term_area*);
|
void putArea (const FPoint&, FTerm::term_area*);
|
||||||
void putArea (int, int, FTerm::term_area*);
|
void putArea (int, int, FTerm::term_area*);
|
||||||
|
void clearArea();
|
||||||
FOptiAttr::char_data getCharacter (int, const FPoint&, FTerm*);
|
FOptiAttr::char_data getCharacter (int, const FPoint&, FTerm*);
|
||||||
FOptiAttr::char_data getCharacter (int, int, int, FTerm*);
|
FOptiAttr::char_data getCharacter (int, int, int, FTerm*);
|
||||||
FOptiAttr::char_data getCoveredCharacter (const FPoint&, FTerm*);
|
FOptiAttr::char_data getCoveredCharacter (const FPoint&, FTerm*);
|
||||||
|
|
108
src/fwidget.cpp
108
src/fwidget.cpp
|
@ -218,6 +218,7 @@ void FWidget::setColorTheme()
|
||||||
wc.selected_list_fg = fc::Cyan;
|
wc.selected_list_fg = fc::Cyan;
|
||||||
wc.selected_list_bg = fc::White;
|
wc.selected_list_bg = fc::White;
|
||||||
wc.dialog_fg = fc::Black;
|
wc.dialog_fg = fc::Black;
|
||||||
|
wc.dialog_resize_fg = fc::Red;
|
||||||
wc.dialog_emphasis_fg = fc::Blue;
|
wc.dialog_emphasis_fg = fc::Blue;
|
||||||
wc.dialog_bg = fc::White;
|
wc.dialog_bg = fc::White;
|
||||||
wc.error_box_fg = fc::White;
|
wc.error_box_fg = fc::White;
|
||||||
|
@ -267,6 +268,8 @@ void FWidget::setColorTheme()
|
||||||
wc.titlebar_inactive_bg = fc::DarkGray;
|
wc.titlebar_inactive_bg = fc::DarkGray;
|
||||||
wc.titlebar_button_fg = fc::DarkGray;
|
wc.titlebar_button_fg = fc::DarkGray;
|
||||||
wc.titlebar_button_bg = fc::LightGray;
|
wc.titlebar_button_bg = fc::LightGray;
|
||||||
|
wc.titlebar_button_focus_fg = fc::LightGray;
|
||||||
|
wc.titlebar_button_focus_bg = fc::Black;
|
||||||
wc.menu_active_focus_fg = fc::White;
|
wc.menu_active_focus_fg = fc::White;
|
||||||
wc.menu_active_focus_bg = fc::Blue;
|
wc.menu_active_focus_bg = fc::Blue;
|
||||||
wc.menu_active_fg = fc::Black;
|
wc.menu_active_fg = fc::Black;
|
||||||
|
@ -306,6 +309,7 @@ void FWidget::setColorTheme()
|
||||||
wc.selected_list_fg = fc::Blue;
|
wc.selected_list_fg = fc::Blue;
|
||||||
wc.selected_list_bg = fc::LightGray;
|
wc.selected_list_bg = fc::LightGray;
|
||||||
wc.dialog_fg = fc::Black;
|
wc.dialog_fg = fc::Black;
|
||||||
|
wc.dialog_resize_fg = fc::Red;
|
||||||
wc.dialog_emphasis_fg = fc::Blue;
|
wc.dialog_emphasis_fg = fc::Blue;
|
||||||
wc.dialog_bg = fc::LightGray;
|
wc.dialog_bg = fc::LightGray;
|
||||||
wc.error_box_fg = fc::Black;
|
wc.error_box_fg = fc::Black;
|
||||||
|
@ -355,6 +359,8 @@ void FWidget::setColorTheme()
|
||||||
wc.titlebar_inactive_bg = fc::LightGray;
|
wc.titlebar_inactive_bg = fc::LightGray;
|
||||||
wc.titlebar_button_fg = fc::Black;
|
wc.titlebar_button_fg = fc::Black;
|
||||||
wc.titlebar_button_bg = fc::LightGray;
|
wc.titlebar_button_bg = fc::LightGray;
|
||||||
|
wc.titlebar_button_focus_fg = fc::LightGray;
|
||||||
|
wc.titlebar_button_focus_bg = fc::Black;
|
||||||
wc.menu_active_focus_fg = fc::LightGray;
|
wc.menu_active_focus_fg = fc::LightGray;
|
||||||
wc.menu_active_focus_bg = fc::Blue;
|
wc.menu_active_focus_bg = fc::Blue;
|
||||||
wc.menu_active_fg = fc::Black;
|
wc.menu_active_fg = fc::Black;
|
||||||
|
@ -1854,6 +1860,8 @@ void FWidget::setTermGeometry (int w, int h)
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FWidget::setGeometry (int x, int y, int w, int h, bool adjust)
|
void FWidget::setGeometry (int x, int y, int w, int h, bool adjust)
|
||||||
{
|
{
|
||||||
|
int global_x, global_y;
|
||||||
|
|
||||||
if ( xpos == x && ypos == y && width == w && height == h )
|
if ( xpos == x && ypos == y && width == w && height == h )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -1879,10 +1887,9 @@ void FWidget::setGeometry (int x, int y, int w, int h, bool adjust)
|
||||||
widgetSize.setRect (xpos, ypos, width, height);
|
widgetSize.setRect (xpos, ypos, width, height);
|
||||||
adjustWidgetSize.setRect (xpos, ypos, width, height);
|
adjustWidgetSize.setRect (xpos, ypos, width, height);
|
||||||
adjustWidgetSizeShadow = adjustWidgetSize + shadow;
|
adjustWidgetSizeShadow = adjustWidgetSize + shadow;
|
||||||
adjustWidgetSizeGlobal.setRect ( xpos + xmin - 1
|
global_x = xpos + xmin - 1;
|
||||||
, ypos + ymin - 1
|
global_y = ypos + ymin - 1;
|
||||||
, width
|
adjustWidgetSizeGlobal.setRect (global_x, global_y, width, height);
|
||||||
, height );
|
|
||||||
adjustWidgetSizeGlobalShadow = adjustWidgetSizeGlobal + shadow;
|
adjustWidgetSizeGlobalShadow = adjustWidgetSizeGlobal + shadow;
|
||||||
|
|
||||||
double_flatline_mask.top.resize (uLong(width), false);
|
double_flatline_mask.top.resize (uLong(width), false);
|
||||||
|
@ -1938,99 +1945,6 @@ bool FWidget::setCursorPos (register int x, register int y)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
|
||||||
void FWidget::clearArea()
|
|
||||||
{
|
|
||||||
term_area* area;
|
|
||||||
FWindow* area_widget;
|
|
||||||
FOptiAttr::char_data default_char;
|
|
||||||
int total_width;
|
|
||||||
uInt w;
|
|
||||||
|
|
||||||
default_char.code = ' ';
|
|
||||||
default_char.fg_color = next_attribute.fg_color;
|
|
||||||
default_char.bg_color = next_attribute.bg_color;
|
|
||||||
default_char.bold = next_attribute.bold;
|
|
||||||
default_char.dim = next_attribute.dim;
|
|
||||||
default_char.italic = next_attribute.italic;
|
|
||||||
default_char.underline = next_attribute.underline;
|
|
||||||
default_char.blink = next_attribute.blink;
|
|
||||||
default_char.reverse = next_attribute.reverse;
|
|
||||||
default_char.standout = next_attribute.standout;
|
|
||||||
default_char.invisible = next_attribute.invisible;
|
|
||||||
default_char.protect = next_attribute.protect;
|
|
||||||
default_char.crossed_out = next_attribute.crossed_out;
|
|
||||||
default_char.dbl_underline = next_attribute.dbl_underline;
|
|
||||||
default_char.alt_charset = next_attribute.alt_charset;
|
|
||||||
default_char.pc_charset = next_attribute.pc_charset;
|
|
||||||
default_char.transparent = next_attribute.transparent;
|
|
||||||
default_char.trans_shadow = next_attribute.trans_shadow;
|
|
||||||
default_char.inherit_bg = next_attribute.inherit_bg;
|
|
||||||
|
|
||||||
area_widget = FWindow::getWindowWidget(this);
|
|
||||||
|
|
||||||
if ( area_widget )
|
|
||||||
area = area_widget->getVWin();
|
|
||||||
else
|
|
||||||
area = vdesktop;
|
|
||||||
|
|
||||||
if ( ! area )
|
|
||||||
return;
|
|
||||||
|
|
||||||
total_width = area->width + area->right_shadow;
|
|
||||||
w = uInt(total_width);
|
|
||||||
|
|
||||||
if ( area->right_shadow == 0 )
|
|
||||||
{
|
|
||||||
int area_size = area->width * area->height;
|
|
||||||
std::fill_n (area->text, area_size, default_char);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
FOptiAttr::char_data t_char = default_char;
|
|
||||||
t_char.transparent = true;
|
|
||||||
|
|
||||||
for (int y=0; y < area->height; y++)
|
|
||||||
{
|
|
||||||
int pos = y * total_width;
|
|
||||||
std::fill_n (&area->text[pos], total_width, default_char);
|
|
||||||
std::fill_n (&area->text[pos+area->width], area->right_shadow, t_char);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int y=0; y < area->bottom_shadow; y++)
|
|
||||||
{
|
|
||||||
int pos = total_width * (y + area->height);
|
|
||||||
std::fill_n (&area->text[pos], total_width, t_char);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i=0; i < area->height; i++)
|
|
||||||
{
|
|
||||||
|
|
||||||
area->changes[i].xmin = 0;
|
|
||||||
area->changes[i].xmax = w - 1;
|
|
||||||
|
|
||||||
if ( default_char.transparent
|
|
||||||
|| default_char.trans_shadow
|
|
||||||
|| default_char.inherit_bg )
|
|
||||||
area->changes[i].trans_count = w;
|
|
||||||
else if ( area->right_shadow != 0 )
|
|
||||||
area->changes[i].trans_count = uInt(area->right_shadow);
|
|
||||||
else
|
|
||||||
area->changes[i].trans_count = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i=0; i < area->bottom_shadow; i++)
|
|
||||||
{
|
|
||||||
int y = area->height + i;
|
|
||||||
area->changes[y].xmin = 0;
|
|
||||||
area->changes[y].xmax = w - 1;
|
|
||||||
area->changes[y].trans_count = w;
|
|
||||||
}
|
|
||||||
|
|
||||||
updateVTerm (area);
|
|
||||||
}
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FWidget::drawShadow()
|
void FWidget::drawShadow()
|
||||||
{
|
{
|
||||||
|
|
|
@ -162,6 +162,7 @@ class FWidget : public FObject, public FTerm
|
||||||
short inputfield_inactive_fg;
|
short inputfield_inactive_fg;
|
||||||
short inputfield_inactive_bg;
|
short inputfield_inactive_bg;
|
||||||
short dialog_fg;
|
short dialog_fg;
|
||||||
|
short dialog_resize_fg;
|
||||||
short dialog_emphasis_fg;
|
short dialog_emphasis_fg;
|
||||||
short dialog_bg;
|
short dialog_bg;
|
||||||
short error_box_fg;
|
short error_box_fg;
|
||||||
|
@ -188,6 +189,8 @@ class FWidget : public FObject, public FTerm
|
||||||
short titlebar_inactive_bg;
|
short titlebar_inactive_bg;
|
||||||
short titlebar_button_fg;
|
short titlebar_button_fg;
|
||||||
short titlebar_button_bg;
|
short titlebar_button_bg;
|
||||||
|
short titlebar_button_focus_fg;
|
||||||
|
short titlebar_button_focus_bg;
|
||||||
short menu_active_focus_fg;
|
short menu_active_focus_fg;
|
||||||
short menu_active_focus_bg;
|
short menu_active_focus_bg;
|
||||||
short menu_active_fg;
|
short menu_active_fg;
|
||||||
|
@ -409,6 +412,8 @@ class FWidget : public FObject, public FTerm
|
||||||
int getRightPadding() const;
|
int getRightPadding() const;
|
||||||
int getClientWidth() const;
|
int getClientWidth() const;
|
||||||
int getClientHeight() const;
|
int getClientHeight() const;
|
||||||
|
int getMaxWidth() const;
|
||||||
|
int getMinHeight() const;
|
||||||
const FPoint& getShadow() const;
|
const FPoint& getShadow() const;
|
||||||
const FRect& getGeometry() const;
|
const FRect& getGeometry() const;
|
||||||
const FRect& getGeometryShadow() const;
|
const FRect& getGeometryShadow() const;
|
||||||
|
@ -444,7 +449,6 @@ class FWidget : public FObject, public FTerm
|
||||||
|
|
||||||
static void gotoxy (const FPoint&);
|
static void gotoxy (const FPoint&);
|
||||||
static void gotoxy (register int, register int);
|
static void gotoxy (register int, register int);
|
||||||
void clearArea();
|
|
||||||
|
|
||||||
static void setNormal();
|
static void setNormal();
|
||||||
|
|
||||||
|
@ -756,6 +760,14 @@ inline int FWidget::getClientWidth() const
|
||||||
inline int FWidget::getClientHeight() const
|
inline int FWidget::getClientHeight() const
|
||||||
{ return client_ymax-client_ymin+1; }
|
{ return client_ymax-client_ymin+1; }
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
inline int FWidget::getMaxWidth() const
|
||||||
|
{ return xmax-xmin+1; }
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
inline int FWidget::getMinHeight() const
|
||||||
|
{ return ymax-ymin+1; }
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
inline const FPoint& FWidget::getShadow() const
|
inline const FPoint& FWidget::getShadow() const
|
||||||
{ return shadow; }
|
{ return shadow; }
|
||||||
|
|
|
@ -18,7 +18,11 @@ FWindow* FWindow::previous_widget = 0;
|
||||||
FWindow::FWindow(FWidget* parent)
|
FWindow::FWindow(FWidget* parent)
|
||||||
: FWidget(parent)
|
: FWidget(parent)
|
||||||
, window_active(false)
|
, window_active(false)
|
||||||
|
, zoomed(false)
|
||||||
, win_focus_widget(0)
|
, win_focus_widget(0)
|
||||||
|
, normalGeometry()
|
||||||
|
, maxGeometry()
|
||||||
|
, minGeometry()
|
||||||
{
|
{
|
||||||
window_object = true;
|
window_object = true;
|
||||||
}
|
}
|
||||||
|
@ -99,6 +103,37 @@ void FWindow::hide()
|
||||||
FWidget::hide();
|
FWidget::hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
void FWindow::setWidth (int w, bool adjust)
|
||||||
|
{
|
||||||
|
int old_width = width;
|
||||||
|
FWidget::setWidth (w, adjust);
|
||||||
|
|
||||||
|
if ( vwin && width != old_width )
|
||||||
|
resizeArea (vwin);
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
void FWindow::setHeight (int h, bool adjust)
|
||||||
|
{
|
||||||
|
int old_height = height;
|
||||||
|
FWidget::setHeight (h, adjust);
|
||||||
|
|
||||||
|
if ( vwin && height != old_height )
|
||||||
|
resizeArea (vwin);
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
void FWindow::setGeometry (int x, int y, int w, int h, bool adjust)
|
||||||
|
{
|
||||||
|
int old_width = width;
|
||||||
|
int old_height = height;
|
||||||
|
FWidget::setGeometry (x, y, w, h, adjust);
|
||||||
|
|
||||||
|
if ( vwin && (width != old_width || height != old_height) )
|
||||||
|
resizeArea (vwin);
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
FWindow* FWindow::getWindowWidgetAt (int x, int y)
|
FWindow* FWindow::getWindowWidgetAt (int x, int y)
|
||||||
{
|
{
|
||||||
|
@ -335,6 +370,29 @@ bool FWindow::lowerWindow (FWidget* obj)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
bool FWindow::zoomWindow()
|
||||||
|
{
|
||||||
|
if ( zoomed )
|
||||||
|
{
|
||||||
|
zoomed = false;
|
||||||
|
FRect currentGeometry = getGeometryShadow();
|
||||||
|
setGeometry (normalGeometry);
|
||||||
|
restoreVTerm (currentGeometry);
|
||||||
|
redraw();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
zoomed = true;
|
||||||
|
// save the current geometry
|
||||||
|
normalGeometry = getGeometry();
|
||||||
|
setGeometry (1, 1, getMaxWidth(), getMinHeight());
|
||||||
|
redraw();
|
||||||
|
}
|
||||||
|
|
||||||
|
return zoomed;
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
FWindow* FWindow::getActiveWindow()
|
FWindow* FWindow::getActiveWindow()
|
||||||
{
|
{
|
||||||
|
|
|
@ -45,7 +45,11 @@ class FWindow : public FWidget
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
bool window_active;
|
bool window_active;
|
||||||
|
bool zoomed;
|
||||||
FWidget* win_focus_widget;
|
FWidget* win_focus_widget;
|
||||||
|
FRect normalGeometry;
|
||||||
|
FRect maxGeometry;
|
||||||
|
FRect minGeometry;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
static FWindow* previous_widget;
|
static FWindow* previous_widget;
|
||||||
|
@ -69,6 +73,11 @@ class FWindow : public FWidget
|
||||||
const char* getClassName() const;
|
const char* getClassName() const;
|
||||||
virtual void show();
|
virtual void show();
|
||||||
virtual void hide();
|
virtual void hide();
|
||||||
|
void setWidth (int, bool = true);
|
||||||
|
void setHeight (int, bool = true);
|
||||||
|
// make every setGeometry from FWidget available
|
||||||
|
using FWidget::setGeometry;
|
||||||
|
void setGeometry (int, int, int, int, bool = true);
|
||||||
static FWindow* getWindowWidgetAt (const FPoint&);
|
static FWindow* getWindowWidgetAt (const FPoint&);
|
||||||
static FWindow* getWindowWidgetAt (int, int);
|
static FWindow* getWindowWidgetAt (int, int);
|
||||||
static void addWindow (FWidget*);
|
static void addWindow (FWidget*);
|
||||||
|
@ -80,6 +89,8 @@ class FWindow : public FWidget
|
||||||
bool raiseWindow ();
|
bool raiseWindow ();
|
||||||
static bool lowerWindow (FWidget*);
|
static bool lowerWindow (FWidget*);
|
||||||
bool lowerWindow ();
|
bool lowerWindow ();
|
||||||
|
bool zoomWindow ();
|
||||||
|
bool isZoomed() const;
|
||||||
static FWindow* getActiveWindow();
|
static FWindow* getActiveWindow();
|
||||||
static void setActiveWindow (FWindow*);
|
static void setActiveWindow (FWindow*);
|
||||||
FWidget* getWindowFocusWidget() const;
|
FWidget* getWindowFocusWidget() const;
|
||||||
|
@ -112,6 +123,10 @@ inline bool FWindow::raiseWindow()
|
||||||
inline bool FWindow::lowerWindow()
|
inline bool FWindow::lowerWindow()
|
||||||
{ return lowerWindow(this); }
|
{ return lowerWindow(this); }
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
inline bool FWindow::isZoomed() const
|
||||||
|
{ return zoomed; }
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
inline bool FWindow::activateWindow()
|
inline bool FWindow::activateWindow()
|
||||||
{ return activateWindow(true); }
|
{ return activateWindow(true); }
|
||||||
|
|
79
test/ui.cpp
79
test/ui.cpp
|
@ -154,6 +154,68 @@ void ProgressDialog::cb_exit_bar (FWidget*, void*)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// class TextWindow
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
|
||||||
|
#pragma pack(push)
|
||||||
|
#pragma pack(1)
|
||||||
|
|
||||||
|
class TextWindow : public FDialog
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
FTextView* scrollText;
|
||||||
|
|
||||||
|
private:
|
||||||
|
TextWindow (const TextWindow&); // Disabled copy constructor
|
||||||
|
TextWindow& operator = (const TextWindow&); // and operator '='
|
||||||
|
void adjustSize();
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit TextWindow (FWidget* = 0); // constructor
|
||||||
|
~TextWindow(); // destructor
|
||||||
|
|
||||||
|
void append (const FString&);
|
||||||
|
};
|
||||||
|
#pragma pack(pop)
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
TextWindow::TextWindow (FWidget* parent)
|
||||||
|
: FDialog(parent)
|
||||||
|
, scrollText()
|
||||||
|
{
|
||||||
|
scrollText = new FTextView(this);
|
||||||
|
scrollText->ignorePadding();
|
||||||
|
scrollText->setGeometry (1, 2, getWidth(), getHeight()-1);
|
||||||
|
scrollText->setFocus();
|
||||||
|
scrollText->insert(" -----------------------------------------------\n"
|
||||||
|
" line 1\n"
|
||||||
|
" -----------------------------------------------\n"
|
||||||
|
" line 3\n"
|
||||||
|
" line 4"
|
||||||
|
, -1);
|
||||||
|
scrollText->replaceRange(" File viewer", 1, 1);
|
||||||
|
scrollText->deleteRange(3, 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
TextWindow::~TextWindow()
|
||||||
|
{ }
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
void TextWindow::append (const FString& str)
|
||||||
|
{
|
||||||
|
scrollText->append(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
void TextWindow::adjustSize()
|
||||||
|
{
|
||||||
|
scrollText->setGeometry (1, 2, getWidth(), getHeight()-1);
|
||||||
|
FDialog::adjustSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
// class MyDialog
|
// class MyDialog
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
@ -745,26 +807,15 @@ void MyDialog::cb_view (FWidget*, void* data_ptr)
|
||||||
if ( file.isNull() )
|
if ( file.isNull() )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
FDialog* view = new FDialog(this);
|
TextWindow* view = new TextWindow(this);
|
||||||
FString filename(basename(const_cast<char*>(file.c_str())));
|
FString filename(basename(const_cast<char*>(file.c_str())));
|
||||||
view->setText ("Viewer: " + filename);
|
view->setText ("Viewer: " + filename);
|
||||||
view->setGeometry (1+int((getRootWidget()->getWidth()-60)/2),
|
view->setGeometry (1+int((getRootWidget()->getWidth()-60)/2),
|
||||||
int(getRootWidget()->getHeight()/6),
|
int(getRootWidget()->getHeight()/6),
|
||||||
60,
|
60,
|
||||||
int(getRootWidget()->getHeight()*3/4));
|
int(getRootWidget()->getHeight()*3/4));
|
||||||
|
view->setResizeable();
|
||||||
|
|
||||||
FTextView* scrollText = new FTextView(view);
|
|
||||||
scrollText->ignorePadding();
|
|
||||||
scrollText->setGeometry (1, 2, view->getWidth(), view->getHeight()-1);
|
|
||||||
scrollText->setFocus();
|
|
||||||
scrollText->insert(" -----------------------------------------------\n"
|
|
||||||
" line 1\n"
|
|
||||||
" -----------------------------------------------\n"
|
|
||||||
" line 3\n"
|
|
||||||
" line 4"
|
|
||||||
, -1);
|
|
||||||
scrollText->replaceRange(" File viewer", 1, 1);
|
|
||||||
scrollText->deleteRange(3, 4);
|
|
||||||
std::string line = "";
|
std::string line = "";
|
||||||
std::ifstream infile;
|
std::ifstream infile;
|
||||||
infile.open(file);
|
infile.open(file);
|
||||||
|
@ -772,7 +823,7 @@ void MyDialog::cb_view (FWidget*, void* data_ptr)
|
||||||
while ( ! infile.eof() && infile.good() )
|
while ( ! infile.eof() && infile.good() )
|
||||||
{
|
{
|
||||||
getline(infile, line);
|
getline(infile, line);
|
||||||
scrollText->append(line);
|
view->append(line);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( infile.is_open() )
|
if ( infile.is_open() )
|
||||||
|
|
|
@ -239,6 +239,7 @@ void Window::cb_createWindows (FWidget*, void*)
|
||||||
x = dx + 5 + (n%3)*25 + int(n/3)*3;
|
x = dx + 5 + (n%3)*25 + int(n/3)*3;
|
||||||
y = dy + 11 + int(n/3)*3;
|
y = dy + 11 + int(n/3)*3;
|
||||||
win->setGeometry (x, y, 20, 8);
|
win->setGeometry (x, y, 20, 8);
|
||||||
|
win->setResizeable();
|
||||||
win->show();
|
win->show();
|
||||||
|
|
||||||
win->addCallback
|
win->addCallback
|
||||||
|
|
Loading…
Reference in New Issue