home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 2001 June / VPR0106A.BIN / OLS / TCL228 / TCL228.lzh / EXESRC.lzh / pagesntp.c < prev    next >
C/C++ Source or Header  |  1999-09-18  |  10KB  |  343 lines

  1. /*-------------------------------------------
  2.   pagesntp.c
  3.       "Syncronization" setting page
  4.       KAZUBON 1998-1999
  5. ---------------------------------------------*/
  6.  
  7. #include "tclock.h"
  8.  
  9. static void OnInit(HWND hDlg);
  10. static void OnDestroy(HWND hDlg);
  11. static void OnApply(HWND hDlg);
  12. static void OnNTPServer(HWND hDlg);
  13. static void OnDelServer(HWND hDlg);
  14. static void OnSyncTimer(HWND hDlg);
  15. static void OnSyncADay(HWND hDlg);
  16. static void OnSyncNow(HWND hDlg);
  17. static void CreateTip(HWND hwnd);
  18.  
  19. HICON hIconSync = NULL;
  20. static HWND hwndTip;
  21.  
  22. // page3.c
  23. void OnSanshoAlarm(HWND hDlg, WORD id);
  24.  
  25. /*------------------------------------------------
  26.   Dialog procedure
  27. --------------------------------------------------*/
  28. BOOL CALLBACK PageSNTPProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  29. {
  30.     switch(message)
  31.     {
  32.         case WM_INITDIALOG:
  33.             OnInit(hDlg);
  34.             return TRUE;
  35.         case WM_COMMAND:
  36.         {
  37.             WORD id, code;
  38.             id = LOWORD(wParam); code = HIWORD(wParam);
  39.             if(id == IDC_NTPSERVER && 
  40.                 (code == CBN_EDITCHANGE || code == CBN_SELCHANGE))
  41.             {
  42.                 if(code == CBN_EDITCHANGE) OnNTPServer(hDlg);
  43.                 SendPSChanged(hDlg);
  44.             }
  45.             else if(id == IDC_DELSERVER)
  46.             {
  47.                 OnDelServer(hDlg);
  48.                 SendPSChanged(hDlg);
  49.             }
  50.             else if(id == IDC_SYNCTIMER)
  51.             {
  52.                 OnSyncTimer(hDlg);
  53.                 SendPSChanged(hDlg);
  54.             }
  55.             else if(id == IDC_SYNCADAY)
  56.             {
  57.                 OnSyncADay(hDlg);
  58.                 SendPSChanged(hDlg);
  59.             }
  60.             else if(id == IDC_SYNCMIN && code == EN_CHANGE)
  61.                 SendPSChanged(hDlg);
  62.             else if(id == IDC_SYNCNODIAL)
  63.                 SendPSChanged(hDlg);
  64.             else if(id == IDC_TIMEOUT && code == EN_CHANGE)
  65.                 SendPSChanged(hDlg);
  66.             else if(id == IDC_SYNCNOW)
  67.                 OnSyncNow(hDlg);
  68.             else if(id == IDC_SNTPLOG)
  69.                 SendPSChanged(hDlg);
  70.             else if(id == IDC_SYNCSOUND && code == EN_CHANGE)
  71.                 SendPSChanged(hDlg);
  72.             else if(id == IDC_SYNCSOUNDBROWSE)
  73.                 OnSanshoAlarm(hDlg, id);
  74.             return TRUE;
  75.         }
  76.         case WM_NOTIFY:
  77.             switch(((NMHDR *)lParam)->code)
  78.             {
  79.                 case PSN_APPLY: OnApply(hDlg); break;
  80.                 case PSN_HELP: MyHelp(GetParent(hDlg), 9); break;
  81.             }
  82.             return TRUE;
  83.         case WM_DESTROY:
  84.             OnDestroy(hDlg);
  85.             return TRUE;
  86.     }
  87.     return FALSE;
  88. }
  89.  
  90. /*------------------------------------------------
  91.   Initialize the page
  92. --------------------------------------------------*/
  93. void OnInit(HWND hDlg)
  94. {
  95.     char section[] = "SNTP";
  96.     char s[1024], entry[20], server[81];
  97.     UDACCEL uda[2];
  98.     RECT rc;
  99.     int n, count, i;
  100.     
  101.     GetMyRegStr(section, "Server", server, 80, "");
  102.     
  103.     count = GetMyRegLong(section, "ServerNum", 0);
  104.     for(i = 0; i < count; i++)
  105.     {
  106.         wsprintf(entry, "Server%d", i + 1);
  107.         GetMyRegStr(section, entry, s, 80, "");
  108.         if(s[0]) CBAddString(hDlg, IDC_NTPSERVER, (LPARAM)s);
  109.     }
  110.     if(server[0])
  111.     {
  112.         i = CBFindStringExact(hDlg, IDC_NTPSERVER, server);
  113.         if(i == LB_ERR)
  114.         {
  115.             CBInsertString(hDlg, IDC_NTPSERVER, 0, (LPARAM)server);
  116.             i = 0;
  117.         }
  118.         CBSetCurSel(hDlg, IDC_NTPSERVER, i);
  119.     }
  120.     
  121.     SendDlgItemMessage(hDlg, IDC_DELSERVER, BM_SETIMAGE, IMAGE_ICON,
  122.         (LPARAM)hIconDel);
  123.     
  124.     if(!hIconSync)
  125.         hIconSync = LoadImage(hInst, MAKEINTRESOURCE(IDI_SNTP), IMAGE_ICON,
  126.                 16, 16, LR_DEFAULTCOLOR);
  127.     SendDlgItemMessage(hDlg, IDC_SYNCNOW, BM_SETIMAGE, IMAGE_ICON,
  128.         (LPARAM)hIconSync);
  129.     
  130.     OnNTPServer(hDlg);
  131.     
  132.     CreateTip(hDlg);
  133.     
  134.     CheckDlgButton(hDlg, IDC_SYNCTIMER,
  135.         GetMyRegLong(section, "Timer", FALSE));
  136.     CheckDlgButton(hDlg, IDC_SYNCADAY,
  137.         GetMyRegLong(section, "ADay", FALSE));
  138.  
  139.     SendDlgItemMessage(hDlg, IDC_SYNCMINSPIN, UDM_SETRANGE, 0,
  140.         MAKELONG(1440, 1));
  141.     n = GetMyRegLong(section, "Minutes", 60);
  142.     if(n < 1 || 1440 < n) n = 60;
  143.     SendDlgItemMessage(hDlg, IDC_SYNCMINSPIN, UDM_SETPOS, 0, n);
  144.  
  145.     CheckDlgButton(hDlg, IDC_SYNCNODIAL,
  146.         GetMyRegLong(section, "NoDial", IsRASAPI()));
  147.  
  148.     SendDlgItemMessage(hDlg, IDC_TIMEOUTSPIN, UDM_SETRANGE, 0,
  149.         MAKELONG(30000, 1));
  150.     n = GetMyRegLong(section, "Timeout", 1000);
  151.     if(n < 1 || 30000 < n) n = 1000;
  152.     SendDlgItemMessage(hDlg, IDC_TIMEOUTSPIN, UDM_SETPOS, 0, n);
  153.     uda[0].nSec = 1; uda[0].nInc = 10;
  154.     uda[1].nSec = 2; uda[1].nInc = 100;
  155.     SendDlgItemMessage(hDlg, IDC_TIMEOUTSPIN, UDM_SETACCEL, 2,
  156.         (LPARAM)uda);
  157.     
  158.     OnSyncADay(hDlg);
  159.     OnSyncTimer(hDlg);
  160.     
  161.     CheckDlgButton(hDlg, IDC_SNTPLOG,
  162.         GetMyRegLong(section, "SaveLog", TRUE));
  163.     GetMyRegStr(section, "Sound", s, 1024, "");
  164.     SetDlgItemText(hDlg, IDC_SYNCSOUND, s);
  165.     
  166.     // embed "Result" listbox in the dialog
  167.     GetWindowRect(GetDlgItem(hDlg, IDC_SNTPLISTHERE), &rc);
  168.     rc.right -= rc.left; rc.bottom -= rc.top;
  169.     ScreenToClient(hDlg, (POINT*)&rc);
  170.     SetParent(hwndSNTPLog, hDlg);
  171.     SetWindowPos(hwndSNTPLog, GetDlgItem(hDlg, IDC_SYNCSOUNDBROWSE),
  172.         rc.left, rc.top,
  173.         rc.right, rc.bottom, SWP_SHOWWINDOW);
  174.     SendMessage(hwndSNTPLog, WM_SETFONT,
  175.         (WPARAM)GetStockObject(DEFAULT_GUI_FONT), 0);
  176.     
  177.     PostMessage(hDlg, WM_NEXTDLGCTL,
  178.         (WPARAM)GetDlgItem(hDlg, IDC_NTPSERVER), TRUE);
  179. }
  180.  
  181. void OnDestroy(HWND hDlg)
  182. {
  183.     SetParent(hwndSNTPLog, hwndSNTP);
  184. }
  185.  
  186. /*------------------------------------------------
  187.   Save the setting
  188. --------------------------------------------------*/
  189. static void OnApply(HWND hDlg)
  190. {
  191.     char section[] = "SNTP";
  192.     char s[1024], entry[20];
  193.     char server[81];
  194.     int n, i, count, index;
  195.     
  196.     GetDlgItemText(hDlg, IDC_NTPSERVER, server, 80);
  197.     SetMyRegStr(section, "Server", server);
  198.     
  199.     if(server[0])
  200.     {
  201.         index = CBFindStringExact(hDlg, IDC_NTPSERVER, server);
  202.         if(index != LB_ERR)
  203.             CBDeleteString(hDlg, IDC_NTPSERVER, index);
  204.         CBInsertString(hDlg, IDC_NTPSERVER, 0, server);
  205.         CBSetCurSel(hDlg, IDC_NTPSERVER, 0);
  206.     }
  207.     count = CBGetCount(hDlg, IDC_NTPSERVER);
  208.     for(i = 0; i < count; i++)
  209.     {
  210.         CBGetLBText(hDlg, IDC_NTPSERVER, i, s);
  211.         wsprintf(entry, "Server%d", i+1);
  212.         SetMyRegStr(section, entry, s);
  213.     }
  214.     SetMyRegLong(section, "ServerNum", count);
  215.     
  216.     OnNTPServer(hDlg);
  217.     
  218.     SetMyRegLong(section, "Timer", IsDlgButtonChecked(hDlg, IDC_SYNCTIMER));
  219.     SetMyRegLong(section, "ADay", IsDlgButtonChecked(hDlg, IDC_SYNCADAY));
  220.     n = SendDlgItemMessage(hDlg, IDC_SYNCMINSPIN, UDM_GETPOS, 0, 0);
  221.     if(n & 0xffff0000) n = 60;
  222.     SetMyRegLong(section, "Minutes", n);
  223.     SetMyRegLong(section, "NoDial", IsDlgButtonChecked(hDlg, IDC_SYNCNODIAL));
  224.     n = SendDlgItemMessage(hDlg, IDC_TIMEOUTSPIN, UDM_GETPOS, 0, 0);
  225.     if(n & 0xffff0000) n = 1000;
  226.     SetMyRegLong(section, "Timeout", n);
  227.     SetMyRegLong(section, "SaveLog", IsDlgButtonChecked(hDlg, IDC_SNTPLOG));
  228.     
  229.     GetDlgItemText(hDlg, IDC_SYNCSOUND, s, 1024);
  230.     SetMyRegStr(section, "Sound", s);
  231.     
  232.     InitSyncTimeSetting();
  233. }
  234.  
  235. /*------------------------------------------------
  236.     When server name changed
  237. --------------------------------------------------*/
  238. void OnNTPServer(HWND hDlg)
  239. {
  240.     EnableDlgItem(hDlg, IDC_SYNCNOW,
  241.         GetWindowTextLength(GetDlgItem(hDlg,IDC_NTPSERVER))>0);
  242.     EnableDlgItem(hDlg, IDC_DELSERVER,
  243.         CBGetCount(hDlg, IDC_NTPSERVER)>0);
  244. }
  245.  
  246. /*------------------------------------------------
  247.     Delete Server Name
  248. --------------------------------------------------*/
  249. void OnDelServer(HWND hDlg)
  250. {
  251.     char server[81];
  252.     int index, count;
  253.     
  254.     GetDlgItemText(hDlg, IDC_NTPSERVER, server, 80);
  255.     count = CBGetCount(hDlg, IDC_NTPSERVER);
  256.     index = CBFindStringExact(hDlg, IDC_NTPSERVER, server);
  257.     if(index != LB_ERR)
  258.     {
  259.         CBDeleteString(hDlg, IDC_NTPSERVER, index);
  260.         if(count > 1)
  261.         {
  262.             if(index == count - 1) index--;
  263.             CBSetCurSel(hDlg, IDC_NTPSERVER, index);
  264.         }
  265.         else SetDlgItemText(hDlg, IDC_NTPSERVER, "");
  266.         PostMessage(hDlg, WM_NEXTDLGCTL, 1, FALSE);
  267.         OnNTPServer(hDlg);
  268.     }
  269. }
  270.  
  271. /*------------------------------------------------
  272.   "Adjust Regularly"
  273. --------------------------------------------------*/
  274. void OnSyncTimer(HWND hDlg)
  275. {
  276.     BOOL b;
  277.     int i;
  278.     
  279.     b = IsDlgButtonChecked(hDlg, IDC_SYNCTIMER);
  280.     for(i = IDC_SYNCADAY; i <= IDC_LABSYNCMIN2; i++)
  281.         EnableDlgItem(hDlg, i, b);
  282.     EnableDlgItem(hDlg, IDC_SYNCNODIAL, b && IsRASAPI());
  283.     
  284.     if(b) OnSyncADay(hDlg);
  285. }
  286.  
  287. /*------------------------------------------------
  288.   "Once A Day"
  289. --------------------------------------------------*/
  290. void OnSyncADay(HWND hDlg)
  291. {
  292.     BOOL b;
  293.     int i;
  294.     
  295.     b = IsDlgButtonChecked(hDlg, IDC_SYNCADAY);
  296.     for(i = IDC_SYNCMIN; i <= IDC_LABSYNCMIN2; i++)
  297.         EnableDlgItem(hDlg, i, !b);
  298. }
  299.  
  300. /*------------------------------------------------
  301.   "Adjust Now"
  302. --------------------------------------------------*/
  303. void OnSyncNow(HWND hDlg)
  304. {
  305.     char server[81];
  306.     int nto;
  307.     int index;
  308.     
  309.     GetDlgItemText(hDlg, IDC_NTPSERVER, server, 80);
  310.     if(server[0] == 0) return;
  311.     nto = SendDlgItemMessage(hDlg, IDC_TIMEOUTSPIN, UDM_GETPOS, 0, 0);
  312.     StartSyncTime(hwndMain, server, nto);
  313.     
  314.     index = CBFindStringExact(hDlg, IDC_NTPSERVER, server);
  315.     if(index != LB_ERR)
  316.         CBDeleteString(hDlg, IDC_NTPSERVER, index);
  317.     CBInsertString(hDlg, IDC_NTPSERVER, 0, server);
  318.     CBSetCurSel(hDlg, IDC_NTPSERVER, 0);
  319. }
  320.  
  321. /*------------------------------------------------
  322.     create tooltip window
  323. --------------------------------------------------*/
  324. void CreateTip(HWND hDlg)
  325. {
  326.     TOOLINFO ti;
  327.     
  328.     hwndTip = CreateWindowEx(0, TOOLTIPS_CLASS, (LPSTR)NULL,
  329.         TTS_ALWAYSTIP,
  330.         CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
  331.         hDlg, NULL, hInst, NULL); 
  332.     if(!hwndTip) return;
  333.     
  334.     ti.cbSize = sizeof(TOOLINFO); 
  335.     ti.uFlags = TTF_IDISHWND|TTF_SUBCLASS;
  336.     ti.hwnd = hDlg;
  337.     ti.hinst = hInst;
  338.     ti.uId = (UINT)GetDlgItem(hDlg, IDC_SYNCNOW);
  339.     ti.lpszText = (char*)IDS_SYNCNOW;
  340.     
  341.     SendMessage(hwndTip, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO)&ti);
  342. }
  343.