| /* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved. |
| * |
| * This is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License as published by |
| * the Free Software Foundation; either version 2 of the License, or |
| * (at your option) any later version. |
| * |
| * This software is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU General Public License for more details. |
| * |
| * You should have received a copy of the GNU General Public License |
| * along with this software; if not, write to the Free Software |
| * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
| * USA. |
| */ |
| // |
| // TXMsgBox.h |
| // |
| // A TXMsgBox is a specialised pop-up dialog window, designed to present |
| // the user with a small amount of textual information, and potentially to |
| // obtain their response. |
| // TXMsgBoxes are always modal, and may have an Ok button, Ok+Cancel buttons, |
| // or Yes+No buttons. |
| // The MsgBox helper function creates a TXMsgBox on the fly, runs it, and |
| // returns the result. |
| // |
| |
| #ifndef __TXMSGBOX_H__ |
| #define __TXMSGBOX_H__ |
| |
| #include "TXDialog.h" |
| #include "TXLabel.h" |
| #include "TXButton.h" |
| |
| enum TXMsgBoxFlags { |
| MB_OK = 0, |
| MB_OKCANCEL = 1, |
| MB_YESNO = 4, |
| MB_ICONERROR = 0x10, |
| MB_ICONQUESTION = 0x20, |
| MB_ICONWARNING = 0x30, |
| MB_ICONINFORMATION = 0x40, |
| MB_DEFBUTTON1 = 0, |
| MB_DEFBUTTON2 = 0x100 |
| }; |
| |
| class TXMsgBox : public TXDialog, public TXButtonCallback { |
| public: |
| TXMsgBox(Display* dpy, const char* text, unsigned int flags, const char* title=0) |
| : TXDialog(dpy, 1, 1, "Message", true), |
| textLabel(dpy, "", this), |
| okButton(dpy, "OK", this, this, 60), |
| cancelButton(dpy, "Cancel", this, this, 60) |
| { |
| textLabel.xPad = 8; |
| textLabel.move(0, yPad*4); |
| textLabel.setText(text); |
| resize(textLabel.width(), |
| textLabel.height() + okButton.height() + yPad*12); |
| |
| switch (flags & 0x30) { |
| case MB_ICONERROR: |
| toplevel("Error", this); break; |
| case MB_ICONQUESTION: |
| toplevel("Question", this); break; |
| case MB_ICONWARNING: |
| toplevel("Warning", this); break; |
| case MB_ICONINFORMATION: |
| toplevel("Information", this); break; |
| default: |
| if (title) |
| toplevel(title, this); |
| break; |
| }; |
| |
| switch (flags & 0x7) { |
| default: |
| okButton.move((width() - okButton.width()) / 2, |
| height() - yPad*4 - okButton.height()); |
| cancelButton.unmap(); |
| break; |
| case MB_OKCANCEL: |
| case MB_YESNO: |
| |
| okButton.move(((width()/2) - okButton.width()) / 2, |
| height() - yPad*4 - okButton.height()); |
| cancelButton.move(((width()*3/2) - cancelButton.width()) / 2, |
| height() - yPad*4 - cancelButton.height()); |
| if ((flags & 0x7) == MB_YESNO) { |
| okButton.setText("Yes"); |
| cancelButton.setText("No"); |
| } |
| break; |
| }; |
| |
| setBorderWidth(1); |
| } |
| |
| virtual void buttonActivate(TXButton* b) { |
| ok = (b == &okButton); |
| done = true; |
| unmap(); |
| } |
| |
| TXLabel textLabel; |
| TXButton okButton; |
| TXButton cancelButton; |
| }; |
| |
| #endif |