diff options
Diffstat (limited to 'sigalatvision/lib/msgbox.cc')
-rw-r--r-- | sigalatvision/lib/msgbox.cc | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/sigalatvision/lib/msgbox.cc b/sigalatvision/lib/msgbox.cc new file mode 100644 index 0000000..db5aa02 --- /dev/null +++ b/sigalatvision/lib/msgbox.cc @@ -0,0 +1,180 @@ +/* + * msgbox.cc + * + * Turbo Vision - Version 2.0 + * + * Copyright (c) 1994 by Borland International + * All Rights Reserved. + * + * Modified by Sergio Sigala <sergio@sigala.it> + */ + +#define Uses_MsgBox +#define Uses_TObject +#define Uses_TDialog +#define Uses_TStaticText +#define Uses_TRect +#define Uses_TButton +#define Uses_TProgram +#define Uses_TInputLine +#define Uses_TDeskTop +#define Uses_TLabel +#include <tvision/tv.h> + +#include <stdarg.h> +#include <stdio.h> +#include <string.h> + +static const char *buttonName[] = +{ + MsgBoxText::yesText, + MsgBoxText::noText, + MsgBoxText::okText, + MsgBoxText::cancelText +}; + +static ushort commands[] = +{ + cmYes, + cmNo, + cmOK, + cmCancel +}; + +static const char *Titles[] = +{ + MsgBoxText::warningText, + MsgBoxText::errorText, + MsgBoxText::informationText, + MsgBoxText::confirmText +}; + +ushort messageBoxRect( const TRect &r, const char *msg, ushort aOptions ) +{ + TDialog *dialog; + short i, x, buttonCount; + TView* buttonList[5]; + ushort ccode; + + dialog = new TDialog( r, Titles[aOptions & 0x3] ); + + dialog->insert( + new TStaticText(TRect(3, 2, dialog->size.x - 2, dialog->size.y - 3), + msg) ); + + for( i = 0, x = -2, buttonCount = 0; i < 4; i++ ) + { + if( (aOptions & (0x0100 << i)) != 0) + { + buttonList[buttonCount] = + new TButton( TRect(0, 0, 10, 2), buttonName[i], commands[i], bfNormal ); + x += buttonList[buttonCount++]->size.x + 2; + } + } + + x = (dialog->size.x - x) / 2; + + for( i = 0; i < buttonCount; i++ ) + { + dialog->insert(buttonList[i]); + buttonList[i]->moveTo(x, dialog->size.y - 3); + x += buttonList[i]->size.x + 2; + } + + dialog->selectNext(False); + + ccode = TProgram::application->execView(dialog); + + TObject::destroy( dialog ); + + return ccode; +} + +ushort messageBoxRect( const TRect &r, + ushort aOptions, + const char *fmt, + ... ) +{ + va_list argptr; + va_start( argptr, fmt ); + + char msg[256]; + vsprintf( msg, fmt, argptr ); + + va_end( argptr ); + + return messageBoxRect( r, msg, aOptions ); +} + +static TRect makeRect() +{ + TRect r( 0, 0, 40, 9 ); + r.move((TProgram::deskTop->size.x - r.b.x) / 2, + (TProgram::deskTop->size.y - r.b.y) / 2); + return r; +} + +ushort messageBox( const char *msg, ushort aOptions ) +{ + return messageBoxRect( makeRect(), msg, aOptions ); +} + +ushort messageBox( unsigned aOptions, const char *fmt, ... ) +{ + va_list argptr; + va_start( argptr, fmt ); + + char msg[256]; + vsprintf( msg, fmt, argptr ); + + va_end( argptr ); + + return messageBoxRect( makeRect(), msg, aOptions ); +} + +ushort inputBox( const char *Title, const char *aLabel, char *s, uchar limit ) +{ + TRect r(0, 0, 60, 8); + r.move((TProgram::deskTop->size.x - r.b.x) / 2, + (TProgram::deskTop->size.y - r.b.y) / 2); + return inputBoxRect(r, Title, aLabel, s, limit); +} + +ushort inputBoxRect( const TRect &bounds, + const char *Title, + const char *aLabel, + char *s, + uchar limit ) +{ + TDialog *dialog; + TView* control; + TRect r; + ushort c; + + dialog = new TDialog(bounds, Title); + + r = TRect( 4 + strlen(aLabel), 2, dialog->size.x - 3, 3 ); + control = new TInputLine( r, limit ); + dialog->insert( control ); + + r = TRect(2, 2, 3 + strlen(aLabel), 3); + dialog->insert( new TLabel( r, aLabel, control ) ); + + r = TRect( dialog->size.x - 24, dialog->size.y - 4, + dialog->size.x - 14, dialog->size.y - 2); + dialog->insert( new TButton(r, MsgBoxText::okText, cmOK, bfDefault)); + + r.a.x += 12; + r.b.x += 12; + dialog->insert( new TButton(r, MsgBoxText::cancelText, cmCancel, bfNormal)); + + r.a.x += 12; + r.b.x += 12; + dialog->selectNext(False); + dialog->setData(s); + c = TProgram::application->execView(dialog); + if( c != cmCancel ) + dialog->getData(s); + TObject::destroy( dialog ); + return c; +} |