summaryrefslogtreecommitdiff
path: root/sigalatvision/lib/msgbox.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sigalatvision/lib/msgbox.cc')
-rw-r--r--sigalatvision/lib/msgbox.cc180
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;
+}