// it's used in CompressDialog also void AddComboItems(NControl::CComboBox &combo, const UInt32 *langIDs, unsigned numItems, const int *values, int curVal) { int curSel = 0; for (unsigned i = 0; i < numItems; i++) { UString s = LangString(langIDs[i]); s.RemoveChar(L'&'); int index = (int)combo.AddString(s); combo.SetItemData(index, i); if (values[i] == curVal) curSel = i; } combo.SetCurSel(curSel); }
bool CBrowseDialog::OnSize(WPARAM /* wParam */, int xSize, int ySize) { int mx, my; { RECT r; GetClientRectOfItem(IDB_BROWSE_PARENT, r); mx = r.left; my = r.top; } InvalidateRect(NULL); int xLim = xSize - mx; { RECT r; GetClientRectOfItem(IDT_BROWSE_FOLDER, r); MoveItem(IDT_BROWSE_FOLDER, r.left, r.top, xLim - r.left, RECT_SIZE_Y(r)); } int bx1, bx2, by; GetItemSizes(IDCANCEL, bx1, by); GetItemSizes(IDOK, bx2, by); int y = ySize - my - by; int x = xLim - bx1; MoveItem(IDCANCEL, x, y, bx1, by); MoveItem(IDOK, x - mx - bx2, y, bx2, by); // Y_Size of ComboBox is tricky. So we use Y_Size of _pathEdit instead int yPathSize; { RECT r; GetClientRectOfItem(IDE_BROWSE_PATH, r); yPathSize = RECT_SIZE_Y(r); _pathEdit.Move(r.left, y - my - yPathSize - my - yPathSize, xLim - r.left, yPathSize); } { RECT r; GetClientRectOfItem(IDC_BROWSE_FILTER, r); _filterCombo.Move(r.left, y - my - yPathSize, xLim - r.left, RECT_SIZE_Y(r)); } { RECT r; GetClientRectOfItem(IDL_BROWSE, r); _list.Move(r.left, r.top, xLim - r.left, y - my - yPathSize - my - yPathSize - my - r.top); } return false; }
bool CBrowseDialog::OnInit() { #ifdef LANG LangSetDlgItems(*this, NULL, 0); #endif if (!Title.IsEmpty()) SetText(Title); _list.Attach(GetItem(IDL_BROWSE)); _filterCombo.Attach(GetItem(IDC_BROWSE_FILTER)); _pathEdit.Attach(GetItem(IDE_BROWSE_PATH)); if (FolderMode) HideItem(IDC_BROWSE_FILTER); else EnableItem(IDC_BROWSE_FILTER, false); #ifndef UNDER_CE _list.SetUnicodeFormat(); #endif #ifndef _SFX if (ReadSingleClick()) _list.SetExtendedListViewStyle(LVS_EX_ONECLICKACTIVATE | LVS_EX_TRACKSELECT); _showDots = ReadShowDots(); #endif { UString s; if (!FilterDescription.IsEmpty()) s = FilterDescription; else if (ShowAllFiles) s = L"*.*"; else { FOR_VECTOR (i, Filters) { if (i != 0) s.Add_Space(); s += Filters[i]; } } _filterCombo.AddString(s); _filterCombo.SetCurSel(0); } _list.SetImageList(GetSysImageList(true), LVSIL_SMALL); _list.SetImageList(GetSysImageList(false), LVSIL_NORMAL); _list.InsertColumn(0, LangString(IDS_PROP_NAME), 100); _list.InsertColumn(1, LangString(IDS_PROP_MTIME), 100); { LV_COLUMNW column; column.iSubItem = 2; column.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM; column.fmt = LVCFMT_RIGHT; column.cx = 100; const UString s = LangString(IDS_PROP_SIZE); column.pszText = (wchar_t *)(const wchar_t *)s; _list.InsertColumn(2, &column); } _list.InsertItem(0, L"12345678901234567" #ifndef UNDER_CE L"1234567890" #endif ); _list.SetSubItem(0, 1, L"2009-09-09" #ifndef UNDER_CE L" 09:09" #endif ); _list.SetSubItem(0, 2, L"9999 MB"); for (int i = 0; i < 3; i++) _list.SetColumnWidthAuto(i); _list.DeleteAllItems(); _ascending = true; _sortIndex = 0; NormalizeSize(); _topDirPrefix.Empty(); { int rootSize = GetRootPrefixSize(FilePath); #if defined(_WIN32) && !defined(UNDER_CE) // We can go up from root folder to drives list if (IsDrivePath(FilePath)) rootSize = 0; else if (IsSuperPath(FilePath)) { if (IsDrivePath(FilePath.Ptr(kSuperPathPrefixSize))) rootSize = kSuperPathPrefixSize; } #endif _topDirPrefix.SetFrom(FilePath, rootSize); } UString name; if (!GetParentPath(FilePath, DirPrefix, name)) DirPrefix = _topDirPrefix; for (;;) { UString baseFolder = DirPrefix; if (Reload(baseFolder, name) == S_OK) break; name.Empty(); if (DirPrefix.IsEmpty()) break; UString parent, name2; GetParentPath(DirPrefix, parent, name2); DirPrefix = parent; } if (name.IsEmpty()) name = FilePath; if (FolderMode) NormalizeDirPathPrefix(name); _pathEdit.SetText(name); #ifndef UNDER_CE /* If we clear UISF_HIDEFOCUS, the focus rectangle in ListView will be visible, even if we use mouse for pressing the button to open this dialog. */ PostMsg(MY__WM_UPDATEUISTATE, MAKEWPARAM(MY__UIS_CLEAR, MY__UISF_HIDEFOCUS)); #endif return CModalDialog::OnInit(); }