Added save and restore of calculator mode using registry.
authorRobert Dickenson <robd@reactos.org>
Tue, 16 Jul 2002 21:54:17 +0000 (21:54 +0000)
committerRobert Dickenson <robd@reactos.org>
Tue, 16 Jul 2002 21:54:17 +0000 (21:54 +0000)
svn path=/trunk/; revision=3240

rosapps/calc/calc.rc
rosapps/calc/main.c
rosapps/calc/main.h
rosapps/calc/resource.h
rosapps/calc/settings.c
rosapps/calc/settings.h

index d346a07..74c8322 100644 (file)
@@ -15,7 +15,6 @@
 /////////////////////////////////////////////////////////////////////////////
 #undef APSTUDIO_READONLY_SYMBOLS
 
-
 /////////////////////////////////////////////////////////////////////////////
 // English (Australia) resources
 
@@ -64,13 +63,22 @@ BEGIN
         MENUITEM "S&tandard",                   ID_VIEW_STANDARD
         MENUITEM "&Scientific",                 ID_VIEW_SCIENTIFIC, CHECKED
         MENUITEM SEPARATOR
+        MENUITEM "&Hex\tF5",                    ID_VIEW_HEX
+        MENUITEM "&Decimal\tF6",                ID_VIEW_DECIMAL
+        MENUITEM "&Octal\tF7",                  ID_VIEW_OCTAL
+        MENUITEM "&Binary\tF8",                 ID_VIEW_BINARY
+        MENUITEM SEPARATOR
+        MENUITEM "D&egrees\tF2",                ID_VIEW_DEGREES
+        MENUITEM "&Radians\tF3",                ID_VIEW_RADIANS
+        MENUITEM "&Grads\tF4",                  ID_VIEW_GRADS
+        MENUITEM SEPARATOR
         MENUITEM "D&igit grouping",             ID_VIEW_DIGIT_GROUPING
     END
     POPUP "&Help"
     BEGIN
         MENUITEM "&Help Topics",                ID_HELP_TOPICS
         MENUITEM SEPARATOR
-        MENUITEM "&About Calculator",           ID_HELP_ABOUT
+        MENUITEM "&About Scientific Calculator", ID_HELP_ABOUT
     END
 END
 
@@ -92,6 +100,12 @@ BEGIN
     "\0"
 END
 
+3 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "\r\n"
+    "\0"
+END
+
 #endif    // APSTUDIO_INVOKED
 
 
@@ -116,7 +130,7 @@ END
 
 IDD_SCIENTIFIC DIALOG DISCARDABLE  0, 0, 325, 156
 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "ReactOS Calculator"
+CAPTION "ReactOS Scientific Calculator"
 MENU IDR_CALC_SCIENTIFIC
 FONT 8, "MS Sans Serif"
 BEGIN
@@ -147,6 +161,34 @@ BEGIN
 END
 #endif    // APSTUDIO_INVOKED
 
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Accelerator
+//
+
+IDR_ACCELERATOR ACCELERATORS DISCARDABLE 
+BEGIN
+    VK_F2,          ID_VIEW_DEGREES,    VIRTKEY, NOINVERT
+    VK_F3,          ID_VIEW_RADIANS,    VIRTKEY, NOINVERT
+    VK_F4,          ID_VIEW_GRADS,      VIRTKEY, NOINVERT
+    VK_F5,          ID_VIEW_HEX,        VIRTKEY, NOINVERT
+    VK_F6,          ID_VIEW_DECIMAL,    VIRTKEY, NOINVERT
+    VK_F7,          ID_VIEW_OCTAL,      VIRTKEY, NOINVERT
+    VK_F8,          ID_VIEW_BINARY,     VIRTKEY, NOINVERT
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// String Table
+//
+
+STRINGTABLE DISCARDABLE 
+BEGIN
+    IDS_APP_TITLE           "ReactOS Calculator"
+END
+
 #endif    // English (Australia) resources
 /////////////////////////////////////////////////////////////////////////////
 
index 1a6980b..559c19b 100644 (file)
@@ -32,7 +32,9 @@
 // Global Variables:
 HINSTANCE hInst;
 HWND hDlgWnd;
+TCHAR szTitle[MAX_LOADSTRING];
 CALC_TYPES CalcType;
