📄 fmain.class
字号:
' Gambas class filePRIVATE CONST FILE_CLIPBOARD_FORMAT AS String = "text/x-gambas-file"PRIVATE $sKey AS StringPRIVATE $bCtrl AS BooleanPUBLIC SUB _new() Project.ProjectTree = tvwProject Project.ProjectMessage = lblMessage FDebugInfo.Load(splProject) FDebugInfo.Hide FDebug.Load(panToolbar) FDebug.H = 24 ME.Move(0, 0, ME.Width, Desktop.Height) Config.LoadWindow(ME, "/FMain") ReadConfig UpdateRecentMenu UpdateExampleMenuENDPUBLIC SUB Form_Close() DIM bRet AS Boolean IF Project.Close() THEN STOP EVENT ELSE Config.SaveWindow(ME, "/FMain") ENDIFEND' PUBLIC SUB Form_Resize()'' 'PRINT "("; ME.Width; ME.Height; ") ("; ME.CLientW; ME.ClientH; ")"'' 'panToolBar.W = ME.CLientW' 'panToolBar.H = FDebug.Y + FDebug.H' 'tvwProject.Move(0, panToolbar.H, ME.ClientWidth, ME.ClientHeight - lblMessage.H - panToolbar.H)' 'lblMessage.Move(0, tvwProject.Y + tvwProject.H, ME.ClientW, lblMessage.H)'' ENDPUBLIC SUB mnuOpen_Click() DIM sPath AS String sPath = Project.GetProject() IF NOT sPath THEN RETURN Project.Open(sPath) UpdateRecentMenuENDPUBLIC SUB tvwProject_Activate() DIM sKey AS String sKey = tvwProject.Key IF sKey THEN IF CanEdit(sKey) THEN IF $bCtrl THEN tvwProject.Item.MoveParent IF tvwProject.Item.Key = Project.KEY_FORM THEN sKey = Left(sKey, -5) & ".class" ENDIF ENDIF Project.OpenFile(sKey) ENDIF ENDIFENDPUBLIC SUB mnuEditFile_Click() tvwProject_Activate()ENDPUBLIC SUB mnuEditClass_Click() $bCtrl = TRUE tvwProject_Activate()ENDPUBLIC SUB mnuAddModule_Click() InsertFile("module")ENDPUBLIC SUB mnuAddClass_Click() InsertFile("class")ENDPUBLIC SUB mnuAddForm_Click() InsertFile("form")ENDPUBLIC SUB mnuQuit_Click() ME.CloseENDPRIVATE SUB InsertFile(sType AS String) DIM sDir AS String DIM sPath AS String SELECT CASE sType CASE "class" IF FNewClass.Run() THEN RETURN Project.Insert(FNewClass.Name, sType, FNewClass.Template) IF FNewClass.Startup THEN Project.DefineStartup(FNewClass.Name & ".class") CASE "form" IF FNewForm.Run() THEN RETURN Project.Insert(FNewForm.Name, "class", FNewForm.TemplateClass, TRUE) Project.Insert(FNewForm.Name, "form", FNewForm.TemplateForm) IF FNewForm.Startup THEN Project.DefineStartup(FNewForm.Name & ".form") CASE "module" IF FNewModule.Run() THEN RETURN Project.Insert(FNewModule.Name, sType, FNewModule.Template) IF FNewModule.Startup THEN Project.DefineStartup(FNewModule.Name & ".module") END SELECT Project.RefreshLibraryENDPUBLIC SUB mnuCompile_Click() Project.Compile()ENDPUBLIC SUB mnuCompileAll_Click() Project.Compile(TRUE)ENDPUBLIC SUB mnuRun_Click() Project.Run(FALSE)ENDPUBLIC SUB mnuDebug_Click() Project.Run(FALSE, 1)ENDPUBLIC SUB mnuSave_Click() Project.SaveENDPUBLIC SUB mnuSaveFile_Click() DIM sPath AS String DIM hForm AS Object sPath = GetCurrent() IF NOT sPath THEN RETURN hForm = Project.Files[sPath] IF NOT hForm THEN RETURN hForm.SaveENDPUBLIC SUB mnuRefresh_Click() Project.RefreshENDPUBLIC SUB mnuView_Show() 'mnuViewTool.Checked = Project.ToolForm.Visible 'mnuViewProperty.Checked = Project.PropertyForm.Visible 'mnuViewMessage.Checked = Project.MessageForm.VisibleENDPRIVATE SUB HideOrShow(hForm AS Form) 'PRINT "FMain.HideOrShow: ": hForm.Name hForm.Show 'NOT hForm.VisibleENDPUBLIC SUB mnuViewTool_Click() HideOrShow(FToolBox)ENDPUBLIC SUB mnuViewProperty_Click() HideOrShow(FProperty)ENDPUBLIC SUB mnuViewMessage_Click() HideOrShow(Project.MessageForm)ENDPUBLIC SUB mnuViewExplorer_Click() HideOrShow(FExplorer)ENDPUBLIC SUB mnuExec_Click() Project.MakeExecutableENDPUBLIC SUB mnuAbout_Click() FAbout.RunENDPUBLIC SUB mnuNew_Click() Project.NewProjectENDPUBLIC SUB mnuProperty_Click() IF FPropertyProject.Run() THEN RETURN 'Project.WriteProjectEND'PUBLIC SUB mnuPrev_Click()'' tvwProject.Current' PRINT Project.GetPreviousEditor(tvwProject.Item.Text)''END'PUBLIC SUB mnuNext_Click()'' tvwProject.Current' PRINT Project.GetNextEditor(tvwProject.Item.Text)''ENDPUBLIC SUB mnuDeleteFile_Click() DIM sPath AS String DIM sName AS String sPath = GetCurrent() IF NOT sPath THEN RETURN IF IsDir(sPath) THEN IF Message.Question(Project.StripPath(sPath) & "\n\n" & ("Do you really want to delete this directory ?"), ("Delete"), ("Cancel")) <> 1 THEN RETURN Project.DeleteDir(sPath) Project.Refresh ELSE IF Project.IsClassName(sPath) THEN sName = File.BaseName(sPath) ELSE sName = File.Name(sPath) ENDIF IF Message.Delete(sName & "\n\n" & ("Do you really want to delete this file ?"), ("Delete"), ("Cancel")) <> 1 THEN RETURN Project.DeleteFile(sPath) ENDIFCATCH Message.Error(("Cannot delete file or directory") & "\n\n" & Error.Text)ENDPUBLIC SUB mnuRenameFile_Click() DIM sPath AS String sPath = GetCurrent() IF NOT sPath THEN RETURN Project.RenameFile(sPath)ENDPUBLIC SUB mnuPreferences_Click() FOption.RunENDPUBLIC SUB tvwProject_Menu() mnuPopup.PopupENDPRIVATE FUNCTION GetCurrent() AS String $sKey = "" IF NOT tvwProject.Key THEN RETURN IF NOT tvwProject.Current.Selected THEN RETURN $sKey = tvwProject.Key IF Left$($sKey) = "$" THEN RETURN IF IsProject($sKey) THEN RETURN RETURN $sKeyENDPRIVATE FUNCTION GetCurrentDir() AS String GetCurrent IF NOT $sKey THEN RETURN IF $sKey = Project.KEY_MISC THEN RETURN Project.Dir IF Left$($sKey) = "$" THEN RETURN IF IsDir($sKey) THEN RETURN $sKey ELSE RETURN File.Dir($sKey) ENDIFENDPUBLIC SUB mnuPopup_Show() DIM sCurrent AS String DIM bCurrent AS Boolean DIM bFile AS Boolean sCurrent = GetCurrent() bCurrent = sCurrent UpdateMenu mnuSaveFile.Visible = mnuSave.Visible AND CanEdit(sCurrent) mnuRenameFile.Visible = mnuRenameFile.Visible AND bCurrent mnuSepRenameFile.Visible = mnuRenameFile.Visible OR mnuSaveFile.Visible mnuDeleteFile.Visible = mnuDeleteFile.Visible AND CanDelete(sCurrent) mnuSepDeleteFile.Visible = mnuDeleteFile.Visible mnuEditFile.Visible = CanEdit(sCurrent) mnuEditForm.Visible = mnuEditFile.Visible mnuEditClass.Visible = mnuEditFile.Visible mnuPropertyFile.Enabled = bCurrent OR IsProject($sKey) mnuStartup.Visible = mnuStartup.Visible AND Project.IsClassName(sCurrent) IF mnuStartup.Visible THEN mnuStartup.Checked = (Project.Startup = File.BaseName(sCurrent)) ENDIF bFile = (NOT Project.IsClassName(sCurrent)) AND bCurrent mnuCut.Visible = mnuCut.Visible AND (bFile AND NOT IsDir($sKey)) mnuCopy.Visible = mnuCopy.Visible AND (bFile AND NOT IsDir($sKey)) mnuPaste.Visible = mnuPaste.Visible AND (bFile OR $sKey = Project.KEY_MISC) AND Clipboard.Format = FILE_CLIPBOARD_FORMAT mnuAddForm.Visible = Project.AllowForm() IF Right(sCurrent, 5) = ".form" THEN mnuEditFile.Visible = FALSE 'mnuEditForm.Visible = TRUE 'mnuEditClass.Visible = TRUE ELSE 'mnuEditFile.Visible = TRUE mnuEditForm.Visible = FALSE mnuEditClass.Visible = FALSE 'mnuEditFile.Picture = tvwProject.Item.Picture ENDIFENDPRIVATE FUNCTION FormatFile(sPath AS String) AS String DIM sText AS String sText = File.Name(sPath) IF Left$(sPath, Len(System.Home)) = System.Home THEN sPath = "~" &/ Mid$(sPath, Len(System.Home) + 1) ENDIF RETURN sText & " (" & File.Dir(sPath) & ")"ENDPUBLIC SUB UpdateRecentMenu() DIM hMenu AS Menu DIM iInd AS Integer DIM sPath AS String mnuOpenRecent.Children.Clear mnuOpenRecent.Enabled = Project.Recent.Count > 0 IF Project.Recent.Count = 0 THEN RETURN hMenu = NEW Menu(mnuOpenRecent) AS "mnuClearRecent" hMenu.Text = ("&Clear history") hMenu.Picture = Picture["img/16/delete.png"] hMenu = NEW Menu(mnuOpenRecent) FOR iInd = 0 TO Project.Recent.Count - 1 hMenu = NEW Menu(mnuOpenRecent) AS "mnuOpenRecentFile" sPath = Project.Recent[iInd] hMenu.Tag = sPath hMenu.Text = FormatFile(sPath) hMenu.Picture = Project.GetIcon(hMenu.Tag, 16) NEXTENDPUBLIC SUB UpdateExampleMenu() DIM hMenu AS Menu DIM aList AS String[] DIM iInd AS Integer DIM sPath AS String DIM sParent AS String DIM sDir AS String DIM hParent AS Menu aList = Project.GetExamples() mnuOpenExample.Children.Clear mnuOpenRecent.Enabled = aList.Count > 0 hParent = mnuOpenExample IF aList.Count = 0 THEN RETURN FOR iInd = 0 TO aList.Count - 1 sPath = aList[iInd] IF Instr(sPath, "/") THEN sDir = File.Dir(sPath) IF sDir <> sParent THEN sParent = sDir hParent = NEW Menu(mnuOpenExample) hParent.Text = sParent ENDIF ELSE hParent = mnuOpenExample sParent = "" ENDIF hMenu = NEW Menu(hParent) AS "mnuOpenRecentFile" hMenu.Tag = Project.EXAMPLES_DIR &/ sPath hMenu.Text = File.Name(sPath) 'FormatFile(sPath) hMenu.Picture = Project.GetIcon(hMenu.Tag, 16) NEXTENDPUBLIC SUB mnuOpenRecentFile_Click() Project.Open(LAST.Tag) UpdateRecentMenuENDPUBLIC SUB mnuClearRecent_Click() Project.Recent.Clear UpdateRecentMenuENDPUBLIC SUB mnuNewProject_Click() DIM sPath AS String sPath = FNewProject.Run() IF NOT sPath THEN RETURN Project.Open(sPath) UpdateRecentMenuENDPUBLIC SUB mnuMakePackage_Click() Project.MakePackageENDPUBLIC SUB mnuTip_Click() FTips.RunENDPUBLIC SUB mnuStep_Click() Project.Run(FALSE, 2)ENDPUBLIC SUB mnuViewGambas_Click() HideOrShow(FGambas)ENDPUBLIC SUB mnuAddIcon_Click() IF FNewIcon.Run(GetCurrentDir()) THEN RETURN Project.InsertFile(FNewIcon.Name, FNewIcon.DestDir, FNewIcon.Template)ENDPUBLIC SUB mnuAddText_Click() IF FNewText.Run(GetCurrentDir()) THEN RETURN Project.InsertFile(FNewText.Name, FNewText.DestDir, FNewText.Template)ENDPUBLIC SUB mnuAddDirectory_Click() IF FNewDirectory.Run(GetCurrentDir()) THEN RETURN Project.InsertDirectory(FNewDirectory.ParentDir &/ FNewDirectory.Name)ENDPRIVATE FUNCTION CanEdit(sPath AS String) AS Boolean IF NOT sPath THEN RETURN IF Left$(sPath) = "$" THEN RETURN RETURN NOT IsDir(sPath)ENDPRIVATE FUNCTION CanDelete(sPath AS String) AS Boolean IF NOT sPath THEN RETURN IF Left$(sPath) = "$" THEN RETURN RETURN tvwProject[sPath].Count = 0ENDPUBLIC SUB UpdateTranslate() mnuTranslate.Enabled = Project.Localize btnTranslate.Enabled = mnuTranslate.EnabledENDPUBLIC SUB mnuTranslate_Click() IF Project.Running THEN RETURN IF Project.Compile() THEN RETURN FTranslate.RunENDPUBLIC SUB mnuDatabaseManager_Click() Project.RunTool("gambas-database-manager")ENDPUBLIC SUB mnuViewConsole_Click() HideOrShow(FOutput) FOutput.Shown = FOutput.VisibleENDPUBLIC SUB mnuStartup_Click() IF mnuStartup.Checked THEN RETURN mnuStartup.Checked = TRUE Project.DefineStartup(GetCurrent())ENDPUBLIC SUB mnuPropertyFile_Click() DIM sKey AS String sKey = GetCurrent() IF IsProject($sKey) THEN FPropertyProject.Run ELSE FPropertyFile.Run(sKey) ENDIFENDPRIVATE FUNCTION IsProject(sKey AS String) AS Boolean RETURN sKey = Project.DirENDPUBLIC SUB mnuCopy_Click() DIM sPath AS String sPath = GetCurrent() Clipboard.Copy("C" & sPath, FILE_CLIPBOARD_FORMAT) mnuPopup_ShowENDPUBLIC SUB mnuCut_Click() DIM sPath AS String sPath = GetCurrent() Clipboard.Copy("X" & sPath, FILE_CLIPBOARD_FORMAT)ENDPUBLIC SUB mnuPaste_Click() DIM sFile AS String DIM sAction AS String DIM sSrc AS String DIM sDst AS String sFile = Clipboard.Paste(FILE_CLIPBOARD_FORMAT) sAction = Left$(sFile) sSrc = Mid$(sFile, 2) sDst = GetCurrentDir() &/ File.Name(sFile) SELECT CASE sAction CASE "C" Project.CopyFile(sSrc, sDst) CASE "X" IF sSrc = sDst THEN RETURN Project.MoveFile(sSrc, sDst) Clipboard.Clear END SELECTENDPUBLIC SUB tvwProject_Select() mnuPopup_ShowENDPUBLIC SUB tvwProject_Expand() IF tvwProject.Item.Picture = Picture["img/16/close.png"] THEN tvwProject.Item.Picture = Picture["img/16/open.png"] ENDIFENDPUBLIC SUB tvwProject_Collapse() IF tvwProject.Item.Picture = Picture["img/16/open.png"] THEN tvwProject.Item.Picture = Picture["img/16/close.png"] ENDIFENDPUBLIC SUB mnuCloseAll_Click() Project.CloseAllENDPUBLIC SUB mnuFrom_Click() Project.Run(FALSE, 3)ENDPUBLIC SUB mnuViewIconTool_Click() IF Project.ActiveForm THEN IF Object.Type(Project.ActiveForm) = "FIconEditor" THEN FIconTool.Raise ENDIF ENDIFENDPUBLIC SUB mnuViewStack_Click() HideOrShow(FFormStack)ENDPUBLIC SUB mnuMakeInstall_Click() Project.MakeInstallENDPUBLIC SUB ReadConfig()' DIM hFont AS Font'' IF Settings["/UseSmallFont", FALSE] THEN' hFont = Font["8"]' ELSE' hFont = Font["10"]' ENDIF'' tvwProject.Font = hFont 'PRINT Desktop.Resolution;;Application.Font.ToString() 'PRINT tvwProject.Font.Size;;Application.Font.Size tvwProject.Font.Size = If(Settings["/UseSmallFont", FALSE], 8.0, Application.Font.Size) lblMessage.Font = tvwProject.FontENDPUBLIC SUB mnuViewDebug_Click() HideOrShow(FDebugInfo)ENDPRIVATE SUB UpdateMenu() DIM bVisible AS Boolean bVisible = NOT (Project.ReadOnly OR Project.Running) mnuExec.Visible = bVisible mnuMakeInstall.Visible = bVisible mnuTranslate.Visible = bVisible mnuSepTranslate.Visible = bVisible btnTranslate.Visible = bVisible mnuCompile.Visible = bVisible btnCompile.Visible = bVisible mnuCompileAll.Visible = bVisible btnCompileAll.Visible = bVisible mnuSepCompile.Visible = bVisible mnuSave.Visible = bVisible mnuSepSave.Visible = bVisible btnSave.Visible = bVisible mnuProperty.Visible = bVisible btnProperty.Visible = bVisible mnuAddFile.Visible = bVisible mnuStartup.Visible = bVisible mnuSaveFile.Visible = bVisible mnuRenameFile.Visible = bVisible mnuSepRenameFile.Visible = bVisible mnuCut.Visible = bVisible mnuCopy.Visible = bVisible mnuPaste.Visible = bVisible mnuDeleteFile.Visible = bVisible mnuSepDeleteFile.Visible = bVisibleENDPUBLIC SUB OnProjectChange() UpdateMenu UpdateTranslateENDPUBLIC SUB OnProjectDebug() UpdateMenuENDPUBLIC SUB tvwProject_MouseDown() $bCtrl = Mouse.ControlEND
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -