void MyTreeCtrl::RefreshTreeStatus(Builder *pBuilder) { VTLOG("(Refreshing Tree Status)\n"); wxTreeItemId root = GetRootItem(); wxTreeItemId parent, item; wxTreeItemIdValue cookie; for (parent = GetFirstChild(root, cookie); parent; parent = GetNextChild(root, cookie)) { wxTreeItemIdValue cookie2; for (item = GetFirstChild(parent, cookie2); item; item = GetNextChild(parent, cookie2)) { MyTreeItemData *data = (MyTreeItemData *)GetItemData(item); if (data) { SetItemText(item, MakeItemName(data->m_pLayer)); if (data->m_pLayer == pBuilder->GetActiveLayer()) SelectItem(item); if (data->m_pLayer->GetVisible()) { SetItemFont(item, *wxNORMAL_FONT); SetItemTextColour(item, wxColour(0,0,0)); } else { SetItemFont(item, *wxITALIC_FONT); SetItemTextColour(item, wxColour(80,80,80)); } } } } }
void Shortcuts::EditItem(VMenu* Menu, ShortcutItem* Item, bool Root) { string strNewDir = Item->strFolder; string strNewPluginModule = Item->strPluginModule; string strNewPluginFile = Item->strPluginFile; string strNewPluginData = Item->strPluginData; DialogBuilder Builder(MFolderShortcutsTitle, HelpFolderShortcuts); Builder.AddText(MFSShortcut); Builder.AddEditField(&strNewDir, 50, L"FS_Path", DIF_EDITPATH); if (!strNewPluginModule.IsEmpty()) { Builder.AddSeparator(); Builder.AddText(MFSShortcutModule); Builder.AddEditField(&strNewPluginModule, 50, nullptr, DIF_READONLY); Builder.AddText(MFSShortcutFile); Builder.AddEditField(&strNewPluginFile, 50, nullptr, DIF_READONLY); Builder.AddText(MFSShortcutData); Builder.AddEditField(&strNewPluginData, 50, nullptr, DIF_READONLY); } Builder.AddOKCancel(); if (Builder.ShowDialog()) { Unquote(strNewDir); if (!IsLocalRootPath(strNewDir)) DeleteEndSlash(strNewDir); bool Save=true; string strTemp(strNewDir); apiExpandEnvironmentStrings(strNewDir,strTemp); if (apiGetFileAttributes(strTemp) == INVALID_FILE_ATTRIBUTES) { Save=!Message(MSG_WARNING | MSG_ERRORTYPE, 2, MSG(MError), strNewDir, MSG(MSaveThisShortcut), MSG(MYes), MSG(MNo)); } if (Save) { Item->strPluginData.Clear(); Item->strPluginFile.Clear(); Item->strPluginModule.Clear(); Item->strFolder = strNewDir; MenuItemEx* MenuItem = Menu->GetItemPtr(); MenuItem->strName = Item->strFolder; if(Root) { MakeItemName(Menu->GetSelectPos(), MenuItem); } Menu->SetPosition(-1, -1, -1, -1); Menu->SetUpdateRequired(TRUE); Menu->Show(); } } }
void MyTreeCtrl::RefreshTreeItems(Builder *pBuilder) { VTLOG1("Refreshing Tree Items:"); // Deleting the previous items can call OnSelChanged, which can cause VTB // to forget the active layer, so indicate that this is not user input. m_bUser = false; DeleteAllItems(); m_bUser = true; rootId = AddRoot(_("Layers")); SetItemBold(rootId); int image, imageSel; wxTreeItemId elevId = AddRootItem(MyTreeCtrl::TreeCtrlIcon_Grid, _("Elevation")); SetItemData(elevId, new MyTreeItemData(LT_ELEVATION)); wxTreeItemId imageId = AddRootItem(MyTreeCtrl::TreeCtrlIcon_Image, _("Images")); SetItemData(imageId, new MyTreeItemData(LT_IMAGE)); wxTreeItemId buildId = AddRootItem(MyTreeCtrl::TreeCtrlIcon_Building, _("Structures")); SetItemData(buildId, new MyTreeItemData(LT_STRUCTURE)); wxTreeItemId roadId = AddRootItem(MyTreeCtrl::TreeCtrlIcon_Road, _("Roads")); SetItemData(roadId, new MyTreeItemData(LT_ROAD)); wxTreeItemId vegId = AddRootItem(MyTreeCtrl::TreeCtrlIcon_Veg1, _("Vegetation")); SetItemData(vegId, new MyTreeItemData(LT_VEG)); wxTreeItemId waterId = AddRootItem(MyTreeCtrl::TreeCtrlIcon_Water, _("Water")); SetItemData(waterId, new MyTreeItemData(LT_WATER)); wxTreeItemId utilityId = AddRootItem(MyTreeCtrl::TreeCtrlIcon_Utility, _("Utilities")); SetItemData(utilityId, new MyTreeItemData(LT_UTILITY)); wxTreeItemId rawId = AddRootItem(MyTreeCtrl::TreeCtrlIcon_Raw, _("Raw")); SetItemData(rawId, new MyTreeItemData(LT_RAW)); image = TreeCtrlIcon_File; imageSel = TreeCtrlIcon_FileSelected; vtLayerPtr lp; int iLayers = 0; if (pBuilder) iLayers = pBuilder->NumLayers(); wxTreeItemId hSelectedItem; for (int i = 0; i < iLayers; i++) { lp = pBuilder->GetLayer(i); wxString str = MakeItemName(lp); wxTreeItemId hItem; switch (lp->GetType()) { case LT_ELEVATION: hItem = AppendItem(elevId, str, image, imageSel); break; case LT_IMAGE: hItem = AppendItem(imageId, str, image, imageSel); break; case LT_ROAD: hItem = AppendItem(roadId, str, image, imageSel); break; case LT_STRUCTURE: hItem = AppendItem(buildId, str, image, imageSel); break; case LT_VEG: hItem = AppendItem(vegId, str, image, imageSel); break; case LT_WATER: hItem = AppendItem(waterId, str, image, imageSel); break; case LT_UTILITY: hItem = AppendItem(utilityId, str, image, imageSel); break; case LT_RAW: hItem = AppendItem(rawId, str, image, imageSel); break; case LT_UNKNOWN: case LAYER_TYPES: // Keep picky compilers quiet. break; } if (hItem.IsOk()) { SetItemData(hItem, new MyTreeItemData(lp)); if (lp == pBuilder->GetActiveLayer()) hSelectedItem = hItem; if (!lp->GetVisible()) { SetItemFont(hItem, *wxITALIC_FONT); SetItemTextColour(hItem, wxColour(80,80,80)); } } } VTLOG(" %d layers.\n", iLayers); // Expand the groups after they have all their items. It doesn't work // to expand before, because then not all items are shown. Expand(elevId); Expand(imageId); Expand(roadId); Expand(buildId); Expand(vegId); Expand(waterId); Expand(utilityId); Expand(rawId); // Wait until all the groups are expanded, before highlighting the // selected item, so that it will definitely be in view. if (hSelectedItem.IsOk()) SelectItem(hSelectedItem); }
void Shortcuts::Configure() { VMenu FolderList(MSG(MFolderShortcutsTitle),nullptr,0,ScrY-4); FolderList.SetFlags(VMENU_WRAPMODE); FolderList.SetHelp(HelpFolderShortcuts); FolderList.SetPosition(-1,-1,0,0); FolderList.SetBottomTitle(MSG(MFolderShortcutBottom)); for (int I=0; I < 10; I++) { MenuItemEx ListItem={}; MakeItemName(I, &ListItem); FolderList.AddItem(&ListItem); } FolderList.Show(); while (!FolderList.Done()) { DWORD Key=FolderList.ReadInput(); int Pos = FolderList.GetSelectPos(); ShortcutItem* Item = Items[Pos].First(); switch (Key) { case KEY_NUMDEL: case KEY_DEL: case KEY_NUMPAD0: case KEY_INS: case KEY_SHIFTINS: case KEY_SHIFTNUMPAD0: { MenuItemEx* MenuItem = FolderList.GetItemPtr(); if (Key == KEY_INS || Key == KEY_NUMPAD0 || Key&KEY_SHIFT) { if(!Item || Key&KEY_SHIFT) { Item = Items[Pos].Push(); } Panel *ActivePanel=CtrlObject->Cp()->ActivePanel; CtrlObject->CmdLine->GetCurDir(Item->strFolder); if (ActivePanel->GetMode() == PLUGIN_PANEL) { OpenPluginInfo Info; ActivePanel->GetOpenPluginInfo(&Info); string strTemp; PluginHandle *ph = (PluginHandle*)ActivePanel->GetPluginHandle(); Item->strPluginModule = ph->pPlugin->GetModuleName(); Item->strPluginFile = Info.HostFile; Item->strPluginData = Info.ShortcutData; } MakeItemName(Pos, MenuItem); } else { if(Item) { Items[Pos].Delete(Item); MakeItemName(Pos, MenuItem); } } DWORD Flags = MenuItem->Flags; MenuItem->Flags = 0; FolderList.UpdateItemFlags(FolderList.GetSelectPos(), Flags); FolderList.SetPosition(-1, -1, -1, -1); FolderList.SetUpdateRequired(TRUE); FolderList.Show(); } break; case KEY_F4: { if(!Item) { Item = Items[Pos].Push(); } if(Items[Pos].Count()>1) { FolderList.ProcessKey(KEY_ENTER); } else { EditItem(&FolderList, Item, true); } } break; default: FolderList.ProcessInput(); break; } } FolderList.Hide(); int ExitCode = FolderList.Modal::GetExitCode(); if(ExitCode>=0) { CtrlObject->Cp()->ActivePanel->ExecShortcutFolder(ExitCode); } }