void WorkspaceWork::ToggleIncludeable() { if(IsActiveFile()) { String p = GetActiveFilePath(); SetTopicGroupIncludeable(p, !FileExists(AppendFileName(p, "all.i"))); SaveLoadPackageNS(); } }
void WorkspaceWork::DelFile() { if(!filelist.IsCursor() || filelist[fileindex[filelist.GetCursor()]].isdir) return; String file = GetActiveFilePath(); if(IsFolder(file)) { if(!PromptYesNo("Remove the topic group and discard ALL topics?")) return; RemoveFile(); DeleteFolderDeep(file); } else { if(!PromptYesNo("Remove the file from package and discard it ?")) return; RemoveFile(); ::DeleteFile(file); } }
void WorkspaceWork::RenameFile() { if(!filelist.IsCursor()) return; String n = GetActiveFileName(); int i = filelist.GetCursor(); if(i < 0 || i >= fileindex.GetCount()) return; int ii = fileindex[i]; WithEditStringLayout<TopWindow> dlg; CtrlLayoutOKCancel(dlg, "Rename file"); dlg.lbl = "New name"; dlg.text <<= n; dlg.Open(); dlg.text.SetFocus(); int l = int(GetFileNamePos(n) - ~n); int h = int(GetFileExtPos(n) - ~n); if(l >= h) l = 0; dlg.text.SetSelection(l, h); if(dlg.Run() != IDOK) return; n = ~dlg.text; String spath = GetActiveFilePath(); String dpath = SourcePath(GetActivePackage(), n); if(!filelist[i].isdir && GetFileLength(spath) >= 0) { if(!::MoveFile(spath, dpath)) { Exclamation("Failed to rename the file.&&" + GetErrorMessage(GetLastError())); return; } } FileRename(dpath); int s = filelist.GetSbPos(); (String &)actual.file[ii] = n; SaveLoadPackage(false); filelist.SetSbPos(s); filelist.SetCursor(i); if(GetFileExt(spath) == ".iml" || GetFileExt(dpath) == ".iml") SyncWorkspace(); }
void WorkspaceWork::FileMenu(Bar& menu) { bool sel = filelist.IsCursor() && filelist[filelist.GetCursor()].isdir; bool isaux = IsAux(); if(isaux) InsertSpecialMenu(menu); else { menu.Add(!isaux, "Insert package directory file(s)", THISBACK1(AddFile, PACKAGE_FILE)) .Help("Insert file relative to current package"); menu.Add(!isaux, "Insert topic++ group", THISBACK(AddTopicGroup)); menu.Add("Special", THISBACK(SpecialFileMenu)) .Help("Less frequently used methods of adding files to the package"); } menu.Add("Insert separator", THISBACK(AddSeparator)) .Help("Insert text separator line"); menu.Separator(); if(!organizer) { if(sel) menu.Add(closed.Find(GetActiveSepfo()) < 0 ? "Close group\t[double-click]" : "Open group\t[double-click]", THISBACK(Group)); menu.Add("Open all groups", THISBACK(OpenAllGroups)); menu.Add("Close all groups", THISBACK(CloseAllGroups)); menu.Separator(); BuildFileMenu(menu); menu.Separator(); } menu.Add("Rename...", THISBACK(RenameFile)) .Help("Rename file / separator / topic group"); menu.Add("Remove", THISBACK(RemoveFile)) .Key(organizer ? K_DELETE : K_ALT_DELETE) .Help("Remove file / separator / topic group from package"); menu.Add(filelist.IsCursor() && !sel, "Delete", THISBACK(DelFile)) .Help("Remove file / topic group reference from package & delete file / folder on disk"); menu.Separator(); menu.Add("Open File Directory",THISBACK(OpenFileFolder)); menu.Add("Copy File Path", callback1(WriteClipboardText, GetActiveFilePath())); menu.Separator(); menu.Add(filelist.GetCursor() > 0, "Move up", THISBACK1(MoveFile, -1)) .Key(organizer ? K_CTRL_UP : K_SHIFT_CTRL_UP) .Help("Move current file one position towards package beginning"); menu.Add(filelist.IsCursor() && filelist.GetCursor() < filelist.GetCount() - 1, "Move down", THISBACK1(MoveFile, 1)) .Key(organizer ? K_CTRL_DOWN : K_SHIFT_CTRL_DOWN) .Help("Move current file one position towards package end"); if(IsActiveFile()) { menu.Separator(); String p = GetActiveFilePath(); String ext = GetFileExt(p); if(ext == ".tpp" && IsFolder(p)) { menu.Add("Includeable topic group", THISBACK(ToggleIncludeable)) .Check(FileExists(AppendFileName(p, "all.i"))); if(IsSvnDir(p)) menu.Add("Svn Synchronize " + p, THISBACK1(SyncSvnDir, p)); } else { menu.Add("Optimize for speed", THISBACK(ToggleFileSpeed)) .Check(ActiveFile().optimize_speed); if(IsHeaderExt(ext)) menu.Add("Precompile header", THISBACK(TogglePCH)) .Check(ActiveFile().pch); } } FilePropertiesMenu(menu); }
void WorkspaceWork::OpenFileFolder() { ShellOpenFolder(GetFileDirectory(GetActiveFilePath())); }
bool Ide::CanToggleReadOnly() { return NormalizePath(GetActiveFilePath()) == NormalizePath(editfile); }