home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 8 Other / 08-Other.zip / cdtst105.zip / pmsam.h < prev    next >
Text File  |  1998-12-19  |  13KB  |  428 lines

  1. #ifndef __cplusplus
  2.     #define inline _Inline    // that's for VAC++, use static at worst
  3. #endif
  4.  
  5.  
  6. #ifndef BKS_TABBEDDIALOG
  7.  #define BKS_TABBEDDIALOG             0x00000800  /* Tabbed dialog           */
  8. #endif
  9. #ifndef BKS_BUTTONAREA
  10.  #define BKS_BUTTONAREA              0x00000200  /* Reserve space for      */
  11. #endif
  12.  
  13. HWND createClientFrame(HAB hab, HWND *hwndClient, char *classname,
  14.                  ULONG *frameFlags, PFNWP winproc, char *title);
  15. BOOL loadPosition(HWND hwnd, char *inifilename);
  16. BOOL savePosition(HWND hwnd, char *inifilename);
  17.  
  18. /* calling thread needs a message queue */
  19. void _System updateError(char *fmt, ...);
  20. void initError(HWND mainhwnd, LONG x, LONG y, LONG cx, LONG cy);
  21. void unInitError(void);
  22.  
  23. void _System updateStatus(char *fmt, ...);
  24. void initStatus(HWND mainhwnd, LONG x, LONG y, LONG cx, LONG cy);
  25. void unInitStatus(void);
  26.  
  27. /* put in WM_CHAR */
  28. void doControlNavigation(HWND hwnd, MPARAM mp1, MPARAM mp2);
  29.  
  30. /********************************/
  31. /* notebook page info structure */
  32. /********************************/
  33.  
  34. typedef struct _NBPAGE
  35. {
  36.      PFNWP     pfnwpDlg;                    /* Window procedure address for the dialog */
  37.      PSZ         szStatusLineText;        /* Text to go on status line */
  38.      PSZ         szTabText;                 /* Text to go on major tab */
  39.      ULONG     idDlg;                        /* ID of the dialog box for this page */
  40.      BOOL      skip;                        /* skip this page (for major pages with minor pages) */
  41.      USHORT     usTabType;                 /* BKA_MAJOR or BKA_MINOR */
  42.      ULONG     ulPageId;                    /* notebook page ID */
  43.      HWND      hwnd;                        /* set when page frame is loaded */
  44.  
  45. } NBPAGE, *PNBPAGE;
  46.  
  47. HWND createNotebook(HWND hwnd, NBPAGE *nbpage, ULONG pageCount);
  48. BOOL loadNotebookDlg(HWND hwndNotebook, NBPAGE *nbpage, ULONG pageCount);
  49.  
  50. /* very common PM stuff which I couldn't care less to remember by heart */
  51.  
  52. inline BOOL initPM(HAB *hab, HMQ *hmq)
  53. {
  54.     *hmq = *hab = 0;
  55.  
  56.     *hab = WinInitialize(0);
  57.     if(*hab)
  58.       *hmq = WinCreateMsgQueue(*hab, 0);
  59.     if(*hmq)
  60.       return TRUE;
  61.  
  62.     return FALSE;
  63. }
  64.  
  65. inline void runPM(HAB hab)
  66. {
  67.     QMSG qmsg;
  68.  
  69.     while( WinGetMsg( hab, &qmsg, 0L, 0, 0 ) )
  70.         WinDispatchMsg( hab, &qmsg );
  71. }
  72.  
  73. inline void closePM(HAB hab, HMQ hmq)
  74. {
  75.     WinDestroyMsgQueue( hmq );
  76.     WinTerminate( hab );
  77. }
  78.  
  79. inline BOOL isWarpSans(void)
  80. {
  81.     LONG fontcounter = 0;
  82.     HPS hps;
  83.     BOOL rc;
  84.  
  85.     hps = WinGetPS(HWND_DESKTOP);
  86.     rc = GpiQueryFonts(hps, QF_PUBLIC,"WarpSans", &fontcounter, 0, NULL);
  87.     WinReleasePS(hps);
  88.     return rc;
  89. }
  90.  
  91. inline HWND loadDlg(HWND parent, PFNWP winproc, ULONG id)
  92. {
  93.     return WinLoadDlg(parent, parent, winproc, 0, id, NULL);
  94. }
  95.  
  96. /*****************/
  97. /* check buttons */
  98. /*****************/
  99.  
  100. inline USHORT getCheck(HWND hwnd, LONG id)
  101. {
  102.     if(id)
  103.         return SHORT1FROMMR(WinSendDlgItemMsg(hwnd, id, BM_QUERYCHECK, 0, 0));
  104.     else
  105.         return SHORT1FROMMR(WinSendMsg(hwnd, BM_QUERYCHECK, 0, 0));
  106. }
  107.  
  108. inline USHORT setCheck(HWND hwnd, LONG id, USHORT state)
  109. {
  110.     if(id)
  111.         return SHORT1FROMMR(WinSendDlgItemMsg(hwnd, id, BM_SETCHECK, MPFROMSHORT(state), 0));
  112.     else
  113.         return SHORT1FROMMR(WinSendMsg(hwnd, BM_SETCHECK, MPFROMSHORT(state), 0));
  114. }
  115.  
  116. /******************/
  117. /* General Window */
  118. /******************/
  119.  
  120. inline ULONG getText(HWND hwnd, LONG id, char *buffer, LONG size)
  121. {
  122.     if(id)
  123.         return WinQueryDlgItemText(hwnd,id,size,buffer);
  124.     else
  125.         return WinQueryWindowText(hwnd,size,buffer);
  126. }
  127.  
  128. inline BOOL setText(HWND hwnd, LONG id, char *buffer)
  129. {
  130.     if(id)
  131.         return WinSetDlgItemText(hwnd, id, buffer);
  132.     else
  133.         return WinSetWindowText(hwnd, buffer);
  134. }
  135.  
  136. inline BOOL enable(HWND hwnd, LONG id)
  137. {
  138.     if(id)
  139.         return WinEnableWindow(WinWindowFromID(hwnd,id), TRUE);
  140.     else
  141.         return WinEnableWindow(hwnd, TRUE);
  142. }
  143.  
  144. inline BOOL disable(HWND hwnd, LONG id)
  145. {
  146.     if(id)
  147.         return WinEnableWindow(WinWindowFromID(hwnd,id), FALSE);
  148.     else
  149.         return WinEnableWindow(hwnd, FALSE);
  150. }
  151.  
  152. /***********/
  153. /* listbox */
  154. /***********/
  155.  
  156. inline SHORT getItemCount(HWND hwnd, LONG id)
  157. {
  158.     if(id)
  159.         return SHORT1FROMMR(WinSendDlgItemMsg(hwnd,id,LM_QUERYITEMCOUNT,0,0));
  160.     else
  161.         return SHORT1FROMMR(WinSendMsg(hwnd,LM_QUERYITEMCOUNT,0,0));
  162. }
  163.  
  164. inline SHORT getItemText(HWND hwnd, LONG id, SHORT item, char *buffer, LONG size)
  165. {
  166.     if(id)
  167.         return SHORT1FROMMR(WinSendDlgItemMsg(hwnd,id,LM_QUERYITEMTEXT,MPFROM2SHORT(item,size),MPFROMP(buffer)));
  168.     else
  169.         return SHORT1FROMMR(WinSendMsg(hwnd,LM_QUERYITEMTEXT,MPFROM2SHORT(item,size),MPFROMP(buffer)));
  170. }
  171.  
  172. inline SHORT getItemTextSize(HWND hwnd, LONG id, SHORT item)
  173. {
  174.     if(id)
  175.         return SHORT1FROMMR(WinSendDlgItemMsg(hwnd,id,LM_QUERYITEMTEXTLENGTH,MPFROMSHORT(item),0));
  176.     else
  177.         return SHORT1FROMMR(WinSendMsg(hwnd,LM_QUERYITEMTEXTLENGTH,MPFROMSHORT(item),0));
  178. }
  179.  
  180. inline SHORT insertItemText(HWND hwnd, LONG id, SHORT item, char *buffer)
  181. {
  182.     if(id)
  183.         return SHORT1FROMMR(WinSendDlgItemMsg(hwnd, id, LM_INSERTITEM, MPFROMSHORT(item), MPFROMP(buffer)));
  184.     else
  185.         return SHORT1FROMMR(WinSendMsg(hwnd, LM_INSERTITEM, MPFROMSHORT(item), MPFROMP(buffer)));
  186. }
  187.  
  188. inline BOOL setItemHandle(HWND hwnd, LONG id, SHORT item, void *pointer)
  189. {
  190.     if(id)
  191.         return LONGFROMMR(WinSendDlgItemMsg(hwnd, id, LM_SETITEMHANDLE, MPFROMSHORT(item), MPFROMP(pointer)));
  192.     else
  193.         return LONGFROMMR(WinSendMsg(hwnd, LM_SETITEMHANDLE, MPFROMSHORT(item), MPFROMP(pointer)));
  194. }
  195.  
  196. inline void *getItemHandle(HWND hwnd, LONG id, SHORT item)
  197. {
  198.     if(id)
  199.         return PVOIDFROMMR(WinSendDlgItemMsg(hwnd, id, LM_QUERYITEMHANDLE, MPFROMSHORT(item), 0));
  200.     else
  201.         return PVOIDFROMMR(WinSendMsg(hwnd, LM_QUERYITEMHANDLE, MPFROMSHORT(item), 0));
  202. }
  203.  
  204. inline SHORT deleteItem(HWND hwnd, LONG id, SHORT item)
  205. {
  206.     if(id)
  207.         return SHORT1FROMMR(WinSendDlgItemMsg(hwnd,id, LM_DELETEITEM, MPFROMSHORT(item),0));
  208.     else
  209.         return SHORT1FROMMR(WinSendMsg(hwnd, LM_DELETEITEM, MPFROMSHORT(item),0));
  210. }
  211.  
  212. inline SHORT deleteAllItems(HWND hwnd, LONG id)
  213. {
  214.     if(id)
  215.         return SHORT1FROMMR(WinSendDlgItemMsg(hwnd,id, LM_DELETEALL, 0,0));
  216.     else
  217.         return SHORT1FROMMR(WinSendMsg(hwnd, LM_DELETEALL, 0,0));
  218. }
  219.  
  220. inline SHORT selectItem(HWND hwnd, LONG id, SHORT item)
  221. {
  222.     if(id)
  223.         return SHORT1FROMMR(WinSendDlgItemMsg(hwnd,id, LM_SELECTITEM, MPFROMSHORT(item),MPFROMLONG(TRUE)));
  224.     else
  225.         return SHORT1FROMMR(WinSendMsg(hwnd, LM_SELECTITEM, MPFROMSHORT(item),MPFROMLONG(TRUE)));
  226. }
  227.  
  228. inline SHORT deSelectItem(HWND hwnd, LONG id, SHORT item)
  229. {
  230.     if(id)
  231.         return SHORT1FROMMR(WinSendDlgItemMsg(hwnd,id, LM_SELECTITEM, MPFROMSHORT(item),MPFROMLONG(FALSE)));
  232.     else
  233.         return SHORT1FROMMR(WinSendMsg(hwnd, LM_SELECTITEM, MPFROMSHORT(item),MPFROMLONG(FALSE)));
  234. }
  235.  
  236. inline SHORT getSelectItem(HWND hwnd, LONG id, SHORT startitem)
  237. {
  238.     if(id)
  239.         return SHORT1FROMMR(WinSendDlgItemMsg(hwnd,id, LM_QUERYSELECTION, MPFROMSHORT(startitem),0));
  240.     else
  241.         return SHORT1FROMMR(WinSendMsg(hwnd, LM_QUERYSELECTION, MPFROMSHORT(startitem),0));
  242. }
  243.  
  244. inline SHORT searchItemText(HWND hwnd, LONG id, SHORT startitem, char *string)
  245. {
  246.     if(id)
  247.         return SHORT1FROMMR(WinSendDlgItemMsg(hwnd,id, LM_SEARCHSTRING, MPFROM2SHORT(0,startitem),MPFROMP(string)));
  248.     else
  249.         return SHORT1FROMMR(WinSendMsg(hwnd, LM_SEARCHSTRING, MPFROM2SHORT(0,startitem),MPFROMP(string)));
  250. }
  251.  
  252.  
  253. /**************/
  254. /* Containers */
  255. /**************/
  256.  
  257. inline RECORDCORE *allocaRecords(HWND hwnd, LONG id, USHORT count, USHORT custom)
  258. {
  259.     if(id)
  260.         return (RECORDCORE *) PVOIDFROMMR(WinSendDlgItemMsg(hwnd,id, CM_ALLOCRECORD, MPFROMSHORT(custom), MPFROMSHORT(count)));
  261.     else
  262.         return (RECORDCORE *) PVOIDFROMMR(WinSendMsg(hwnd, CM_ALLOCRECORD, MPFROMSHORT(custom), MPFROMSHORT(count)));
  263. }
  264.  
  265. inline BOOL freeRecords(HWND hwnd, LONG id, RECORDCORE *records, ULONG count)
  266. {
  267.     if(id)
  268.         return LONGFROMMR(WinSendDlgItemMsg(hwnd,id, CM_FREERECORD, MPFROMP(records), MPFROMLONG(count)));
  269.     else
  270.         return LONGFROMMR(WinSendMsg(hwnd, CM_FREERECORD, MPFROMP(records), MPFROMLONG(count)));
  271. }
  272.  
  273. inline ULONG insertRecords(HWND hwnd, LONG id, RECORDCORE *records, RECORDINSERT *info)
  274. {
  275.     if(id)
  276.         return LONGFROMMR(WinSendDlgItemMsg(hwnd,id, CM_INSERTRECORD, MPFROMP(records), MPFROMP(info)));
  277.     else
  278.         return LONGFROMMR(WinSendMsg(hwnd, CM_INSERTRECORD, MPFROMP(records), MPFROMP(info)));
  279. }
  280.  
  281. inline RECORDCORE *searchRecords(HWND hwnd, LONG id, RECORDCORE *record, USHORT emphasis)
  282. {
  283.     if(id)
  284.         return (RECORDCORE *) PVOIDFROMMR(WinSendDlgItemMsg(hwnd,id, CM_QUERYRECORDEMPHASIS, MPFROMP(record), MPFROMLONG(emphasis)));
  285.     else
  286.         return (RECORDCORE *) PVOIDFROMMR(WinSendMsg(hwnd, CM_QUERYRECORDEMPHASIS, MPFROMP(record), MPFROMLONG(emphasis)));
  287. }
  288.  
  289. inline RECORDCORE *enumRecords(HWND hwnd, LONG id, RECORDCORE *record, USHORT cmd)
  290. {
  291.     if( (ULONG) record == CMA_FIRST) cmd = CMA_FIRST;
  292.     else if( (ULONG) record == CMA_LAST) cmd = CMA_LAST;
  293.  
  294.     if(id)
  295.         return (RECORDCORE *) PVOIDFROMMR(WinSendDlgItemMsg(hwnd,id, CM_QUERYRECORD, MPFROMP(record), MPFROM2SHORT(cmd,CMA_ITEMORDER)));
  296.     else
  297.         return (RECORDCORE *) PVOIDFROMMR(WinSendMsg(hwnd, CM_QUERYRECORD, MPFROMP(record), MPFROM2SHORT(cmd,CMA_ITEMORDER)));
  298. }
  299.  
  300. inline ULONG removeRecords(HWND hwnd, LONG id, RECORDCORE *records[], ULONG count)
  301. {
  302.     if(id)
  303.         return LONGFROMMR(WinSendDlgItemMsg(hwnd,id, CM_REMOVERECORD,
  304.         MPFROMP(records), MPFROM2SHORT(count, CMA_INVALIDATE | CMA_FREE)));
  305.     else
  306.         return LONGFROMMR(WinSendMsg(hwnd, CM_REMOVERECORD,
  307.         MPFROMP(records), MPFROM2SHORT(count, CMA_INVALIDATE | CMA_FREE)));
  308. }
  309.  
  310. inline BOOL getRecordPosition(HWND hwnd, LONG id, RECORDCORE *record, RECTL *pos, ULONG fsExtent)
  311. {
  312.     QUERYRECORDRECT query;
  313.  
  314.     query.cb = sizeof(query);
  315.     query.pRecord = record;
  316.     query.fRightSplitWindow = FALSE;
  317. //   query.fsExtent = CMA_ICON | CMA_TEXT;
  318.     query.fsExtent = fsExtent;
  319.  
  320.     if(id)
  321.         return LONGFROMMR(WinSendDlgItemMsg(hwnd,id, CM_QUERYRECORDRECT, MPFROMP(pos), MPFROMP(&query)));
  322.     else
  323.         return LONGFROMMR(WinSendMsg(hwnd, CM_QUERYRECORDRECT, MPFROMP(pos), MPFROMP(&query)));
  324. }
  325.  
  326. inline FIELDINFO *allocaFieldInfo(HWND hwnd, LONG id, USHORT count)
  327. {
  328.     if(id)
  329.         return (FIELDINFO *) PVOIDFROMMR(WinSendDlgItemMsg(hwnd, id, CM_ALLOCDETAILFIELDINFO, MPFROMSHORT(count), 0));
  330.     else
  331.         return (FIELDINFO *) PVOIDFROMMR(WinSendMsg(hwnd, CM_ALLOCDETAILFIELDINFO, MPFROMSHORT(count), 0));
  332. }
  333.  
  334. inline USHORT insertFieldInfo(HWND hwnd, LONG id, FIELDINFO *records, FIELDINFOINSERT *info)
  335. {
  336.     if(id)
  337.         return SHORT1FROMMR(WinSendDlgItemMsg(hwnd, id, CM_INSERTDETAILFIELDINFO, MPFROMP(records), MPFROMP(info)));
  338.     else
  339.         return SHORT1FROMMR(WinSendMsg(hwnd, CM_INSERTDETAILFIELDINFO, MPFROMP(records), MPFROMP(info)));
  340. }
  341.  
  342. inline SHORT removeFieldInfo(HWND hwnd, LONG id, FIELDINFO *fields[], USHORT count)
  343. {
  344.     if(id)
  345.         return SHORT1FROMMR(WinSendDlgItemMsg(hwnd, id, CM_REMOVEDETAILFIELDINFO, MPFROMP(fields), MPFROM2SHORT(count,CMA_FREE)));
  346.     else
  347.         return SHORT1FROMMR(WinSendMsg(hwnd, CM_REMOVEDETAILFIELDINFO, MPFROMP(fields), MPFROM2SHORT(count,CMA_FREE)));
  348. }
  349.  
  350.  
  351. inline BOOL setRecordSource(HWND hwnd, LONG id, RECORDCORE *record, BOOL on)
  352. {
  353.     if(id)
  354.         return LONGFROMMR(WinSendDlgItemMsg(hwnd, id, CM_SETRECORDEMPHASIS, MPFROMP(record), MPFROM2SHORT(on, CRA_SOURCE)));
  355.     else
  356.         return LONGFROMMR(WinSendMsg(hwnd, CM_SETRECORDEMPHASIS, MPFROMP(record), MPFROM2SHORT(on, CRA_SOURCE)));
  357. }
  358.  
  359. inline BOOL selectRecord(HWND hwnd, LONG id, RECORDCORE *record, BOOL on)
  360. {
  361.     if(id)
  362.         return LONGFROMMR(WinSendDlgItemMsg(hwnd, id, CM_SETRECORDEMPHASIS, MPFROMP(record), MPFROM2SHORT(on, CRA_SELECTED)));
  363.     else
  364.         return LONGFROMMR(WinSendMsg(hwnd, CM_SETRECORDEMPHASIS, MPFROMP(record), MPFROM2SHORT(on, CRA_SELECTED)));
  365. }
  366.  
  367. inline BOOL selectAllRecords(HWND hwnd, LONG id, BOOL on)
  368. {
  369.     BOOL returnBool = FALSE;
  370.     RECORDCORE *record;
  371.     record = enumRecords(hwnd, id, NULL, CMA_FIRST);
  372.     while(record && record != (RECORDCORE *) -1)
  373.     {
  374.         returnBool = selectRecord(hwnd, id, record, on);
  375.         record = enumRecords(hwnd, id, record, CMA_NEXT);
  376.     }
  377.     return returnBool;
  378. }
  379.  
  380. inline BOOL removeTitleFromContainer(HWND hwnd, LONG id, char *title)
  381. {
  382.    RECORDCORE *record[1];
  383.  
  384.    *record = enumRecords(hwnd, id, NULL, CMA_FIRST);
  385.  
  386.     while(*record && *record != (RECORDCORE *) -1)
  387.     {
  388.         if(!strcmp(title,(*record)->pszIcon))
  389.         {
  390.             removeRecords(hwnd, id, record, 1);
  391.             return TRUE;
  392.         }
  393.         *record = enumRecords(hwnd, id, *record, CMA_NEXT);
  394.     }
  395.     return FALSE;
  396. }
  397.  
  398.  
  399. /****************************************************/
  400. /* processing of popup menu for containers, fiuf... */
  401. /****************************************************/
  402.  
  403. typedef struct
  404. {
  405.     HWND PUMHwnd, CTHwnd;
  406.     RECORDCORE *sourceRecord; /* record at the origin of the popup */
  407. } removeSourceEmphasisInfo;
  408.  
  409. /* check if the source record is selected, and if so, return TRUE */
  410. BOOL isSourceSelected(HWND hwnd, RECORDCORE *record);
  411.  
  412. /* sets source emphasis for all selected records */
  413. void setSelectedSourceEmphasis(HWND hwnd, BOOL on);
  414.  
  415. /* for WM_ENDMENU, use return info from processPopUp */
  416. BOOL removeSourceEmphasis(HWND hwnd, removeSourceEmphasisInfo *info);
  417.  
  418. /* hwnd = dialog who receives notification
  419.     id = container ID
  420.     record = source record    -    0 for container
  421.     recordIDM = record menu ID
  422.     container IDM = container menu ID
  423.     info = returned info for use with removeSourceEmphasis and others
  424.  
  425.     use in CN_CONTEXTMENU */
  426. void processPopUp(HWND hwnd, LONG id, RECORDCORE *record,
  427.       LONG recordIDM, LONG containerIDM, removeSourceEmphasisInfo *info);
  428.