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