home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / exedt040.zip / src / settings.c < prev    next >
C/C++ Source or Header  |  1999-01-24  |  8KB  |  277 lines

  1. #define INCL_PM
  2.  
  3. #include <math.h>
  4. #include <string.h>
  5. #include <os2.h>
  6. #include "exedit.h"
  7.  
  8. //Settings Pages
  9. SHORT CTable[]={CLR_NEUTRAL,CLR_WHITE,CLR_BLACK,CLR_BACKGROUND,CLR_BLUE,CLR_RED,CLR_PINK,
  10.                CLR_GREEN,CLR_CYAN,CLR_YELLOW,CLR_DARKGRAY,CLR_DARKBLUE,CLR_DARKRED,
  11.                CLR_DARKPINK,CLR_DARKGREEN,CLR_DARKCYAN,CLR_BROWN,CLR_PALEGRAY};
  12.  
  13. MRESULT EXPENTRY Dlg_SetPage1_Proc(HWND hwnd,ULONG msg, MPARAM mp1,MPARAM mp2)
  14. {
  15.  TSet1 *Set1;
  16.  Set1=WinQueryWindowPtr(hwnd,0);
  17.  
  18.  switch(msg)
  19.  {
  20.   case WM_INITDLG:
  21.    Set1=PVOIDFROMMP(mp2);
  22.    WinSetWindowPtr(hwnd,0,Set1);
  23.    WinSendDlgItemMsg(hwnd,Sb_Tabs,SPBM_SETLIMITS,MPFROMLONG(255),MPFROMLONG(0));
  24.    WinSendDlgItemMsg(hwnd,Sb_Tabs,SPBM_SETCURRENTVALUE,(MPARAM)Set1->SSb_Tabs,0);
  25.    WinSendDlgItemMsg(hwnd,Cb_Wrap,BM_SETCHECK,(MPARAM)Set1->SCb_Wrap,0);
  26.    WinSendDlgItemMsg(hwnd,Cb_ReadOnly,BM_SETCHECK,(MPARAM)Set1->SCb_ReadOnly,0);
  27.   break;
  28.  
  29.   case WM_CONTROL:
  30.   {
  31.    switch (SHORT1FROMMP(mp1))
  32.    {
  33.     case Sb_Tabs:
  34.     {
  35.      ULONG Temp;
  36.      WinSendDlgItemMsg(hwnd,Sb_Tabs,SPBM_QUERYVALUE,MPFROMP(&Temp),0);
  37.      if (Temp) Set1->SSb_Tabs=Temp;
  38.     }
  39.     break;
  40.  
  41.     case Cb_Wrap:
  42.     Set1->SCb_Wrap=(BOOL)WinSendDlgItemMsg(hwnd,Cb_Wrap,BM_QUERYCHECK,0,0);
  43.     break;
  44.  
  45.     case Cb_ReadOnly:
  46.     Set1->SCb_ReadOnly=(BOOL)WinSendDlgItemMsg(hwnd,Cb_ReadOnly,BM_QUERYCHECK,0,0);
  47.     break;
  48.  
  49.     default: break;
  50.    }
  51.   }
  52.   default: break;
  53.  }
  54.  return WinDefDlgProc(hwnd,msg,mp1,mp2);
  55. }
  56.  
  57. MRESULT EXPENTRY Dlg_SetPage2_Proc(HWND hwnd,ULONG msg, MPARAM mp1,MPARAM mp2)
  58. {
  59.  TSet2 *Set2;
  60.  Set2=WinQueryWindowPtr(hwnd,0);
  61.  
  62.  switch(msg)
  63.  {
  64.   case WM_INITDLG:
  65.   {
  66.    HPS hps;
  67.    int k,i;
  68.    static LONG CTable[]={CLR_WHITE,CLR_BLACK,CLR_BLUE,CLR_RED,CLR_PINK,
  69.                           CLR_GREEN,CLR_CYAN,CLR_YELLOW,CLR_DARKGRAY,CLR_DARKBLUE,CLR_DARKRED,
  70.                           CLR_DARKPINK,CLR_DARKGREEN,CLR_DARKCYAN,CLR_BROWN,CLR_PALEGRAY};
  71.  
  72.    Set2=PVOIDFROMMP(mp2);
  73.    WinSetWindowPtr(hwnd,0,Set2);
  74.  
  75.    for (k=0;k<4;k++)
  76.    for (i=0;i<4;i++)
  77.    {
  78.     WinSendDlgItemMsg(hwnd,Vs_Back,VM_SETITEM,MPFROM2SHORT(k+1,i+1),(MPARAM)(0,CTable[k*4+i]));
  79.     WinSendDlgItemMsg(hwnd,Vs_Text,VM_SETITEM,MPFROM2SHORT(k+1,i+1),(MPARAM)(CTable[k*4+i]));
  80.    }
  81.  
  82.    WinSendDlgItemMsg(hwnd,Vs_Back,VM_SELECTITEM,(MPARAM)Set2->Sel_Back,0);
  83.    WinSendDlgItemMsg(hwnd,Vs_Text,VM_SELECTITEM,(MPARAM)Set2->Sel_Text,0);
  84.   }
  85.   break;
  86.  
  87.   case WM_PAINT:
  88.   {
  89.    HPS hps;
  90.    SWP swp;
  91.    RECTL rect1,rect2,rect3;
  92.  
  93.    WinDefDlgProc(hwnd,msg,mp1,mp2);
  94.  
  95.    WinQueryWindowPos(WinWindowFromID(hwnd,St_Prev),&swp);
  96.    rect1.xLeft=rect2.xLeft=rect3.xLeft=swp.x+3;
  97.    rect1.xRight=rect2.xRight=rect3.xRight=swp.x+swp.cx-3;
  98.    rect1.yBottom=rect2.yBottom=swp.y+3;
  99.    rect1.yTop=rect3.yTop=swp.y+swp.cy-20;
  100.    rect2.yTop=rect3.yBottom=swp.y+(swp.cy-20)/2;
  101.  
  102.    hps=WinGetPS(hwnd);
  103.    WinFillRect(hps,&rect1,Set2->SVs_Back);
  104.    WinDrawText(hps,-1,"Normal",&rect3,Set2->SVs_Text,0,DT_CENTER|DT_VCENTER);
  105.    GpiSetBackMix(hps,FM_XOR);
  106.    GpiSetMix(hps,FM_NOTCOPYSRC);
  107.    WinDrawText(hps,-1,"Selected",&rect2,Set2->SVs_Text,0,DT_CENTER|DT_VCENTER);
  108.    WinReleasePS(hps);
  109.   }
  110.   return 0;
  111.  
  112.   case WM_CONTROL:
  113.   {
  114.    switch(SHORT1FROMMP(mp1))
  115.    {
  116.     case Vs_Back:
  117.      Set2->Sel_Back=(ULONG)WinSendDlgItemMsg(hwnd,Vs_Back,VM_QUERYSELECTEDITEM,0,0);
  118.      Set2->SVs_Back=(ULONG)WinSendDlgItemMsg(hwnd,Vs_Back,VM_QUERYITEM,(MPARAM)Set2->Sel_Back,0);
  119.      WinSendMsg(hwnd,WM_PAINT,0,0);
  120.     break;
  121.  
  122.     case Vs_Text:
  123.      Set2->Sel_Text=(ULONG)WinSendDlgItemMsg(hwnd,Vs_Text,VM_QUERYSELECTEDITEM,0,0);
  124.      Set2->SVs_Text=(ULONG)WinSendDlgItemMsg(hwnd,Vs_Text,VM_QUERYITEM,(MPARAM)Set2->Sel_Text,0);
  125.      WinSendMsg(hwnd,WM_PAINT,0,0);
  126.     break;
  127.  
  128.  
  129.     default: break;
  130.    }
  131.   }
  132.  
  133.   case WM_COMMAND:
  134.   switch(SHORT1FROMMP(mp1))
  135.   {
  136.    case Btn_Font:
  137.    {
  138.     static FONTDLG   FontDlg;
  139.     CHAR      szCurrentFont[FACESIZE];
  140.  
  141.     FontDlg.cbSize         = sizeof(FONTDLG);
  142.     FontDlg.fl             = FNTS_INITFROMFATTRS|FNTS_CENTER;
  143.     FontDlg.pszFamilyname  = szCurrentFont;
  144.     FontDlg.usFamilyBufLen = FACESIZE;
  145.     FontDlg.clrFore        = CLR_NEUTRAL;
  146.     FontDlg.clrBack        = CLR_DEFAULT;
  147.  
  148.     memcpy(&FontDlg.fAttrs,&Set2->Font,sizeof(FATTRS));
  149.     FontDlg.pszTitle  = "Select Text Font";
  150.     WinFontDlg(HWND_DESKTOP, hwnd, &FontDlg);
  151.     if (FontDlg.lReturn == DID_OK)
  152.      memcpy(&Set2->Font,&FontDlg.fAttrs,sizeof(FATTRS));
  153.    }
  154.    return 0;
  155.   }
  156.  
  157.   default: break;
  158.  }
  159.  return WinDefDlgProc(hwnd,msg,mp1,mp2);
  160. }
  161.  
  162. void AddPages(TSettingsNB *SettingsNB)
  163. {
  164.  int PageId,i;
  165.  TNBPage *Page;
  166.  
  167.  for (i=0;i<N_Pages;i++)
  168.  {
  169.   Page=SettingsNB->Pages[i];
  170.   PageId=(int)WinSendMsg(SettingsNB->hwndNB,BKM_INSERTPAGE,0,MPFROM2SHORT(BKA_MAJOR|BKA_AUTOPAGESIZE|BKA_STATUSTEXTON,BKA_LAST));
  171.   WinSendMsg(SettingsNB->hwndNB,BKM_SETTABTEXT,(MPARAM)PageId,Page->Tab);
  172.   WinSendMsg(SettingsNB->hwndNB,BKM_SETSTATUSLINETEXT,(MPARAM)PageId,Page->Status);
  173.   WinSendMsg(SettingsNB->hwndNB,BKM_SETPAGEWINDOWHWND,(MPARAM)PageId,(MPARAM)Page->hwndDlg);
  174.  }
  175. }
  176.  
  177. void SetDataPage(TNBPage *Page,int DialogId,PFNWP DialogProc,PSZ Status,PSZ Tab,PVOID Data)
  178. {
  179.  Page->hwndDlg=WinLoadDlg(HWND_DESKTOP,HWND_DESKTOP,DialogProc,0,DialogId,Data);
  180.  Page->Tab=strdup(Tab);
  181.  Page->Status=strdup(Status);
  182. }
  183.  
  184. void FreeDataPages(TSettingsNB *SettingsNB)
  185. {
  186.  TNBPage *Page;
  187.  int i;
  188.  
  189.  for (i=0;i<N_Pages;i++)
  190.  {
  191.   Page=SettingsNB->Pages[i];
  192.   WinDestroyWindow(Page->hwndDlg);
  193.   DosFreeMem(Page->Tab);
  194.   DosFreeMem(Page->Status);
  195.   DosFreeMem(Page);
  196.  }
  197. }
  198.  
  199. MRESULT EXPENTRY Dlg_Settings_Proc(HWND hwnd,ULONG msg, MPARAM mp1,MPARAM mp2)
  200. {
  201.  TSettingsNB *SettingsNB;
  202.  SettingsNB=WinQueryWindowPtr(hwnd,0);
  203.  
  204.  switch(msg)
  205.  {
  206.   case WM_INITDLG:
  207.   {
  208.    int i;
  209.  
  210.    SettingsNB=PVOIDFROMMP(mp2);
  211.    WinSetWindowPtr(hwnd,0,SettingsNB);
  212.    SettingsNB->usSzStruct=sizeof(TSettingsNB);
  213.    SettingsNB->hwndNB=WinWindowFromID(hwnd,Stg_NoteBook);
  214.  
  215.    //Set Data and Add Page
  216.    for (i=0;i<N_Pages;i++)
  217.    SettingsNB->Pages[i]=(TNBPage*)malloc(sizeof(TNBPage));
  218.  
  219.    SetDataPage(SettingsNB->Pages[1],Id_Set2,Dlg_SetPage2_Proc,"Colors and font","Appareance",(PVOID)&SettingsNB->Settings.Set2);
  220.    SetDataPage(SettingsNB->Pages[0],Id_Set1,Dlg_SetPage1_Proc,"Editing Options","Options",(PVOID)&SettingsNB->Settings.Set1);
  221.    AddPages(SettingsNB);
  222.    WinSetWindowPos(hwnd,HWND_BOTTOM,0,0,0,0,SWP_HIDE);
  223.   }
  224.   break;
  225.  
  226.   case WM_PAINT:
  227.   {
  228.    SWP swpClient;
  229.    WinQueryWindowPos(hwnd,&swpClient);
  230.    WinSetWindowPos(SettingsNB->hwndNB,HWND_TOP,3,36,swpClient.cx-6,swpClient.cy-59,
  231.                     SWP_SIZE | SWP_MOVE);
  232.    WinSetWindowPos(WinWindowFromID(hwnd,DID_OK),HWND_TOP,swpClient.cx/2-85,3,80,30,
  233.                    SWP_SIZE | SWP_MOVE);
  234.    WinSetWindowPos(WinWindowFromID(hwnd,DID_CANCEL),HWND_TOP,swpClient.cx/2+5,3,80,30,
  235.                    SWP_SIZE | SWP_MOVE);
  236.   }  break;
  237.  
  238.   case DID_OK:
  239.    WinDismissDlg(hwnd,TRUE);
  240.   return 0;
  241.  
  242.   case DID_CANCEL:
  243.    WinDismissDlg(hwnd,FALSE);
  244.   return 0;
  245.  
  246.   default:
  247.   return WinDefDlgProc(hwnd,msg,mp1,mp2);
  248.  }
  249.  return WinDefDlgProc(hwnd,msg,mp1,mp2);
  250. }
  251.  
  252.  
  253. void UpdateSettings(HWND hwnd,TSettings *Set,BOOL all)
  254. {
  255.  TSet1 *Set1=&Set->Set1;
  256.  TSet2 *Set2=&Set->Set2;
  257.  
  258.  if (all)
  259.  {
  260.   WinBroadcastMsg(hwnd,MLM_SETREADONLY,(MPARAM)Set1->SCb_ReadOnly,0,BMSG_SEND);
  261.   WinBroadcastMsg(hwnd,MLM_SETWRAP,(MPARAM)Set1->SCb_Wrap,0,BMSG_SEND);
  262.   WinBroadcastMsg(hwnd,MLM_SETTABSTOP,(MPARAM)Set1->SSb_Tabs,0,BMSG_SEND);
  263.   WinBroadcastMsg(hwnd,MLM_SETBACKCOLOR,(MPARAM)Set2->SVs_Back,0,BMSG_SEND);
  264.   WinBroadcastMsg(hwnd,MLM_SETTEXTCOLOR,(MPARAM)Set2->SVs_Text,0,BMSG_SEND);
  265.   WinBroadcastMsg(hwnd,MLM_SETFONT,(MPARAM)&Set2->Font,0,BMSG_SEND);
  266.  }
  267.  else
  268.  {
  269.   WinSendMsg(hwnd,MLM_SETREADONLY,(MPARAM)Set1->SCb_ReadOnly,0);
  270.   WinSendMsg(hwnd,MLM_SETWRAP,(MPARAM)Set1->SCb_Wrap,0);
  271.   WinSendMsg(hwnd,MLM_SETTABSTOP,(MPARAM)Set1->SSb_Tabs,0);
  272.   WinSendMsg(hwnd,MLM_SETBACKCOLOR,(MPARAM)Set2->SVs_Back,0);
  273.   WinSendMsg(hwnd,MLM_SETTEXTCOLOR,(MPARAM)Set2->SVs_Text,0);
  274.   WinSendMsg(hwnd,MLM_SETFONT,(MPARAM)&Set2->Font,0);
  275.  }
  276. }
  277.