void CProfileRepoServerClb::OnRequest(Ipc::MsgID id, UInt8 const* pPayload, UInt32 payloadSize, UInt8* const pResponseBuffer, UInt32& bufferSize, Ipc::DirectionID) { LOG4CPLUS_TRACE_METHOD(msLogger, __PRETTY_FUNCTION__ ); const RepoRequest * req = reinterpret_cast<const RepoRequest*>(pPayload); switch (req->type) { case REQ_ADD_PROFILE_API: addProfileAPI(req,payloadSize,pResponseBuffer,bufferSize); break; case REQ_REMOVE_PROFILE_API: removeProfileAPI(req,payloadSize,pResponseBuffer,bufferSize); break; case REQ_ADD_PROFILE: addProfile(req,payloadSize,pResponseBuffer,bufferSize); break; case REQ_REMOVE_PROFILE: removeProfile(req,payloadSize,pResponseBuffer,bufferSize); break; case REQ_ADD_PROFILE_IMPLEMENTATION: addProfileImplementation(req,payloadSize,pResponseBuffer,bufferSize); break; case REQ_REMOVE_PROFILE_IMPLEMENTATION_PL: removeProfileImplementationPl(req,payloadSize,pResponseBuffer,bufferSize); break; case REQ_FIND_PROFILES: findProfiles(req,payloadSize,pResponseBuffer,bufferSize); break; case REQ_GET_MANIFEST: getManifest(req,payloadSize,pResponseBuffer,bufferSize); break; case REQ_GET_PROFILE_LIST: getProfilesList(req,payloadSize,pResponseBuffer,bufferSize); break; } }
virtual INT_PTR DlgProc(UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_TIMER: if (WaitForSingleObject(m_hFileNotify, 0) == WAIT_OBJECT_0) { m_profileList.DeleteAllItems(); ProfileEnumData ped(m_profileList, m_pd->ptszProfile); findProfiles(m_pd->ptszProfileDir, EnumProfilesForList, (LPARAM)&ped); FindNextChangeNotification(m_hFileNotify); } break; case WM_FOCUSTEXTBOX: SetFocus(m_profileList.GetHwnd()); if (m_pd->ptszProfile[0] == 0 || m_profileList.GetSelectedCount() == 0) m_profileList.SetItemState(0, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED); break; case WM_SHOWWINDOW: if (wParam) CheckRun(); break; case WM_CONTEXTMENU: ExecuteMenu(lParam); break; } return CDlgBase::DlgProc(msg, wParam, lParam); }
CPMALError CPmalCore::isEnabledProfile(Profile::Uid id, bool& enabled) { LOG4CPLUS_TRACE_METHOD(logger, __PRETTY_FUNCTION__); std::map<std::string, std::string> params; std::list<iviLink::Profile::Uid> profiles; CPMALError err = findProfiles(id, params, profiles, true); enabled = !profiles.empty(); return err; /// @todo: here we cannot distinguish whether profile is really /// disabled or just unknown /// So the method does not what its name suggests. }
CPMALError CPmalCore::isEnabledProfile(Profile::Uid id, bool& enabled) { std::map<std::string, std::string> params; std::list<iviLink::Profile::Uid> profiles; CPMALError err = findProfiles(id, params, profiles, true); if (err.isNoError()) { LOG4CPLUS_INFO(logger, "todo: here we cannot distinguish whether profile " "is really disabled or just unknown. " "So the method does not what its name suggests"); /// @todo: here we cannot distinguish whether profile is really /// disabled or just unknown /// So the method does not what its name suggests. enabled = !profiles.empty(); } return err; }
virtual void OnInitDialog() { // set columns LVCOLUMN col; col.mask = LVCF_TEXT | LVCF_WIDTH; col.pszText = TranslateT("Profile"); col.cx = 100; m_profileList.InsertColumn(0, &col); col.pszText = TranslateT("Driver"); col.cx = 150 - GetSystemMetrics(SM_CXVSCROLL); m_profileList.InsertColumn(1, &col); col.pszText = TranslateT("Size"); col.cx = 60; m_profileList.InsertColumn(2, &col); // icons HIMAGELIST hImgList = ImageList_Create(16, 16, ILC_MASK | ILC_COLOR32, 2, 1); ImageList_AddIcon_NotShared(hImgList, MAKEINTRESOURCE(IDI_USERDETAILS)); ImageList_AddIcon_NotShared(hImgList, MAKEINTRESOURCE(IDI_DELETE)); ImageList_AddIcon_NotShared(hImgList, MAKEINTRESOURCE(IDI_MWARNING)); ImageList_AddIcon_NotShared(hImgList, MAKEINTRESOURCE(IDI_MFATAL)); // LV will destroy the image list m_profileList.SetImageList(hImgList, LVSIL_SMALL); m_profileList.SetExtendedListViewStyle(m_profileList.GetExtendedListViewStyle() | LVS_EX_DOUBLEBUFFER | LVS_EX_INFOTIP | LVS_EX_LABELTIP | LVS_EX_FULLROWSELECT); // find all the profiles ProfileEnumData ped(m_profileList, m_pd->ptszProfile); findProfiles(m_pd->ptszProfileDir, EnumProfilesForList, (LPARAM)&ped); PostMessage(m_hwnd, WM_FOCUSTEXTBOX, 0, 0); m_hFileNotify = FindFirstChangeNotification(m_pd->ptszProfileDir, TRUE, FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_LAST_WRITE); if (m_hFileNotify != INVALID_HANDLE_VALUE) SetTimer(m_hwnd, 0, 1200, NULL); }
static INT_PTR CALLBACK DlgProfileSelect(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { DlgProfData *dat = (struct DlgProfData *)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); HWND hwndList = GetDlgItem(hwndDlg, IDC_PROFILELIST); switch (msg) { case WM_INITDIALOG: TranslateDialogDefault(hwndDlg); EnsureCheckerLoaded(true); { dat = (DlgProfData*)lParam; SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR)dat); // set columns LVCOLUMN col; col.mask = LVCF_TEXT | LVCF_WIDTH; col.pszText = TranslateT("Profile"); col.cx = 100; ListView_InsertColumn(hwndList, 0, &col); col.pszText = TranslateT("Driver"); col.cx = 150 - GetSystemMetrics(SM_CXVSCROLL); ListView_InsertColumn(hwndList, 1, &col); col.pszText = TranslateT("Size"); col.cx = 60; ListView_InsertColumn(hwndList, 2, &col); // icons HIMAGELIST hImgList = ImageList_Create(16, 16, ILC_MASK | ILC_COLOR32, 2, 1); ImageList_AddIcon_NotShared(hImgList, MAKEINTRESOURCE(IDI_USERDETAILS)); ImageList_AddIcon_NotShared(hImgList, MAKEINTRESOURCE(IDI_DELETE)); // LV will destroy the image list SetWindowLongPtr(hwndList, GWL_STYLE, GetWindowLongPtr(hwndList, GWL_STYLE) | LVS_SORTASCENDING); ListView_SetImageList(hwndList, hImgList, LVSIL_SMALL); ListView_SetExtendedListViewStyle(hwndList, ListView_GetExtendedListViewStyle(hwndList) | LVS_EX_DOUBLEBUFFER | LVS_EX_INFOTIP | LVS_EX_LABELTIP | LVS_EX_FULLROWSELECT); // find all the profiles ProfileEnumData ped = { hwndDlg, dat->pd->szProfile }; findProfiles(dat->pd->szProfileDir, EnumProfilesForList, (LPARAM)&ped); PostMessage(hwndDlg, WM_FOCUSTEXTBOX, 0, 0); dat->hFileNotify = FindFirstChangeNotification(dat->pd->szProfileDir, TRUE, FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_LAST_WRITE); if (dat->hFileNotify != INVALID_HANDLE_VALUE) SetTimer(hwndDlg, 0, 1200, NULL); return TRUE; } case WM_DESTROY: KillTimer(hwndDlg, 0); FindCloseChangeNotification(dat->hFileNotify); break; case WM_TIMER: if (WaitForSingleObject(dat->hFileNotify, 0) == WAIT_OBJECT_0) { ListView_DeleteAllItems(hwndList); ProfileEnumData ped = { hwndDlg, dat->pd->szProfile }; findProfiles(dat->pd->szProfileDir, EnumProfilesForList, (LPARAM)&ped); FindNextChangeNotification(dat->hFileNotify); } break; case WM_FOCUSTEXTBOX: SetFocus(hwndList); if (dat->pd->szProfile[0] == 0 || ListView_GetSelectedCount(hwndList) == 0) ListView_SetItemState(hwndList, 0, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED); break; case WM_SHOWWINDOW: if (wParam) { SetWindowText(dat->hwndOK, TranslateT("&Run")); EnableWindow(dat->hwndSM, TRUE); EnableWindow(dat->hwndOK, ListView_GetSelectedCount(hwndList) == 1); } break; case WM_CONTEXTMENU: { LVHITTESTINFO lvht = { 0 }; lvht.pt.x = GET_X_LPARAM(lParam); lvht.pt.y = GET_Y_LPARAM(lParam); ScreenToClient(hwndList, &lvht.pt); if (ListView_HitTest(hwndList, &lvht) < 0) { if (lParam != -1) break; lvht.iItem = ListView_GetSelectionMark(hwndList); RECT rc = { 0 }; if (!ListView_GetItemRect(hwndList, lvht.iItem, &rc, LVIR_LABEL)) break; lvht.pt.x = rc.left; lvht.pt.y = rc.bottom; ClientToScreen(hwndList, &lvht.pt); } else { lvht.pt.x = GET_X_LPARAM(lParam); lvht.pt.y = GET_Y_LPARAM(lParam); } HMENU hMenu = CreatePopupMenu(); AppendMenu(hMenu, MF_STRING, 1, TranslateT("Run")); AppendMenu(hMenu, MF_SEPARATOR, 0, NULL); if (ServiceExists(MS_DB_CHECKPROFILE)) { AppendMenu(hMenu, MF_STRING, 2, TranslateT("Check database")); AppendMenu(hMenu, MF_SEPARATOR, 0, NULL); } AppendMenu(hMenu, MF_STRING, 3, TranslateT("Delete")); int index = TrackPopupMenu(hMenu, TPM_RETURNCMD, lvht.pt.x, lvht.pt.y, 0, hwndDlg, NULL); switch (index) { case 1: SendMessage(GetParent(hwndDlg), WM_COMMAND, IDOK, 0); break; case 2: CheckProfile(hwndList, lvht.iItem, dat); break; case 3: DeleteProfile(hwndList, lvht.iItem, dat); break; } DestroyMenu(hMenu); } break; case WM_NOTIFY: LPNMHDR hdr = (LPNMHDR)lParam; if (hdr && hdr->code == PSN_INFOCHANGED) break; if (hdr && hdr->idFrom == IDC_PROFILELIST) { switch (hdr->code) { case LVN_ITEMCHANGED: EnableWindow(dat->hwndOK, ListView_GetSelectedCount(hwndList) == 1); case NM_DBLCLK: if (dat != NULL) { TCHAR profile[MAX_PATH]; LVITEM item = { 0 }; item.mask = LVIF_TEXT; item.iItem = ListView_GetNextItem(hwndList, -1, LVNI_SELECTED | LVNI_ALL); item.pszText = profile; item.cchTextMax = SIZEOF(profile); if (ListView_GetItem(hwndList, &item)) { // profile is placed in "profile_name" subfolder TCHAR tmpPath[MAX_PATH]; mir_sntprintf(tmpPath, SIZEOF(tmpPath), _T("%s\\%s.dat"), dat->pd->szProfileDir, profile); HANDLE hFile = CreateFile(tmpPath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); if (hFile == INVALID_HANDLE_VALUE) mir_sntprintf(dat->pd->szProfile, MAX_PATH, _T("%s\\%s\\%s.dat"), dat->pd->szProfileDir, profile, profile); else _tcscpy(dat->pd->szProfile, tmpPath); CloseHandle(hFile); if (hdr->code == NM_DBLCLK) EndDialog(GetParent(hwndDlg), 1); } } return TRUE; case LVN_KEYDOWN: if (((LPNMLVKEYDOWN)lParam)->wVKey == VK_DELETE) DeleteProfile(hwndList, ListView_GetNextItem(hwndList, -1, LVNI_SELECTED | LVNI_ALL), dat); break; case LVN_GETINFOTIP: NMLVGETINFOTIP *pInfoTip = (NMLVGETINFOTIP *)lParam; if (pInfoTip != NULL) { TCHAR profilename[MAX_PATH], fullpath[MAX_PATH]; struct _stat statbuf; ListView_GetItemText(hwndList, pInfoTip->iItem, 0, profilename, MAX_PATH); mir_sntprintf(fullpath, SIZEOF(fullpath), _T("%s\\%s\\%s.dat"), dat->pd->szProfileDir, profilename, profilename); _tstat(fullpath, &statbuf); mir_sntprintf(pInfoTip->pszText, pInfoTip->cchTextMax, _T("%s\n%s: %s\n%s: %s"), fullpath, TranslateT("Created"), rtrimt(NEWTSTR_ALLOCA(_tctime(&statbuf.st_ctime))), TranslateT("Modified"), rtrimt(NEWTSTR_ALLOCA(_tctime(&statbuf.st_mtime)))); } } } break; } return FALSE; }