Added the EditPixelFormatDialog dialog. It allows change or add new
the user definded pixel format.


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@268 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/rfbplayer/EditPixelFormatDialog.h b/rfbplayer/EditPixelFormatDialog.h
new file mode 100644
index 0000000..f0cdafe
--- /dev/null
+++ b/rfbplayer/EditPixelFormatDialog.h
@@ -0,0 +1,102 @@
+/* Copyright (C) 2004 TightVNC Team.  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.
+ */
+
+// -=- EditPixelFormatDialog.h
+
+#include <rfb_win32/Dialog.h>
+
+class EditPixelFormatDialog : public rfb::win32::Dialog {
+public:
+  EditPixelFormatDialog(PixelFormatList *_supportedPF, char *_format_name,
+                        PixelFormat *_pf) 
+  : Dialog(GetModuleHandle(0)), format_name(_format_name), 
+  supportedPF(_supportedPF), pf(_pf) {}
+  // - Show the dialog and return true if OK was clicked,
+  //   false in case of error or Cancel
+  virtual bool showDialog(HWND parent) {
+    return Dialog::showDialog(MAKEINTRESOURCE(IDD_UPF_EDIT), parent);
+  }
+
+protected:
+  // Dialog methods (protected)
+  virtual void initDialog() {
+    HWND bppCombo = GetDlgItem(handle, IDC_BPP_COMBO);
+    SendMessage(bppCombo, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)("8"));
+    SendMessage(bppCombo, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)("16"));
+    SendMessage(bppCombo, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)("32"));
+    SendMessage(bppCombo, CB_SETCURSEL, min(2, (pf->bpp - 8) / 8), 0);
+
+    HWND bigendianCombo = GetDlgItem(handle, IDC_BIGENDIAN_COMBO);
+    SendMessage(bigendianCombo, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)("No"));
+    SendMessage(bigendianCombo, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)("Yes"));
+    SendMessage(bigendianCombo, CB_SETCURSEL, pf->bigEndian, 0);
+
+    setItemString(IDC_NAME_EDIT, format_name);
+    setItemInt(IDC_DEPTH_EDIT, pf->depth);
+    setItemInt(IDC_REDMAX_EDIT, pf->redMax);
+    setItemInt(IDC_GREENMAX_EDIT, pf->greenMax);
+    setItemInt(IDC_BLUEMAX_EDIT, pf->blueMax);
+    setItemInt(IDC_REDSHIFT_EDIT, pf->redShift);
+    setItemInt(IDC_GREENSHIFT_EDIT, pf->greenShift);
+    setItemInt(IDC_BLUESHIFT_EDIT, pf->blueShift);
+  }
+  virtual bool onOk() {
+    // Check for the errors
+    char err_msg[256] = "\0";
+    if (((getItemString(IDC_NAME_EDIT))[0] == '\0') || 
+        ((getItemString(IDC_DEPTH_EDIT))[0] == '\0') || 
+        ((getItemString(IDC_REDMAX_EDIT))[0] == '\0') || 
+        ((getItemString(IDC_GREENMAX_EDIT))[0] == '\0') ||
+        ((getItemString(IDC_BLUEMAX_EDIT))[0] == '\0') ||
+        ((getItemString(IDC_REDSHIFT_EDIT))[0] == '\0') || 
+        ((getItemString(IDC_GREENSHIFT_EDIT))[0] == '\0') || 
+        ((getItemString(IDC_BLUESHIFT_EDIT))[0] == '\0')) {
+      strcpy(err_msg, "Please fill the all fields in the dialog.");
+    }
+    if (supportedPF->getIndexByPFName(format_name) != 
+        supportedPF->getIndexByPFName(getItemString(IDC_NAME_EDIT))) {
+      strcpy(err_msg, "The pixel format with that name is already exist.");
+    }
+    if (getItemInt(IDC_DEPTH_EDIT) <= 0) {
+      strcpy(err_msg, "The pixel depth must be larger than 0.");
+    }
+    if (err_msg[0] != 0) {
+      MessageBox(handle, err_msg, "RfbPlayer", MB_OK | MB_ICONWARNING);
+      return false;
+    }
+    // Fill the pixel format structure
+    strncpy(format_name, getItemString(IDC_NAME_EDIT), sizeof(format_name));
+    format_name[sizeof(format_name) - 1] = 0;
+    pf->bpp = getItemInt(IDC_BPP_COMBO);
+    pf->depth = getItemInt(IDC_DEPTH_EDIT);
+    pf->bigEndian = (SendMessage(GetDlgItem(handle, IDC_BIGENDIAN_COMBO), 
+      CB_GETCURSEL, 0, 0)) ? true : false;
+    pf->trueColour = true;
+    pf->redMax = getItemInt(IDC_REDMAX_EDIT);
+    pf->greenMax = getItemInt(IDC_GREENMAX_EDIT);
+    pf->blueMax = getItemInt(IDC_BLUEMAX_EDIT);
+    pf->redShift = getItemInt(IDC_REDSHIFT_EDIT);
+    pf->greenShift = getItemInt(IDC_GREENSHIFT_EDIT);
+    pf->blueShift = getItemInt(IDC_BLUESHIFT_EDIT);
+    return true;
+  }
+
+  char *format_name;
+  PixelFormatList *supportedPF;
+  PixelFormat *pf;
+};
\ No newline at end of file
diff --git a/rfbplayer/resource.h b/rfbplayer/resource.h
index ca4901b..22df827 100644
--- a/rfbplayer/resource.h
+++ b/rfbplayer/resource.h
@@ -11,6 +11,7 @@
 #define IDD_OPTIONS                     137
 #define IDD_ABOUT                       138
 #define IDD_USERPF_LIST                 139
