void UIWidget::Draw(DrawContext& c){ if(display_mode == DisplayMode::Invisible) return; const Size2D drawsize = c.Size(); if(drawsize.IsEmpty()){ needs_redrawing = false; return; } if(drawsize != current_size){ std::cout << "WARNING: Implicitly calling Resize, because the draw " "context size " << drawsize.ToString() << " is incoherent with widget " "stored size " << current_size.ToString() << "!" << std::endl; //throw Exception(""); Resize(drawsize); } if(needs_redrawing){ //std::cout << "Needs redrawing. " << cache_texture->GetSize().ToString() << std::endl; c.Push(cache_texture, drawsize.width, drawsize.height); if(IsDrawn()){ c.Clear(clear_color); CustomDraw(c); c.SetColor(overlay_color); c.Fill(); }else{ c.Clear(); } c.Pop(); }else{ //std::cout << "No need to redraw. " << cache_texture->GetSize().ToString() << std::endl; } c.DrawTexture(cache_texture); current_size = drawsize; needs_redrawing = false; }
LRESULT CALLBACK ProjectProc(HWND hwnd, UINT iMessage, WPARAM wParam, LPARAM lParam) { int i; RECT rs; NM_TREEVIEW *nm; DWINFO info; LPNMTVKEYDOWN key; PROJECTITEM *data; TVHITTESTINFO hittest; HWND win; HTREEITEM oldSel; static HCURSOR origCurs; static BOOL dragging; static BOOL inView; static HTREEITEM srcItem, dstItem; switch (iMessage) { LOGFONT lf; case WM_SYSCOMMAND: if (wParam == SC_CLOSE) SendMessage(hwnd, WM_CLOSE, 0, 0); break; // case WM_SETTEXT: // return SendMessage(hwndTab, iMessage, wParam, lParam); case WM_LBUTTONDOWN: case WM_RBUTTONDOWN: SetFocus(hwnd); break; case WM_NOTIFY: nm = (NM_TREEVIEW*)lParam; switch (nm->hdr.code) { case NM_CUSTOMDRAW: return CustomDraw(hwnd, (LPNMTVCUSTOMDRAW)nm); case N_EDITDONE: DoneRenaming(); break; case TVN_BEGINDRAG: GetCursorPos(&hittest.pt); ScreenToClient(prjTreeWindow, &hittest.pt); srcItem = TreeView_HitTest(prjTreeWindow, &hittest); data = GetItemInfo(srcItem); if (data && (data->type == PJ_FILE || data->type == PJ_FOLDER)) { dragging = TRUE; SetCapture(hwnd); origCurs = SetCursor(dragCur); inView = TRUE; } break; case TVN_KEYDOWN: key = (LPNMTVKEYDOWN)lParam; switch (key->wVKey) { case VK_INSERT: if (GetKeyState(VK_CONTROL) &0x80000000) { data = GetItemInfo(prjSelectedItem); if (data) { int msg = -1; switch (data->type) { case PJ_WS: msg = IDM_EXISTINGPROJECT; break; case PJ_PROJ: msg = IDM_NEWFOLDER; break; case PJ_FOLDER: msg = IDM_EXISTINGFILE; break; } if (msg != -1) PostMessage(hwnd, WM_COMMAND, msg, 0); } } else if (GetKeyState(VK_SHIFT) &0x80000000) { data = GetItemInfo(prjSelectedItem); if (data) { int msg = -1; switch (data->type) { case PJ_WS: msg = IDM_NEWPROJECT; break; case PJ_PROJ: msg = IDM_NEWFOLDER; break; case PJ_FOLDER: msg = IDM_NEWFILE_P; break; } if (msg != -1) PostMessage(hwnd, WM_COMMAND, msg, 0); } } else { data = GetItemInfo(prjSelectedItem); if (data && (data->type != PJ_WS)) PostMessage(hwnd, WM_COMMAND, IDM_RENAME, 0); } break; case VK_DELETE: if (!(GetKeyState(VK_CONTROL) &0x80000000) && !(GetKeyState(VK_SHIFT) &0x8000000)) { data = GetItemInfo(prjSelectedItem); if (data && (data->type == PJ_FOLDER || data->type == PJ_FILE)) PostMessage(hwnd, WM_COMMAND, IDM_REMOVE, 0); } break; case VK_RETURN: SendMessage(hwnd, WM_COMMAND, IDM_OPENFILES, 0); break; } break; case NM_DBLCLK: oldSel = prjSelectedItem; GetCursorPos(&hittest.pt); ScreenToClient(prjTreeWindow, &hittest.pt); prjSelectedItem = TreeView_HitTest(prjTreeWindow, &hittest); if (prjSelectedItem) PostMessage(hwnd, WM_COMMAND, IDM_OPENFILES, 0); prjSelectedItem = oldSel; return 0; case NM_RCLICK: GetCursorPos(&hittest.pt); ScreenToClient(prjTreeWindow, &hittest.pt); prjSelectedItem = TreeView_HitTest(prjTreeWindow, &hittest); if (prjSelectedItem) { TreeView_SelectItem(prjTreeWindow, prjSelectedItem); } CreateProjectMenu(); break; case TVN_SELCHANGED: nm = (NM_TREEVIEW*)lParam; prjSelectedItem = nm->itemNew.hItem; if (prjSelectedItem == 0) prjSelectedItem = workArea->hTreeItem; break; case TVN_ITEMEXPANDED: nm = (NM_TREEVIEW *)lParam; data = GetItemInfo(nm->itemNew.hItem); if (data) { if (data->type == PJ_FOLDER) { TV_ITEM setitem; memset(&setitem, 0, sizeof(setitem)); setitem.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE; setitem.iImage = setitem.iSelectedImage = nm->action == TVE_EXPAND ? ilfolderOpen : ilfolderClose; setitem.hItem = nm->itemNew.hItem; TreeView_SetItem(prjTreeWindow, &setitem); } if (nm->action == TVE_EXPAND) { data->expanded = TRUE; } else data->expanded = FALSE; return 0; } break; case TVN_DELETEITEM: nm = (NM_TREEVIEW *)lParam; if (nm->itemOld.hItem == prjSelectedItem) prjSelectedItem = TreeView_GetSelection(prjTreeWindow); break; } break; case WM_COMMAND: switch (LOWORD(wParam)) { case ID_TBPROFILE: if (HIWORD(wParam) == CBN_SELENDOK) { int i = SendMessage(hwndTbProfile, CB_GETCURSEL, 0 , 0); if (i != CB_ERR) { if (i == 0) { strcpy(currentProfileName, sysProfileName); } else { PROFILENAMELIST *pf = profileNames; while (pf && --i) pf = pf->next; if (pf) { strcpy(currentProfileName, pf->name); } } MarkChanged(workArea, TRUE); } } break; case ID_TBBUILDTYPE: if (HIWORD(wParam) == CBN_SELENDOK) { int i = SendMessage(hwndTbBuildType, CB_GETCURSEL, 0 , 0); if (i != CB_ERR) { profileDebugMode = i == 0 ? 1 : 0; MarkChanged(workArea, TRUE); } } break; case IDM_RESETPROFILECOMBOS: { HWND htemp; PROFILENAMELIST *pf; int selected,n; int count; POINT pt; pf = profileNames; selected = 0; count = 0; SendMessage(hwndTbProfile, CB_RESETCONTENT, 0, 0); SendMessage(hwndTbProfile, CB_ADDSTRING, 0, (LPARAM)sysProfileName); while (pf) { count++; if (!strcmp(pf->name,currentProfileName)) selected = count; SendMessage(hwndTbProfile, CB_ADDSTRING, 0, (LPARAM)pf->name); pf = pf->next; } SendMessage(hwndTbProfile, CB_SETCURSEL, selected, 0); SendMessage(hwndTbBuildType, CB_RESETCONTENT, 0, 0); SendMessage(hwndTbBuildType, CB_ADDSTRING, 0, (LPARAM)"Debug"); SendMessage(hwndTbBuildType, CB_ADDSTRING, 0, (LPARAM)"Release"); SendMessage(hwndTbBuildType, CB_SETCURSEL, profileDebugMode ? 0 : 1, 0); pt.x = 5; pt.y = 5; htemp = ChildWindowFromPoint(hwndTbProfile, pt); SendMessage(htemp, EM_SETREADONLY, 1, 0); htemp = ChildWindowFromPoint(hwndTbBuildType, pt); SendMessage(htemp, EM_SETREADONLY, 1, 0); EnableWindow(hwndTbProfile, TRUE); EnableWindow(hwndTbBuildType, TRUE); break; } case IDM_IMPORT_CWS: ImportProject(FALSE); break; case IDM_IMPORT_CTG: ImportProject(TRUE); break; case IDM_DOSWINDOW: { DosWindow(activeProject ? activeProject->realName : NULL, NULL, NULL, NULL, NULL); } break; case IDM_MAKEWINDOW: { char exec[MAX_PATH]; sprintf(exec, "%s\\bin\\imake.exe", szInstallPath); DosWindow(activeProject ? activeProject->realName : NULL, exec, "", "Custom Make", "Make Is Complete."); } break; case IDM_RUN: SaveWorkArea(workArea); dbgRebuildMain(wParam); break; case IDM_SETACTIVEPROJECT: ProjectSetActive(); break; case IDM_NEWFILE_P: ProjectNewFile(); PostMessage(hwndFrame, WM_REDRAWTOOLBAR, 0, 0); break; case IDM_EXISTINGFILE: ProjectExistingFile(); PostMessage(hwndFrame, WM_REDRAWTOOLBAR, 0, 0); break; case IDM_NEWPROJECT: ProjectNewProject(); PostMessage(hwndFrame, WM_REDRAWTOOLBAR, 0, 0); break; case IDM_EXISTINGPROJECT: ProjectExistingProject(); PostMessage(hwndFrame, WM_REDRAWTOOLBAR, 0, 0); break ; case IDM_REMOVE: ProjectRemove(); PostMessage(hwndFrame, WM_REDRAWTOOLBAR, 0, 0); break; case IDM_RENAME: ProjectRename(); break; case IDM_NEWFOLDER: ProjectNewFolder(); PostMessage(hwndFrame, WM_REDRAWTOOLBAR, 0, 0); break; case IDM_NEWWS: if (uState != notDebugging) { if (ExtendedMessageBox("WorkArea", MB_OKCANCEL, "This action requires the debugger to be stopped.") != IDOK) { break; } abortDebug(); } SelectWindow(DID_PROJWND); ProjectNewWorkArea(); break; case IDM_OPENWS: if (uState != notDebugging) { if (ExtendedMessageBox("WorkArea", MB_OKCANCEL, "This action requires the debugger to be stopped.") != IDOK) { break; } abortDebug(); } SelectWindow(DID_PROJWND); ProjectExistingWorkArea(); break; case IDM_CLOSEWS: if (making) break; if (uState != notDebugging) { if (ExtendedMessageBox("WorkArea", MB_OKCANCEL, "This action requires the debugger to be stopped.") != IDOK) { break; } abortDebug(); } CloseWorkArea(); break; case IDM_SAVEWS: SaveAllProjects(workArea, TRUE); break; case IDM_COMPILEFILEFROMTREE: { PROJECTITEM *data = GetItemInfo(prjSelectedItem); if (data && data->type == PJ_FILE) { unlink(data->outputName); Maker(data, TRUE); } } break; case IDM_COMPILEFILE: win = (HWND)SendMessage(hwndClient, WM_MDIGETACTIVE, 0, 0); if (IsWindow(win) && IsEditWindow(win)) { HTREEITEM item = FindItemByWind(win); PROJECTITEM *data = GetItemInfo(item); if (data) { unlink(data->outputName); Maker(data, TRUE); } } break; case IDM_GENMAKE: if (workArea && workArea->children) { genMakeFile(workArea); } else { ExtendedMessageBox("Makefile Generation", MB_SETFOREGROUND | MB_SYSTEMMODAL, "You need at least one project to generate a make file"); } break; case IDM_MAKE: if (HIWORD(wParam)) if (GetKeyState(VK_CONTROL) &0x80000000) SendMessage(hwnd, WM_COMMAND, IDM_COMPILEFILE, 0); else if (GetKeyState(VK_SHIFT) &0x80000000) Maker(activeProject, FALSE); else Maker(workArea, FALSE); else Maker(workArea, FALSE); break; case IDM_MAKE_RIGHTCLICK: if (HIWORD(wParam)) if (GetKeyState(VK_CONTROL) &0x80000000) SendMessage(hwnd, WM_COMMAND, IDM_COMPILEFILE, 0); else if (GetKeyState(VK_SHIFT) &0x80000000) Maker(activeProject, FALSE); else Maker(workArea, FALSE); else { if (prjSelectedItem) { PROJECTITEM *data = GetItemInfo(prjSelectedItem); if (data) { Maker(data, FALSE); break; } } Maker(workArea, FALSE); } break; case IDM_BUILDALL: Maker(workArea, TRUE); break; case IDM_BUILDALL_RIGHTCLICK: if (prjSelectedItem) { PROJECTITEM *data = GetItemInfo(prjSelectedItem); if (data) { Maker(data, TRUE); break; } } Maker(workArea, TRUE); break; case IDM_BUILDSELECTED: Maker(activeProject, FALSE); break; case IDM_STOPBUILD: StopBuild(); break; case IDM_CALCULATEDEPENDS: CalculateProjectDepends(GetItemInfo(prjSelectedItem)); break; case IDM_RUNNODEBUG: { SaveWorkArea(workArea); RunProgram(activeProject); break; } case IDM_SELECTPROFILE: SelectProfileDialog(); break; case IDM_ACTIVEPROJECTPROPERTIES: if (activeProject) prjSelectedItem = activeProject->hTreeItem; // fall through case IDM_PROJECTPROPERTIES: data = GetItemInfo(prjSelectedItem); ShowBuildProperties(data); break; case IDM_PROJECTDEPENDS: data = GetItemInfo(prjSelectedItem); EditProjectDependencies(data); break; case IDM_OPENFILES: data = GetItemInfo(prjSelectedItem); if (data) if (data->type == PJ_FILE) { if (strlen(data->realName) >= 3 && !stricmp(data->realName + strlen(data->realName) -3, ".rc")) { NavigateToResource(data); } else { strcpy(info.dwName, data->realName); strcpy(info.dwTitle, data->displayName); info.dwLineNo = - 1; info.logMRU = FALSE; info.newFile = FALSE; CreateDrawWindow(&info, TRUE); } } break; case IDM_CLOSE: SendMessage(hwnd, WM_CLOSE, 0, 0); break; default: return DefWindowProc(hwnd, iMessage, wParam, lParam); } break; case WM_LBUTTONUP: if (dragging) { SetCursor(origCurs); ReleaseCapture(); dragging = FALSE; TreeView_SelectDropTarget(prjTreeWindow, NULL); if (inView && dstItem != srcItem && srcItem && dstItem) { DragTo(dstItem, srcItem); } } break; case WM_MOUSEMOVE: if (dragging) { hittest.pt.x = (long)(short)LOWORD(lParam); hittest.pt.y = (long)(short)HIWORD(lParam); dstItem = TreeView_HitTest(prjTreeWindow, &hittest); if (dstItem && dstItem != srcItem) { PROJECTITEM *srcData = GetItemInfo(srcItem); data = GetItemInfo(dstItem); if (srcData && data) { PROJECTITEM *p = data->parent; while (p) if (p == srcData) break; else p = p->parent; if (p) { if (inView) { inView = FALSE; SetCursor(noCur); TreeView_SelectDropTarget(prjTreeWindow, NULL); } break; } } if (data && (data->type == PJ_PROJ || data->type == PJ_FOLDER)) { if (!inView) { inView = TRUE; SetCursor(dragCur); } TreeView_SelectDropTarget(prjTreeWindow, dstItem); } else { if (inView) { inView = FALSE; SetCursor(noCur); TreeView_SelectDropTarget(prjTreeWindow, NULL); } } } else { if (inView) { inView = FALSE; SetCursor(noCur); TreeView_SelectDropTarget(prjTreeWindow, NULL); } } } break; case WM_SETFOCUS: PostMessage(hwndFrame, WM_REDRAWTOOLBAR, 0, 0); SetFocus(prjTreeWindow); break; case WM_CREATE: hwndProject = hwnd; GetClientRect(hwnd, &rs); treeViewSelected = 0; dragCur = LoadCursor(hInstance, "ID_DRAGCUR"); noCur = LoadCursor(hInstance, "ID_NODRAGCUR"); folderClose = LoadBitmap(hInstance, "ID_FOLDERCLOSE"); folderOpen = LoadBitmap(hInstance, "ID_FOLDEROPEN"); treeIml = ImageList_Create(16, 16, ILC_COLOR24, IL_IMAGECOUNT+2, 0); mainIml = LoadBitmap(hInstance, "ID_FILES"); ChangeBitmapColor(mainIml, 0xffffff, RetrieveSysColor(COLOR_WINDOW)); ImageList_Add(treeIml, mainIml, NULL); ilfolderClose = ImageList_Add(treeIml, folderClose, 0); ilfolderOpen = ImageList_Add(treeIml, folderOpen, 0); DeleteObject(folderClose); DeleteObject(folderOpen); DeleteObject(mainIml); prjTreeWindow = CreateWindowEx(0, sztreeDoubleBufferName, "", WS_VISIBLE | WS_CHILD | TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS | TVS_TRACKSELECT, 0, 0, rs.right, rs.bottom, hwnd, (HMENU)ID_TREEVIEW, hInstance, NULL); TreeView_SetImageList(prjTreeWindow, treeIml, TVSIL_NORMAL); lf = systemDialogFont; projFont = CreateFontIndirect(&lf); lf.lfItalic = TRUE; italicProjFont = CreateFontIndirect(&lf); lf.lfItalic = FALSE; lf.lfWeight = FW_BOLD; boldProjFont = CreateFontIndirect(&lf); SendMessage(prjTreeWindow, WM_SETFONT, (WPARAM)boldProjFont, 0); return 0; case WM_CLOSE: SaveAllProjects(workArea, FALSE); break; case WM_DESTROY: FreeSubTree(workArea, FALSE); DestroyWindow(prjTreeWindow); DeleteObject(projFont); DeleteObject(boldProjFont); DeleteObject(italicProjFont); DestroyCursor(dragCur); DestroyCursor(noCur); hwndProject = 0; break; case WM_SIZE: MoveWindow(prjTreeWindow, 0, 0, LOWORD(lParam), HIWORD(lParam), 0); break; default: break; } return DefWindowProc(hwnd, iMessage, wParam, lParam); }
LRESULT CALLBACK PropsProc(HWND hwnd, UINT iMessage, WPARAM wParam, LPARAM lParam) { NM_TREEVIEW *nm; RECT rs; LVHITTESTINFO_x hittest; switch (iMessage) { case WM_NOTIFY: nm = (NM_TREEVIEW*)lParam; switch (nm->hdr.code) { case LVN_GETDISPINFO: { LV_DISPINFO *plvdi = (LV_DISPINFO*)lParam; plvdi->item.mask |= LVIF_TEXT | LVIF_DI_SETITEM; plvdi->item.mask &= ~LVIF_IMAGE; switch (plvdi->item.iSubItem) { case 1: if (currentPropertyFuncs) { char buf[256]; LV_ITEM item; memset(&item, 0, sizeof(item)); item.iItem = plvdi->item.iItem; item.mask = LVIF_PARAM; ListView_GetItem(lvwindow, &item); currentPropertyFuncs->getText(buf, lvwindow, currentPropertyData, item.lParam); plvdi->item.pszText = buf; } else { plvdi->item.pszText = ""; } break; default: break; } } case NM_CUSTOMDRAW: return CustomDraw(hwnd, (LPNMLVCUSTOMDRAW)lParam); case NM_CLICK: GetCursorPos(&hittest.pt); ScreenToClient(lvwindow, &hittest.pt); if (currentPropertyWindow) { // PostMessage(hwnd, WM_KILLPROPSEDITOR, 0, 0); } else { ListView_SubItemHitTest(lvwindow, &hittest); if (hittest.flags & LVHT_ONITEM) { if (hittest.iSubItem == 1) { RECT r; LV_ITEM item; memset(&item, 0, sizeof(item)); item.iItem = hittest.iItem; item.mask = LVIF_PARAM; ListView_GetItem(lvwindow, &item); currentPropertyRow = item.lParam; currentPropertyWindow = currentPropertyFuncs->startEdit(lvwindow, currentPropertyRow, currentPropertyData); if (currentPropertyWindow) { SendMessage(currentPropertyWindow, WM_SETFONT, SendMessage(lvwindow, WM_GETFONT, 0, 0), 0); ListView_GetSubItemRect(lvwindow,hittest.iItem, 1, LVIR_BOUNDS, &r); SetWindowPos(currentPropertyWindow, NULL, r.left, r.top, r.right- r.left, r.bottom - r.top, SWP_NOZORDER | SWP_SHOWWINDOW); SetFocus(currentPropertyWindow); // well it might not be an edit window in which case this should be ignored SendMessage(currentPropertyWindow, EM_SETSEL, 0, -1); // well it might not be a combo box in which case this should be ignored SendMessage(currentPropertyWindow, CB_SHOWDROPDOWN, 1, 0); } } } } break; case NM_DBLCLK: GetCursorPos(&hittest.pt); ScreenToClient(lvwindow, &hittest.pt); return 0; case NM_RCLICK: GetCursorPos(&hittest.pt); ScreenToClient(lvwindow, &hittest.pt); break; } break; case WM_KILLPROPSEDITOR: if (currentPropertyFuncs) { currentPropertyFuncs->finishEdit(lvwindow, currentPropertyRow, currentPropertyWindow, currentPropertyData); currentPropertyWindow = NULL; } break; case WM_CREATE: GetClientRect(hwnd, &rs); lvwindow = CreateWindowEx(0, WC_LISTVIEW, "", WS_VISIBLE | WS_CHILD | LVS_REPORT | LVS_SINGLESEL, 0, 0, rs.right, rs.bottom, hwnd, (HMENU)ID_TREEVIEW, hInstance, NULL); font = CreateFontIndirect(&fontdata); SetListViewColumns(); break; case WM_SIZE: MoveWindow(lvwindow, 0, 0, LOWORD(lParam), HIWORD(lParam), 0); ResizeListViewColumns(); break; case WM_DESTROY: // ReleasePropInfo(); DestroyWindow(lvwindow); break; } return DefWindowProc(hwnd, iMessage, wParam, lParam); }
long APIENTRY FileChangeProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_INITDIALOG: if (!CreateFileSaveData(hwnd, TRUE)) EndDialog(hwnd, 1); else CenterWindow(hwnd); return 1; case WM_NOTIFY: if (((LPNMHDR)lParam)->code == NM_CUSTOMDRAW) { SetWindowLong(hwnd, DWL_MSGRESULT, CustomDraw(hwnd, (LPNMLVCUSTOMDRAW)lParam)); return TRUE; } else if (((LPNMHDR)lParam)->code == LVN_KEYDOWN) { switch (((LPNMLVKEYDOWN)lParam)->wVKey) { case VK_INSERT: if (GetKeyState(VK_CONTROL) & 0x80000000) { HWND hwndLV = GetDlgItem(hwnd, IDC_FILELIST); ListView_SetCheckState(hwndLV, -1, TRUE); SetOKText(hwnd, "Reload"); } else { HWND hwndLV = GetDlgItem(hwnd, IDC_FILELIST); int i = ListView_GetSelectionMark(hwndLV); ListView_SetCheckState(hwndLV, i, TRUE); } break; case VK_DELETE: if (GetKeyState(VK_CONTROL) & 0x80000000) { HWND hwndLV = GetDlgItem(hwnd, IDC_FILELIST); ListView_SetCheckState(hwndLV, -1, FALSE); SetOKText(hwnd, "Reload"); } else { HWND hwndLV = GetDlgItem(hwnd, IDC_FILELIST); int i = ListView_GetSelectionMark(hwndLV); ListView_SetCheckState(hwndLV, i, FALSE); } break; } } if (wParam == IDC_FILELIST) { if (((LPNMHDR)lParam)->code == LVN_GETDISPINFO) { LV_DISPINFO *plvdi = (LV_DISPINFO*)lParam; struct saveData *sd; plvdi->item.mask |= LVIF_TEXT | LVIF_DI_SETITEM; plvdi->item.mask &= ~LVIF_STATE; switch (plvdi->item.iSubItem) { case 2: sd = (struct saveData *)plvdi->item.lParam; if (sd->asProject) { PROJECTITEM *pj = sd->data; plvdi->item.pszText = pj->displayName; } else { DWINFO *ptr = sd->data; plvdi->item.pszText = ptr->dwTitle; } break; } } else if (((LPNMHDR)lParam)->code == LVN_ITEMCHANGED) { SetOKText(hwnd, "Reload"); } } break; case WM_COMMAND: switch (wParam &0xffff) { case IDOK: ParseFileSaveData(hwnd, TRUE); EndDialog(hwnd, IDOK); break; case IDCANCEL: EndDialog(hwnd, IDCANCEL); break; case IDC_SELECTALL: { HWND hwndLV = GetDlgItem(hwnd, IDC_FILELIST); ListView_SetCheckState(hwndLV, -1, TRUE); SetOKText(hwnd, "Reload"); } break; case IDC_DESELECTALL: { HWND hwndLV = GetDlgItem(hwnd, IDC_FILELIST); ListView_SetCheckState(hwndLV, -1, FALSE); SetOKText(hwnd, "Reload"); } break; case IDHELP: ContextHelp(IDH_RELOAD_FILE_DIALOG); break; } break; case WM_CLOSE: PostMessage(hwnd, WM_COMMAND, IDCANCEL, 0); break; } return 0; }
LRESULT CALLBACK ProjectDependsProc(HWND hwnd, UINT iMessage, WPARAM wParam, LPARAM lParam) { static PROJECTITEM *proj; static BOOLEAN showingBuildOrder; PROJECTITEM *temp; int id; switch (iMessage) { case WM_INITDIALOG: // IDC_DEPENDENCIESLABEL, IDC_DEPENDS, IDC_SELECTPROJECT proj = (PROJECTITEM *)lParam; // go through project list and add to combo temp=workArea->children; while (temp) { id = SendDlgItemMessage(hwnd, IDC_SELECTPROJECT, CB_ADDSTRING, 0, (LPARAM)temp->displayName); SendDlgItemMessage(hwnd, IDC_SELECTPROJECT, CB_SETITEMDATA, id, (LPARAM)temp); temp = temp->next; } SelectProject(hwnd, proj); PopulateProject(hwnd, proj); CenterWindow(hwnd); return TRUE; case WM_NOTIFY: if (((LPNMHDR)lParam)->code == NM_CUSTOMDRAW) { SetWindowLong(hwnd, DWL_MSGRESULT, CustomDraw(hwnd, showingBuildOrder, proj, (LPNMLVCUSTOMDRAW)lParam)); return TRUE; } else { ModifyProjectDepends(hwnd, showingBuildOrder, proj, (LV_DISPINFO*)lParam); } break; case WM_COMMAND: switch(LOWORD(wParam)) { case IDC_SELECTPROJECT: if (HIWORD(wParam) == CBN_SELCHANGE) { id = SendDlgItemMessage(hwnd, IDC_SELECTPROJECT, CB_GETCURSEL, 0, 0); proj = (PROJECTITEM *)SendDlgItemMessage(hwnd, IDC_SELECTPROJECT, CB_GETITEMDATA, id, 0); PopulateProject(hwnd, proj); } break; case IDOK: case IDCANCEL: EndDialog(hwnd, 0); showingBuildOrder = FALSE; break; case IDHELP: ContextHelp(IDH_PROJECT_DEPENDENCIES_DIALOG); break; case IDC_BUILDORDER: showingBuildOrder = !showingBuildOrder; if (showingBuildOrder) { SendDlgItemMessage(hwnd, IDC_SELECTPROJECT, CB_SETCURSEL, -1, 0); PopulateBuildOrder(hwnd); SetWindowText(GetDlgItem(hwnd, IDC_DEPENDENCIESLABEL), "Calculated Build Order:"); SetWindowText(GetDlgItem(hwnd, IDC_BUILDORDER), "View Dependencies"); EnableWindow(GetDlgItem(hwnd, IDC_SELECTPROJECT), FALSE); } else { SelectProject(hwnd, proj); PopulateProject(hwnd, proj); SetWindowText(GetDlgItem(hwnd, IDC_DEPENDENCIESLABEL), "Select Dependencies: "); SetWindowText(GetDlgItem(hwnd, IDC_BUILDORDER), "View Build Order"); EnableWindow(GetDlgItem(hwnd, IDC_SELECTPROJECT), TRUE); } break; } break; } return 0; }