home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / ocl150a.zip / OCL / Samples / NextHand / Source / NextBarDlg.cpp next >
C/C++ Source or Header  |  1996-08-12  |  14KB  |  486 lines

  1. // NextBaeDlg.cpp
  2. // Next like Toolbar
  3.  
  4. // $Header: W:/Projects/OCL/Samples/NextHand/Source/rcs/NextBarDlg.cpp 1.50 1996/08/11 23:48:42 B.STEIN Release $
  5.  
  6. #include "..\Source\NextHand.hpp"
  7.  
  8. #define isChecked(item)  WinQueryButtonCheckstate(hwnd, item)
  9.  
  10. static ULONG WPSOControls[] =
  11. {
  12.  NHX_WORKDIR,
  13.  NHX_PARMS,
  14.  NHX_SETTINGS,
  15.  NHX_SETTINGS_TXT,
  16.  NHX_WORKDIR_TXT,
  17.  NHX_PARMS_TXT
  18. };
  19.  
  20. static ULONG usChild2DOS[] =
  21. {
  22.  NHX_SETTINGS,
  23.  NHX_SETTINGS_TXT
  24. };
  25.  
  26. static ULONG usChild2WINOS2[] =
  27. {
  28.  NHX_WINSTD,
  29.  NHX_WINENH
  30. };
  31.  
  32. static ULONG usSessionTypeRBs[] =
  33. {
  34.  NHX_OS2_FULL,
  35.  NHX_OS2_WIN,
  36.  NHX_PM,
  37.  NHX_DOS_FULL,
  38.  NHX_DOS_WIN,
  39.  NHX_WPSO
  40. };
  41.  
  42. static ULONG usSessionTypeIDs[] =
  43.  SSF_TYPE_FULLSCREEN,
  44.  SSF_TYPE_WINDOWABLEVIO,
  45.  SSF_TYPE_PM, 
  46.  SSF_TYPE_VDM,
  47.  SSF_TYPE_WINDOWEDVDM,
  48.  SSF_TYPE_WPSOBJECT
  49. };
  50.  
  51. static ULONG usWINOS2TypeIDs[] = 
  52. {
  53.  PROG_WINDOW_PROT,
  54.  PROG_31_ENH
  55. };
  56.  
  57.  
  58. NextBarDlg::NextBarDlg(pNextBarEvent  pevt, pOGraphicsButton button, BOOL newItem)
  59.   : event(pevt), 
  60.     actualButton(button),
  61.     ODialog(HWND_DESKTOP, HWND_DESKTOP, NHX_DLG),
  62.     isCreation(newItem),
  63.     Title(NHX_TITLE, NULLHANDLE),
  64.     Program(NHX_PROG, NULLHANDLE),
  65.     Path(NHX_WORKDIR, NULLHANDLE),
  66.     Parms(NHX_PARMS, NULLHANDLE),
  67.     Icon(NHX_ICON, NULLHANDLE),
  68.     Settings(NHX_SETTINGS, NULLHANDLE)
  69.   {}
  70.  
  71.  
  72. PSZ NextBarDlg::isOfType() const
  73. {
  74.  return("NextBarDlg");
  75. }
  76.  
  77.  
  78. void NextBarDlg::handleButtons(MPARAM mp1)
  79. {
  80.  if(SHORT2FROMMP(mp1) == BN_CLICKED)
  81.    switch(SHORT1FROMMP(mp1))
  82.     {
  83.      case NHX_DOS_FULL:
  84.      case NHX_DOS_WIN:
  85.        OCL::enableControls(hwnd, WPSOControls, sizeof(WPSOControls));
  86.        OCL::enableControls(hwnd, usChild2DOS, sizeof(usChild2DOS));
  87.        OCL::disableControls(hwnd, usChild2WINOS2,sizeof(usChild2WINOS2));
  88.        WinCheckButton(hwnd, NHX_WINSTD, FALSE);
  89.        WinCheckButton(hwnd, NHX_WINENH, FALSE);
  90.        break;
  91.  
  92.      case NHX_OS2_FULL:
  93.      case NHX_OS2_WIN:
  94.      case NHX_PM:
  95.        OCL::enableControls(hwnd, WPSOControls, sizeof(WPSOControls));
  96.        OCL::hideControls(hwnd, usChild2DOS, sizeof(usChild2DOS));
  97.        OCL::disableControls(hwnd, usChild2WINOS2, sizeof(usChild2WINOS2));
  98.        WinCheckButton(hwnd, NHX_WINSTD, FALSE);
  99.        WinCheckButton(hwnd, NHX_WINENH, FALSE);
  100.        break;
  101.  
  102.     case NHX_WPSO:
  103.        OCL::hideControls(hwnd, WPSOControls, sizeof(WPSOControls));
  104.        OCL::hideControls(hwnd, usChild2DOS, sizeof(usChild2DOS));
  105.        OCL::disableControls(hwnd, usChild2WINOS2, sizeof(usChild2WINOS2));
  106.        WinSetDlgItemText(hwnd, NHX_WORKDIR, "");
  107.        WinSetDlgItemText(hwnd, NHX_PARMS, "");
  108.        WinCheckButton(hwnd, NHX_WINSTD, FALSE);
  109.        WinCheckButton(hwnd, NHX_WINENH, FALSE);
  110.        break;
  111.  
  112.     case NHX_SEAMLESS:
  113.        OCL::enableControls(hwnd, usChild2DOS, sizeof(usChild2DOS));
  114.        OCL::enableControls(hwnd, WPSOControls, sizeof(WPSOControls));
  115.        OCL::enableControls(hwnd, usChild2WINOS2, sizeof(usChild2WINOS2));
  116.        break;
  117.     }
  118.  return;
  119. }
  120.  
  121.  
  122. void NextBarDlg::setButtons()
  123. {
  124.  ULONG usTemp;
  125.  
  126.  for(usTemp=0; usTemp<=(sizeof(usSessionTypeRBs)/sizeof(ULONG)); usTemp++)
  127.    if(usSessionTypeIDs[usTemp] == event->session) {
  128.       WinCheckButton(hwnd, usSessionTypeRBs[usTemp],  TRUE);
  129.       WinSendMsg(hwnd, WM_CONTROL, MPFROM2SHORT(usSessionTypeRBs[usTemp], BN_CLICKED), NULL); }
  130.   switch(event->session)
  131.    {
  132.     case PROG_WINDOW_REAL:
  133.     case PROG_WINDOW_PROT:
  134.     case PROG_31_ENH:
  135.      for(usTemp=0; usTemp<=(sizeof(usChild2WINOS2)/sizeof(ULONG)); usTemp++)
  136.        if(usWINOS2TypeIDs[usTemp] == event->session)
  137.          WinCheckButton(hwnd, usChild2WINOS2[usTemp], TRUE);
  138.          WinCheckButton(hwnd, NHX_SEAMLESS, TRUE);
  139.      WinSendMsg(hwnd, WM_CONTROL, MPFROM2SHORT(NHX_SEAMLESS, BN_CLICKED), NULL);
  140.      break;
  141.  
  142.     default:
  143.       WinCheckButton(hwnd, NHX_WINSTD, TRUE);
  144.       break;
  145.    }
  146.  
  147.  if(event->session == SSF_TYPE_WPSOBJECT) {
  148.    OCL::disableControls(hwnd, usChild2WINOS2, sizeof(usChild2WINOS2));
  149.    OCL::hideControls(hwnd, WPSOControls, sizeof(WPSOControls)); }
  150. }
  151.  
  152.  
  153. void NextBarDlg::setProgram2Dialog()
  154. {
  155.  WinSendDlgItemMsg(hwnd, NHX_SETTINGS, MLM_DELETE,
  156.                    MPFROMSHORT(0), MPFROMSHORT(2*CCHMAXPATH));
  157.  Title.setText(event->title);
  158.  Program.setText(event->name);
  159.  Path.setText(event->dir);
  160.  Parms.setText(event->inputs);
  161.  Icon.setText(event->icon);
  162.  
  163.  if (strlen(event->settings) > 0)
  164.    Settings.insertText(event->settings);
  165.  else
  166.    Settings.insertText("IDLE_SECONDS=5\nIDLE_SENSITIVITY=100\n");
  167.  
  168.  if (event->control & SSF_CONTROL_MAXIMIZE)
  169.    WinCheckButton(hwnd, NHX_MAXSIZE, TRUE);
  170.  if (event->control & SSF_CONTROL_MINIMIZE)
  171.    WinCheckButton(hwnd, NHX_MINSIZE, TRUE);
  172.  if(event->Bkgr & SSF_FGBG_BACK)
  173.    WinCheckButton(hwnd, NHX_BACKGROUND, TRUE);
  174.  setButtons();
  175. }
  176.  
  177.  
  178. void NextBarDlg::setDialog2Program()
  179. {
  180.  OString dosBuffer;
  181.  PSZ     boarder;
  182.  
  183.  Title.getText(event->title);
  184.  Program.getText(event->name);
  185.  Path.getText(event->dir);
  186.  Parms.getText(event->inputs);
  187.  Icon.getText(event->icon);
  188.  
  189.  if ((isChecked(NHX_DOS_FULL)) || 
  190.      (isChecked(NHX_DOS_WIN)) ||
  191.      (isChecked(NHX_SEAMLESS)))
  192.   {
  193.    Settings.getText(dosBuffer); 
  194.    for(boarder=strchr(dosBuffer, '\0'); boarder != dosBuffer; )
  195.      if((*--boarder=='\r') || (*boarder=='\n')) 
  196.        *boarder='\0';
  197.      else 
  198.        break;
  199.    event->settings << dosBuffer; 
  200.   }
  201.  else
  202.   event->settings << "";
  203.  
  204.  if(isChecked(NHX_OS2_FULL))
  205.    event->session = SSF_TYPE_FULLSCREEN;
  206.  else if(isChecked(NHX_OS2_WIN))
  207.    event->session = SSF_TYPE_WINDOWABLEVIO;
  208.  else if(isChecked(NHX_PM))
  209.    event->session = SSF_TYPE_PM;
  210.  else if(isChecked(NHX_DOS_FULL))
  211.    event->session = SSF_TYPE_VDM;
  212.  else if(isChecked(NHX_DOS_WIN))
  213.    event->session = SSF_TYPE_WINDOWEDVDM;
  214.  else if(isChecked(NHX_WPSO))
  215.    event->session = SSF_TYPE_WPSOBJECT;
  216.  else if(isChecked(NHX_SEAMLESS)) {
  217.    if(isChecked(NHX_WINSTD))
  218.      event->session = PROG_WINDOW_PROT;
  219.    else if(isChecked(NHX_WINENH))
  220.      event->session = PROG_31_ENH; }
  221.  if(isChecked(NHX_MAXSIZE))
  222.    event->control |= SSF_CONTROL_MAXIMIZE;
  223.  if(isChecked(NHX_MINSIZE))
  224.    event->control |= SSF_CONTROL_MINIMIZE;
  225.  if(isChecked(NHX_BACKGROUND))
  226.    event->Bkgr = SSF_FGBG_BACK;
  227.  else
  228.    event->Bkgr = SSF_FGBG_FORE;
  229.  event->control |= SSF_CONTROL_VISIBLE | SSF_CONTROL_SETPOS;
  230. }
  231.  
  232.  
  233. void NextBarDlg::install2Dialog(PSZ FileName, BOOL bObject)
  234. {
  235.  CHAR    Buffer[260];
  236.  PSZ     pszTemp;
  237.  BOOL    Batch=FALSE;
  238.  ULONG   AppType;
  239.  
  240.  Icon.setText("");
  241.  Parms.setText("");
  242.  
  243.  if(bObject) {
  244.    event->session = SSF_TYPE_WPSOBJECT;
  245.    WinSetDlgItemText(hwnd, NHX_TITLE, FileName);
  246.    WinSetDlgItemText(hwnd, NHX_PROG, FileName); }
  247.  else {
  248.    DosQueryAppType(FileName, &AppType);
  249.    event->session = SSF_TYPE_DEFAULT;
  250.    if ((AppType & 0x7) == FAPPTYP_WINDOWAPI)
  251.       event->session = SSF_TYPE_PM;
  252.    else if ((AppType & 0x7) == FAPPTYP_WINDOWCOMPAT)
  253.       event->session = SSF_TYPE_WINDOWABLEVIO;
  254.    else if (AppType & FAPPTYP_DOS)
  255.       event->session = SSF_TYPE_WINDOWEDVDM;
  256.    else if (AppType & FAPPTYP_WINDOWSREAL)
  257.       event->session = PROG_WINDOW_REAL;
  258.    else if (AppType & FAPPTYP_WINDOWSPROT)
  259.       event->session = PROG_WINDOW_PROT;
  260.    else if (AppType & FAPPTYP_WINDOWSPROT31)
  261.       event->session = PROG_31_ENH; }
  262.  
  263.  if(!bObject) {
  264.    if(strstr(FileName, ".CMD")) {
  265.      Batch = TRUE;
  266.      event->session = SSF_TYPE_WINDOWABLEVIO;
  267.      if(strchr(FileName, ' ')) {
  268.        strcpy(Buffer, "/c \"\"");
  269.        strcat(Buffer, FileName);
  270.        strcat(Buffer, "\"\""); }
  271.      else {
  272.        strcpy(Buffer, "/c ");
  273.        strcat(Buffer, FileName); }}
  274.    else if(strstr(FileName, ".BAT")) {
  275.      Batch = TRUE;
  276.      event->session = SSF_TYPE_WINDOWEDVDM;
  277.      strcpy(Buffer, "/c ");
  278.      strcat(Buffer, FileName); }
  279.    if (Batch) {
  280.      WinSetDlgItemText(hwnd, NHX_PARMS, Buffer);
  281.      WinSetDlgItemText(hwnd, NHX_PROG, ""); }
  282.    else
  283.      WinSetDlgItemText(hwnd, NHX_PROG, FileName);
  284.    strcpy(Buffer, FileName);
  285.    pszTemp = FileName+strlen(FileName);
  286.    for( ; (*pszTemp!='\\') && (pszTemp>=FileName); pszTemp--);
  287.    WinSetDlgItemText(hwnd, NHX_TITLE, (pszTemp+1));
  288.    *pszTemp='\0';
  289.    WinSetDlgItemText(hwnd, NHX_WORKDIR, FileName); }
  290.  
  291.  setButtons();
  292. }
  293.  
  294.  
  295. void NextBarDlg::loadProgram()
  296. {
  297.  FILEDLG     fdFileDlg;
  298.  HWND        hwndFileDlg;
  299.  
  300.  memset(&fdFileDlg, 0, sizeof(FILEDLG));
  301.  fdFileDlg.cbSize=sizeof(FILEDLG);
  302.  fdFileDlg.fl=FDS_CENTER | FDS_OPEN_DIALOG;
  303.  fdFileDlg.pszTitle="NextHand 1.5 - Configuration";
  304.  strcpy(fdFileDlg.szFullFile, "C:\\*");
  305.  hwndFileDlg=WinFileDlg(HWND_DESKTOP, hwnd, &fdFileDlg);
  306.  if (hwndFileDlg && (fdFileDlg.lReturn==DID_OK))
  307.     install2Dialog(fdFileDlg.szFullFile, FALSE);
  308. }
  309.  
  310.  
  311.  
  312.  
  313. BOOL NextBarDlg::OCommand(ULONG msg, MPARAM mp1, MPARAM mp2)
  314. {
  315.  switch(msg) {
  316.     case WM_INITDLG:
  317.        centerDlg();
  318.        Title.inherit(hwnd);
  319.        Program.inherit(hwnd);
  320.        Path.inherit(hwnd);
  321.        Parms.inherit(hwnd);
  322.        Icon.inherit(hwnd);
  323.        Settings.inherit(hwnd);
  324.        Settings.setFont("8.Helv");
  325.        setProgram2Dialog();
  326.        if (actualButton)
  327.          WinSendMsg(WinWindowFromID(hwnd, NHX_ICONFIELD), SM_SETHANDLE, 
  328.                     MPFROMP(actualButton->pIco->hptr), NULL);
  329.        break;
  330.  
  331.     case WM_CONTROL:
  332.        handleButtons(mp1);
  333.        break; 
  334.  
  335.     case DM_DRAGOVER:
  336.      {
  337.       PDRAGINFO  pdinfo = (PDRAGINFO) mp1;
  338.       PDRAGITEM  pditem = NULL;
  339.  
  340.       DrgAccessDraginfo(pdinfo);
  341.       pditem = DrgQueryDragitemPtr(pdinfo, 0);
  342.       if (DrgVerifyRMF(pditem, "DRM_OS2FILE", NULL))
  343.        {
  344.         DrgFreeDraginfo (pdinfo) ;
  345.         return(TRUE);
  346.        }
  347.       else
  348.        {
  349.         DrgFreeDraginfo (pdinfo) ;
  350.         return(FALSE);
  351.        }
  352.      }
  353.  
  354.    case DM_DROP: {
  355.      PDRAGINFO       pDragInfo;              /* Pointer to DRAGINFO structure */
  356.      PDRAGITEM       pDragItem;              /* Pointer to DRAGITEM structure */
  357.      CHAR            Buffer[CCHMAXPATH];
  358.      CHAR            ObjectType[CCHMAXPATH];
  359.      PSZ             pszBuffer;
  360.      OString         tmpBuf; 
  361.  
  362.      pDragInfo = (PDRAGINFO)mp1;
  363.      if(DrgAccessDraginfo(pDragInfo)==FALSE) break;
  364.      pDragItem = DrgQueryDragitemPtr(pDragInfo, 0);
  365.      DrgQueryStrName(pDragItem->hstrRMF, sizeof(ObjectType), ObjectType);
  366.      if(!strstr(ObjectType, "<DRM_OBJECT, DRF_OBJECT>"))
  367.       { // this is not a WPS object
  368.        DrgQueryStrName(pDragItem->hstrContainerName, sizeof(Buffer), Buffer);
  369.        pszBuffer = ((PSZ) Buffer)+strlen(Buffer);
  370.        DrgQueryStrName(pDragItem->hstrSourceName, sizeof(Buffer)-strlen(pszBuffer), pszBuffer);
  371.        tmpBuf << Buffer;
  372.        strupr(tmpBuf);
  373.        if (strstr(tmpBuf, ".ICO")) {
  374.           hps = WinGetPS(WinWindowFromID(hwnd, NHX_ICONFIELD));
  375.           GpiCreateLogColorTable(hps, LCOL_RESET, LCOLF_RGB, 0L, 0L, NULL);
  376.           WinQueryWindowRect(WinWindowFromID(hwnd, NHX_ICONFIELD), &rcl);
  377.           GpiSetColor(hps, SYSCLR_DIALOGBACKGROUND);
  378.           GpiBox(hps, DRO_FILL, (PPOINTL) &rcl.xRight, 0L, 0L);
  379.           WinReleasePS(hps);
  380.           if (actualButton->pIco) 
  381.             delete actualButton->pIco;
  382.           try {
  383.             actualButton->pIco = new OIcon(Buffer); }
  384.           catch(...) {
  385.             delete actualButton->pIco;
  386.             actualButton->pIco = new OIcon(); }
  387.           WinSendMsg(WinWindowFromID(hwnd, NHX_ICONFIELD), SM_SETHANDLE, 
  388.                      MPFROMP(actualButton->pIco->hptr), NULL);
  389.           WinSetDlgItemText(hwnd, NHX_ICON, Buffer); }
  390.        else if ((!strstr(tmpBuf, ".EXE")) &&  (!strstr(tmpBuf, ".COM")) &&
  391.                 (!strstr(tmpBuf, ".BAT")) &&  (!strstr(tmpBuf, ".CMD")))
  392.           install2Dialog(Buffer, TRUE);
  393.        else
  394.           install2Dialog(Buffer, FALSE);
  395.       }
  396.      else {
  397.        DrgQueryStrName(pDragItem->hstrSourceName, sizeof(Buffer), Buffer);
  398.        install2Dialog(Buffer, TRUE); }
  399.     break; }
  400.  
  401.     case WM_COMMAND:
  402.       switch(SHORT1FROMMP(mp1)) 
  403.        {
  404.         case NHX_SAVE:
  405.           setDialog2Program();
  406.           if (isCreation)
  407.              WinPostMsg(nxh->toolbar->hwnd, WM_TOOLBAR_RESET, NULL, NULL);
  408.           else
  409.              WinPostMsg(nxh->toolbar->hwnd, WM_SAVE_BUTTONS, NULL, NULL);
  410.           event = NULL;
  411.           WinPostMsg(hwnd, WM_CLOSE, NULL, NULL);
  412.           break;
  413.  
  414.         case NHX_CANCEL:
  415.           WinSendMsg(hwnd, WM_CLOSE, NULL, NULL);
  416.           break;
  417.  
  418.         case NHX_LOAD:
  419.           loadProgram();
  420.           break;
  421.        }
  422.       break;
  423.  
  424.     case WM_HELP:
  425.        nxh->toolbar->helpRequest(PANEL_CFGS);
  426.        break;
  427.  
  428.     case WM_CLOSE:
  429.        WinSendMsg(WinWindowFromID(hwnd, NHX_ICONFIELD), SM_SETHANDLE,
  430.                   MPFROMP(NULLHANDLE), NULL);
  431.        if (isCreation)
  432.          WinPostMsg(nxh->toolbar->hwnd, WM_CFG_CANCELED, MPFROMP(event), NULL);
  433.        delete this;
  434.        break;
  435.  
  436.     default:
  437.        return(FALSE); }
  438.  return(TRUE);
  439. #ifdef __BORLANDC__
  440.   #pragma warn -par
  441. #endif
  442. }
  443. #ifdef __BORLANDC__
  444.   #pragma warn .par
  445. #endif
  446.  
  447.  
  448.  
  449. // Information Dialog
  450.  
  451. PSZ NextBarInfoDlg::isOfType() const
  452. {
  453.  return("NextBarInfoDlg");
  454. }
  455.  
  456.  
  457. BOOL NextBarInfoDlg::OCommand(ULONG msg, MPARAM mp1, MPARAM mp2)
  458. {
  459.  switch(msg) {
  460.     case WM_INITDLG:
  461.       centerDlg();
  462.       break;
  463.  
  464.     case WM_COMMAND:
  465.        WinSendMsg(hwnd, WM_CLOSE, NULL, NULL);
  466.        break;
  467.  
  468.     case WM_CLOSE:
  469.        delete this;
  470.        break;
  471.  
  472.     default:
  473.       return(FALSE); }
  474.  return(TRUE);
  475. #ifdef __BORLANDC__
  476.   #pragma warn -par
  477. #endif
  478. }
  479. #ifdef __BORLANDC__
  480.   #pragma warn .par
  481. #endif
  482.  
  483.  
  484. // end of source
  485.