+#define IDD_UPF_EDIT                    140
 #define IDC_GOTO_EDIT                   1003
 #define IDC_PIXELFORMAT                 1004
 #define IDC_ASK_PF                      1006
@@ -24,11 +25,21 @@
 #define IDC_BIG_ENDIAN                  1013
 #define IDC_EDIT_UPF                    1015
 #define IDC_PF_LIST                     1016
+#define IDC_BPP_COMBO                   1016
 #define IDC_ADD_BUTTON                  1017
+#define IDC_NAME_EDIT                   1017
 #define IDC_REMOVE_BUTTON               1018
 #define IDC_EDIT_BUTTON                 1019
 #define IDC_COPYRIGHT                   1021
+#define IDC_DEPTH_EDIT                  1021
 #define IDC_DESCRIPTION                 1022
+#define IDC_BIGENDIAN_COMBO             1022
+#define IDC_REDMAX_EDIT                 1023
+#define IDC_GREENMAX_EDIT               1024
+#define IDC_BLUEMAX_EDIT                1025
+#define IDC_REDSHIFT_EDIT               1026
+#define IDC_GREENSHIFT_EDIT             1027
+#define IDC_BLUESHIFT_EDIT              1028
 #define ID_OPENFILE                     40011
 #define ID_CLOSEFILE                    40012
 #define ID_EXIT                         40013
@@ -53,9 +64,9 @@
 // 
 #ifdef APSTUDIO_INVOKED
 #ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE        140
+#define _APS_NEXT_RESOURCE_VALUE        141
 #define _APS_NEXT_COMMAND_VALUE         40045
-#define _APS_NEXT_CONTROL_VALUE         1021
+#define _APS_NEXT_CONTROL_VALUE         1031
 #define _APS_NEXT_SYMED_VALUE           101
 #endif
 #endif
diff --git a/rfbplayer/rfbplayer.dsp b/rfbplayer/rfbplayer.dsp
index e324905..3a6329f 100644
--- a/rfbplayer/rfbplayer.dsp
+++ b/rfbplayer/rfbplayer.dsp
@@ -140,6 +140,10 @@
 # End Source File

 # Begin Source File

 

+SOURCE=.\EditPixelFormatDialog.h

+# End Source File

+# Begin Source File

