static void SplitString(const AString &srcString, AStringVector &destStrings) { destStrings.Clear(); AString string; int len = srcString.Length(); if (len == 0) return; for (int i = 0; i < len; i++) { char c = srcString[i]; if (c == '\n') { if (!string.IsEmpty()) { destStrings.Add(string); string.Empty(); } } else string += c; } if (!string.IsEmpty()) destStrings.Add(string); }
HRESULT CPlugin::ShowAttributesWindow() { PluginPanelItem pluginPanelItem; if (!g_StartupInfo.ControlGetActivePanelCurrentItemInfo(pluginPanelItem)) return S_FALSE; if (strcmp(pluginPanelItem.FindData.cFileName, "..") == 0 && NFile::NFind::NAttributes::IsDir(pluginPanelItem.FindData.dwFileAttributes)) return S_FALSE; int itemIndex = pluginPanelItem.UserData; CObjectVector<CArchiveItemProperty> properties; UInt32 numProps; RINOK(_folder->GetNumberOfProperties(&numProps)); int i; for (i = 0; i < (int)numProps; i++) { CMyComBSTR name; PROPID propID; VARTYPE vt; RINOK(_folder->GetPropertyInfo(i, &name, &propID, &vt)); CArchiveItemProperty prop; prop.Type = vt; prop.ID = propID; if (prop.ID == kpidPath) prop.ID = kpidName; prop.Name = GetNameOfProp(propID, name); properties.Add(prop); } int size = 2; CRecordVector<CInitDialogItem> initDialogItems; int xSize = 70; CInitDialogItem idi = { DI_DOUBLEBOX, 3, 1, xSize - 4, size - 2, false, false, 0, false, NMessageID::kProperties, NULL, NULL }; initDialogItems.Add(idi); AStringVector values; for (i = 0; i < properties.Size(); i++) { const CArchiveItemProperty &property = properties[i]; CInitDialogItem idi = { DI_TEXT, 5, 3 + i, 0, 0, false, false, 0, false, 0, NULL, NULL }; int index = FindPropertyToName(property.ID); if (index < 0) { idi.DataMessageId = -1; idi.DataString = property.Name; } else idi.DataMessageId = kPROPIDToName[index].PluginID; initDialogItems.Add(idi); NCOM::CPropVariant prop; RINOK(_folder->GetProperty(itemIndex, property.ID, &prop)); CSysString s = PropToString(prop, property.ID); values.Add(s); { CInitDialogItem idi = { DI_TEXT, 30, 3 + i, 0, 0, false, false, 0, false, -1, NULL, NULL }; initDialogItems.Add(idi); } } int numLines = values.Size(); for (i = 0; i < numLines; i++) { CInitDialogItem &idi = initDialogItems[1 + i * 2 + 1]; idi.DataString = values[i]; } int numDialogItems = initDialogItems.Size(); CRecordVector<FarDialogItem> dialogItems; dialogItems.Reserve(numDialogItems); for (i = 0; i < numDialogItems; i++) dialogItems.Add(FarDialogItem()); g_StartupInfo.InitDialogItems(&initDialogItems.Front(), &dialogItems.Front(), numDialogItems); int maxLen = 0; for (i = 0; i < numLines; i++) { FarDialogItem &dialogItem = dialogItems[1 + i * 2]; int len = (int)strlen(dialogItem.Data); if (len > maxLen) maxLen = len; } int maxLen2 = 0; const int kSpace = 10; for (i = 0; i < numLines; i++) { FarDialogItem &dialogItem = dialogItems[1 + i * 2 + 1]; int len = (int)strlen(dialogItem.Data); if (len > maxLen2) maxLen2 = len; dialogItem.X1 = maxLen + kSpace; } size = numLines + 6; xSize = maxLen + kSpace + maxLen2 + 5; FarDialogItem &firstDialogItem = dialogItems.Front(); firstDialogItem.Y2 = size - 2; firstDialogItem.X2 = xSize - 4; /* int askCode = */ g_StartupInfo.ShowDialog(xSize, size, NULL, &dialogItems.Front(), numDialogItems); return S_OK; }
INT_PTR MyPropertySheet(const CObjectVector<CPageInfo> &pagesInfo, HWND hwndParent, const UString &title) { #ifndef _UNICODE AStringVector titles; #endif #ifndef _UNICODE CRecordVector<PROPSHEETPAGEA> pagesA; #endif CRecordVector<PROPSHEETPAGEW> pagesW; int i; #ifndef _UNICODE for (i = 0; i < pagesInfo.Size(); i++) titles.Add(GetSystemString(pagesInfo[i].Title)); #endif for (i = 0; i < pagesInfo.Size(); i++) { const CPageInfo &pageInfo = pagesInfo[i]; #ifndef _UNICODE { PROPSHEETPAGE page; page.dwSize = sizeof(page); page.dwFlags = PSP_HASHELP; page.hInstance = g_hInstance; page.pszTemplate = MAKEINTRESOURCE(pageInfo.ID); page.pszIcon = NULL; page.pfnDlgProc = NWindows::NControl::MyProperyPageProcedure; if (titles[i].IsEmpty()) page.pszTitle = NULL; else { page.dwFlags |= PSP_USETITLE; page.pszTitle = titles[i]; } page.lParam = (LPARAM)pageInfo.Page; page.pfnCallback = NULL; pagesA.Add(page); } #endif { PROPSHEETPAGEW page; page.dwSize = sizeof(page); page.dwFlags = PSP_HASHELP; page.hInstance = g_hInstance; page.pszTemplate = MAKEINTRESOURCEW(pageInfo.ID); page.pszIcon = NULL; page.pfnDlgProc = NWindows::NControl::MyProperyPageProcedure; if (pageInfo.Title.IsEmpty()) page.pszTitle = NULL; else { page.dwFlags |= PSP_USETITLE; page.pszTitle = pageInfo.Title; } page.lParam = (LPARAM)pageInfo.Page; page.pfnCallback = NULL; pagesW.Add(page); } } #ifndef _UNICODE if (!g_IsNT) { PROPSHEETHEADER sheet; sheet.dwSize = sizeof(sheet); sheet.dwFlags = PSH_PROPSHEETPAGE; sheet.hwndParent = hwndParent; sheet.hInstance = g_hInstance; AString titleA = GetSystemString(title); sheet.pszCaption = titleA; sheet.nPages = pagesInfo.Size(); sheet.nStartPage = 0; sheet.ppsp = &pagesA.Front(); sheet.pfnCallback = NULL; return ::PropertySheetA(&sheet); } else #endif { PROPSHEETHEADERW sheet; sheet.dwSize = sizeof(sheet); sheet.dwFlags = PSH_PROPSHEETPAGE; sheet.hwndParent = hwndParent; sheet.hInstance = g_hInstance; sheet.pszCaption = title; sheet.nPages = pagesInfo.Size(); sheet.nStartPage = 0; sheet.ppsp = &pagesW.Front(); sheet.pfnCallback = NULL; return ::PropertySheetW(&sheet); } }