TSharedRef<SDockTab> FWorkflowTabFactory::SpawnTab(const FWorkflowTabSpawnInfo& Info) const { // Get the tab body content TSharedRef<SWidget> TabBody = CreateTabBody(Info); // Pad the content if requested if (InsideTabPadding > 0.0f) { // propagate tag from original content, or use TabId TSharedPtr<FTagMetaData> MetaData = TabBody->GetMetaData<FTagMetaData>(); TabBody = SNew(SBorder) .Padding(InsideTabPadding) .BorderImage(FEditorStyle::GetBrush("ToolPanel.GroupBorder")) .AddMetaData<FTagMetaData>(MetaData.IsValid() ? MetaData->Tag : this->TabIdentifier) [ TabBody ]; } // Spawn the tab TSharedRef<SDockTab> NewTab = SNew(SDockTab) .TabRole(this->TabRole) .Icon(GetTabIcon(Info)) .Label(ConstructTabName(Info)) .ShouldAutosize(bShouldAutosize) [ TabBody ]; NewTab->SetTabToolTipWidget(CreateTabToolTipWidget(Info)); return NewTab; }
int CIconList::CreateTabIcon(LPCWSTR asIconDescr, bool bAdmin, LPCWSTR asWorkDir) { if (bAdmin && !gpSet->isAdminShield()) bAdmin = false; if (!asIconDescr || !*asIconDescr) return GetTabIcon(bAdmin); int iCreatedIcon = -1; MSectionLockSimple CS; CS.Lock(mpcs, 30000); for (INT_PTR i = 0; i < m_Icons.size(); i++) { const TabIconCache& icn = m_Icons[i]; if ((icn.bAdmin!=FALSE) != bAdmin) continue; if (lstrcmpi(icn.pszIconDescr, asIconDescr) != 0) continue; // Already was created! iCreatedIcon = icn.nIconIdx; goto wrap; } iCreatedIcon = CreateTabIconInt(asIconDescr, bAdmin, asWorkDir); if (iCreatedIcon == -1) { // To avoid numerous CreateTabIconInt calls - just remember "No icon" for that asIconDescr TabIconCache DummyIcon = {lstrdup(asIconDescr), bAdmin, -1}; m_Icons.push_back(DummyIcon); } wrap: return iCreatedIcon; }
void MainWindow::SetTabIcons() { m_func_tabs->SetPageBitmap(PAGE_CHAT, GetTabIcon(chat_icon_png, sizeof(chat_icon_png))); m_func_tabs->SetPageBitmap(PAGE_LIST, GetTabIcon(join_icon_png, sizeof(join_icon_png))); m_func_tabs->SetPageBitmap(PAGE_JOIN, GetTabIcon(broom_tab_icon_png, sizeof(broom_tab_icon_png))); m_func_tabs->SetPageBitmap(PAGE_SINGLE, GetTabIcon(single_player_icon_png, sizeof(single_player_icon_png))); m_func_tabs->SetPageBitmap(PAGE_TORRENT, GetTabIcon(downloads_icon_png, sizeof(downloads_icon_png))); m_func_tabs->SetPageBitmap(PAGE_REPLAY, GetTabIcon(replay_icon_png, sizeof(replay_icon_png))); //m_func_tabs->SetPageBitmap( ?? , GetTabIcon( floppy_icon_png , sizeof (floppy_icon_png) ) ); //m_func_tabs->SetPageBitmap( ?? , GetTabIcon( options_icon_png , sizeof (options_icon_png) ) ); Refresh(); }
void FWorkflowTabFactory::UpdateTab(TSharedPtr<SDockTab> InDockTab, const FWorkflowTabSpawnInfo& Info, TSharedPtr< SWidget > InContent) const { // Get the tab body content TSharedRef<SWidget> TabBody = InContent.ToSharedRef(); // Pad the content if requested if (InsideTabPadding > 0.0f) { TabBody = SNew(SBorder) .Padding(InsideTabPadding) .BorderImage(FEditorStyle::GetBrush("ToolPanel.GroupBorder")) [ TabBody ]; } InDockTab->SetContent(TabBody); InDockTab->SetLabel(ConstructTabName(Info)); InDockTab->SetTabIcon(GetTabIcon(Info)); InDockTab->SetTabToolTipWidget(CreateTabToolTipWidget(Info)); }
int CIconList::CreateTabIcon(LPCWSTR asIconDescr, bool bAdmin) { if (!asIconDescr || !*asIconDescr) return GetTabIcon(bAdmin); for (INT_PTR i = 0; i < m_Icons.size(); i++) { const TabIconCache& icn = m_Icons[i]; if ((icn.bAdmin!=FALSE) != bAdmin) continue; if (lstrcmpi(icn.pszIconDescr, asIconDescr) != 0) continue; // Already was created! return icn.nIconIdx; } wchar_t* pszExpanded = ExpandEnvStr(asIconDescr); // Need to be created! int iIconIdx = -1; HICON hFileIcon = NULL; wchar_t szTemp[MAX_PATH]; LPCWSTR pszLoadFile = pszExpanded ? pszExpanded : asIconDescr; LPCWSTR lpszExt = (wchar_t*)PointToExt(pszLoadFile); if (!lpszExt) { LPWSTR pszFile = NULL; if (SearchPath(NULL, pszLoadFile, L".exe", countof(szTemp), szTemp, &pszFile)) { pszLoadFile = szTemp; lpszExt = (wchar_t*)PointToExt(pszLoadFile); } if (!lpszExt) goto wrap; } if (lstrcmpi(lpszExt, L".ico") == 0) { hFileIcon = (HICON)LoadImage(0, pszLoadFile, IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR|LR_LOADFROMFILE); } else if ((lstrcmpi(lpszExt, L".exe") == 0) || (lstrcmpi(lpszExt, L".dll") == 0)) { //TODO: May be specified index of an icon in the file HICON hIconLarge = NULL; ExtractIconEx(pszLoadFile, 0, &hIconLarge, &hFileIcon, 1); if (hIconLarge) DestroyIcon(hIconLarge); } else { //TODO: Shell icons for registered files (cmd, bat, sh, pl, py, ...) } if (hFileIcon) { int iIconIdxAdm = -1; iIconIdx = ImageList_ReplaceIcon(mh_TabIcons, -1, hFileIcon); TabIconCache NewIcon = {lstrdup(asIconDescr), false, iIconIdx}; m_Icons.push_back(NewIcon); HIMAGELIST hAdmList = ImageList_Merge(mh_TabIcons, iIconIdx, mh_TabIcons, mn_AdminIcon+2, 0,0); if (hAdmList) { HICON hNewIcon = ImageList_GetIcon(hAdmList, 0, ILD_TRANSPARENT); if (hNewIcon) { iIconIdxAdm = ImageList_ReplaceIcon(mh_TabIcons, -1, hNewIcon); DestroyIcon(hNewIcon); TabIconCache AdmIcon = {lstrdup(asIconDescr), true, iIconIdxAdm}; m_Icons.push_back(AdmIcon); if (bAdmin && (iIconIdxAdm > 0)) { iIconIdx = iIconIdxAdm; } } } //TODO: bAdmin!!! DestroyIcon(hFileIcon); } wrap: SafeFree(pszExpanded); return iIconIdx; }