/*------------------------------------------------------------------- | driprop.c - Driver level Properties Sheet. |--------------------------------------------------------------------*/ #include "precomp.h" static void set_field(HWND hDlg, WORD id); static void get_field(HWND hDlg, WORD id); static void context_menu(void); static Driver_Config *adv_org_wi = NULL; // original info, use to detect changes /*---------------------------------------------------------- AdvDriverSheet - Dlg window procedure for add on Advanced sheet. |-------------------------------------------------------------*/ BOOL WINAPI AdvDriverSheet( IN HWND hDlg, IN UINT uMessage, IN WPARAM wParam, IN LPARAM lParam) { OUR_INFO *OurProps = (OUR_INFO *)GetWindowLong(hDlg, DWL_USER); switch(uMessage) { case WM_INITDIALOG : OurProps = (OUR_INFO *)((LPPROPSHEETPAGE)lParam)->lParam; SetWindowLong(hDlg, DWL_USER, (LONG)OurProps); #ifdef NT50 glob_hwnd = hDlg; #endif if (adv_org_wi == NULL) adv_org_wi = (Driver_Config *) calloc(1,sizeof(Driver_Config)); memcpy(adv_org_wi, wi, sizeof(*wi)); // save copy of original set_field(hDlg, IDC_VERBOSE); set_field(hDlg, IDC_GLOBAL485); set_field(hDlg, IDC_CBOX_SCAN_RATE); #ifdef NT50 #if ALLOW_NO_PNP_PORTS set_field(hDlg, IDC_PNP_PORTS); #else // hide this option for now. ShowWindow(GetDlgItem(hDlg, IDC_PNP_PORTS), SW_HIDE); #endif #endif return TRUE; // No need for us to set the focus. case PSM_QUERYSIBLINGS : { switch (HIWORD(wParam)) { case QUERYSIB_GET_OUR_PROPS : // grab updated info from controls(don't have any) get_field(hDlg, IDC_VERBOSE); get_field(hDlg, IDC_GLOBAL485); get_field(hDlg, IDC_CBOX_SCAN_RATE); #ifdef NT50 #if ALLOW_NO_PNP_PORTS get_field(hDlg, IDC_PNP_PORTS); #endif #endif SetWindowLong(hDlg, DWL_MSGRESULT, PSNRET_NOERROR); return TRUE; break; default : return FALSE; } } case WM_COMMAND: switch (LOWORD(wParam)) { case IDB_DEF: wi->VerboseLog = 0; wi->ScanRate = 0; wi->GlobalRS485 = 0; #ifdef NT50 wi->NoPnpPorts = 0; #endif set_field(hDlg, IDC_VERBOSE); set_field(hDlg, IDC_GLOBAL485); set_field(hDlg, IDC_CBOX_SCAN_RATE); #ifdef NT50 #if ALLOW_NO_PNP_PORTS set_field(hDlg, IDC_PNP_PORTS); #endif #endif break; case IDM_ADVANCED_MODEM_INF: //mess(&wi->ip, "1.) modem inf"); update_modem_inf(1); break; case IDM_PM: // Try out the add pm group dde stuff setup_make_progman_group(0); break; } return FALSE; case WM_PAINT: // return FALSE; case WM_CONTEXTMENU: // right-click context_menu(); break; case WM_HELP: // question mark thing our_context_help(lParam); return FALSE; case WM_NOTIFY : switch (((NMHDR *)lParam)->code) { case PSN_KILLACTIVE : // we're losing focus to another page... // make sure we update the Global485 variable here. get_field(hDlg, IDC_GLOBAL485); SetWindowLong(hDlg, DWL_MSGRESULT, PSNRET_NOERROR); return FALSE; // allow focus change break; case PSN_HELP : our_help(&wi->ip, WIN_NT); break; case PSN_QUERYCANCEL : // request that the other sheets gather up any changes. PropSheet_QuerySiblings(GetParent(hDlg), (WPARAM) (QUERYSIB_GET_OUR_PROPS << 16), 0); if (allow_exit(1)) // request cancel { // the DWL_MSGRESULT field must be *FALSE* to tell QueryCancel // that an exit is acceptable. The function result must be // *TRUE* to acknowledge that we handled the message. SetWindowLong(hDlg, DWL_MSGRESULT, FALSE); // allow cancel return TRUE; } else { // the DWL_MSGRESULT field must be *TRUE* to tell QueryCancel // that we don't want an exit. The function result must be // *TRUE* to acknowledge that we handled the message. SetWindowLong(hDlg, DWL_MSGRESULT, TRUE); // don't allow cancel return TRUE; } break; case PSN_APPLY : // request that the other sheets gather up any changes. PropSheet_QuerySiblings(GetParent(hDlg), (WPARAM) (QUERYSIB_GET_OUR_PROPS << 16), 0); if (!wi->DriverExitDone) { // now see if anything changed that needs saving if (allow_exit(0)) // request ok to save and exit { wi->DriverExitDone = 1; // prevents other pages doing this // do the install/save of config params if not canceling.. #ifdef NT50 our_nt50_exit(); // ok, quit #else our_exit(); // nt40 exit #endif SetWindowLong(hDlg, DWL_MSGRESULT, PSNRET_NOERROR); //wi->SaveOnExit = 1; } else { SetWindowLong(hDlg, DWL_MSGRESULT, PSNRET_INVALID_NOCHANGEPAGE); } } return TRUE; default : return FALSE; } // switch ->code break; // case wmnotify default : // return FALSE; break; } // switch(uMessage) return FALSE; } /*---------------------------------------------------------------------------- | scr_to_cur - Our window screen pos to windows absolute cursor position. |-----------------------------------------------------------------------------*/ static void scr_to_cur(HWND hwnd, POINT *pt) { RECT rec; int cx, cy; GetWindowRect(hwnd, &rec); cx = GetSystemMetrics(SM_CXFRAME); cy = GetSystemMetrics(SM_CYCAPTION) + (cx-1); pt->x += (rec.left + cx); pt->y += ( rec.top + cy); } /*---------------------------------------------------------- context_menu - |------------------------------------------------------------*/ static void context_menu(void) { HMENU hpop_menu; POINT scr_pt; int stat; scr_pt.x = 200; scr_pt.y = 200; hpop_menu = CreatePopupMenu(); if (hpop_menu == NULL) { mess(&wi->ip, "Error from CreatePopMenu"); return; } #ifndef NT50 AppendMenu(hpop_menu, 0, IDM_ADVANCED_MODEM_INF, "Update RAS modem.inf"); #endif AppendMenu(hpop_menu, 0, 0x11, "Run Wcom Test Terminal"); AppendMenu(hpop_menu, 0, 0x12, "Run Portman Program"); AppendMenu(hpop_menu, 0, 0x10, "Run Peer tracer"); if (setup_utils_exist()) { AppendMenu(hpop_menu, 0, IDM_PM, "Add Program Manager Menu Selections"); } //scr_to_cur(glob_hwnd, &scr_pt); GetCursorPos(&scr_pt); #if 0 stat = TrackPopupMenu(hpop_menu, 0, /* flags */ //TPM_NONOTIFY, /* flags */ scr_pt.x, scr_pt.y, /* x,y */ 0, /* 0 reserved */ glob_hwnd, NULL); #endif stat = TrackPopupMenuEx(hpop_menu, TPM_NONOTIFY | TPM_RETURNCMD, /* flags */ scr_pt.x, scr_pt.y, /* x,y */ //0, /* 0 reserved */ glob_hwnd, NULL); if (stat == IDM_ADVANCED_MODEM_INF) { update_modem_inf(1); } else if (stat == IDM_PM) { stat = make_progman_group(progman_list_nt, wi->ip.dest_dir); } else if (stat == 0x10) { GetSystemDirectory(gtmpstr,144); strcat(gtmpstr, "\\"); strcat(gtmpstr, OurAppDir); SetCurrentDirectory(gtmpstr); strcat(gtmpstr, "\\peer.exe"); WinExec(gtmpstr, SW_RESTORE); } else if (stat == 0x11) { GetSystemDirectory(gtmpstr,144); strcat(gtmpstr, "\\"); strcat(gtmpstr, OurAppDir); SetCurrentDirectory(gtmpstr); strcat(gtmpstr, "\\wcom32.exe"); WinExec(gtmpstr, SW_RESTORE); } else if (stat == 0x12) { GetSystemDirectory(gtmpstr,144); strcat(gtmpstr, "\\"); strcat(gtmpstr, OurAppDir); SetCurrentDirectory(gtmpstr); strcat(gtmpstr, "\\portmon.exe"); WinExec(gtmpstr, SW_RESTORE); } DestroyMenu(hpop_menu); } /*---------------------------------------------------------- get_field - |------------------------------------------------------------*/ static void get_field(HWND hDlg, WORD id) { char tmpstr[60]; UINT stat; INT val; //if (our_device_index >= wi->NumDevices) // our_device_index = 0; //pc = &wi->dev[our_device_index].ports[our_port_index]; switch(id) { case IDC_VERBOSE : //------------------ fill in "verbose event logging" option if (IsDlgButtonChecked(hDlg, id)) wi->VerboseLog = 1; else wi->VerboseLog = 0; break; case IDC_PNP_PORTS : #if ALLOW_NO_PNP_PORTS // don't allow them to change this here for now... if (IsDlgButtonChecked(hDlg, id)) wi->NoPnpPorts = 1; else wi->NoPnpPorts = 0; #endif break; case IDC_GLOBAL485 : if (IsDlgButtonChecked(hDlg, id)) wi->GlobalRS485 = 1; else wi->GlobalRS485 = 0; break; case IDC_CBOX_SCAN_RATE : //------------------------- check scan_rate edit field GetDlgItemText(hDlg, id, tmpstr, 59); stat= sscanf(tmpstr,"%d",&val); if ((stat == 1) && (val >= 0)) { wi->ScanRate = (int) val; //wsprintf(tmpstr, "scan:%d", wi->ScanRate); //P_TRACE(tmpstr); } break; } } /*---------------------------------------------------------- set_field - |------------------------------------------------------------*/ static void set_field(HWND hDlg, WORD id) { HWND hwnd; char tmpstr[80]; //if (our_device_index >= wi->NumDevices) // our_device_index = 0; //pc = &wi->dev[our_device_index].ports[our_port_index]; switch(id) { case IDC_VERBOSE : //------------------ fill in "verbose log" option SendDlgItemMessage(hDlg, id, BM_SETCHECK, wi->VerboseLog, 0); break; case IDC_GLOBAL485 : //------------------ fill in "global rs485" option SendDlgItemMessage(hDlg, id, BM_SETCHECK, wi->GlobalRS485, 0); break; #if ALLOW_NO_PNP_PORTS case IDC_PNP_PORTS : SendDlgItemMessage(hDlg, id, BM_SETCHECK, wi->NoPnpPorts, 0); break; #endif case IDC_CBOX_SCAN_RATE : hwnd = GetDlgItem(hDlg, IDC_CBOX_SCAN_RATE); SendMessage(hwnd, CB_RESETCONTENT, 0, 0); SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)(char far *) "1"); SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)(char far *) "2"); SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)(char far *) "4"); SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)(char far *) RcStr(MSGSTR+21)); SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)(char far *) "20"); if (wi->ScanRate < 0) wi->ScanRate = 0; if ((wi->ScanRate == 0) || (wi->ScanRate == 10)) lstrcpy(tmpstr,RcStr(MSGSTR+21)); else wsprintf(tmpstr,"%d",wi->ScanRate); SetDlgItemText(hDlg, IDC_CBOX_SCAN_RATE, tmpstr); break; } }