Add some bad allocation checks
This commit is contained in:
parent
2a85f7e977
commit
abd501b558
13
src/fapp.cpp
13
src/fapp.cpp
|
@ -312,8 +312,17 @@ void FApplication::init()
|
||||||
gpm_ev.x = -1;
|
gpm_ev.x = -1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
zero_point = new FPoint(0,0);
|
try
|
||||||
event_queue = new eventQueue;
|
{
|
||||||
|
zero_point = new FPoint(0,0);
|
||||||
|
event_queue = new eventQueue;
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
std::abort();
|
||||||
|
}
|
||||||
|
|
||||||
// init arrays with '\0'
|
// init arrays with '\0'
|
||||||
std::fill_n (k_buf, sizeof(k_buf), '\0');
|
std::fill_n (k_buf, sizeof(k_buf), '\0');
|
||||||
std::fill_n (fifo_buf, fifo_buf_size, '\0');
|
std::fill_n (fifo_buf, fifo_buf_size, '\0');
|
||||||
|
|
|
@ -253,7 +253,15 @@ void FButton::hide()
|
||||||
if ( size < 0 )
|
if ( size < 0 )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
blank = new char[size+1];
|
try
|
||||||
|
{
|
||||||
|
blank = new char[size+1];
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
std::memset(blank, ' ', uLong(size));
|
std::memset(blank, ' ', uLong(size));
|
||||||
blank[size] = '\0';
|
blank[size] = '\0';
|
||||||
|
|
||||||
|
@ -502,10 +510,18 @@ void FButton::draw()
|
||||||
hotkey_offset = 0;
|
hotkey_offset = 0;
|
||||||
space = int(' ');
|
space = int(' ');
|
||||||
|
|
||||||
if ( isMonochron() || getMaxColor() < 16 )
|
try
|
||||||
ButtonText = new wchar_t[length+3]();
|
{
|
||||||
else
|
if ( isMonochron() || getMaxColor() < 16 )
|
||||||
ButtonText = new wchar_t[length+1]();
|
ButtonText = new wchar_t[length+3]();
|
||||||
|
else
|
||||||
|
ButtonText = new wchar_t[length+1]();
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
txt = FString(text);
|
txt = FString(text);
|
||||||
src = const_cast<wchar_t*>(txt.wc_str());
|
src = const_cast<wchar_t*>(txt.wc_str());
|
||||||
|
|
|
@ -206,7 +206,16 @@ void FButtonGroup::hide()
|
||||||
if ( size < 0 )
|
if ( size < 0 )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
blank = new char[size+1];
|
try
|
||||||
|
{
|
||||||
|
blank = new char[size+1];
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
std::memset(blank, ' ', uLong(size));
|
std::memset(blank, ' ', uLong(size));
|
||||||
blank[size] = '\0';
|
blank[size] = '\0';
|
||||||
|
|
||||||
|
@ -491,7 +500,17 @@ void FButtonGroup::drawLabel()
|
||||||
txt = " " + text + " ";
|
txt = " " + text + " ";
|
||||||
length = txt.getLength();
|
length = txt.getLength();
|
||||||
hotkeypos = -1;
|
hotkeypos = -1;
|
||||||
LabelText = new wchar_t[length+1]();
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
LabelText = new wchar_t[length+1]();
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
src = const_cast<wchar_t*>(txt.wc_str());
|
src = const_cast<wchar_t*>(txt.wc_str());
|
||||||
dest = const_cast<wchar_t*>(LabelText);
|
dest = const_cast<wchar_t*>(LabelText);
|
||||||
|
|
||||||
|
|
|
@ -767,11 +767,20 @@ void FDialog::onMouseMove (FMouseEvent* ev)
|
||||||
const FPoint& g = ev->getTermPos();
|
const FPoint& g = ev->getTermPos();
|
||||||
const FPoint& p = dialog_menu->termToWidgetPos(g);
|
const FPoint& p = dialog_menu->termToWidgetPos(g);
|
||||||
int b = ev->getButton();
|
int b = ev->getButton();
|
||||||
FMouseEvent* _ev = new FMouseEvent (fc::MouseMove_Event, p, g, b);
|
|
||||||
dialog_menu->mouse_down = true;
|
try
|
||||||
setClickedWidget(dialog_menu);
|
{
|
||||||
dialog_menu->onMouseMove(_ev);
|
FMouseEvent* _ev = new FMouseEvent (fc::MouseMove_Event, p, g, b);
|
||||||
delete _ev;
|
dialog_menu->mouse_down = true;
|
||||||
|
setClickedWidget(dialog_menu);
|
||||||
|
dialog_menu->onMouseMove(_ev);
|
||||||
|
delete _ev;
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1058,9 +1067,27 @@ void FDialog::init()
|
||||||
old_focus->redraw();
|
old_focus->redraw();
|
||||||
}
|
}
|
||||||
|
|
||||||
accelerator_list = new Accelerators();
|
try
|
||||||
|
{
|
||||||
|
accelerator_list = new Accelerators();
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Add the dialog menu
|
// Add the dialog menu
|
||||||
dialog_menu = new FMenu ("-", this);
|
try
|
||||||
|
{
|
||||||
|
dialog_menu = new FMenu ("-", this);
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
dialog_menu->setPos (getX(), getY()+1);
|
dialog_menu->setPos (getX(), getY()+1);
|
||||||
dgl_menuitem = dialog_menu->getItem();
|
dgl_menuitem = dialog_menu->getItem();
|
||||||
|
|
||||||
|
@ -1070,7 +1097,16 @@ void FDialog::init()
|
||||||
dgl_menuitem->unsetFocusable();
|
dgl_menuitem->unsetFocusable();
|
||||||
}
|
}
|
||||||
|
|
||||||
move_size_item = new FMenuItem (dialog_menu);
|
try
|
||||||
|
{
|
||||||
|
move_size_item = new FMenuItem (dialog_menu);
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
move_size_item->setText ("&Move/Size");
|
move_size_item->setText ("&Move/Size");
|
||||||
move_size_item->setStatusbarMessage ("Move or change the size of the window");
|
move_size_item->setStatusbarMessage ("Move or change the size of the window");
|
||||||
|
|
||||||
|
@ -1080,7 +1116,16 @@ void FDialog::init()
|
||||||
F_METHOD_CALLBACK (this, &FDialog::cb_move)
|
F_METHOD_CALLBACK (this, &FDialog::cb_move)
|
||||||
);
|
);
|
||||||
|
|
||||||
zoom_item = new FMenuItem (dialog_menu);
|
try
|
||||||
|
{
|
||||||
|
zoom_item = new FMenuItem (dialog_menu);
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
setZoomItem();
|
setZoomItem();
|
||||||
zoom_item->setDisable();
|
zoom_item->setDisable();
|
||||||
|
|
||||||
|
@ -1090,7 +1135,16 @@ void FDialog::init()
|
||||||
F_METHOD_CALLBACK (this, &FDialog::cb_zoom)
|
F_METHOD_CALLBACK (this, &FDialog::cb_zoom)
|
||||||
);
|
);
|
||||||
|
|
||||||
close_item = new FMenuItem ("&Close", dialog_menu);
|
try
|
||||||
|
{
|
||||||
|
close_item = new FMenuItem ("&Close", dialog_menu);
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
close_item->setStatusbarMessage ("Close this window");
|
close_item->setStatusbarMessage ("Close this window");
|
||||||
|
|
||||||
close_item->addCallback
|
close_item->addCallback
|
||||||
|
@ -1421,15 +1475,24 @@ void FDialog::cb_move (FWidget*, data_ptr)
|
||||||
setMoveSizeWidget(this);
|
setMoveSizeWidget(this);
|
||||||
|
|
||||||
if ( isMonochron() )
|
if ( isMonochron() )
|
||||||
setReverse(true);
|
setReverse(true);
|
||||||
|
|
||||||
drawBorder();
|
drawBorder();
|
||||||
|
|
||||||
if ( isMonochron() )
|
if ( isMonochron() )
|
||||||
setReverse(false);
|
setReverse(false);
|
||||||
|
|
||||||
save_geometry = getGeometry();
|
save_geometry = getGeometry();
|
||||||
tooltip = new FToolTip(this);
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
tooltip = new FToolTip(this);
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if ( isResizeable() )
|
if ( isResizeable() )
|
||||||
{
|
{
|
||||||
|
|
|
@ -375,10 +375,18 @@ const FString FFileDialog::fileOpenChooser ( FWidget* parent
|
||||||
if ( file_filter.isNull() || file_filter.isEmpty() )
|
if ( file_filter.isNull() || file_filter.isEmpty() )
|
||||||
file_filter = FString("*");
|
file_filter = FString("*");
|
||||||
|
|
||||||
fileopen = new FFileDialog ( path
|
try
|
||||||
, file_filter
|
{
|
||||||
, FFileDialog::Open
|
fileopen = new FFileDialog ( path
|
||||||
, parent );
|
, file_filter
|
||||||
|
, FFileDialog::Open
|
||||||
|
, parent );
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return FString();
|
||||||
|
}
|
||||||
|
|
||||||
if ( fileopen->exec() == FDialog::Accept )
|
if ( fileopen->exec() == FDialog::Accept )
|
||||||
ret = fileopen->getPath() + fileopen->getSelectedFile();
|
ret = fileopen->getPath() + fileopen->getSelectedFile();
|
||||||
|
@ -410,10 +418,18 @@ const FString FFileDialog::fileSaveChooser ( FWidget* parent
|
||||||
if ( file_filter.isNull() || file_filter.isEmpty() )
|
if ( file_filter.isNull() || file_filter.isEmpty() )
|
||||||
file_filter = FString("*");
|
file_filter = FString("*");
|
||||||
|
|
||||||
fileopen = new FFileDialog ( path
|
try
|
||||||
, file_filter
|
{
|
||||||
, FFileDialog::Save
|
fileopen = new FFileDialog ( path
|
||||||
, parent );
|
, file_filter
|
||||||
|
, FFileDialog::Save
|
||||||
|
, parent );
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return FString();
|
||||||
|
}
|
||||||
|
|
||||||
if ( fileopen->exec() == FDialog::Accept )
|
if ( fileopen->exec() == FDialog::Accept )
|
||||||
ret = fileopen->getPath() + fileopen->getSelectedFile();
|
ret = fileopen->getPath() + fileopen->getSelectedFile();
|
||||||
|
@ -490,29 +506,37 @@ void FFileDialog::init()
|
||||||
else
|
else
|
||||||
FDialog::setText("Open file");
|
FDialog::setText("Open file");
|
||||||
|
|
||||||
filename = new FLineEdit(this);
|
try
|
||||||
filename->setLabelText("File&name");
|
{
|
||||||
filename->setText(filter_pattern);
|
filename = new FLineEdit(this);
|
||||||
filename->setGeometry(11, 1, 28, 1);
|
filename->setLabelText("File&name");
|
||||||
filename->setFocus();
|
filename->setText(filter_pattern);
|
||||||
|
filename->setGeometry(11, 1, 28, 1);
|
||||||
|
filename->setFocus();
|
||||||
|
|
||||||
filebrowser = new FListBox(this);
|
filebrowser = new FListBox(this);
|
||||||
filebrowser->setGeometry(2, 3, 38, 6);
|
filebrowser->setGeometry(2, 3, 38, 6);
|
||||||
printPath(directory);
|
printPath(directory);
|
||||||
|
|
||||||
hidden = new FCheckBox("&hidden files", this);
|
hidden = new FCheckBox("&hidden files", this);
|
||||||
hidden->setGeometry(2, 10, 16, 1);
|
hidden->setGeometry(2, 10, 16, 1);
|
||||||
|
|
||||||
cancel = new FButton("&Cancel", this);
|
cancel = new FButton("&Cancel", this);
|
||||||
cancel->setGeometry(19, 10, 9, 1);
|
cancel->setGeometry(19, 10, 9, 1);
|
||||||
|
|
||||||
if ( dlg_type == FFileDialog::Save )
|
if ( dlg_type == FFileDialog::Save )
|
||||||
open = new FButton("&Save",this);
|
open = new FButton("&Save",this);
|
||||||
else
|
else
|
||||||
open = new FButton("&Open",this);
|
open = new FButton("&Open",this);
|
||||||
|
|
||||||
open->setGeometry(30, 10, 9, 1);
|
open->setGeometry(30, 10, 9, 1);
|
||||||
setGeometry (x, y, getWidth(), getHeight());
|
setGeometry (x, y, getWidth(), getHeight());
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
filename->addCallback
|
filename->addCallback
|
||||||
(
|
(
|
||||||
|
|
|
@ -158,7 +158,16 @@ void FLabel::hide()
|
||||||
if ( size < 0 )
|
if ( size < 0 )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
blank = new char[size+1];
|
try
|
||||||
|
{
|
||||||
|
blank = new char[size+1];
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
std::memset(blank, ' ', uLong(size));
|
std::memset(blank, ' ', uLong(size));
|
||||||
blank[getWidth()] = '\0';
|
blank[getWidth()] = '\0';
|
||||||
setPrintPos (1,1);
|
setPrintPos (1,1);
|
||||||
|
@ -180,9 +189,18 @@ void FLabel::onMouseDown (FMouseEvent* ev)
|
||||||
int b = ev->getButton();
|
int b = ev->getButton();
|
||||||
const FPoint& tp = ev->getTermPos();
|
const FPoint& tp = ev->getTermPos();
|
||||||
const FPoint& p = parent->termToWidgetPos(tp);
|
const FPoint& p = parent->termToWidgetPos(tp);
|
||||||
FMouseEvent* _ev = new FMouseEvent (fc::MouseDown_Event, p, tp, b);
|
|
||||||
FApplication::sendEvent (parent, _ev);
|
try
|
||||||
delete _ev;
|
{
|
||||||
|
FMouseEvent* _ev = new FMouseEvent (fc::MouseDown_Event, p, tp, b);
|
||||||
|
FApplication::sendEvent (parent, _ev);
|
||||||
|
delete _ev;
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
@ -468,7 +486,17 @@ void FLabel::draw()
|
||||||
while ( y < text_lines && y < uInt(getHeight()) )
|
while ( y < text_lines && y < uInt(getHeight()) )
|
||||||
{
|
{
|
||||||
length = multiline_text[y].getLength();
|
length = multiline_text[y].getLength();
|
||||||
LabelText = new wchar_t[length+1]();
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
LabelText = new wchar_t[length+1]();
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
src = const_cast<wchar_t*>(multiline_text[y].wc_str());
|
src = const_cast<wchar_t*>(multiline_text[y].wc_str());
|
||||||
dest = const_cast<wchar_t*>(LabelText);
|
dest = const_cast<wchar_t*>(LabelText);
|
||||||
|
|
||||||
|
@ -499,7 +527,17 @@ void FLabel::draw()
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
length = text.getLength();
|
length = text.getLength();
|
||||||
LabelText = new wchar_t[length+1]();
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
LabelText = new wchar_t[length+1]();
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
src = const_cast<wchar_t*>(text.wc_str());
|
src = const_cast<wchar_t*>(text.wc_str());
|
||||||
dest = const_cast<wchar_t*>(LabelText);
|
dest = const_cast<wchar_t*>(LabelText);
|
||||||
hotkeypos = getHotkeyPos (src, dest, length);
|
hotkeypos = getHotkeyPos (src, dest, length);
|
||||||
|
|
|
@ -193,7 +193,16 @@ void FLineEdit::hide()
|
||||||
if ( size < 0 )
|
if ( size < 0 )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
blank = new char[size+1];
|
try
|
||||||
|
{
|
||||||
|
blank = new char[size+1];
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
std::memset(blank, ' ', uLong(size));
|
std::memset(blank, ' ', uLong(size));
|
||||||
blank[size] = '\0';
|
blank[size] = '\0';
|
||||||
|
|
||||||
|
|
|
@ -243,7 +243,16 @@ void FListBox::hide()
|
||||||
if ( size < 0 )
|
if ( size < 0 )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
blank = new char[size+1];
|
try
|
||||||
|
{
|
||||||
|
blank = new char[size+1];
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
std::memset (blank, ' ', uLong(size));
|
std::memset (blank, ' ', uLong(size));
|
||||||
blank[size] = '\0';
|
blank[size] = '\0';
|
||||||
|
|
||||||
|
@ -369,7 +378,16 @@ void FListBox::clear()
|
||||||
if ( size < 0 )
|
if ( size < 0 )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
blank = new char[size+1];
|
try
|
||||||
|
{
|
||||||
|
blank = new char[size+1];
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
std::memset (blank, ' ', uLong(size));
|
std::memset (blank, ' ', uLong(size));
|
||||||
blank[size] = '\0';
|
blank[size] = '\0';
|
||||||
|
|
||||||
|
@ -1225,15 +1243,23 @@ void FListBox::init()
|
||||||
setForegroundColor (wc.dialog_fg);
|
setForegroundColor (wc.dialog_fg);
|
||||||
setBackgroundColor (wc.dialog_bg);
|
setBackgroundColor (wc.dialog_bg);
|
||||||
|
|
||||||
vbar = new FScrollbar(fc::vertical, this);
|
try
|
||||||
vbar->setMinimum(0);
|
{
|
||||||
vbar->setValue(0);
|
vbar = new FScrollbar(fc::vertical, this);
|
||||||
vbar->hide();
|
vbar->setMinimum(0);
|
||||||
|
vbar->setValue(0);
|
||||||
|
vbar->hide();
|
||||||
|
|
||||||
hbar = new FScrollbar(fc::horizontal, this);
|
hbar = new FScrollbar(fc::horizontal, this);
|
||||||
hbar->setMinimum(0);
|
hbar->setMinimum(0);
|
||||||
hbar->setValue(0);
|
hbar->setValue(0);
|
||||||
hbar->hide();
|
hbar->hide();
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
setGeometry (1, 1, 5, 4, false); // initialize geometry values
|
setGeometry (1, 1, 5, 4, false); // initialize geometry values
|
||||||
|
|
||||||
|
|
|
@ -282,10 +282,18 @@ void FListView::insert ( const std::vector<FString>& cols
|
||||||
, data_ptr d
|
, data_ptr d
|
||||||
, FListView* parent )
|
, FListView* parent )
|
||||||
{
|
{
|
||||||
if ( parent == 0 )
|
try
|
||||||
new FListViewItem (cols, d, this);
|
{
|
||||||
else
|
if ( parent == 0 )
|
||||||
new FListViewItem (cols, d, parent);
|
new FListViewItem (cols, d, this);
|
||||||
|
else
|
||||||
|
new FListViewItem (cols, d, parent);
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
@ -874,15 +882,23 @@ void FListView::init()
|
||||||
setForegroundColor (wc.dialog_fg);
|
setForegroundColor (wc.dialog_fg);
|
||||||
setBackgroundColor (wc.dialog_bg);
|
setBackgroundColor (wc.dialog_bg);
|
||||||
|
|
||||||
vbar = new FScrollbar(fc::vertical, this);
|
try
|
||||||
vbar->setMinimum(0);
|
{
|
||||||
vbar->setValue(0);
|
vbar = new FScrollbar(fc::vertical, this);
|
||||||
vbar->hide();
|
vbar->setMinimum(0);
|
||||||
|
vbar->setValue(0);
|
||||||
|
vbar->hide();
|
||||||
|
|
||||||
hbar = new FScrollbar(fc::horizontal, this);
|
hbar = new FScrollbar(fc::horizontal, this);
|
||||||
hbar->setMinimum(0);
|
hbar->setMinimum(0);
|
||||||
hbar->setValue(0);
|
hbar->setValue(0);
|
||||||
hbar->hide();
|
hbar->hide();
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
setGeometry (1, 1, 5, 4, false); // initialize geometry values
|
setGeometry (1, 1, 5, 4, false); // initialize geometry values
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,16 @@ FMenu::FMenu (const FString& txt, FWidget* parent)
|
||||||
, mouse_down(false)
|
, mouse_down(false)
|
||||||
, has_checkable_items(false)
|
, has_checkable_items(false)
|
||||||
{
|
{
|
||||||
item = new FMenuItem(txt, parent);
|
try
|
||||||
|
{
|
||||||
|
item = new FMenuItem(txt, parent);
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
init(parent);
|
init(parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -582,11 +591,20 @@ void FMenu::onMouseMove (FMouseEvent* ev)
|
||||||
const FPoint& t = ev->getTermPos();
|
const FPoint& t = ev->getTermPos();
|
||||||
const FPoint& p = open_sub_menu->termToWidgetPos(t);
|
const FPoint& p = open_sub_menu->termToWidgetPos(t);
|
||||||
int b = ev->getButton();
|
int b = ev->getButton();
|
||||||
FMouseEvent* _ev = new FMouseEvent (fc::MouseMove_Event, p, t, b);
|
|
||||||
open_sub_menu->mouse_down = true;
|
try
|
||||||
setClickedWidget(open_sub_menu);
|
{
|
||||||
open_sub_menu->onMouseMove(_ev);
|
FMouseEvent* _ev = new FMouseEvent (fc::MouseMove_Event, p, t, b);
|
||||||
delete _ev;
|
open_sub_menu->mouse_down = true;
|
||||||
|
setClickedWidget(open_sub_menu);
|
||||||
|
open_sub_menu->onMouseMove(_ev);
|
||||||
|
delete _ev;
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if ( ! mouse_over_menu && mouse_over_supermenu )
|
else if ( ! mouse_over_menu && mouse_over_supermenu )
|
||||||
|
@ -595,11 +613,20 @@ void FMenu::onMouseMove (FMouseEvent* ev)
|
||||||
const FPoint& t = ev->getTermPos();
|
const FPoint& t = ev->getTermPos();
|
||||||
const FPoint& p = smenu->termToWidgetPos(t);
|
const FPoint& p = smenu->termToWidgetPos(t);
|
||||||
int b = ev->getButton();
|
int b = ev->getButton();
|
||||||
FMouseEvent* _ev = new FMouseEvent (fc::MouseMove_Event, p, t, b);
|
|
||||||
smenu->mouse_down = true;
|
try
|
||||||
setClickedWidget(smenu);
|
{
|
||||||
smenu->onMouseMove(_ev);
|
FMouseEvent* _ev = new FMouseEvent (fc::MouseMove_Event, p, t, b);
|
||||||
delete _ev;
|
smenu->mouse_down = true;
|
||||||
|
setClickedWidget(smenu);
|
||||||
|
smenu->onMouseMove(_ev);
|
||||||
|
delete _ev;
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if ( mouse_over_menubar )
|
else if ( mouse_over_menubar )
|
||||||
|
@ -609,12 +636,21 @@ void FMenu::onMouseMove (FMouseEvent* ev)
|
||||||
const FPoint& t = ev->getTermPos();
|
const FPoint& t = ev->getTermPos();
|
||||||
const FPoint& p = menubar->termToWidgetPos(t);
|
const FPoint& p = menubar->termToWidgetPos(t);
|
||||||
int b = ev->getButton();
|
int b = ev->getButton();
|
||||||
FMouseEvent* _ev = new FMouseEvent (fc::MouseMove_Event, p, t, b);
|
|
||||||
setClickedWidget(menubar);
|
try
|
||||||
FMenuBar* mbar = reinterpret_cast<FMenuBar*>(menubar);
|
{
|
||||||
mbar->mouse_down = true;
|
FMouseEvent* _ev = new FMouseEvent (fc::MouseMove_Event, p, t, b);
|
||||||
mbar->onMouseMove(_ev);
|
setClickedWidget(menubar);
|
||||||
delete _ev;
|
FMenuBar* mbar = reinterpret_cast<FMenuBar*>(menubar);
|
||||||
|
mbar->mouse_down = true;
|
||||||
|
mbar->onMouseMove(_ev);
|
||||||
|
delete _ev;
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if ( ! hasSelectedItem() && mouse_over_menu )
|
else if ( ! hasSelectedItem() && mouse_over_menu )
|
||||||
|
@ -1307,7 +1343,17 @@ void FMenu::drawItems()
|
||||||
print (' ');
|
print (' ');
|
||||||
txt = (*iter)->getText();
|
txt = (*iter)->getText();
|
||||||
txt_length = uInt(txt.getLength());
|
txt_length = uInt(txt.getLength());
|
||||||
item_text = new wchar_t[txt_length+1]();
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
item_text = new wchar_t[txt_length+1]();
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
src = const_cast<wchar_t*>(txt.wc_str());
|
src = const_cast<wchar_t*>(txt.wc_str());
|
||||||
dest = const_cast<wchar_t*>(item_text);
|
dest = const_cast<wchar_t*>(item_text);
|
||||||
to_char = int(txt_length);
|
to_char = int(txt_length);
|
||||||
|
|
|
@ -43,7 +43,16 @@ void FMenuBar::hide()
|
||||||
if ( screenWidth < 0 )
|
if ( screenWidth < 0 )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
blank = new char[screenWidth+1];
|
try
|
||||||
|
{
|
||||||
|
blank = new char[screenWidth+1];
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
std::memset(blank, ' ', uLong(screenWidth));
|
std::memset(blank, ' ', uLong(screenWidth));
|
||||||
blank[screenWidth] = '\0';
|
blank[screenWidth] = '\0';
|
||||||
setPrintPos (1,1);
|
setPrintPos (1,1);
|
||||||
|
@ -408,11 +417,19 @@ void FMenuBar::onMouseMove (FMouseEvent* ev)
|
||||||
const FPoint& t = ev->getTermPos();
|
const FPoint& t = ev->getTermPos();
|
||||||
const FPoint& p = menu->termToWidgetPos(t);
|
const FPoint& p = menu->termToWidgetPos(t);
|
||||||
int b = ev->getButton();
|
int b = ev->getButton();
|
||||||
_ev = new FMouseEvent (fc::MouseMove_Event, p, t, b);
|
|
||||||
menu->mouse_down = true;
|
try
|
||||||
setClickedWidget(menu);
|
{
|
||||||
menu->onMouseMove(_ev);
|
_ev = new FMouseEvent (fc::MouseMove_Event, p, t, b);
|
||||||
delete _ev;
|
menu->mouse_down = true;
|
||||||
|
setClickedWidget(menu);
|
||||||
|
menu->onMouseMove(_ev);
|
||||||
|
delete _ev;
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -799,7 +816,17 @@ void FMenuBar::drawItems()
|
||||||
|
|
||||||
txt = (*iter)->getText();
|
txt = (*iter)->getText();
|
||||||
txt_length = uInt(txt.getLength());
|
txt_length = uInt(txt.getLength());
|
||||||
item_text = new wchar_t[txt_length+1]();
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
item_text = new wchar_t[txt_length+1]();
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
src = const_cast<wchar_t*>(txt.wc_str());
|
src = const_cast<wchar_t*>(txt.wc_str());
|
||||||
dest = const_cast<wchar_t*>(item_text);
|
dest = const_cast<wchar_t*>(item_text);
|
||||||
|
|
||||||
|
|
|
@ -333,9 +333,17 @@ void FMenuItem::onMouseDoubleClick (FMouseEvent* ev)
|
||||||
if ( smenu )
|
if ( smenu )
|
||||||
{
|
{
|
||||||
const FPoint& p2 = smenu->termToWidgetPos(t);
|
const FPoint& p2 = smenu->termToWidgetPos(t);
|
||||||
FMouseEvent* _ev = new FMouseEvent (fc::MouseDoubleClick_Event, p2, t, b);
|
|
||||||
smenu->onMouseDoubleClick(_ev);
|
try
|
||||||
delete _ev;
|
{
|
||||||
|
FMouseEvent* _ev = new FMouseEvent (fc::MouseDoubleClick_Event, p2, t, b);
|
||||||
|
smenu->onMouseDoubleClick(_ev);
|
||||||
|
delete _ev;
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -346,9 +354,17 @@ void FMenuItem::onMouseDoubleClick (FMouseEvent* ev)
|
||||||
if ( mbar )
|
if ( mbar )
|
||||||
{
|
{
|
||||||
const FPoint& p2 = mbar->termToWidgetPos(t);
|
const FPoint& p2 = mbar->termToWidgetPos(t);
|
||||||
FMouseEvent* _ev = new FMouseEvent (fc::MouseDoubleClick_Event, p2, t, b);
|
|
||||||
mbar->onMouseDoubleClick(_ev);
|
try
|
||||||
delete _ev;
|
{
|
||||||
|
FMouseEvent* _ev = new FMouseEvent (fc::MouseDoubleClick_Event, p2, t, b);
|
||||||
|
mbar->onMouseDoubleClick(_ev);
|
||||||
|
delete _ev;
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -359,9 +375,17 @@ void FMenuItem::onMouseDoubleClick (FMouseEvent* ev)
|
||||||
if ( dgl )
|
if ( dgl )
|
||||||
{
|
{
|
||||||
const FPoint& p2 = dgl->termToWidgetPos(t);
|
const FPoint& p2 = dgl->termToWidgetPos(t);
|
||||||
FMouseEvent* _ev = new FMouseEvent (fc::MouseDoubleClick_Event, p2, t, b);
|
|
||||||
dgl->onMouseDoubleClick(_ev);
|
try
|
||||||
delete _ev;
|
{
|
||||||
|
FMouseEvent* _ev = new FMouseEvent (fc::MouseDoubleClick_Event, p2, t, b);
|
||||||
|
dgl->onMouseDoubleClick(_ev);
|
||||||
|
delete _ev;
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -382,9 +406,17 @@ void FMenuItem::onMouseDown (FMouseEvent* ev)
|
||||||
if ( smenu )
|
if ( smenu )
|
||||||
{
|
{
|
||||||
const FPoint& p2 = smenu->termToWidgetPos(t);
|
const FPoint& p2 = smenu->termToWidgetPos(t);
|
||||||
FMouseEvent* _ev = new FMouseEvent (fc::MouseDown_Event, p2, t, b);
|
|
||||||
smenu->onMouseDown(_ev);
|
try
|
||||||
delete _ev;
|
{
|
||||||
|
FMouseEvent* _ev = new FMouseEvent (fc::MouseDown_Event, p2, t, b);
|
||||||
|
smenu->onMouseDown(_ev);
|
||||||
|
delete _ev;
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -395,9 +427,17 @@ void FMenuItem::onMouseDown (FMouseEvent* ev)
|
||||||
if ( mbar )
|
if ( mbar )
|
||||||
{
|
{
|
||||||
const FPoint& p2 = mbar->termToWidgetPos(t);
|
const FPoint& p2 = mbar->termToWidgetPos(t);
|
||||||
FMouseEvent* _ev = new FMouseEvent (fc::MouseDown_Event, p2, t, b);
|
|
||||||
mbar->onMouseDown(_ev);
|
try
|
||||||
delete _ev;
|
{
|
||||||
|
FMouseEvent* _ev = new FMouseEvent (fc::MouseDown_Event, p2, t, b);
|
||||||
|
mbar->onMouseDown(_ev);
|
||||||
|
delete _ev;
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -408,9 +448,17 @@ void FMenuItem::onMouseDown (FMouseEvent* ev)
|
||||||
if ( dgl )
|
if ( dgl )
|
||||||
{
|
{
|
||||||
const FPoint& p2 = dgl->termToWidgetPos(t);
|
const FPoint& p2 = dgl->termToWidgetPos(t);
|
||||||
FMouseEvent* _ev = new FMouseEvent (fc::MouseDown_Event, p2, t, b);
|
|
||||||
dgl->onMouseDown(_ev);
|
try
|
||||||
delete _ev;
|
{
|
||||||
|
FMouseEvent* _ev = new FMouseEvent (fc::MouseDown_Event, p2, t, b);
|
||||||
|
dgl->onMouseDown(_ev);
|
||||||
|
delete _ev;
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -734,11 +782,20 @@ void FMenuItem::createDialogList (FMenu* winmenu)
|
||||||
|
|
||||||
if ( win )
|
if ( win )
|
||||||
{
|
{
|
||||||
|
FMenuItem* win_item;
|
||||||
int n = int(std::distance(begin, iter));
|
int n = int(std::distance(begin, iter));
|
||||||
// get the dialog title
|
// get the dialog title
|
||||||
const FString& name = win->getText();
|
const FString& name = win->getText();
|
||||||
// create a new dialog list item
|
|
||||||
FMenuItem* win_item = new FMenuItem (name, winmenu);
|
try
|
||||||
|
{
|
||||||
|
// create a new dialog list item
|
||||||
|
win_item = new FMenuItem (name, winmenu);
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
if ( n < 9 )
|
if ( n < 9 )
|
||||||
win_item->addAccelerator (fc::Fmkey_1 + n); // Meta + 1..9
|
win_item->addAccelerator (fc::Fmkey_1 + n); // Meta + 1..9
|
||||||
|
|
|
@ -170,9 +170,20 @@ int FMessageBox::info ( FWidget* parent
|
||||||
, int button2 )
|
, int button2 )
|
||||||
{
|
{
|
||||||
int reply;
|
int reply;
|
||||||
FMessageBox* mbox = new FMessageBox ( caption, message
|
FMessageBox* mbox;
|
||||||
, button0, button1, button2
|
|
||||||
, parent );
|
try
|
||||||
|
{
|
||||||
|
mbox = new FMessageBox ( caption, message
|
||||||
|
, button0, button1, button2
|
||||||
|
, parent );
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return FDialog::Reject;
|
||||||
|
}
|
||||||
|
|
||||||
reply = mbox->exec();
|
reply = mbox->exec();
|
||||||
delete mbox;
|
delete mbox;
|
||||||
return reply;
|
return reply;
|
||||||
|
@ -187,10 +198,21 @@ int FMessageBox::info ( FWidget* parent
|
||||||
, int button2 )
|
, int button2 )
|
||||||
{
|
{
|
||||||
int reply;
|
int reply;
|
||||||
FMessageBox* mbox = new FMessageBox ( caption
|
FMessageBox* mbox;
|
||||||
, FString().setNumber(num)
|
|
||||||
, button0, button1, button2
|
try
|
||||||
, parent );
|
{
|
||||||
|
mbox = new FMessageBox ( caption
|
||||||
|
, FString().setNumber(num)
|
||||||
|
, button0, button1, button2
|
||||||
|
, parent );
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return FDialog::Reject;
|
||||||
|
}
|
||||||
|
|
||||||
reply = mbox->exec();
|
reply = mbox->exec();
|
||||||
delete mbox;
|
delete mbox;
|
||||||
return reply;
|
return reply;
|
||||||
|
@ -205,9 +227,20 @@ int FMessageBox::error ( FWidget* parent
|
||||||
{
|
{
|
||||||
int reply;
|
int reply;
|
||||||
const FString& caption = "Error message";
|
const FString& caption = "Error message";
|
||||||
FMessageBox* mbox = new FMessageBox ( caption, message
|
FMessageBox* mbox;
|
||||||
, button0, button1, button2
|
|
||||||
, parent );
|
try
|
||||||
|
{
|
||||||
|
mbox = new FMessageBox ( caption, message
|
||||||
|
, button0, button1, button2
|
||||||
|
, parent );
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return FDialog::Reject;
|
||||||
|
}
|
||||||
|
|
||||||
mbox->beep();
|
mbox->beep();
|
||||||
mbox->setHeadline("Warning:");
|
mbox->setHeadline("Warning:");
|
||||||
mbox->setCenterText();
|
mbox->setCenterText();
|
||||||
|
@ -278,29 +311,37 @@ void FMessageBox::init (int button0, int button1, int button2)
|
||||||
button_digit[1] = button1;
|
button_digit[1] = button1;
|
||||||
button_digit[2] = button2;
|
button_digit[2] = button2;
|
||||||
|
|
||||||
button[0] = new FButton (this);
|
try
|
||||||
button[0]->setText(button_text[button0]);
|
|
||||||
button[0]->setPos(3, getHeight()-4, false);
|
|
||||||
button[0]->setWidth(1, false);
|
|
||||||
button[0]->setHeight(1, false);
|
|
||||||
button[0]->setFocus();
|
|
||||||
|
|
||||||
if ( button1 > 0 )
|
|
||||||
{
|
{
|
||||||
button[1] = new FButton(this);
|
button[0] = new FButton (this);
|
||||||
button[1]->setText(button_text[button1]);
|
button[0]->setText(button_text[button0]);
|
||||||
button[1]->setPos(17, getHeight()-4, false);
|
button[0]->setPos(3, getHeight()-4, false);
|
||||||
button[1]->setWidth(0, false);
|
button[0]->setWidth(1, false);
|
||||||
button[1]->setHeight(1, false);
|
button[0]->setHeight(1, false);
|
||||||
|
button[0]->setFocus();
|
||||||
|
|
||||||
|
if ( button1 > 0 )
|
||||||
|
{
|
||||||
|
button[1] = new FButton(this);
|
||||||
|
button[1]->setText(button_text[button1]);
|
||||||
|
button[1]->setPos(17, getHeight()-4, false);
|
||||||
|
button[1]->setWidth(0, false);
|
||||||
|
button[1]->setHeight(1, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( button2 > 0 )
|
||||||
|
{
|
||||||
|
button[2] = new FButton(this);
|
||||||
|
button[2]->setText(button_text[button2]);
|
||||||
|
button[2]->setPos(32, getHeight()-4, false);
|
||||||
|
button[2]->setWidth(0, false);
|
||||||
|
button[2]->setHeight(1, false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
if ( button2 > 0 )
|
|
||||||
{
|
{
|
||||||
button[2] = new FButton(this);
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
button[2]->setText(button_text[button2]);
|
return;
|
||||||
button[2]->setPos(32, getHeight()-4, false);
|
|
||||||
button[2]->setWidth(0, false);
|
|
||||||
button[2]->setHeight(1, false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
resizeButtons();
|
resizeButtons();
|
||||||
|
|
|
@ -27,14 +27,34 @@ FObject::FObject (FObject* parent)
|
||||||
|
|
||||||
if ( parent == 0 )
|
if ( parent == 0 )
|
||||||
{
|
{
|
||||||
|
|
||||||
timer_modify_lock = false;
|
timer_modify_lock = false;
|
||||||
|
|
||||||
if ( ! timer_list )
|
if ( ! timer_list )
|
||||||
timer_list = new TimerList();
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
timer_list = new TimerList();
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ( ! fc::empty_string )
|
if ( ! fc::empty_string )
|
||||||
fc::empty_string = new FString("");
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
fc::empty_string = new FString("");
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
has_parent = true;
|
has_parent = true;
|
||||||
|
@ -176,7 +196,17 @@ int FObject::addTimer (int interval)
|
||||||
timer_modify_lock = true;
|
timer_modify_lock = true;
|
||||||
|
|
||||||
if ( ! timer_list )
|
if ( ! timer_list )
|
||||||
timer_list = new TimerList();
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
timer_list = new TimerList();
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// find an unused timer id
|
// find an unused timer id
|
||||||
if ( ! timer_list->empty() )
|
if ( ! timer_list->empty() )
|
||||||
|
|
|
@ -102,7 +102,16 @@ void FProgressbar::hide()
|
||||||
if ( size < 0 )
|
if ( size < 0 )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
blank = new char[size+1];
|
try
|
||||||
|
{
|
||||||
|
blank = new char[size+1];
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
std::memset(blank, ' ', uLong(size));
|
std::memset(blank, ' ', uLong(size));
|
||||||
blank[size] = '\0';
|
blank[size] = '\0';
|
||||||
|
|
||||||
|
|
|
@ -762,15 +762,23 @@ void FScrollView::init (FWidget* parent)
|
||||||
setForegroundColor (wc.dialog_fg);
|
setForegroundColor (wc.dialog_fg);
|
||||||
setBackgroundColor (wc.dialog_bg);
|
setBackgroundColor (wc.dialog_bg);
|
||||||
|
|
||||||
vbar = new FScrollbar(fc::vertical, this);
|
try
|
||||||
vbar->setMinimum(0);
|
{
|
||||||
vbar->setValue(0);
|
vbar = new FScrollbar(fc::vertical, this);
|
||||||
vbar->hide();
|
vbar->setMinimum(0);
|
||||||
|
vbar->setValue(0);
|
||||||
|
vbar->hide();
|
||||||
|
|
||||||
hbar = new FScrollbar(fc::horizontal, this);
|
hbar = new FScrollbar(fc::horizontal, this);
|
||||||
hbar->setMinimum(0);
|
hbar->setMinimum(0);
|
||||||
hbar->setValue(0);
|
hbar->setValue(0);
|
||||||
hbar->hide();
|
hbar->hide();
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
vbar->addCallback
|
vbar->addCallback
|
||||||
(
|
(
|
||||||
|
|
|
@ -184,7 +184,16 @@ void FStatusBar::hide()
|
||||||
if ( screenWidth < 0 )
|
if ( screenWidth < 0 )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
blank = new char[screenWidth+1];
|
try
|
||||||
|
{
|
||||||
|
blank = new char[screenWidth+1];
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
std::memset(blank, ' ', uLong(screenWidth));
|
std::memset(blank, ' ', uLong(screenWidth));
|
||||||
blank[screenWidth] = '\0';
|
blank[screenWidth] = '\0';
|
||||||
setPrintPos (1, 1);
|
setPrintPos (1, 1);
|
||||||
|
|
|
@ -528,7 +528,16 @@ FString& FString::sprintf (const char* format, ...)
|
||||||
|
|
||||||
if ( len >= int(sizeof(buf)) )
|
if ( len >= int(sizeof(buf)) )
|
||||||
{
|
{
|
||||||
buffer = new char[len+1]();
|
try
|
||||||
|
{
|
||||||
|
buffer = new char[len+1]();
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
|
return (*this);
|
||||||
|
}
|
||||||
|
|
||||||
va_start (args, format);
|
va_start (args, format);
|
||||||
vsnprintf (buffer, uLong(len+1), format, args);
|
vsnprintf (buffer, uLong(len+1), format, args);
|
||||||
va_end (args);
|
va_end (args);
|
||||||
|
@ -2216,8 +2225,16 @@ inline void FString::initLength (uInt len)
|
||||||
|
|
||||||
length = len;
|
length = len;
|
||||||
bufsize = FWDBUFFER + len + 1;
|
bufsize = FWDBUFFER + len + 1;
|
||||||
string = new wchar_t[bufsize]();
|
|
||||||
std::wmemset (string, L'\0', bufsize);
|
try
|
||||||
|
{
|
||||||
|
string = new wchar_t[bufsize]();
|
||||||
|
std::wmemset (string, L'\0', bufsize);
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << bad_alloc_str << ex.what() << std::endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
|
|
@ -900,13 +900,24 @@ const FString* FTerm::getXTermFont()
|
||||||
{
|
{
|
||||||
if ( std::scanf("\033]50;%[^\n]s", temp) == 1 )
|
if ( std::scanf("\033]50;%[^\n]s", temp) == 1 )
|
||||||
{
|
{
|
||||||
|
FString* xtermfont;
|
||||||
std::size_t n = std::strlen(temp);
|
std::size_t n = std::strlen(temp);
|
||||||
|
|
||||||
// BEL + '\0' = string terminator
|
// BEL + '\0' = string terminator
|
||||||
if ( n >= 5 && temp[n-1] == BEL[0] && temp[n] == '\0' )
|
if ( n >= 5 && temp[n-1] == BEL[0] && temp[n] == '\0' )
|
||||||
temp[n-1] = '\0';
|
temp[n-1] = '\0';
|
||||||
|
|
||||||
return new FString(temp);
|
try
|
||||||
|
{
|
||||||
|
xtermfont = new FString(temp);
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return xtermfont;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -942,11 +953,24 @@ const FString* FTerm::getXTermTitle()
|
||||||
// Esc + \ = OSC string terminator
|
// Esc + \ = OSC string terminator
|
||||||
if ( n >= 2 && temp[n-2] == ESC[0] && temp[n-1] == '\\' )
|
if ( n >= 2 && temp[n-2] == ESC[0] && temp[n-1] == '\\' )
|
||||||
{
|
{
|
||||||
|
FString* xtermtitle;
|
||||||
|
|
||||||
if ( n < 4 )
|
if ( n < 4 )
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
temp[n-2] = '\0';
|
temp[n-2] = '\0';
|
||||||
return new FString(temp);
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
xtermtitle = new FString(temp);
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return xtermtitle;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2180,7 +2204,15 @@ int FTerm::getScreenFont()
|
||||||
font.height = 32;
|
font.height = 32;
|
||||||
font.charcount = 512;
|
font.charcount = 512;
|
||||||
// initialize with 0
|
// initialize with 0
|
||||||
font.data = new uChar[data_size]();
|
try
|
||||||
|
{
|
||||||
|
font.data = new uChar[data_size]();
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
// font operation
|
// font operation
|
||||||
ret = ioctl (fd_tty, KDFONTOP, &font);
|
ret = ioctl (fd_tty, KDFONTOP, &font);
|
||||||
|
@ -2619,9 +2651,17 @@ char* FTerm::parseAnswerbackMsg (char*& current_termtype)
|
||||||
char* new_termtype = current_termtype;
|
char* new_termtype = current_termtype;
|
||||||
|
|
||||||
// send ENQ and read the answerback message
|
// send ENQ and read the answerback message
|
||||||
answer_back = new FString(getAnswerbackMsg());
|
try
|
||||||
|
{
|
||||||
|
answer_back = new FString(getAnswerbackMsg());
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if ( answer_back && *answer_back == FString("PuTTY") )
|
if ( *answer_back == FString("PuTTY") )
|
||||||
{
|
{
|
||||||
putty_terminal = true;
|
putty_terminal = true;
|
||||||
|
|
||||||
|
@ -2662,10 +2702,10 @@ char* FTerm::parseSecDA (char*& current_termtype)
|
||||||
// secondary device attributes (SEC_DA) <- decTerminalID string
|
// secondary device attributes (SEC_DA) <- decTerminalID string
|
||||||
sec_da = new FString(getSecDA());
|
sec_da = new FString(getSecDA());
|
||||||
}
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
catch (const std::bad_alloc&)
|
|
||||||
{
|
{
|
||||||
return new_termtype;
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return new_termtype;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( sec_da->getLength() > 5 )
|
if ( sec_da->getLength() > 5 )
|
||||||
|
@ -3579,14 +3619,22 @@ void FTerm::init()
|
||||||
char* new_termtype = 0;
|
char* new_termtype = 0;
|
||||||
term_initialized = true;
|
term_initialized = true;
|
||||||
init_term_object = this;
|
init_term_object = this;
|
||||||
fd_tty = -1;
|
fd_tty = -1;
|
||||||
opti_move = new FOptiMove();
|
|
||||||
opti_attr = new FOptiAttr();
|
|
||||||
term = new FRect(0,0,0,0);
|
|
||||||
mouse = new FPoint(0,0);
|
|
||||||
|
|
||||||
vt100_alt_char = new std::map<uChar,uChar>;
|
try
|
||||||
encoding_set = new std::map<std::string,fc::encoding>;
|
{
|
||||||
|
opti_move = new FOptiMove();
|
||||||
|
opti_attr = new FOptiAttr();
|
||||||
|
term = new FRect(0,0,0,0);
|
||||||
|
mouse = new FPoint(0,0);
|
||||||
|
vt100_alt_char = new std::map<uChar,uChar>;
|
||||||
|
encoding_set = new std::map<std::string,fc::encoding>;
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
std::abort();
|
||||||
|
}
|
||||||
|
|
||||||
// Define the encoding set
|
// Define the encoding set
|
||||||
(*encoding_set)["UTF8"] = fc::UTF8;
|
(*encoding_set)["UTF8"] = fc::UTF8;
|
||||||
|
|
|
@ -52,7 +52,16 @@ int FTermBuffer::writef (const char* format, ...)
|
||||||
|
|
||||||
if ( len >= int(sizeof(buf)) )
|
if ( len >= int(sizeof(buf)) )
|
||||||
{
|
{
|
||||||
buffer = new char[len+1]();
|
try
|
||||||
|
{
|
||||||
|
buffer = new char[len+1]();
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
va_start (args, format);
|
va_start (args, format);
|
||||||
vsnprintf (buffer, uLong(len+1), format, args);
|
vsnprintf (buffer, uLong(len+1), format, args);
|
||||||
va_end (args);
|
va_end (args);
|
||||||
|
|
|
@ -150,7 +150,16 @@ void FTextView::hide()
|
||||||
if ( size < 0 )
|
if ( size < 0 )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
blank = new char[size+1];
|
try
|
||||||
|
{
|
||||||
|
blank = new char[size+1];
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
std::memset(blank, ' ', uLong(size));
|
std::memset(blank, ' ', uLong(size));
|
||||||
blank[size] = '\0';
|
blank[size] = '\0';
|
||||||
|
|
||||||
|
@ -276,7 +285,16 @@ void FTextView::clear()
|
||||||
if ( size < 0 )
|
if ( size < 0 )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
blank = new char[size+1];
|
try
|
||||||
|
{
|
||||||
|
blank = new char[size+1];
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
std::memset(blank, ' ', uLong(size));
|
std::memset(blank, ' ', uLong(size));
|
||||||
blank[size] = '\0';
|
blank[size] = '\0';
|
||||||
|
|
||||||
|
@ -419,9 +437,17 @@ void FTextView::onMouseDown (FMouseEvent* ev)
|
||||||
const FPoint& tp = ev->getTermPos();
|
const FPoint& tp = ev->getTermPos();
|
||||||
const FPoint& p = parent->termToWidgetPos(tp);
|
const FPoint& p = parent->termToWidgetPos(tp);
|
||||||
parent->setFocus();
|
parent->setFocus();
|
||||||
FMouseEvent* _ev = new FMouseEvent (fc::MouseDown_Event, p, tp, b);
|
|
||||||
FApplication::sendEvent (parent, _ev);
|
try
|
||||||
delete _ev;
|
{
|
||||||
|
FMouseEvent* _ev = new FMouseEvent (fc::MouseDown_Event, p, tp, b);
|
||||||
|
FApplication::sendEvent (parent, _ev);
|
||||||
|
delete _ev;
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -441,9 +467,17 @@ void FTextView::onMouseUp (FMouseEvent* ev)
|
||||||
const FPoint& tp = ev->getTermPos();
|
const FPoint& tp = ev->getTermPos();
|
||||||
const FPoint& p = parent->termToWidgetPos(tp);
|
const FPoint& p = parent->termToWidgetPos(tp);
|
||||||
parent->setFocus();
|
parent->setFocus();
|
||||||
FMouseEvent* _ev = new FMouseEvent (fc::MouseUp_Event, p, tp, b);
|
|
||||||
FApplication::sendEvent (parent, _ev);
|
try
|
||||||
delete _ev;
|
{
|
||||||
|
FMouseEvent* _ev = new FMouseEvent (fc::MouseUp_Event, p, tp, b);
|
||||||
|
FApplication::sendEvent (parent, _ev);
|
||||||
|
delete _ev;
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( vbar->isVisible() )
|
if ( vbar->isVisible() )
|
||||||
|
@ -469,9 +503,17 @@ void FTextView::onMouseMove (FMouseEvent* ev)
|
||||||
const FPoint& tp = ev->getTermPos();
|
const FPoint& tp = ev->getTermPos();
|
||||||
const FPoint& p = parent->termToWidgetPos(tp);
|
const FPoint& p = parent->termToWidgetPos(tp);
|
||||||
parent->setFocus();
|
parent->setFocus();
|
||||||
FMouseEvent* _ev = new FMouseEvent (fc::MouseMove_Event, p, tp, b);
|
|
||||||
FApplication::sendEvent (parent, _ev);
|
try
|
||||||
delete _ev;
|
{
|
||||||
|
FMouseEvent* _ev = new FMouseEvent (fc::MouseMove_Event, p, tp, b);
|
||||||
|
FApplication::sendEvent (parent, _ev);
|
||||||
|
delete _ev;
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -604,15 +646,23 @@ void FTextView::init()
|
||||||
setForegroundColor (wc.dialog_fg);
|
setForegroundColor (wc.dialog_fg);
|
||||||
setBackgroundColor (wc.dialog_bg);
|
setBackgroundColor (wc.dialog_bg);
|
||||||
|
|
||||||
vbar = new FScrollbar(fc::vertical, this);
|
try
|
||||||
vbar->setMinimum(0);
|
{
|
||||||
vbar->setValue(0);
|
vbar = new FScrollbar(fc::vertical, this);
|
||||||
vbar->hide();
|
vbar->setMinimum(0);
|
||||||
|
vbar->setValue(0);
|
||||||
|
vbar->hide();
|
||||||
|
|
||||||
hbar = new FScrollbar(fc::horizontal, this);
|
hbar = new FScrollbar(fc::horizontal, this);
|
||||||
hbar->setMinimum(0);
|
hbar->setMinimum(0);
|
||||||
hbar->setValue(0);
|
hbar->setValue(0);
|
||||||
hbar->hide();
|
hbar->hide();
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
vbar->addCallback
|
vbar->addCallback
|
||||||
(
|
(
|
||||||
|
|
|
@ -217,7 +217,16 @@ void FToggleButton::hide()
|
||||||
if ( size < 0 )
|
if ( size < 0 )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
blank = new char[size+1];
|
try
|
||||||
|
{
|
||||||
|
blank = new char[size+1];
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
std::memset(blank, ' ', uLong(size));
|
std::memset(blank, ' ', uLong(size));
|
||||||
blank[size] = '\0';
|
blank[size] = '\0';
|
||||||
setPrintPos (1, 1);
|
setPrintPos (1, 1);
|
||||||
|
@ -485,7 +494,16 @@ void FToggleButton::drawLabel()
|
||||||
length = text.getLength();
|
length = text.getLength();
|
||||||
hotkeypos = -1;
|
hotkeypos = -1;
|
||||||
|
|
||||||
LabelText = new wchar_t[length+1]();
|
try
|
||||||
|
{
|
||||||
|
LabelText = new wchar_t[length+1]();
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
txt = text;
|
txt = text;
|
||||||
src = const_cast<wchar_t*>(txt.wc_str());
|
src = const_cast<wchar_t*>(txt.wc_str());
|
||||||
dest = const_cast<wchar_t*>(LabelText);
|
dest = const_cast<wchar_t*>(LabelText);
|
||||||
|
|
|
@ -317,7 +317,15 @@ int FVTerm::printf (const char* format, ...)
|
||||||
|
|
||||||
if ( len >= int(sizeof(buf)) )
|
if ( len >= int(sizeof(buf)) )
|
||||||
{
|
{
|
||||||
buffer = new char[len+1]();
|
try
|
||||||
|
{
|
||||||
|
buffer = new char[len+1]();
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
va_start (args, format);
|
va_start (args, format);
|
||||||
vsnprintf (buffer, uLong(len+1), format, args);
|
vsnprintf (buffer, uLong(len+1), format, args);
|
||||||
va_end (args);
|
va_end (args);
|
||||||
|
@ -903,7 +911,16 @@ void FVTerm::createArea ( int offset_left, int offset_top
|
||||||
{
|
{
|
||||||
// initialize virtual window
|
// initialize virtual window
|
||||||
|
|
||||||
area = new term_area;
|
try
|
||||||
|
{
|
||||||
|
area = new term_area;
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
area->widget = static_cast<FWidget*>(this);
|
area->widget = static_cast<FWidget*>(this);
|
||||||
resizeArea (offset_left, offset_top, width, height, rsw, bsh, area);
|
resizeArea (offset_left, offset_top, width, height, rsw, bsh, area);
|
||||||
}
|
}
|
||||||
|
@ -966,15 +983,31 @@ void FVTerm::resizeArea ( int offset_left, int offset_top
|
||||||
if ( area->text != 0 )
|
if ( area->text != 0 )
|
||||||
delete[] area->text;
|
delete[] area->text;
|
||||||
|
|
||||||
area->changes = new line_changes[height + bsh];
|
try
|
||||||
area->text = new char_data[area_size];
|
{
|
||||||
|
area->changes = new line_changes[height + bsh];
|
||||||
|
area->text = new char_data[area_size];
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if ( area->width + area->right_shadow != width + rsw )
|
else if ( area->width + area->right_shadow != width + rsw )
|
||||||
{
|
{
|
||||||
if ( area->text != 0 )
|
if ( area->text != 0 )
|
||||||
delete[] area->text;
|
delete[] area->text;
|
||||||
|
|
||||||
area->text = new char_data[area_size];
|
try
|
||||||
|
{
|
||||||
|
area->text = new char_data[area_size];
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return;
|
return;
|
||||||
|
@ -2221,8 +2254,17 @@ void FVTerm::init()
|
||||||
init_object = this;
|
init_object = this;
|
||||||
vterm = 0;
|
vterm = 0;
|
||||||
vdesktop = 0;
|
vdesktop = 0;
|
||||||
term_pos = new FPoint(-1,-1);
|
|
||||||
output_buffer = new std::queue<int>;
|
try
|
||||||
|
{
|
||||||
|
term_pos = new FPoint(-1,-1);
|
||||||
|
output_buffer = new std::queue<int>;
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
std::abort();
|
||||||
|
}
|
||||||
|
|
||||||
// Preset to false
|
// Preset to false
|
||||||
hidden_cursor = \
|
hidden_cursor = \
|
||||||
|
|
|
@ -2276,10 +2276,19 @@ void FWidget::onClose (FCloseEvent* ev)
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FWidget::init()
|
void FWidget::init()
|
||||||
{
|
{
|
||||||
window_list = new widgetList();
|
try
|
||||||
dialog_list = new widgetList();
|
{
|
||||||
always_on_top_list = new widgetList();
|
// Initialize widget lists
|
||||||
close_widget = new widgetList();
|
window_list = new widgetList();
|
||||||
|
dialog_list = new widgetList();
|
||||||
|
always_on_top_list = new widgetList();
|
||||||
|
close_widget = new widgetList();
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
char* cursor_off_str = disableCursor();
|
char* cursor_off_str = disableCursor();
|
||||||
|
|
||||||
|
@ -2290,7 +2299,7 @@ void FWidget::init()
|
||||||
|
|
||||||
visible_cursor = ! hideable;
|
visible_cursor = ! hideable;
|
||||||
|
|
||||||
// determine width and height of the terminal
|
// Determine width and height of the terminal
|
||||||
detectTermSize();
|
detectTermSize();
|
||||||
wsize.setRect(1, 1, getColumnNumber(), getLineNumber());
|
wsize.setRect(1, 1, getColumnNumber(), getLineNumber());
|
||||||
adjust_wsize = wsize;
|
adjust_wsize = wsize;
|
||||||
|
@ -2309,7 +2318,14 @@ void FWidget::init()
|
||||||
background_color = wc.term_bg;
|
background_color = wc.term_bg;
|
||||||
init_desktop = false;
|
init_desktop = false;
|
||||||
|
|
||||||
accelerator_list = new Accelerators();
|
try
|
||||||
|
{
|
||||||
|
accelerator_list = new Accelerators();
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
|
Loading…
Reference in New Issue