Initial commit
This commit is contained in:
96
unix/tx/TXDialog.h
Normal file
96
unix/tx/TXDialog.h
Normal file
@@ -0,0 +1,96 @@
|
||||
/* 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.
|
||||
*/
|
||||
//
|
||||
// TXDialog.h
|
||||
//
|
||||
// A TXDialog is a pop-up dialog window. The dialog can be made visible by
|
||||
// calling its show() method. Dialogs can be modal or non-modal. For a modal
|
||||
// dialog box, the show() method only returns when the dialog box has been
|
||||
// dismissed. For a non-modal dialog box, the show() method returns
|
||||
// immediately.
|
||||
//
|
||||
|
||||
#ifndef __TXDIALOG_H__
|
||||
#define __TXDIALOG_H__
|
||||
|
||||
#include "TXWindow.h"
|
||||
#include <errno.h>
|
||||
|
||||
class TXDialog : public TXWindow, public TXDeleteWindowCallback {
|
||||
public:
|
||||
TXDialog(Display* dpy, int width, int height, const char* name,
|
||||
bool modal_=false)
|
||||
: TXWindow(dpy, width, height), done(false), ok(false), modal(modal_)
|
||||
{
|
||||
toplevel(name, this);
|
||||
resize(width, height);
|
||||
}
|
||||
|
||||
virtual ~TXDialog() {}
|
||||
|
||||
// show() makes the dialog visible. For a modal dialog box, this processes X
|
||||
// events until the done flag has been set, after which it returns the value
|
||||
// of the ok flag. For a non-modal dialog box it always returns true
|
||||
// immediately.
|
||||
bool show() {
|
||||
ok = false;
|
||||
done = false;
|
||||
initDialog();
|
||||
raise();
|
||||
map();
|
||||
if (modal) {
|
||||
while (true) {
|
||||
TXWindow::handleXEvents(dpy);
|
||||
if (done) {
|
||||
return ok;
|
||||
}
|
||||
fd_set rfds;
|
||||
FD_ZERO(&rfds);
|
||||
FD_SET(ConnectionNumber(dpy), &rfds);
|
||||
int n = select(FD_SETSIZE, &rfds, 0, 0, 0);
|
||||
if (n < 0) throw rdr::SystemException("select",errno);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// initDialog() can be overridden in a derived class. Typically it is used
|
||||
// to make sure that checkboxes have the right state, etc.
|
||||
virtual void initDialog() {}
|
||||
|
||||
// resize() is overridden here to re-center the dialog
|
||||
void resize(int w, int h) {
|
||||
TXWindow::resize(w,h);
|
||||
int dpyWidth = WidthOfScreen(DefaultScreenOfDisplay(dpy));
|
||||
int dpyHeight = HeightOfScreen(DefaultScreenOfDisplay(dpy));
|
||||
setUSPosition((dpyWidth - width() - 10) / 2, (dpyHeight - height() - 30) / 2);
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void deleteWindow(TXWindow* w) {
|
||||
ok = false;
|
||||
done = true;
|
||||
unmap();
|
||||
}
|
||||
|
||||
bool done;
|
||||
bool ok;
|
||||
bool modal;
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user