Changeset 878 for trunk/dll/viewer.c


Ignore:
Timestamp:
Nov 26, 2007, 2:20:00 PM (18 years ago)
Author:
Gregg Young
Message:

Added "Save as" and readonly file handling to internal editor; clean up ext path not checked on start up; Updated history.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/dll/viewer.c

    r847 r878  
    1414  30 Mar 07 GKY Remove GetPString for window class names
    1515  20 Aug 07 GKY Move #pragma alloc_text to end for OpenWatcom compat
     16  26 Nov 07 GKY Allow open of readonly files in the editor with warning
     17  26 Nov 07 GKY Add "Save as" menu option to editor
    1618
    1719***********************************************************************/
     
    6466  XMLEWNDPTR *vw;
    6567  ULONG flFrameFlags = FCF_SYSMENU | FCF_SIZEBORDER | FCF_ICON |
    66     FCF_TITLEBAR | FCF_MINMAX | FCF_MENU | FCF_ACCELTABLE | FCF_NOBYTEALIGN;
     68      FCF_TITLEBAR | FCF_MINMAX | FCF_MENU | FCF_ACCELTABLE | FCF_NOBYTEALIGN;
     69  ULONG ulResult;
     70  BOOL OpenInViewer = FALSE, readonly = FALSE;
     71  FILESTATUS3 fs3;
    6772
    6873  if (fExternalViewer || strcmp(realappname, FM3Str))
    6974    hwndClient = HWND_DESKTOP;
    70   if ((flags & 1) && fUseNewViewer)
    71     return StartViewer(hwndClient, (USHORT) flags, filename, hwndRestore);
     75  DosQueryPathInfo(filename, FIL_STANDARD, &fs3, sizeof(fs3));
     76  if (fs3.attrFile & FILE_READONLY) {
     77    ulResult = saymsg(MB_YESNOCANCEL | MB_ICONQUESTION | MB_DEFBUTTON1, HWND_DESKTOP,
     78                      GetPString(IDS_WARNINGTEXT),
     79                      GetPString(IDS_EDITREADONLYFILETEXT),
     80                      filename);
     81    switch (ulResult){
     82    case MBID_YES:{
     83      readonly = TRUE;
     84      break;
     85    }
     86
     87    case MBID_NO:
     88      if (fUseNewViewer)
     89        return StartViewer(hwndClient, (USHORT) flags, filename, hwndRestore);
     90      else{
     91        OpenInViewer = TRUE;
     92        break;
     93      }
     94
     95    case MBID_CANCEL:
     96        return (HWND) 0;
     97    }
     98  }
    7299
    73100  vw = xmallocz(sizeof(XMLEWNDPTR), pszSrcFile, __LINE__);
     
    75102    return (HWND) 0;
    76103  vw->size = sizeof(XMLEWNDPTR);
     104  if (readonly)
     105    vw->fileattrreadonly = TRUE;
     106  else
     107    vw->fileattrreadonly = FALSE;
    77108  if (flags & 1) {
    78109    if (flags & 8)
     
    95126    flFrameFlags |= FCF_TASKLIST;
    96127  hwndFrame = WinCreateStdWindow(hwndClient,
    97                                  WS_VISIBLE,
     128                                 0,
    98129                                 &flFrameFlags,
    99130                                 WC_MLEEDITOR,
    100131                                 NullStr,
    101                                  WS_VISIBLE | fwsAnimate,
     132                                 fwsAnimate,
    102133                                 FM3ModHandle, MLE_FRAME, &hwnd);
    103134  if (hwndFrame) {
     
    143174                      SWP_ACTIVATE);
    144175    }
    145     MLEsetreadonly(hwndMLE, ((flags & 1) != 0));
     176    if (OpenInViewer | (flags & 1))
     177      MLEsetreadonly(hwndMLE, ((flags & 1) != 0));
    146178    WinSetWindowPtr(hwnd, QWL_USER, (PVOID) vw);
    147179    if (!PostMsg(hwnd, UM_SETUP, MPVOID, MPFROMLONG(hwndClient)))
     
    731763          if (temp == MBID_CANCEL)
    732764            break;
    733           if (temp == MBID_YES)
     765          if (temp == MBID_YES){
    734766            WinSendMsg(hwnd,
    735                        WM_COMMAND, MPFROM2SHORT(MLE_EXPORTFILE, 0), MPVOID);
     767                       WM_COMMAND, MPFROM2SHORT(MLE_EXPORTFILE, 0), MPVOID);
     768            if (vw->fileattrreadonly) {
     769              temp = saymsg(MB_OKCANCEL | MB_ICONEXCLAMATION,
     770                            hwnd, NullStr, "File is readonly and has not been saved");
     771              if (temp == MBID_CANCEL)
     772                return 0;
     773            }
     774          }
    736775        }
    737776        MLEclearall(hwndMLE);
     
    770809      break;
    771810
     811    case MLE_EXPORTAS:
     812      vw->saveas = TRUE;
     813      WinSendMsg(hwnd,
     814                 WM_COMMAND, MPFROM2SHORT(MLE_SETEXPORTFILE, 0), MPVOID);
     815      break;
     816
    772817    case IDM_RENAME:
    773818    case MLE_SETEXPORTFILE:
    774819      if (vw && !MLEgetreadonly(hwndMLE)) {
    775820
    776         CHAR filename[1027];
     821        CHAR filename[1027];
     822        ULONG ulResult;
    777823
    778824        strcpy(filename, vw->exportfilename);
    779         if (export_filename(hwnd, filename, 1)) {
     825        if (export_filename(hwnd, filename, !vw->fileattrreadonly)) {
    780826          if (stricmp(filename, vw->exportfilename)) {
    781             vw->ch = TRUE;
    782             MLEsetchanged(hwndMLE, TRUE);
     827            vw->ch = TRUE;
     828            vw->fileattrreadonly = FALSE;
     829            MLEsetchanged(hwndMLE, TRUE);
    783830            strcpy(vw->exportfilename, filename);
    784             WinSendMsg(hwnd, UM_SETUP2, MPVOID, MPVOID);
    785           }
     831            WinSendMsg(hwnd, UM_SETUP2, MPVOID, MPVOID);
     832            if (vw->saveas) {
     833              vw->saveas = FALSE;
     834              WinSendMsg(hwnd,
     835                         WM_COMMAND, MPFROM2SHORT(MLE_EXPORTFILE, 0), MPVOID);
     836            }
     837          }
     838          else if (vw->fileattrreadonly){
     839              ulResult = saymsg(MB_OKCANCEL | MB_ICONQUESTION | MB_DEFBUTTON1, HWND_DESKTOP,
     840                                GetPString(IDS_WARNINGTEXT),
     841                                GetPString(IDS_EDITREADONLYFILETEXT2),
     842                                filename);
     843              if (ulResult == MBID_OK){
     844                WinSendMsg(hwnd,
     845                           WM_COMMAND, MPFROM2SHORT(MLE_SETEXPORTFILE, 0), MPVOID);
     846                break;
     847              }
     848              else
     849                vw->saveas = FALSE;
     850          }
     851          else if (vw->saveas = TRUE) {
     852            vw->saveas = FALSE;
     853            WinSendMsg(hwnd,
     854                       WM_COMMAND, MPFROM2SHORT(MLE_EXPORTFILE, 0), MPVOID);
     855          }
    786856        }
    787857      }
     
    789859
    790860    case MLE_EXPORTFILE:
     861      if (vw->fileattrreadonly){
     862        WinSendMsg(hwnd,
     863                   WM_COMMAND, MPFROM2SHORT(MLE_SETEXPORTFILE, 0), MPVOID);
     864        break;
     865      }
    791866      if (!MLEgetreadonly(hwndMLE)) {
    792867
     
    807882          FILE *fp;
    808883
    809           fp = xfopen(vw->exportfilename, "r+", pszSrcFile, __LINE__);
     884          fp = fopen(vw->exportfilename, "r+"); //, pszSrcFile, __LINE__);
    810885          if (fp) {
    811886            oldsize = filelength(fileno(fp));
     
    9421017
    9431018        strcpy(filename, vw->exportfilename);
    944         if (export_filename(hwnd, filename, 1))
     1019        if (export_filename(hwnd, filename, !vw->fileattrreadonly))
    9451020          MLEdoblock(hwndMLE, WRITE, filename);
    9461021      }
     
    11381213        if (temp == MBID_CANCEL)
    11391214          return 0;
    1140         if (temp == MBID_YES)
     1215        if (temp == MBID_YES){
    11411216          WinSendMsg(hwnd,
    1142                      WM_COMMAND, MPFROM2SHORT(MLE_EXPORTFILE, 0), MPVOID);
     1217                     WM_COMMAND, MPFROM2SHORT(MLE_EXPORTFILE, 0), MPVOID);
     1218          if (vw->fileattrreadonly) {
     1219            temp = saymsg(MB_OKCANCEL | MB_ICONEXCLAMATION,
     1220                          hwnd, NullStr, "File is readonly and has not been saved");
     1221            if (temp == MBID_CANCEL)
     1222                return 0;
     1223          }
     1224        }
    11431225      }
    11441226    }
Note: See TracChangeset for help on using the changeset viewer.