Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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);
    }
}