home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 2 BBS / 02-BBS.zip / fsrc1241.zip / areasettings.c < prev    next >
C/C++ Source or Header  |  1999-02-14  |  33KB  |  788 lines

  1. /*---------------------------------------------------------------------------+
  2.  | Titel: AREASETTINGS.C                                                     |
  3.  +-----------------------------------------+---------------------------------+
  4.  | Erstellt von: Michael Hohner            | Am: 22.02.1995                  |
  5.  +-----------------------------------------+---------------------------------+
  6.  | System: OS/2 2.x                                                          |
  7.  +---------------------------------------------------------------------------+
  8.  | Beschreibung:                                                             |
  9.  |                                                                           |
  10.  |     Settings-Notebook einer Area                                          |
  11.  |                                                                           |
  12.  |                                                                           |
  13.  +---------------------------------------------------------------------------+
  14.  | Bemerkungen:                                                              |
  15.  +---------------------------------------------------------------------------*/
  16.  
  17. #pragma strings(readonly)
  18. /*----------------------------- Header-Dateien ------------------------------*/
  19. #define INCL_WIN
  20. #include <os2.h>
  21. #include <string.h>
  22. #include <stdlib.h>
  23. #include <stdio.h>
  24.  
  25. #include "main.h"
  26. #include "resids.h"
  27. #include "messages.h"
  28. #include "structs.h"
  29. #include "msgheader.h"
  30. #include "areaman\areaman.h"
  31. #include "dialogids.h"
  32. #include "setupdlg.h"
  33. #include "areadlg.h"
  34. #include "utility.h"
  35. #include "controls\editwin.h"
  36. #include "controls\attrselect.h"
  37. #include "handlemsg\handlemsg.h"
  38.  
  39. #include "areasettings.h"
  40.  
  41. /*--------------------------------- Defines ---------------------------------*/
  42.  
  43. #define APM_AREAFORMAT   (WM_USER+1)
  44.  
  45. /*---------------------------------- Typen ----------------------------------*/
  46.  
  47. /*---------------------------- Globale Variablen ----------------------------*/
  48.  
  49. extern HMODULE hmodLang;
  50. extern HAB anchor;
  51.  
  52. /*--------------------------- Funktionsprototypen ---------------------------*/
  53.  
  54. /*----------------------- interne Funktionsprototypen -----------------------*/
  55.  
  56. static int SendToAllPages(HWND hwndNotebook, ULONG msg, MPARAM mp1, MPARAM mp2);
  57. static void InsertSettingsPages(HWND notebook, PVOID dlgpar);
  58. static void AddCancelItem(HWND hwnd);
  59. static MRESULT EXPENTRY AreaGenSettProc(HWND parent, ULONG message, MPARAM mp1, MPARAM mp2);
  60. static MRESULT EXPENTRY AreaMsgBaseProc(HWND parent, ULONG message, MPARAM mp1, MPARAM mp2);
  61. static MRESULT EXPENTRY AreaAttribProc(HWND parent, ULONG message, MPARAM mp1, MPARAM mp2);
  62.  
  63. /*---------------------------------------------------------------------------*/
  64. /* Funktionsname: AreaSettingsProc                                           */
  65. /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
  66. /* Beschreibung: Dialog-Prozedur der Area-Settings                           */
  67. /*                                                                           */
  68. /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
  69. /* Parameter: WinProc                                                        */
  70. /*                                                                           */
  71. /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
  72. /* Rückgabewerte: MRESULT                                                    */
  73. /*                                                                           */
  74. /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
  75. /* Sonstiges:                                                                */
  76. /*                                                                           */
  77. /*---------------------------------------------------------------------------*/
  78.  
  79. MRESULT EXPENTRY AreaSettingsProc(HWND parent, ULONG message, MPARAM mp1, MPARAM mp2)
  80. {
  81.    extern WINDOWPOSITIONS windowpositions;
  82.    extern HWND hwndhelp;
  83.    char pchTemp[200];
  84.    char pchTitle[250];
  85.    HWND notebook=NULLHANDLE;
  86.    MRESULT resultbuf=0;
  87.    int rc;
  88.  
  89.    switch(message)
  90.    {
  91.       case WM_INITDLG:
  92.          notebook=WinWindowFromID(parent,IDD_AREASETTINGS+1);
  93.          AddCancelItem(parent);
  94.          InsertSettingsPages(notebook, (PVOID) mp2);
  95.          WinSetWindowULong(parent, QWL_USER, ((PAREAPAR)mp2)->bMultiple);
  96.          RestoreWinPos(parent, &windowpositions.areasetuppos, TRUE, TRUE);
  97.          WinAssociateHelpInstance(hwndhelp, parent);
  98.          break;
  99.  
  100.       case WM_ADJUSTFRAMEPOS:
  101.          SizeToClient(anchor, (PSWP) mp1, parent, IDD_AREASETTINGS+1);
  102.          break;
  103.  
  104.       case WM_QUERYTRACKINFO:
  105.          /* Default-Werte aus Original-Prozedur holen */
  106.          resultbuf=WinDefDlgProc(parent,message,mp1,mp2);
  107.  
  108.          /* Minimale Fenstergroesse einstellen */
  109.          ((PTRACKINFO)mp2)->ptlMinTrackSize.x=255;
  110.          ((PTRACKINFO)mp2)->ptlMinTrackSize.y=190;
  111.  
  112.          return resultbuf;
  113.  
  114.       case WM_CLOSE:
  115.          if (!WinQueryWindowULong(parent, QWL_USER))
  116.          {
  117.             /* Message an alle Windows schicken */
  118.             rc = SendToAllPages(WinWindowFromID(parent, IDD_AREASETTINGS+1), APM_REQCLOSE, NULL, NULL);
  119.             if (rc == 1)
  120.                return (MRESULT) FALSE;
  121.             if (rc == 2)
  122.             {
  123.                SendToAllPages(WinWindowFromID(parent, IDD_AREASETTINGS+1), APM_CANCEL, NULL, NULL);
  124.                WinDismissDlg(parent, DID_CANCEL);
  125.             }
  126.             else
  127.                WinDismissDlg(parent, DID_OK);
  128.          }
  129.          else
  130.             WinDismissDlg(parent, DID_OK);
  131.          QueryWinPos(parent, &(windowpositions.areasetuppos));
  132.          WinAssociateHelpInstance(hwndhelp, WinQueryWindow(parent, QW_OWNER));
  133.          return (MRESULT) FALSE;
  134.  
  135.       case APM_SETTITLE:
  136.          if (!((PCHAR) mp1)[0])
  137.             LoadString(IDST_AP_EMPTYTITLE, 250, pchTitle);
  138.          else
  139.          {
  140.             LoadString(IDST_AP_TITLE, 200, pchTemp);
  141.             sprintf(pchTitle, pchTemp, (PCHAR) mp1);
  142.          }
  143.          WinSetWindowText(parent, pchTitle);
  144.          break;
  145.  
  146.       case WM_COMMAND:
  147.          if (SHORT1FROMMP(mp1) == IDM_AS_CANCEL)
  148.          {
  149.             SendToAllPages(WinWindowFromID(parent, IDD_AREASETTINGS+1), APM_CANCEL, NULL, NULL);
  150.             WinDismissDlg(parent, DID_CANCEL);
  151.          }
  152.          return (MRESULT) FALSE;
  153.  
  154.       default:
  155.          break;
  156.    }
  157.    return WinDefDlgProc(parent,message,mp1,mp2);
  158. }
  159.  
  160. /*---------------------------------------------------------------------------*/
  161. /* Funktionsname: SendToAllPages                                             */
  162. /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
  163. /* Beschreibung: Schickt eine Message an alle Seiten eines Notebooks.        */
  164. /*               Wenn eine Seite eine int != 0 zurueckliefert, wird zu der   */
  165. /*               Seite umgeschaltet und der int zurueckgeliefert. Sonst      */
  166. /*               wird 0 zurueckgeliefert.                                    */
  167. /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
  168. /* Parameter: hwndNotebook: Notebook                                         */
  169. /*            msg: Zu sendende Message                                       */
  170. /*            mp1: Parameter 1                                               */
  171. /*            mp2: Parameter 2                                               */
  172. /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
  173. /* Rückgabewerte: Rueckgabewert der Seite                                    */
  174. /*                0  sonst                                                   */
  175. /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
  176. /* Sonstiges:                                                                */
  177. /*                                                                           */
  178. /*---------------------------------------------------------------------------*/
  179.  
  180. static int SendToAllPages(HWND hwndNotebook, ULONG msg, MPARAM mp1, MPARAM mp2)
  181. {
  182.    ULONG ulPageID = 0;
  183.    int rc=0;
  184.  
  185.    while(ulPageID = (ULONG) SendMsg(hwndNotebook, BKM_QUERYPAGEID,
  186.                                     MPFROMLONG(ulPageID),
  187.                                     MPFROM2SHORT(ulPageID?BKA_NEXT:BKA_FIRST, 0)))
  188.    {
  189.       HWND hwndPage;
  190.  
  191.       hwndPage = (HWND) SendMsg(hwndNotebook, BKM_QUERYPAGEWINDOWHWND,
  192.                                    MPFROMLONG(ulPageID), NULL);
  193.       if (rc=(int)SendMsg(hwndPage, msg, mp1, mp2))
  194.       {
  195.          /* zur Seite blaettern */
  196.          SendMsg(hwndNotebook, BKM_TURNTOPAGE, MPFROMLONG(ulPageID), NULL);
  197.          return rc;
  198.       }
  199.    }
  200.    return 0;
  201. }
  202.  
  203. /*---------------------------------------------------------------------------*/
  204. /* Funktionsname: AddCancelItem                                              */
  205. /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
  206. /* Beschreibung: Fuegt den Abbruch-Menuepunkt zum Systemmenue hinzu          */
  207. /*                                                                           */
  208. /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
  209. /* Parameter: hwnd: Dialog-Window                                            */
  210. /*                                                                           */
  211. /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
  212. /* Rückgabewerte: -                                                          */
  213. /*                                                                           */
  214. /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
  215. /* Sonstiges:                                                                */
  216. /*                                                                           */
  217. /*---------------------------------------------------------------------------*/
  218.  
  219. static void AddCancelItem(HWND hwnd)
  220. {
  221.    HWND        hSysMenu,
  222.                hSysSubMenu;
  223.    MENUITEM    SysMenu;
  224.    SHORT       idSysMenu;
  225.  
  226.    MENUITEM Item[2] = {{MIT_END, MIS_SEPARATOR, 0, 0,             NULLHANDLE, 0},
  227.                        {MIT_END, MIS_TEXT,      0, IDM_AS_CANCEL, NULLHANDLE, 0}};
  228.    char pchTemp[100]="";
  229.  
  230.    hSysMenu = WinWindowFromID(hwnd, FID_SYSMENU);
  231.    idSysMenu = SHORT1FROMMR(SendMsg(hSysMenu, MM_ITEMIDFROMPOSITION, NULL, NULL));
  232.  
  233.    SendMsg(hSysMenu, MM_QUERYITEM, MPFROM2SHORT(idSysMenu, FALSE),
  234.               &SysMenu);
  235.    hSysSubMenu = SysMenu.hwndSubMenu;
  236.  
  237.    LoadString(IDST_AP_CANCEL, sizeof(pchTemp), pchTemp);
  238.  
  239.    SendMsg(hSysSubMenu, MM_INSERTITEM, &Item[0], NULL);
  240.    SendMsg(hSysSubMenu, MM_INSERTITEM, &Item[1], pchTemp);
  241.  
  242.    return;
  243. }
  244.  
  245. /*---------------------------------------------------------------------------*/
  246. /* Funktionsname: InsertSettingsPages                                        */
  247. /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
  248. /* Beschreibung: Fuegt alle Seiten in das Notebook ein, initialisiert        */
  249. /*               das Notebook                                                */
  250. /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
  251. /* Parameter: notebook: Window-Handle des Notebooks                          */
  252. /*            dlgpar: Parameter, wird an die Seiten weitergegeben            */
  253. /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
  254. /* Rückgabewerte: -                                                          */
  255. /*                                                                           */
  256. /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
  257. /* Sonstiges:                                                                */
  258. /*                                                                           */
  259. /*---------------------------------------------------------------------------*/
  260.  
  261. static void InsertSettingsPages(HWND notebook, PVOID dlgpar)
  262. {
  263.    PAREAPAR pAreaPar = (PAREAPAR) dlgpar;
  264.  
  265.    SetNotebookParams(notebook, 120);
  266.  
  267.    InsertOnePage(notebook, IDD_AS_GENERAL, IDST_TAB_AS_GENERAL, AreaGenSettProc, dlgpar);
  268.    if (!pAreaPar->bMultiple)
  269.       InsertOnePage(notebook, IDD_AS_MSGBASE, IDST_TAB_AS_MSGBASE, AreaMsgBaseProc, dlgpar);
  270.    InsertOnePage(notebook, IDD_AS_ATTRIB,  IDST_TAB_AS_ATTRIB,  AreaAttribProc, dlgpar);
  271.  
  272.    return;
  273. }
  274.  
  275. /*---------------------------------------------------------------------------*/
  276. /* Funktionsname: AreaGenSettProc                                            */
  277. /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
  278. /* Beschreibung: Allgemeine Einstellungen einer Area                         */
  279. /*                                                                           */
  280. /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
  281. /* Parameter: WinProc                                                        */
  282. /*                                                                           */
  283. /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
  284. /* Rückgabewerte: MRESULT                                                    */
  285. /*                                                                           */
  286. /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
  287. /* Sonstiges:                                                                */
  288. /*                                                                           */
  289. /*---------------------------------------------------------------------------*/
  290.  
  291. static MRESULT EXPENTRY AreaGenSettProc(HWND parent, ULONG message, MPARAM mp1, MPARAM mp2)
  292. {
  293.    HWND hwndList;
  294.    extern USERDATAOPT userdaten;
  295.    extern AREALIST arealiste;
  296.    extern TEMPLATELIST templatelist;
  297.    SHORT sItem=0, sSelect=0;
  298.    static AREADEFLIST *pArea=NULL;
  299.    char pchTemp[LEN_PATHNAME+1];
  300.    static HWND hwndSettingsFrame;
  301.    PMSGTEMPLATE pTemplate;
  302.    AREADEFLIST *pAreaTemp;
  303.  
  304.    switch(message)
  305.    {
  306.       case WM_INITDLG:
  307.          pArea=((PAREAPAR)mp2)->pAreaDef;
  308.  
  309.          if (!((PAREAPAR)mp2)->bMultiple)
  310.          {
  311.             SendMsg(hwndSettingsFrame=WinQueryWindow(parent, QW_PARENT),
  312.                        APM_SETTITLE, pArea->areadata.areatag, NULL);
  313.             WinSendDlgItemMsg(parent,IDD_AS_GENERAL+3,
  314.                               EM_SETTEXTLIMIT,
  315.                               MPFROMSHORT(LEN_AREATAG),
  316.                               (MPARAM) NULL);
  317.  
  318.             WinSendDlgItemMsg(parent,IDD_AS_GENERAL+5,
  319.                               EM_SETTEXTLIMIT,
  320.                               MPFROMSHORT(LEN_AREADESC),
  321.                               (MPARAM) NULL);
  322.          }
  323.          else
  324.          {
  325.             WinShowWindow(WinWindowFromID(parent, IDD_AS_GENERAL+2), FALSE);
  326.             WinShowWindow(WinWindowFromID(parent, IDD_AS_GENERAL+3), FALSE);
  327.             WinShowWindow(WinWindowFromID(parent, IDD_AS_GENERAL+4), FALSE);
  328.             WinShowWindow(WinWindowFromID(parent, IDD_AS_GENERAL+5), FALSE);
  329.          }
  330.  
  331.          /* Adressen eintragen */
  332.          hwndList=WinWindowFromID(parent, IDD_AS_GENERAL+9);
  333.          SendMsg(hwndList, LM_DELETEALL, (MPARAM)0, (MPARAM)0);
  334.          sItem=0;
  335.          sSelect = LIT_NONE;
  336.          while(sItem<MAX_ADDRESSES && userdaten.address[sItem][0])
  337.          {
  338.             SendMsg(hwndList, LM_INSERTITEM,
  339.                        MPFROMSHORT(LIT_END),
  340.                        (MPARAM) userdaten.address[sItem]);
  341.             if (pArea && !strcmp(pArea->areadata.address, userdaten.address[sItem]))
  342.                sSelect = sItem;
  343.             sItem++;
  344.          }
  345.          SendMsg(hwndList, LM_SELECTITEM, MPFROMSHORT(sSelect), (MPARAM) TRUE);
  346.  
  347.          /* Namen eintragen */
  348.          hwndList=WinWindowFromID(parent, IDD_AS_GENERAL+12);
  349.          SendMsg(hwndList, LM_DELETEALL, (MPARAM)0, (MPARAM)0);
  350.          sItem=0;
  351.          sSelect = LIT_NONE;
  352.          while(sItem<MAX_USERNAMES && userdaten.username[sItem][0])
  353.          {
  354.             SendMsg(hwndList, LM_INSERTITEM,
  355.                        MPFROMSHORT(LIT_END),
  356.                        (MPARAM) userdaten.username[sItem]);
  357.             if (pArea && !strcmp(pArea->areadata.username, userdaten.username[sItem]))
  358.                sSelect = sItem;
  359.             sItem++;
  360.          }
  361.          SendMsg(hwndList, LM_SELECTITEM, MPFROMSHORT(sSelect), (MPARAM) TRUE);
  362.  
  363.          if (pArea)
  364.          {
  365.             WinSetDlgItemText(parent, IDD_AS_GENERAL+3,
  366.                               pArea->areadata.areatag);
  367.             WinSetDlgItemText(parent, IDD_AS_GENERAL+5,
  368.                               pArea->areadata.areadesc);
  369.  
  370.             if (pArea->areadata.ulAreaOpt & AREAOPT_FROMCFG)
  371.                WinSendDlgItemMsg(parent, IDD_AS_GENERAL+3, EM_SETREADONLY,
  372.                                  (MPARAM)TRUE, NULL);
  373.          }
  374.  
  375.          /* Template-Namen eintragen */
  376.          pTemplate = templatelist.pTemplates;
  377.          while (pTemplate)
  378.          {
  379.             sItem = (SHORT) WinSendDlgItemMsg(parent, IDD_AS_GENERAL+14, LM_INSERTITEM,
  380.                                               MPFROMSHORT(LIT_SORTASCENDING),
  381.                                               pTemplate->TName);
  382.             WinSendDlgItemMsg(parent, IDD_AS_GENERAL+14, LM_SETITEMHANDLE,
  383.                               MPFROMSHORT(sItem),
  384.                               MPFROMLONG(pTemplate->ulID));
  385.             if (pArea && pTemplate->ulID == pArea->areadata.ulTemplateID)
  386.                WinSendDlgItemMsg(parent, IDD_AS_GENERAL+14, LM_SELECTITEM,
  387.                                  MPFROMSHORT(sItem), MPFROMSHORT(TRUE));
  388.  
  389.             pTemplate = pTemplate->next;
  390.          }
  391.          break;
  392.  
  393.       case WM_CLOSE:
  394.       case WM_DESTROY:
  395.          if (!WinQueryWindowULong(parent, QWL_USER))
  396.          {
  397.             WinQueryDlgItemText(parent, IDD_AS_GENERAL+3, LEN_AREATAG+1,
  398.                                 pchTemp);
  399.             if (strcmp(pArea->areadata.areatag, pchTemp))
  400.             {
  401.                strcpy(pArea->areadata.areatag, pchTemp);
  402.                arealiste.bDirty = TRUE;
  403.                pArea->dirty=TRUE;
  404.             }
  405.             WinQueryDlgItemText(parent, IDD_AS_GENERAL+5, LEN_AREADESC+1,
  406.                                 pchTemp);
  407.             if (strcmp(pArea->areadata.areadesc, pchTemp))
  408.             {
  409.                strcpy(pArea->areadata.areadesc, pchTemp);
  410.                arealiste.bDirty = TRUE;
  411.                pArea->dirty=TRUE;
  412.             }
  413.             WinQueryDlgItemText(parent, IDD_AS_GENERAL+9, LEN_5DADDRESS+1,
  414.                                 pchTemp);
  415.             if (strcmp(pArea->areadata.address, pchTemp))
  416.             {
  417.                strcpy(pArea->areadata.address, pchTemp);
  418.                arealiste.bDirty = TRUE;
  419.                pArea->dirty=TRUE;
  420.             }
  421.             WinQueryDlgItemText(parent, IDD_AS_GENERAL+12, LEN_USERNAME+1,
  422.                                 pchTemp);
  423.             if (strcmp(pArea->areadata.username, pchTemp))
  424.             {
  425.                strcpy(pArea->areadata.username, pchTemp);
  426.                arealiste.bDirty = TRUE;
  427.                pArea->dirty=TRUE;
  428.             }
  429.             sItem = (SHORT)WinSendDlgItemMsg(parent, IDD_AS_GENERAL+14, LM_QUERYSELECTION,
  430.                                                MPFROMSHORT(LIT_FIRST), NULL);
  431.             if (sItem >= 0)
  432.             {
  433.                ULONG ulID;
  434.  
  435.                ulID = (ULONG) WinSendDlgItemMsg(parent, IDD_AS_GENERAL+14, LM_QUERYITEMHANDLE,
  436.                                                 MPFROMSHORT(sItem), NULL);
  437.                if (ulID != pArea->areadata.ulTemplateID)
  438.                {
  439.                   pArea->areadata.ulTemplateID = ulID;
  440.                   arealiste.bDirty = TRUE;
  441.                   pArea->dirty=TRUE;
  442.                }
  443.             }
  444.          }
  445.          break;
  446.  
  447.       case WM_COMMAND:
  448.          return (MRESULT) FALSE;
  449.  
  450.       case WM_CONTROL:
  451.          if (SHORT1FROMMP(mp1)==IDD_AS_GENERAL+3)
  452.             if (SHORT2FROMMP(mp1)==EN_KILLFOCUS)
  453.             {
  454.                char pchTempTag[LEN_AREATAG+1];
  455.  
  456.                WinQueryDlgItemText(parent, IDD_AS_GENERAL+3, LEN_AREATAG+1, pchTempTag);
  457.                SendMsg(hwndSettingsFrame,
  458.                           APM_SETTITLE, pchTempTag, NULL);
  459.             }
  460.          if (SHORT1FROMMP(mp1) == IDD_AS_GENERAL+15)
  461.             if (SHORT2FROMMP(mp1) == BN_CLICKED ||
  462.                 SHORT2FROMMP(mp1) == BN_DBLCLICKED)
  463.             {
  464.                if (WinQueryButtonCheckstate(parent, IDD_AS_GENERAL+15))
  465.                   WinEnableControl(parent, IDD_AS_GENERAL+7, FALSE);
  466.                else
  467.                   WinEnableControl(parent, IDD_AS_GENERAL+7, TRUE);
  468.             }
  469.          break;
  470.  
  471.       case APM_REQCLOSE:
  472.          WinQueryDlgItemText(parent, IDD_AS_GENERAL+3, LEN_AREATAG+1,
  473.                              pchTemp);
  474.          if (pchTemp[0] == 0)
  475.          {
  476.             /* Fehler, kein Area-Tag */
  477.             if (MessageBox(parent, IDST_MSG_NOAREATAG, 0,
  478.                            IDD_NOAREATAG, MB_RETRYCANCEL | MB_ERROR) == MBID_CANCEL)
  479.                 return (MRESULT) 2;
  480.             else
  481.                 return (MRESULT) 1;
  482.          }
  483.          else
  484.          {
  485.             pAreaTemp = AM_FindArea(&arealiste, pchTemp);
  486.             if (pAreaTemp && pAreaTemp != pArea)
  487.             {
  488.                /* Fehler, schon vorhanden */
  489.                if (MessageBox(parent, IDST_MSG_ALREADYHAVEAREA, 0,
  490.                               IDD_ALREADYHAVEAREA, MB_RETRYCANCEL | MB_ERROR) == MBID_CANCEL)
  491.                    return (MRESULT) 2;
  492.                else
  493.                    return (MRESULT) 1;
  494.             }
  495.          }
  496.          return (MRESULT) 0;
  497.  
  498.       case APM_CANCEL:
  499.          WinSetWindowULong(parent, QWL_USER, 1);
  500.          break;
  501.  
  502.       default:
  503.          break;
  504.    }
  505.    return WinDefDlgProc(parent,message,mp1,mp2);
  506. }
  507.  
  508. /*---------------------------------------------------------------------------*/
  509. /* Funktionsname: AreaMsgBaseProc                                            */
  510. /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
  511. /* Beschreibung: Message-Base-Settings einer Area                            */
  512. /*                                                                           */
  513. /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
  514. /* Parameter: WinProc                                                        */
  515. /*                                                                           */
  516. /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
  517. /* Rückgabewerte: MRESULT                                                    */
  518. /*                                                                           */
  519. /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
  520. /* Sonstiges:                                                                */
  521. /*                                                                           */
  522. /*---------------------------------------------------------------------------*/
  523.  
  524. static MRESULT EXPENTRY AreaMsgBaseProc(HWND parent, ULONG message, MPARAM mp1, MPARAM mp2)
  525. {
  526.    extern AREALIST arealiste;
  527.    extern HWND hwndhelp;
  528.    static AREADEFLIST *pArea=NULL;
  529.    char pchTemp[LEN_PATHNAME+1];
  530.    SHORT sTemp;
  531.  
  532.    switch(message)
  533.    {
  534.       case WM_INITDLG:
  535.          pArea=((AREAPAR *)mp2)->pAreaDef;
  536.          WinSubclassWindow(WinWindowFromID(parent, IDD_AS_MSGBASE+9),
  537.                            FileEntryProc);
  538.  
  539.          WinSendDlgItemMsg(parent, IDD_AS_MSGBASE+9,
  540.                            EM_SETTEXTLIMIT,
  541.                            MPFROMSHORT(LEN_PATHNAME),
  542.                            (MPARAM) NULL);
  543.          if (pArea)
  544.          {
  545.             WinSetDlgItemText(parent, IDD_AS_MSGBASE+9,
  546.                               pArea->areadata.pathfile);
  547.  
  548.             switch(pArea->areadata.areaformat)
  549.             {
  550.                case AREAFORMAT_FTS:
  551.                   WinCheckButton(parent, IDD_AS_MSGBASE+2, TRUE);
  552.                   break;
  553.  
  554.                case AREAFORMAT_SQUISH:
  555.                   WinCheckButton(parent, IDD_AS_MSGBASE+3, TRUE);
  556.                   break;
  557.  
  558.                case AREAFORMAT_JAM:
  559.                   WinCheckButton(parent, IDD_AS_MSGBASE+4, TRUE);
  560.                   break;
  561.  
  562.                default:
  563.                   WinCheckButton(parent, IDD_AS_MSGBASE+2, TRUE);
  564.                   break;
  565.             }
  566.             switch(pArea->areadata.areatype)
  567.             {
  568.                case AREATYPE_NET:
  569.                   WinCheckButton(parent, IDD_AS_MSGBASE+6, TRUE);
  570.                   break;
  571.  
  572.                case AREATYPE_ECHO:
  573.                   WinCheckButton(parent, IDD_AS_MSGBASE+7, TRUE);
  574.                   break;
  575.  
  576.                case AREATYPE_LOCAL:
  577.                   WinCheckButton(parent, IDD_AS_MSGBASE+12, TRUE);
  578.                   break;
  579.             }
  580.             if (pArea->areadata.ulAreaOpt & AREAOPT_FROMCFG)
  581.             {
  582.                WinEnableControl(parent, IDD_AS_MSGBASE+2, FALSE);
  583.                WinEnableControl(parent, IDD_AS_MSGBASE+3, FALSE);
  584.                WinEnableControl(parent, IDD_AS_MSGBASE+4, FALSE);
  585.                WinEnableControl(parent, IDD_AS_MSGBASE+6, FALSE);
  586.                WinEnableControl(parent, IDD_AS_MSGBASE+7, FALSE);
  587.                WinEnableControl(parent, IDD_AS_MSGBASE+12, FALSE);
  588.                WinSendDlgItemMsg(parent, IDD_AS_MSGBASE+9, EM_SETREADONLY,
  589.                                  (MPARAM)TRUE, (MPARAM) NULL);
  590.                WinEnableControl(parent, IDD_AS_MSGBASE+10, FALSE);
  591.             }
  592.          }
  593.          WinDefDlgProc(parent, message, mp1, mp2);
  594.          SetFocusControl(parent, IDD_AS_MSGBASE+9);
  595.          return (MRESULT) TRUE;
  596.  
  597.       case WM_CLOSE:
  598.       case WM_DESTROY:
  599.          if (!WinQueryWindowULong(parent, QWL_USER))
  600.          {
  601.             WinQueryDlgItemText(parent, IDD_AS_MSGBASE+9, LEN_PATHNAME+1,
  602.                                 pchTemp);
  603.             if (strcmp(pArea->areadata.pathfile, pchTemp))
  604.             {
  605.                strcpy(pArea->areadata.pathfile, pchTemp);
  606.                arealiste.bDirty = TRUE;
  607.                pArea->dirty=TRUE;
  608.             }
  609.  
  610.             if (WinQueryButtonCheckstate(parent, IDD_AS_MSGBASE+2))
  611.                sTemp=AREAFORMAT_FTS;
  612.             else
  613.                if (WinQueryButtonCheckstate(parent, IDD_AS_MSGBASE+3))
  614.                   sTemp=AREAFORMAT_SQUISH;
  615.                else
  616.                   if (WinQueryButtonCheckstate(parent, IDD_AS_MSGBASE+4))
  617.                      sTemp=AREAFORMAT_JAM;
  618.                   else
  619.                      sTemp=AREAFORMAT_FTS;
  620.  
  621.             if (sTemp!=pArea->areadata.areaformat)
  622.             {
  623.                pArea->areadata.areaformat=sTemp;
  624.                arealiste.bDirty = TRUE;
  625.                pArea->dirty=TRUE;
  626.             }
  627.  
  628.             if (WinQueryButtonCheckstate(parent, IDD_AS_MSGBASE+6))
  629.                sTemp=AREATYPE_NET;
  630.             else
  631.                if (WinQueryButtonCheckstate(parent, IDD_AS_MSGBASE+7))
  632.                   sTemp=AREATYPE_ECHO;
  633.                else
  634.                   if (WinQueryButtonCheckstate(parent, IDD_AS_MSGBASE+12))
  635.                      sTemp=AREATYPE_LOCAL;
  636.                   else
  637.                      sTemp=AREATYPE_NET;
  638.  
  639.             if (sTemp != pArea->areadata.areatype)
  640.             {
  641.                pArea->areadata.areatype=sTemp;
  642.                arealiste.bDirty = TRUE;
  643.                pArea->dirty=TRUE;
  644.             }
  645.          }
  646.          break;
  647.  
  648.       case WM_COMMAND:
  649.          if (SHORT1FROMMP(mp2)==CMDSRC_PUSHBUTTON)
  650.          {
  651.             if(SHORT1FROMMP(mp1)==IDD_AS_MSGBASE+10)
  652.             {
  653.                WinQueryDlgItemText(parent, IDD_AS_MSGBASE+9,
  654.                                    LEN_PATHNAME+1, pchTemp);
  655.                if (GetPathname(parent, pchTemp)==DID_OK)
  656.                {
  657.                   char drive[_MAX_DRIVE];
  658.                   char path[_MAX_DIR];
  659.                   char name[_MAX_FNAME];
  660.                   char ext[_MAX_EXT];
  661.  
  662.                   _splitpath(pchTemp, drive, path, name, ext);
  663.                   if (WinQueryButtonCheckstate(parent, IDD_AS_MSGBASE+3))
  664.                      _makepath(pchTemp, drive, path, name, "");
  665.                   else
  666.                   {
  667.                     _makepath(pchTemp, drive, path, "", "");
  668.                     pchTemp[strlen(pchTemp)-1]='\0';
  669.                   }
  670.                   WinSetDlgItemText(parent, IDD_AS_MSGBASE+9,
  671.                                     pchTemp);
  672.                   arealiste.bDirty = TRUE;
  673.                }
  674.             }
  675.          }
  676.          return (MRESULT) FALSE;
  677.  
  678.       case APM_REQCLOSE:
  679.          if (WinQueryDlgItemTextLength(parent, IDD_AS_MSGBASE+9)==0)
  680.          {
  681.             /* Fehler, kein Pfadname */
  682.             if (MessageBox(parent, IDST_MSG_NOPATHFILE, 0,
  683.                            IDD_NOPATHFILE, MB_RETRYCANCEL | MB_ERROR) == MBID_CANCEL)
  684.                 return (MRESULT) 2;
  685.             else
  686.                 return (MRESULT) 1;
  687.          }
  688.          return (MRESULT) 0;
  689.  
  690.       case APM_CANCEL:
  691.          WinSetWindowULong(parent, QWL_USER, 1);
  692.          break;
  693.  
  694.       default:
  695.          break;
  696.    }
  697.    return WinDefDlgProc(parent,message,mp1,mp2);
  698. }
  699.  
  700. /*---------------------------------------------------------------------------*/
  701. /* Funktionsname: AreaAttribProc                                             */
  702. /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
  703. /* Beschreibung: Sonstige Area-Attribute                                     */
  704. /*                                                                           */
  705. /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
  706. /* Parameter: WinProc                                                        */
  707. /*                                                                           */
  708. /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
  709. /* Rückgabewerte: MRESULT                                                    */
  710. /*                                                                           */
  711. /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
  712. /* Sonstiges:                                                                */
  713. /*                                                                           */
  714. /*---------------------------------------------------------------------------*/
  715.  
  716. static MRESULT EXPENTRY AreaAttribProc(HWND parent, ULONG message, MPARAM mp1, MPARAM mp2)
  717. {
  718.    extern AREALIST arealiste;
  719.    static AREADEFLIST *pArea=NULL;
  720.  
  721.    switch(message)
  722.    {
  723.       case WM_INITDLG:
  724.          pArea=((AREAPAR *)mp2)->pAreaDef;
  725.          if (pArea)
  726.          {
  727.             ULONG ulMask;
  728.  
  729.             WinCheckButton(parent, IDD_AS_ATTRIB+9, !!(pArea->areadata.ulAreaOpt & AREAOPT_HIGHASCII));
  730.             WinCheckButton(parent, IDD_AS_ATTRIB+10, !!(pArea->areadata.ulAreaOpt & AREAOPT_SEPARATOR));
  731.             WinCheckButton(parent, IDD_AS_ATTRIB+11, !!(pArea->areadata.ulAreaOpt & AREAOPT_NOHIGHLIGHT));
  732.  
  733.             /* Message Attributes */
  734.             MSG_QueryAttribCaps(&arealiste, pArea->areadata.areatag, &ulMask);
  735.             WinSendDlgItemMsg(parent, IDD_AS_ATTRIB+2, ATTSM_SETATTRIB,
  736.                               MPFROMLONG(pArea->areadata.ulDefAttrib),
  737.                               MPFROMLONG(ulMask));
  738.          }
  739.          break;
  740.  
  741.       case WM_CLOSE:
  742.       case WM_DESTROY:
  743.          if (!WinQueryWindowULong(parent, QWL_USER))
  744.          {
  745.             ULONG ulTemp = pArea->areadata.ulAreaOpt & AREAOPT_FROMCFG;
  746.  
  747.             if (WinQueryButtonCheckstate(parent, IDD_AS_ATTRIB+9))
  748.                ulTemp |= AREAOPT_HIGHASCII;
  749.             if (WinQueryButtonCheckstate(parent, IDD_AS_ATTRIB+10))
  750.                ulTemp |= AREAOPT_SEPARATOR;
  751.             if (WinQueryButtonCheckstate(parent, IDD_AS_ATTRIB+11))
  752.                ulTemp |= AREAOPT_NOHIGHLIGHT;
  753.             if (pArea->areadata.ulAreaOpt != ulTemp)
  754.             {
  755.                pArea->areadata.ulAreaOpt = ulTemp;
  756.                arealiste.bDirty = TRUE;
  757.                pArea->dirty=TRUE;
  758.             }
  759.  
  760.             ulTemp = (ULONG) WinSendDlgItemMsg(parent, IDD_AS_ATTRIB+2, ATTSM_QUERYATTRIB, NULL, NULL);
  761.             if (pArea->areadata.ulDefAttrib != ulTemp)
  762.             {
  763.                pArea->areadata.ulDefAttrib = ulTemp;
  764.                arealiste.bDirty = TRUE;
  765.                pArea->dirty=TRUE;
  766.             }
  767.          }
  768.          break;
  769.  
  770.       case WM_COMMAND:
  771.          return (MRESULT) FALSE;
  772.  
  773.       case APM_REQCLOSE:
  774.          return (MRESULT) 0;
  775.  
  776.       case APM_CANCEL:
  777.          WinSetWindowULong(parent, QWL_USER, 1);
  778.          break;
  779.  
  780.       default:
  781.          break;
  782.    }
  783.    return WinDefDlgProc(parent,message,mp1,mp2);
  784. }
  785.  
  786. /*-------------------------------- Modulende --------------------------------*/
  787.  
  788.