Added support to set/unset start file for a project (closes #411).
This commit is contained in:
@@ -558,7 +558,7 @@ debugger.listen = function(start)
|
||||
debugger.editormap = {}
|
||||
|
||||
local wxfilepath = GetEditorFileAndCurInfo()
|
||||
local startfile = options.startwith
|
||||
local startfile = ide:GetProjectStartFile() or options.startwith
|
||||
or (wxfilepath and wxfilepath:GetFullPath())
|
||||
|
||||
if not startfile then
|
||||
|
||||
@@ -12,14 +12,15 @@ ide.filetree = {
|
||||
projdirlist = {},
|
||||
projdirpartmap = {},
|
||||
projtreeCtrl = nil,
|
||||
imglist = ide:CreateImageList("PROJECT", "FOLDER", "FILE-KNOWN", "FILE-NORMAL"),
|
||||
settings = {extensionignore = {}},
|
||||
imglist = ide:CreateImageList("PROJECT",
|
||||
"FOLDER", "FILE-KNOWN", "FILE-NORMAL", "FILE-NORMAL-START"),
|
||||
settings = {extensionignore = {}, startfile = {}},
|
||||
}
|
||||
local filetree = ide.filetree
|
||||
local iscaseinsensitive = wx.wxFileName("A"):SameAs(wx.wxFileName("a"))
|
||||
local pathsep = GetPathSeparator()
|
||||
local q = EscapeMagic
|
||||
local image = { DIRECTORY = 0, FILEKNOWN = 1, FILEOTHER = 2 }
|
||||
local image = { DIRECTORY = 0, FILEKNOWN = 1, FILEOTHER = 2, FILEOTHERSTART = 3 }
|
||||
|
||||
do
|
||||
local settings = ide:AddPackage('core.filetree', {}):GetSettings()
|
||||
@@ -31,6 +32,15 @@ end
|
||||
-- generic tree
|
||||
-- ------------
|
||||
|
||||
local function getIcon(name, isdir)
|
||||
local startfile = GetFullPathIfExists(FileTreeGetDir(),
|
||||
filetree.settings.startfile[FileTreeGetDir()])
|
||||
local known = GetSpec(GetFileExt(name))
|
||||
local icon = isdir and image.DIRECTORY or known and image.FILEKNOWN or image.FILEOTHER
|
||||
if startfile and startfile == name then icon = image.FILEOTHERSTART end
|
||||
return icon
|
||||
end
|
||||
|
||||
local function treeAddDir(tree,parent_id,rootdir)
|
||||
local items = {}
|
||||
local item, cookie = tree:GetFirstChild(parent_id)
|
||||
@@ -45,10 +55,8 @@ local function treeAddDir(tree,parent_id,rootdir)
|
||||
for _, file in ipairs(FileSysGetRecursive(rootdir)) do
|
||||
local name, dir = file:match("([^"..pathsep.."]+)("..pathsep.."?)$")
|
||||
local isdir = #dir>0
|
||||
local ext = GetFileExt(name)
|
||||
if isdir or not filetree.settings.extensionignore[ext] then
|
||||
local known = GetSpec(ext)
|
||||
local icon = isdir and image.DIRECTORY or known and image.FILEKNOWN or image.FILEOTHER
|
||||
if isdir or not filetree.settings.extensionignore[GetFileExt(name)] then
|
||||
local icon = getIcon(file, isdir)
|
||||
local item = items[name .. icon]
|
||||
if item then -- existing item
|
||||
-- keep deleting items until we find item
|
||||
@@ -324,9 +332,12 @@ local function treeSetConnectorsAndIcons(tree)
|
||||
tree:ActivateItem(event:GetItem())
|
||||
end)
|
||||
|
||||
-- save configuration and refresh the tree
|
||||
local function saveSettingsAndRefresh()
|
||||
local function saveSettings()
|
||||
ide:AddPackage('core.filetree', {}):SetSettings(filetree.settings)
|
||||
end
|
||||
|
||||
-- refresh the tree
|
||||
local function refreshChildren()
|
||||
tree:RefreshChildren()
|
||||
-- now mark the current file (if it was previously disabled)
|
||||
local editor = ide:GetEditor()
|
||||
@@ -348,6 +359,25 @@ local function treeSetConnectorsAndIcons(tree)
|
||||
return item
|
||||
end
|
||||
|
||||
local function unsetStartFile()
|
||||
local project = FileTreeGetDir()
|
||||
local startfile = filetree.settings.startfile[project]
|
||||
filetree.settings.startfile[project] = nil
|
||||
if startfile then
|
||||
local item_id = tree:FindItem(startfile)
|
||||
if item_id:IsOk() then
|
||||
tree:SetItemImage(item_id, getIcon(tree:GetItemFullName(item_id)))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function setStartFile(item_id)
|
||||
local project = FileTreeGetDir()
|
||||
local startfile = tree:GetItemFullName(item_id):gsub(project, "")
|
||||
filetree.settings.startfile[project] = startfile
|
||||
tree:SetItemImage(item_id, getIcon(tree:GetItemFullName(item_id)))
|
||||
end
|
||||
|
||||
tree:Connect(ID_NEWFILE, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function()
|
||||
tree:EditLabel(addItem(tree:GetSelection(), empty, image.FILEOTHER))
|
||||
@@ -395,12 +425,25 @@ local function treeSetConnectorsAndIcons(tree)
|
||||
function()
|
||||
local ext = GetFileExt(tree:GetItemText(tree:GetSelection()))
|
||||
filetree.settings.extensionignore[ext] = true
|
||||
saveSettingsAndRefresh()
|
||||
saveSettings()
|
||||
refreshChildren()
|
||||
end)
|
||||
tree:Connect(ID_SHOWEXTENSIONALL, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function()
|
||||
filetree.settings.extensionignore = {}
|
||||
saveSettingsAndRefresh()
|
||||
saveSettings()
|
||||
refreshChildren()
|
||||
end)
|
||||
tree:Connect(ID_SETSTARTFILE, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function()
|
||||
unsetStartFile()
|
||||
setStartFile(tree:GetSelection())
|
||||
saveSettings()
|
||||
end)
|
||||
tree:Connect(ID_UNSETSTARTFILE, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function()
|
||||
unsetStartFile()
|
||||
saveSettings()
|
||||
end)
|
||||
|
||||
tree:Connect(wx.wxEVT_COMMAND_TREE_ITEM_MENU,
|
||||
@@ -413,6 +456,7 @@ local function treeSetConnectorsAndIcons(tree)
|
||||
or TR("&Rename"))
|
||||
local fname = tree:GetItemText(item_id)
|
||||
local ext = GetFileExt(fname)
|
||||
local startfile = filetree.settings.startfile[FileTreeGetDir()]
|
||||
local menu = wx.wxMenu {
|
||||
{ ID_NEWFILE, TR("New &File") },
|
||||
{ ID_NEWDIRECTORY, TR("&New Directory") },
|
||||
@@ -422,6 +466,9 @@ local function treeSetConnectorsAndIcons(tree)
|
||||
{ },
|
||||
{ ID_HIDEEXTENSION, TR("Hide '.%s' Files"):format(ext) },
|
||||
{ },
|
||||
{ ID_SETSTARTFILE, TR("Set As Start File") },
|
||||
{ ID_UNSETSTARTFILE, TR("Unset '%s' As Start File"):format(startfile or "<none>") },
|
||||
{ },
|
||||
{ ID_OPENEXTENSION, TR("Open With Default Program") },
|
||||
{ ID_COPYFULLPATH, TR("Copy Full Path") },
|
||||
{ ID_SHOWLOCATION, TR("Show Location") },
|
||||
@@ -449,11 +496,12 @@ local function treeSetConnectorsAndIcons(tree)
|
||||
local projectdirectory = wx.wxMenuItem(menu, ID_PROJECTDIR,
|
||||
TR("Project Directory"), TR("Set the project directory to be used"),
|
||||
wx.wxITEM_NORMAL, projectdirectorymenu)
|
||||
menu:Insert(9, projectdirectory)
|
||||
menu:Insert(12, projectdirectory)
|
||||
FileTreeProjectListUpdate(projectdirectorymenu, 0)
|
||||
|
||||
-- disable Delete on non-empty directories
|
||||
local isdir = tree:GetItemImage(item_id) == image.DIRECTORY
|
||||
local isstart = tree:GetItemImage(item_id) == image.FILEOTHERSTART
|
||||
if isdir then
|
||||
local source = tree:GetItemFullName(item_id)
|
||||
menu:Enable(ID_DELETEFILE, not FileDirHasContent(source..pathsep))
|
||||
@@ -464,6 +512,8 @@ local function treeSetConnectorsAndIcons(tree)
|
||||
menu:Enable(ID_OPENEXTENSION, ft and #ft:GetOpenCommand("") > 0)
|
||||
menu:Enable(ID_HIDEEXTENSION, not filetree.settings.extensionignore[ext])
|
||||
end
|
||||
menu:Enable(ID_SETSTARTFILE, not isdir and not isstart)
|
||||
if not startfile then menu:Destroy(ID_UNSETSTARTFILE) end
|
||||
menu:Enable(ID_SHOWEXTENSION, next(filetree.settings.extensionignore) ~= nil)
|
||||
|
||||
PackageEventHandle("onMenuFiletree", menu, tree, event)
|
||||
|
||||
@@ -26,6 +26,8 @@ ID_NEWDIRECTORY = NewID()
|
||||
ID_RENAMEFILE = NewID()
|
||||
ID_DELETEFILE = NewID()
|
||||
ID_HIDEEXTENSION = NewID()
|
||||
ID_SETSTARTFILE = NewID()
|
||||
ID_UNSETSTARTFILE = NewID()
|
||||
ID_SHOWEXTENSION = NewID()
|
||||
ID_SHOWEXTENSIONALL = NewID()
|
||||
ID_OPENEXTENSION = NewID()
|
||||
|
||||
@@ -194,7 +194,7 @@ local function getNameToRun(skipcheck)
|
||||
if not SaveIfModified(editor) then return end
|
||||
if ide.config.editor.saveallonrun then SaveAll(true) end
|
||||
|
||||
return wx.wxFileName(openDocuments[id].filePath)
|
||||
return wx.wxFileName(ide:GetProjectStartFile() or openDocuments[id].filePath)
|
||||
end
|
||||
|
||||
function ActivateOutput()
|
||||
|
||||
@@ -157,6 +157,11 @@ function ide:GetEditorNotebook() return self.frame.notebook end
|
||||
function ide:GetOutputNotebook() return self.frame.bottomnotebook end
|
||||
function ide:GetProjectNotebook() return self.frame.projnotebook end
|
||||
function ide:GetProject() return FileTreeGetDir() end
|
||||
function ide:GetProjectStartFile()
|
||||
local projectdir = FileTreeGetDir()
|
||||
local startfile = ide.filetree.settings.startfile[projectdir]
|
||||
return MergeFullPath(projectdir, startfile), startfile
|
||||
end
|
||||
function ide:GetLaunchedProcess() return self.debugger and self.debugger.pid end
|
||||
function ide:GetProjectTree() return ide.filetree.projtreeCtrl end
|
||||
function ide:GetOutlineTree() return ide.outline.outlineCtrl end
|
||||
|
||||
BIN
zbstudio/res/16/FILE-NORMAL-START.png
Normal file
BIN
zbstudio/res/16/FILE-NORMAL-START.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 743 B |
Reference in New Issue
Block a user