/* 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. */ // // OptionsDialog.h // #ifndef __OPTIONSDIALOG_H__ #define __OPTIONSDIALOG_H__ #include "TXDialog.h" #include "TXLabel.h" #include "TXEntry.h" #include "TXButton.h" #include "TXCheckbox.h" #include "parameters.h" class OptionsDialogCallback { public: virtual void setOptions() = 0; virtual void getOptions() = 0; }; class OptionsDialog : public TXDialog, public TXButtonCallback, public TXCheckboxCallback, public TXEntryCallback { public: OptionsDialog(Display* dpy, OptionsDialogCallback* cb_) : TXDialog(dpy, 400, 450, _("VNC Viewer: Connection Options")), cb(cb_), formatAndEnc(dpy, _("Encoding and Color Level:"), this), inputs(dpy, _("Inputs:"), this), misc(dpy, _("Misc:"), this), autoSelect(dpy, _("Auto select"), this, false, this), fullColour(dpy, _("Full (all available colors)"), this, true, this), mediumColour(dpy, _("Medium (256 colors)"), this, true, this), lowColour(dpy, _("Low (64 colors)"), this, true, this), veryLowColour(dpy, _("Very low (8 colors)"), this, true, this), tight(dpy, "Tight", this, true, this), zrle(dpy, "ZRLE", this, true, this), hextile(dpy, "Hextile", this, true, this), raw(dpy, "Raw", this, true, this), customCompressLevel(dpy, _("Custom compression level:"), this, false, this), compressLevel(dpy, this, this, false, 30), compressLevelLabel(dpy, _("level (1=fast, 9=best)"), this), noJpeg(dpy, _("Allow JPEG compression:"), this, false, this), qualityLevel(dpy, this, this, false, 30), qualityLevelLabel(dpy, _("quality (1=poor, 9=best)"), this), viewOnly(dpy, _("View only (ignore mouse & keyboard)"), this, false, this), acceptClipboard(dpy, _("Accept clipboard from server"), this, false, this), sendClipboard(dpy, _("Send clipboard to server"), this, false, this), sendPrimary(dpy, _("Send primary selection & cut buffer as clipboard"), this, false, this), shared(dpy, _("Shared (don't disconnect other viewers)"), this, false,this), fullScreen(dpy, _("Full-screen mode"), this, false, this), useLocalCursor(dpy, _("Render cursor locally"), this, false, this), dotWhenNoCursor(dpy, _("Show dot when no cursor"), this, false, this), okButton(dpy, _("OK"), this, this, 60), cancelButton(dpy, _("Cancel"), this, this, 60) { int y = yPad; formatAndEnc.move(xPad, y); y += formatAndEnc.height(); autoSelect.move(xPad, y); int x2 = xPad + autoSelect.width() + xPad*5; y += autoSelect.height(); tight.move(xPad, y); fullColour.move(x2, y); y += tight.height(); zrle.move(xPad, y); mediumColour.move(x2, y); y += zrle.height(); hextile.move(xPad, y); lowColour.move(x2, y); y += hextile.height(); raw.move(xPad, y); veryLowColour.move(x2, y); y += raw.height() + yPad*2; customCompressLevel.move(xPad, y); y += customCompressLevel.height(); compressLevel.move(xPad*10, y); compressLevelLabel.move(xPad*20, y); y += compressLevel.height(); noJpeg.move(xPad, y); y += noJpeg.height(); qualityLevel.move(xPad*10, y); qualityLevelLabel.move(xPad*20, y); y += qualityLevel.height(); y += yPad*4; inputs.move(xPad, y); y += inputs.height(); viewOnly.move(xPad, y); y += viewOnly.height(); acceptClipboard.move(xPad, y); y += acceptClipboard.height(); sendClipboard.move(xPad, y); y += sendClipboard.height(); sendPrimary.move(xPad, y); y += sendPrimary.height(); y += yPad*4; misc.move(xPad, y); y += misc.height(); shared.move(xPad, y); y += shared.height(); fullScreen.move(xPad, y); y += fullScreen.height(); useLocalCursor.move(xPad, y); y += useLocalCursor.height(); dotWhenNoCursor.move(xPad, y); y += dotWhenNoCursor.height(); okButton.move(width() - xPad*12 - cancelButton.width() - okButton.width(), height() - yPad*4 - okButton.height()); cancelButton.move(width() - xPad*6 - cancelButton.width(), height() - yPad*4 - cancelButton.height()); setBorderWidth(1); } virtual void initDialog() { if (cb) cb->setOptions(); tight.disabled(autoSelect.checked()); zrle.disabled(autoSelect.checked()); hextile.disabled(autoSelect.checked()); raw.disabled(autoSelect.checked()); fullColour.disabled(autoSelect.checked()); mediumColour.disabled(autoSelect.checked()); lowColour.disabled(autoSelect.checked()); veryLowColour.disabled(autoSelect.checked()); sendPrimary.disabled(!sendClipboard.checked()); dotWhenNoCursor.disabled(!useLocalCursor.checked()); compressLevel.disabled(!customCompressLevel.checked()); qualityLevel.disabled(autoSelect.checked() || !noJpeg.checked()); } virtual void takeFocus(Time time) { //XSetInputFocus(dpy, entry.win, RevertToParent, time); } virtual void buttonActivate(TXButton* b) { if (b == &okButton) { if (cb) cb->getOptions(); unmap(); } else if (b == &cancelButton) { unmap(); } } virtual void checkboxSelect(TXCheckbox* checkbox) { if (checkbox == &autoSelect) { tight.disabled(autoSelect.checked()); zrle.disabled(autoSelect.checked()); hextile.disabled(autoSelect.checked()); raw.disabled(autoSelect.checked()); fullColour.disabled(autoSelect.checked()); mediumColour.disabled(autoSelect.checked()); lowColour.disabled(autoSelect.checked()); veryLowColour.disabled(autoSelect.checked()); qualityLevel.disabled(autoSelect.checked() || !noJpeg.checked()); } else if (checkbox == &fullColour || checkbox == &mediumColour || checkbox == &lowColour || checkbox == &veryLowColour) { fullColour.checked(checkbox == &fullColour); mediumColour.checked(checkbox == &mediumColour); lowColour.checked(checkbox == &lowColour); veryLowColour.checked(checkbox == &veryLowColour); } else if (checkbox == &tight || checkbox == &zrle || checkbox == &hextile || checkbox == &raw) { tight.checked(checkbox == &tight); zrle.checked(checkbox == &zrle); hextile.checked(checkbox == &hextile); raw.checked(checkbox == &raw); } else if (checkbox == &sendClipboard) { sendPrimary.disabled(!sendClipboard.checked()); } else if (checkbox == &useLocalCursor) { dotWhenNoCursor.disabled(!useLocalCursor.checked()); } else if (checkbox == &customCompressLevel) { compressLevel.disabled(!customCompressLevel.checked()); } else if (checkbox == &noJpeg) { qualityLevel.disabled(autoSelect.checked() || !noJpeg.checked()); } } virtual void entryCallback(TXEntry* e, Detail detail, Time time) { } OptionsDialogCallback* cb; TXLabel formatAndEnc, inputs, misc; TXCheckbox autoSelect; TXCheckbox fullColour, mediumColour, lowColour, veryLowColour; TXCheckbox tight, zrle, hextile, raw; TXCheckbox customCompressLevel; TXEntry compressLevel; TXLabel compressLevelLabel; TXCheckbox noJpeg; TXEntry qualityLevel; TXLabel qualityLevelLabel; TXCheckbox viewOnly, acceptClipboard, sendClipboard, sendPrimary; TXCheckbox shared, fullScreen, useLocalCursor, dotWhenNoCursor; TXButton okButton, cancelButton; }; #endif