[NOTEPAD]
[reactos.git] / reactos / base / applications / notepad / dialog.c
index 3bc53ac..cf6a4c7 100644 (file)
@@ -92,7 +92,7 @@ static LPWSTR ConvertToUNICODE(LPSTR pszText, DWORD *pdwSize)
 }
 #endif
 
-VOID ShowLastError(void)
+VOID ShowLastError(VOID)
 {
     DWORD error = GetLastError();
     if (error != NO_ERROR)
@@ -112,31 +112,27 @@ VOID ShowLastError(void)
 
 /**
  * Sets the caption of the main window according to Globals.szFileTitle:
- *    Notepad - (untitled)      if no file is open
- *    Notepad - [filename]      if a file is given
+ *    (untitled) - Notepad      if no file is open
+ *    [filename] - Notepad      if a file is given
  */
 static void UpdateWindowCaption(void)
 {
   TCHAR szCaption[MAX_STRING_LEN];
-  TCHAR szUntitled[MAX_STRING_LEN];
+  TCHAR szNotepad[MAX_STRING_LEN];
 
-  LoadString(Globals.hInstance, STRING_NOTEPAD, szCaption, SIZEOF(szCaption));
+  LoadString(Globals.hInstance, STRING_NOTEPAD, szNotepad, SIZEOF(szNotepad));
 
-  if (Globals.szFileTitle[0] != '\0') {
-      static const TCHAR bracket_l[] = _T(" - [");
-      static const TCHAR bracket_r[] = _T("]");
-      _tcscat(szCaption, bracket_l);
-      _tcscat(szCaption, Globals.szFileTitle);
-      _tcscat(szCaption, bracket_r);
+  if (Globals.szFileTitle[0] != 0)
+  {
+      StringCchCopy(szCaption, SIZEOF(szCaption), Globals.szFileTitle);
   }
   else
   {
-      static const TCHAR hyphen[] = _T(" - ");
-      LoadString(Globals.hInstance, STRING_UNTITLED, szUntitled, SIZEOF(szUntitled));
-      _tcscat(szCaption, hyphen);
-      _tcscat(szCaption, szUntitled);
+      LoadString(Globals.hInstance, STRING_UNTITLED, szCaption, SIZEOF(szCaption));
   }
-
+  
+  StringCchCat(szCaption, SIZEOF(szCaption), _T(" - "));
+  StringCchCat(szCaption, SIZEOF(szCaption), szNotepad);
   SetWindowText(Globals.hMainWnd, szCaption);
 }
 
@@ -191,7 +187,6 @@ BOOL FileExists(LPCTSTR szFilename)
    return (hFile != INVALID_HANDLE_VALUE);
 }
 
-
 BOOL HasFileExtension(LPCTSTR szFilename)
 {
     LPCTSTR s;
@@ -202,9 +197,9 @@ BOOL HasFileExtension(LPCTSTR szFilename)
     return _tcsrchr(szFilename, _T('.')) != NULL;
 }
 
-
-static VOID DoSaveFile(VOID)
+static BOOL DoSaveFile(VOID)
 {
+    BOOL bRet = TRUE;
     HANDLE hFile;
     LPTSTR pTemp;
     DWORD size;
@@ -214,7 +209,7 @@ static VOID DoSaveFile(VOID)
     if(hFile == INVALID_HANDLE_VALUE)
     {
         ShowLastError();
-        return;
+        return FALSE;
     }
 
     size = GetWindowTextLength(Globals.hEdit) + 1;
@@ -223,30 +218,38 @@ static VOID DoSaveFile(VOID)
     {
         CloseHandle(hFile);
         ShowLastError();
-        return;
+        return FALSE;
     }
     size = GetWindowText(Globals.hEdit, pTemp, size);
 
 #ifndef UNICODE
     pTemp = (LPTSTR)ConvertToUNICODE(pTemp, &size);
-    if (!pTemp) {
+    if (!pTemp)
+    {
         /* original "pTemp" already freed */
         CloseHandle(hFile);
         ShowLastError();
-        return;
+        return FALSE;
     }
 #endif
 
     if (size)
     {
         if (!WriteText(hFile, (LPWSTR)pTemp, size, Globals.iEncoding, Globals.iEoln))
+        {
             ShowLastError();
+            bRet = FALSE;
+        }
         else
+        {
             SendMessage(Globals.hEdit, EM_SETMODIFY, FALSE, 0);
+            bRet = TRUE;
+        }
     }
 
     CloseHandle(hFile);
     HeapFree(GetProcessHeap(), 0, pTemp);
+    return bRet;
 }
 
 /**
@@ -254,7 +257,7 @@ static VOID DoSaveFile(VOID)
  *   TRUE  - User agreed to close (both save/don't save)
  *   FALSE - User cancelled close by selecting "Cancel"
  */
-BOOL DoCloseFile(void)
+BOOL DoCloseFile(VOID)
 {
     int nResult;
 
@@ -262,27 +265,31 @@ BOOL DoCloseFile(void)
     {
         /* prompt user to save changes */
         nResult = AlertFileNotSaved(Globals.szFileName);
-        switch (nResult) {
-            case IDYES:     DIALOG_FileSave();
-                            break;
+        switch (nResult)
+        {
+            case IDYES:
+                if(!DIALOG_FileSave())
+                    return FALSE;
+                break;
 
-            case IDNO:      break;
+            case IDNO:
+                break;
 
-            case IDCANCEL:  return(FALSE);
-                            break;
+            case IDCANCEL:
+                return FALSE;
 
-            default:        return(FALSE);
-                            break;
-        } /* switch */
-    } /* if */
+            default:
+                return FALSE;
+        }
+    }
 
     SetFileName(empty_str);
-
     UpdateWindowCaption();
-    return(TRUE);
+
+    return TRUE;
 }
 
-void DoOpenFile(LPCTSTR szFileName)
+VOID DoOpenFile(LPCTSTR szFileName)
 {
     static const TCHAR dotlog[] = _T(".LOG");
     HANDLE hFile;
@@ -388,12 +395,12 @@ VOID DIALOG_FileOpen(VOID)
 }
 
 
-VOID DIALOG_FileSave(VOID)
+BOOL DIALOG_FileSave(VOID)
 {
-    if (Globals.szFileName[0] == '\0')
-        DIALOG_FileSaveAs();
+    if (Globals.szFileName[0] == 0)
+        return DIALOG_FileSaveAs();
     else
-        DoSaveFile();
+        return DoSaveFile();
 }
 
 static UINT_PTR CALLBACK DIALOG_FileSaveAs_Hook(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
@@ -452,7 +459,7 @@ static UINT_PTR CALLBACK DIALOG_FileSaveAs_Hook(HWND hDlg, UINT msg, WPARAM wPar
     return 0;
 }
 
-VOID DIALOG_FileSaveAs(VOID)
+BOOL DIALOG_FileSaveAs(VOID)
 {
     OPENFILENAME saveas;
     TCHAR szDir[MAX_PATH];
@@ -479,10 +486,26 @@ VOID DIALOG_FileSaveAs(VOID)
     saveas.lpTemplateName    = MAKEINTRESOURCE(DIALOG_ENCODING);
     saveas.lpfnHook          = DIALOG_FileSaveAs_Hook;
 
-    if (GetSaveFileName(&saveas)) {
+    if (GetSaveFileName(&saveas))
+    {
+        // HACK: Because in ROS, Save-As boxes don't check the validity
+        // of file names and thus, here, szPath can be invalid !! We only
+        // see its validity when we call DoSaveFile()...
         SetFileName(szPath);
-        UpdateWindowCaption();
-        DoSaveFile();
+        if (DoSaveFile())
+        {
+            UpdateWindowCaption();
+            return TRUE;
+        }
+        else
+        {
+            SetFileName(_T(""));
+            return FALSE;
+        }
+    }
+    else
+    {
+        return FALSE;
     }
 }
 
@@ -684,7 +707,7 @@ VOID DIALOG_EditTimeDate(VOID)
     _tcscat(szText, _T(" "));
     GetDateFormat(LOCALE_USER_DEFAULT, DATE_LONGDATE, &st, NULL, szDate, MAX_STRING_LEN);
     _tcscat(szText, szDate);
-    SendMessage(Globals.hEdit, EM_REPLACESEL, TRUE, (LPARAM)szDate);
+    SendMessage(Globals.hEdit, EM_REPLACESEL, TRUE, (LPARAM)szText);
 }
 
 VOID DoCreateStatusBar(VOID)
@@ -766,7 +789,7 @@ VOID DoCreateEditWindow(VOID)
 {
     DWORD  dwStyle;
     int    iSize;
-    LPTSTR pTemp;
+    LPTSTR pTemp = NULL;
 
     iSize = 0;