+

 SOURCE=.\FbsInputStream.h

 # End Source File

 # Begin Source File

diff --git a/rfbplayer/rfbplayer.rc b/rfbplayer/rfbplayer.rc
index 55b4f3f..e8dd344 100644
--- a/rfbplayer/rfbplayer.rc
+++ b/rfbplayer/rfbplayer.rc
@@ -284,6 +284,40 @@
     PUSHBUTTON      "Close",IDOK,150,64,50,14
 END
 
+IDD_UPF_EDIT DIALOG DISCARDABLE  0, 0, 204, 126
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Edit the user pixel format"
+FONT 8, "MS Sans Serif"
+BEGIN
+    EDITTEXT        IDC_NAME_EDIT,68,7,129,13,ES_AUTOHSCROLL
+    COMBOBOX        IDC_BPP_COMBO,68,23,39,45,CBS_DROPDOWNLIST | WS_VSCROLL | 
+                    WS_TABSTOP
+    EDITTEXT        IDC_DEPTH_EDIT,157,22,40,13,ES_AUTOHSCROLL | ES_NUMBER
+    COMBOBOX        IDC_BIGENDIAN_COMBO,68,38,39,45,CBS_DROPDOWNLIST | 
+                    WS_VSCROLL | WS_TABSTOP
+    EDITTEXT        IDC_REDMAX_EDIT,68,54,39,13,ES_AUTOHSCROLL | ES_NUMBER
+    EDITTEXT        IDC_GREENMAX_EDIT,68,70,39,13,ES_AUTOHSCROLL | ES_NUMBER
+    EDITTEXT        IDC_BLUEMAX_EDIT,68,86,39,13,ES_AUTOHSCROLL | ES_NUMBER
+    EDITTEXT        IDC_REDSHIFT_EDIT,157,54,39,13,ES_AUTOHSCROLL | 
+                    ES_NUMBER
+    EDITTEXT        IDC_GREENSHIFT_EDIT,157,70,40,13,ES_AUTOHSCROLL | 
+                    ES_NUMBER
+    EDITTEXT        IDC_BLUESHIFT_EDIT,157,86,40,13,ES_AUTOHSCROLL | 
+                    ES_NUMBER
+    PUSHBUTTON      "OK",IDOK,93,105,50,14
+    PUSHBUTTON      "Cancel",IDCANCEL,147,105,50,14
+    LTEXT           "Pixel format name:",IDC_STATIC,7,7,57,13,SS_CENTERIMAGE
+    LTEXT           "Bit per pixel:",IDC_STATIC,7,23,38,12,SS_CENTERIMAGE
+    LTEXT           "Big endian flag :",IDC_STATIC,7,38,53,13,SS_CENTERIMAGE
+    LTEXT           "Red max :",IDC_STATIC,7,54,33,13,SS_CENTERIMAGE
+    LTEXT           "Green max :",IDC_STATIC,7,70,38,13,SS_CENTERIMAGE
+    LTEXT           "Blue max :",IDC_STATIC,7,86,38,13,SS_CENTERIMAGE
+    LTEXT           "Depth:",IDC_STATIC,112,23,21,12,SS_CENTERIMAGE
+    LTEXT           "Red shifts :",IDC_STATIC,112,54,36,13,SS_CENTERIMAGE
+    LTEXT           "Green shifts :",IDC_STATIC,112,70,43,13,SS_CENTERIMAGE
+    LTEXT           "Blue shifts :",IDC_STATIC,112,86,43,13,SS_CENTERIMAGE
+END
+
 
 /////////////////////////////////////////////////////////////////////////////
 //
@@ -366,6 +400,14 @@
         HORZGUIDE, 59
         HORZGUIDE, 64
     END
+
+    IDD_UPF_EDIT, DIALOG
+    BEGIN
+        LEFTMARGIN, 7
+        RIGHTMARGIN, 197
+        TOPMARGIN, 7
+        BOTTOMMARGIN, 119
+    END
 END
 #endif    // APSTUDIO_INVOKED