+HACCEL hAccel;
 
 BOOL bDigitGrouping = FALSE;
 
@@ -95,6 +97,34 @@ void OnViewDigitGrouping(void)
     }
 }
 
+void OnViewHex(void)
+{
+}
+
+void OnViewDecimal(void)
+{
+}
+
+void OnViewOctal(void)
+{
+}
+
+void OnViewBinary(void)
+{
+}
+
+void OnViewDegrees(void)
+{
+}
+
+void OnViewRadians(void)
+{
+}
+
+void OnViewGrads(void)
+{
+}
+
 void OnHelpTopics(void)
 {
     WinHelp(hDlgWnd, _T("calc"), HELP_CONTENTS, 0);
@@ -137,11 +167,32 @@ LRESULT CALLBACK CalcWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lPar
             CMD_MAP_ENTRY(ID_VIEW_STANDARD,       OnViewStandard)
             CMD_MAP_ENTRY(ID_VIEW_SCIENTIFIC,     OnViewScientific)
             CMD_MAP_ENTRY(ID_VIEW_DIGIT_GROUPING, OnViewDigitGrouping)
+            CMD_MAP_ENTRY(ID_VIEW_HEX,            OnViewHex)
+            CMD_MAP_ENTRY(ID_VIEW_DECIMAL,        OnViewDecimal)
+            CMD_MAP_ENTRY(ID_VIEW_OCTAL,          OnViewOctal)
+            CMD_MAP_ENTRY(ID_VIEW_BINARY,         OnViewBinary)
+            CMD_MAP_ENTRY(ID_VIEW_DEGREES,        OnViewDegrees)
+            CMD_MAP_ENTRY(ID_VIEW_RADIANS,        OnViewRadians)
+            CMD_MAP_ENTRY(ID_VIEW_GRADS,          OnViewGrads)
             CMD_MAP_ENTRY(ID_HELP_TOPICS,         OnHelpTopics)
             CMD_MAP_ENTRY(ID_HELP_ABOUT,          OnHelpAbout)
         END_CMD_MAP(0)
         break;
-
+/*
+    case WM_KEYUP:
+    case WM_KEYDOWN:
+        {
+        MSG msg;
+        msg.hwnd = hDlg;
+        msg.message = message;
+        msg.wParam = wParam;
+        msg.lParam = lParam;
+//        msg.time; 
+//        msg.pt; 
+        if (TranslateAccelerator(hDlg, hAccel, &msg)) return 0;
+        }
+        break;
+ */
     case WM_NOTIFY:
         {
         int     idctrl;
@@ -175,10 +226,13 @@ int APIENTRY WinMain(HINSTANCE hInstance,
 
     // Initialize global variables
     hInst = hInstance;
+    LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
 
     // Load our settings from the registry
     LoadSettings();
 
+    hAccel = LoadAccelerators(hInstance, (LPCTSTR)IDR_ACCELERATOR);
+
     do {
         CurrentCalcType = CalcType;
         switch (CalcType) {
index 72ec444..a5cd366 100644 (file)
@@ -35,10 +35,13 @@ extern "C" {
 #include "resource.h"
 
 
+#define MAX_LOADSTRING 100
+
 typedef enum _CALC_TYPES { STANDARD, SCIENTIFIC, HP42S, OTHER } CALC_TYPES;
 
 extern HINSTANCE hInst;
 extern HWND hDlgWnd;
+extern TCHAR szTitle[];
 extern CALC_TYPES CalcType;
 
 
index 7baf963..12bce29 100644 (file)
@@ -9,25 +9,32 @@
 #define IDD_SCIENTIFIC                  102
 #define IDR_CALC_STANDARD               103
 #define IDR_CALC_SCIENTIFIC             104
+#define IDS_APP_TITLE                   105
+#define IDR_ACCELERATOR                 106
 #define IDC_BUTTON1                     1000
 #define IDC_BUTTON2                     1001
 #define IDC_EDIT1                       1002
-//#define ID_EDIT_COPY                    40001
-//#define ID_EDIT_PASTE                   40002
-#define ID_EDIT_COPY                    0xE122
-#define ID_EDIT_PASTE                   0xE125
 #define ID_VIEW_STANDARD                40003
 #define ID_VIEW_SCIENTIFIC              40004
 #define ID_VIEW_DIGIT_GROUPING          40005
-#define ID_HELP_TOPICS                  40006
-#define ID_HELP_ABOUT                   40007
+#define ID_VIEW_HEX                     40006
+#define ID_VIEW_DECIMAL                 40007
+#define ID_VIEW_OCTAL                   40008
+#define ID_VIEW_BINARY                  40009
+#define ID_VIEW_DEGREES                 40010
+#define ID_VIEW_RADIANS                 40011
+#define ID_VIEW_GRADS                   40012
+#define ID_HELP_TOPICS                  40013
+#define ID_HELP_ABOUT                   40014
+#define ID_EDIT_COPY                    0xE122
+#define ID_EDIT_PASTE                   0xE125
 
 // Next default values for new objects
 // 
 #ifdef APSTUDIO_INVOKED
 #ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE        103
-#define _APS_NEXT_COMMAND_VALUE         40008
+#define _APS_NEXT_RESOURCE_VALUE        107
+#define _APS_NEXT_COMMAND_VALUE         40015
 #define _APS_NEXT_CONTROL_VALUE         1003
 #define _APS_NEXT_SYMED_VALUE           101
 #endif
index 0ac2a88..c8e8633 100644 (file)
     
 #define WIN32_LEAN_AND_MEAN     // Exclude rarely-used stuff from Windows headers
 #include <windows.h>
+#include <tchar.h>
     
 #include "main.h"
 #include "settings.h"
 
 
+BOOL CheckResult(LONG error)
+{
+    if (error != ERROR_SUCCESS) {
+       PTSTR msg;
+       if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,
+               0, error, MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT), (PTSTR)&msg, 0, NULL))
+                   MessageBox(NULL, msg, szTitle, MB_ICONERROR | MB_OK);
+       else
+               MessageBox(NULL, _T("Error"), szTitle, MB_ICONERROR | MB_OK);
+       LocalFree(msg);
+        return FALSE;
+    }
+    return TRUE;
+}
+
 void LoadSettings(void)
 {
+    HKEY  hKey;
+    DWORD dwSize;
+    LONG  result;
+    char  szSubKey[] = "Software\\ReactWare\\Calculator";
+
+    // Open the key
+    result = RegOpenKeyEx(HKEY_CURRENT_USER, szSubKey, 0, KEY_READ, &hKey);
+    if (!CheckResult(result)) return;
+
+    // Read the settings
+    dwSize = sizeof(CALC_TYPES);
+    result = RegQueryValueEx(hKey, _T("Preferences"), NULL, NULL, (LPBYTE)&CalcType, &dwSize);
+    if (!CheckResult(result)) goto abort;
+
+abort:
+    // Close the key
+    RegCloseKey(hKey);
 }
 
 void SaveSettings(void)
 {
-}
+    HKEY hKey;
+    LONG  result;
+    char szSubKey1[] = "Software";
+    char szSubKey2[] = "Software\\ReactWare";
+    char szSubKey3[] = "Software\\ReactWare\\Calculator";
+
+    // Open (or create) the key
+    hKey = NULL;
+    result = RegCreateKeyEx(HKEY_CURRENT_USER, szSubKey1, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, NULL);
+    if (!CheckResult(result)) return;
+    RegCloseKey(hKey);
+    hKey = NULL;
+    result = RegCreateKeyEx(HKEY_CURRENT_USER, szSubKey2, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, NULL);
+    if (!CheckResult(result)) return;
+    RegCloseKey(hKey);
+    hKey = NULL;
+    result = RegCreateKeyEx(HKEY_CURRENT_USER, szSubKey3, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, NULL);
+    if (!CheckResult(result)) return;
 
+    // Save the settings
+    result = RegSetValueEx(hKey, _T("Preferences"), 0, REG_DWORD, (LPBYTE)&CalcType, sizeof(CALC_TYPES));
+    if (!CheckResult(result)) goto abort;
+
+abort:
+    // Close the key
+    RegCloseKey(hKey);
+}
index c81f014..c062130 100644 (file)
@@ -32,6 +32,7 @@ extern "C" {
 #endif // _MSC_VER > 1000
 
 
+BOOL CheckResult(LONG error);
 void LoadSettings(void);
 void SaveSettings(void);