⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 project.module

📁 Gambas is a graphical development environment based on a Basic interpreter, like Visual Basic. It us
💻 MODULE
📖 第 1 页 / 共 3 页
字号:
' Gambas module filePUBLIC ProjectTree AS TreeViewPUBLIC ProjectMessage AS LabelPUBLIC ActiveForm AS ObjectPUBLIC Path AS StringPUBLIC Name AS StringPUBLIC Dir AS StringPUBLIC ReadOnly AS BooleanPUBLIC Title AS StringPUBLIC Startup AS StringPUBLIC Libraries AS String[]PUBLIC Arguments AS StringPUBLIC KeepDebugInfo AS BooleanPUBLIC ControlPublic AS BooleanPUBLIC MajorVersion AS IntegerPUBLIC MinorVersion AS IntegerPUBLIC ReleaseVersion AS IntegerPUBLIC SnapToGrid AS BooleanPUBLIC ShowGrid AS BooleanPUBLIC Snap AS IntegerPUBLIC Localize AS BooleanPUBLIC Types AS String[]PUBLIC Description AS StringPUBLIC Icon AS StringPUBLIC Systems AS String[]PUBLIC Menus AS CollectionPUBLIC Groups AS CollectionPUBLIC Prefix AS BooleanPUBLIC TabSize AS IntegerPUBLIC Version AS StringPUBLIC ExecPath AS StringPUBLIC TileGrid AS PicturePUBLIC Running AS BooleanPUBLIC Recent AS NEW String[]PRIVATE CONST MAX_RECENT AS Integer = 24PUBLIC CONST FORM_MAGIC AS String = "# Gambas Form File 1.0"PUBLIC CONST PROJECT_MAGIC AS String = "# Gambas Project File 1.0"PUBLIC CONST DEFAULT_FONT AS String = "Monospace,10"PUBLIC Files AS NEW CollectionPUBLIC AboutToQuit AS BooleanPUBLIC Positions AS NEW String[]PUBLIC CONST MAX_ICON_SIZE AS Integer = 2048PUBLIC EXAMPLES_DIR AS StringPUBLIC RPMBUILD_PROG AS StringPRIVATE CONST IMAGE_DIR AS String = "img/16"PRIVATE CONST KEY_MODULE AS String = "$M"PRIVATE CONST KEY_CLASS AS String = "$C"PUBLIC CONST KEY_FORM AS String = "$F"PUBLIC CONST KEY_MISC AS String = "$O"PRIVATE CONST CLASS_AUTH_CAR AS String = "abcdefghijklmnopqrstuvwxyz0123456789"PRIVATE CONST FILE_AUTH_CAR AS String = "abcdefghijklmnopqrstuvwxyz0123456789-.+_"PRIVATE CONST PROJECT_FILE AS String = ".project"PRIVATE $bGetSource AS BooleanPRIVATE $bDisplayForm AS BooleanPRIVATE TMP_FILE AS String '= "/tmp/.gambas.ver"PRIVATE OUTPUT_FILE AS String '= "/tmp/.gambas.out"PRIVATE $sBrowser AS StringPUBLIC SUB Main()  DIM sPath AS String  DIM hGambas AS FGambas  TMP_FILE = Temp$()  OUTPUT_FILE = Temp$()  'CLASSES_FILE = Temp$()  EXAMPLES_DIR = System.Path &/ "share/gambas/examples"  'Config = NEW Config '(System.Home &/ ".gambas")  Application.Tooltip.Enabled = Settings["/ShowTooltip", TRUE]  'Application.Font = Font["10"]  InitVersion  LoadRecent  FMain.Load  FGambas.Load  'FOutput.Load(Workspace)  'FDebug.Load(Workspace)  'FIconTool.Load(Workspace)  'FFormStack.Load(Workspace)  'FExplorer.Load(Workspace)  IF Application.Args.Count >= 2 THEN    sPath = Application.Args[1]  ENDIF  DO    IF NOT sPath THEN sPath = FWelcome.Run()    'sPath = System.Home &/ "gambas/test/gambas"    IF sPath THEN      Project.Open(sPath)    ELSE      FMain.Close      RETURN    ENDIF    IF Project.Name THEN BREAK    sPath = ""  LOOP  INC Application.Busy  FProperty.Show  FToolBox.Show  'FFormStack.Load  IF Settings["/ShowMascot", TRUE] THEN    FGambas.Show  ENDIF  FMain.UpdateRecentMenu  FMain.Show  DEC Application.Busy  IF Settings["/ShowTipOnStartup", TRUE] THEN    FTips.Run  ENDIFENDPRIVATE SUB InitVersion()  DIM sVer AS String  Version = "?"  SHELL "gbx -V > " & TMP_FILE WAIT  sVer = File.Load(TMP_FILE)  KILL TMP_FILE  Version = Trim(Mid$(sVer, Instr(sVer, "-") + 1))ENDPUBLIC FUNCTION Open(sDir AS String) AS Boolean  DIM sOldPath AS String  DIM sOldName AS String  sOldPath = Project.Path  sOldName = Project.Name  IF CloseProject() THEN RETURN TRUE  IF Exist(sDir &/ ".lock") THEN    IF Message.Warning(("BE CAREFUL! This project seems to be already opened.\n\nOpening the same project twice can crash the IDE\nand lead to data loss."),("Open after all"),("Do not open")) = 2 THEN      RETURN TRUE    ENDIF    TRY KILL sDir &/ ".lock"  ENDIF  ReadOnly = NOT Access(sDir, gb.write)  Path = sDir &/ PROJECT_FILE  Name = File.Name(sDir)  Project.Dir = sDir  ReadProject  Refresh  AddRecent(sDir)  FMain.OnProjectChange  FFind.OnProjectChange  'FExplorer.ProjectChange  FDebug.Clear  TRY File.Save(sDir &/ ".lock", "")  IF ReadOnly THEN Message.Warning(("This project is read-only."))  SetMessage(("OK"))  RETURNCATCH  IF Error.Text THEN    Message.Error(("Cannot open project file :\n") & sDir & "\n\n" & Error.Text & "\n" & Error.Where)  ENDIF  Path = sOldPath  Project.Dir = File.Dir(Path)  Name = sOldName  IF Path THEN ReadProject  RETURN TRUEENDPUBLIC SUB CloseAll()  DIM hForm AS Object  FOR EACH hForm IN Files    hForm.Close  NEXTENDPRIVATE FUNCTION CloseProject() AS Boolean  DIM hForm AS Object  DIM bModif AS Boolean  'IF Len(Path) = 0 THEN RETURN  IF Running THEN    FDebug.Stop    'WAIT 0.5  ENDIF  FOR EACH hForm IN Files    IF hForm.IsModified() THEN      bModif = TRUE      BREAK    ENDIF  NEXT  IF bModif THEN    IF FSave.Run(AboutToQuit) THEN RETURN TRUE  ENDIF  FFind.Close  FOR EACH hForm IN Files    hForm.Delete  NEXT  Files.Clear  ActiveForm = NULL  IF NOT AboutToQuit THEN FProperty.HideAll  TRY KILL Project.Dir &/ ".lock"  RETURN FALSEENDPUBLIC FUNCTION Close() AS Boolean  DIM hForm AS Form  DIM iInd AS Integer  DIM sLig AS String  AboutToQuit = TRUE  IF CloseProject() THEN    AboutToQuit = FALSE    RETURN TRUE  ENDIF  SaveRecent  'FDebug.Close  'FOR EACH hForm IN Windows  '  TRY hForm.Close  'NEXT  'FOR EACH hForm IN Windows  '  TRY hForm.Delete  'NEXT'   FToolBox.Delete'   FExplorer.Delete'   FFind.Delete'   FGambas.Delete'   FIconTool.Delete'   FDebug.Delete'   FProperty.Delete  CComponent.ExitENDPRIVATE PROCEDURE AddDir(cDir AS String[])  DIM sDir AS String  DIM sFile AS String  DIM sIcon AS String  DIM sPath AS String  DIM sKey AS String  DIM bShow AS Boolean  DIM sExt AS String  DIM sParent AS String  DIM hPict AS Picture  DIM aFile AS NEW String[]  DIM bAllowForm AS Boolean  bAllowForm = AllowForm()  sDir = cDir[0]  FOR EACH sFile IN Dir(sDir, "*")    IF IsDir(sDir &/ sFile) THEN aFile.Add("D" & sFile)  NEXT  FOR EACH sFile IN Dir(sDir, "*")    IF NOT IsDir(sDir &/ sFile) THEN aFile.Add("F" & sFile)  NEXT  aFile.Sort  FOR EACH sFile IN aFile    sFile = Mid$(sFile, 2)    sPath = sDir &/ sFile    sKey = sPath    sParent = sDir    WITH Stat(sPath)    IF NOT .Hidden THEN      bShow = FALSE      IF .Type = gb.Directory THEN        cDir.Add(sPath)        sIcon = IMAGE_DIR &/ "close.png"        IF sDir = Project.Dir THEN          sParent = KEY_MISC        ENDIF        bShow = TRUE      ELSE        sExt = Lower(File.Ext(sFile))        IF sDir = Project.Dir THEN          sParent = KEY_MISC        ENDIF        SELECT CASE sExt          CASE "form", "class", "module"            IF sParent = KEY_MISC THEN              sIcon = IMAGE_DIR &/ sExt & ".png"              bShow = TRUE              IF sExt = "form" THEN                sParent = KEY_FORM                IF NOT bAllowForm THEN sIcon = ""              ELSE IF sExt = "class" THEN                sParent = KEY_CLASS                IF $bDisplayForm THEN                  IF NOT bAllowForm THEN                    IF Exist(sDir &/ File.BaseName(sFile) & ".form") THEN                      sIcon = ""                    ENDIF                  ENDIF                ELSE                  IF Exist(sDir &/ File.BaseName(sFile) & ".form") THEN                    sIcon = ""                  ENDIF                ENDIF              ELSE IF sExt = "module" THEN                sParent = KEY_MODULE              ENDIF              sFile = File.BaseName(sFile)            ELSE              sIcon = IMAGE_DIR &/ "unknown.png"            ENDIF          CASE "jpg", "jpeg", "xpm", "bmp", "png", "gif"            IF .Size > MAX_ICON_SIZE THEN              sIcon = IMAGE_DIR &/ "image.png"            ELSE              sIcon = sPath            ENDIF          CASE "svg"            sIcon = IMAGE_DIR &/ "image.png"          CASE "pot"            IF sParent = KEY_MISC THEN              sIcon = ""            ENDIF          CASE ELSE            sIcon = ""            IF Right$(sFile,1) <> "~" THEN              IF sFile <> Project.Name OR sParent <> KEY_MISC THEN                sIcon = IMAGE_DIR &/ "unknown.png"              ENDIF            ENDIF        END SELECT      ENDIF      IF Len(sIcon) THEN        IF Left$(sIcon) = "/" THEN          hPict = NEW Picture          hPict.Load(sIcon)        ELSE          hPict = Picture[sIcon]        ENDIF        WITH ProjectTree.Add(sKey, sFile, hPict, sParent)          IF bShow THEN            ProjectTree[sKey].MoveParent            ProjectTree.Item.Expanded = TRUE          ENDIF        END WITH      ENDIF    ENDIF    END WITH  NEXTENDPRIVATE SUB SelectKey(sKey AS String)  IF NOT ProjectTree.Exist(sKey) THEN    IF Right$(sKey, 6) = ".class" THEN      sKey = Left$(sKey, -6) & ".form"    ENDIF  ENDIF  TRY ProjectTree[sKey].Selected = TRUE  TRY ProjectTree[sKey].EnsureVisibleENDPUBLIC PROCEDURE Refresh(OPTIONAL bReset AS Boolean)  DIM sFile AS String  DIM cDir AS NEW String[]  DIM sDir AS String  DIM sKey AS String  DIM sKeyReset AS String  $bDisplayForm = Settings["/DisplayForm"]  IF NOT bReset THEN    sKeyReset = ProjectTree.Key  ENDIF  WITH ProjectTree    .Clear()    sKey = Project.Dir    .Add(sKey, Name, Picture["img/16/gambas.png"]).Expanded = TRUE    cDir.Add(Project.Dir)    .Add(KEY_CLASS, ("Classes"), Picture["img/16/close.png"], sKey).Expanded = TRUE    IF AllowForm() THEN      .Add(KEY_FORM, ("Forms"), Picture["img/16/close.png"], sKey).Expanded = TRUE    ENDIF    .Add(KEY_MODULE, ("Modules"), Picture["img/16/close.png"], sKey).Expanded = TRUE    .Add(KEY_MISC, ("Data"), Picture["img/16/close.png"], sKey).Expanded = TRUE    '$bGetSource = TRUE    REPEAT      AddDir(cDir)      cDir.Remove(0)      $bGetSource = FALSE    UNTIL cDir.Count = 0    '.Sort()  END WITH  IF sKeyReset THEN sKey = sKeyReset  TRY ProjectTree[sKey].EnsureVisible  DefineStartup(Startup, TRUE)  WITH ProjectTree    .MoveFirst    WHILE .Available      .Current.Expanded = .Current.Children > 0      .MoveNext    WEND  END WITH  'STOP  FMain.Title = ("Project") & " - " & Name & If(ReadOnly, " [" & ("Read only") & "]", "")ENDPUBLIC FUNCTION IsEditor(hFile AS Object) AS Boolean  RETURN Object.Type(hFile) = "FEditor"ENDPUBLIC FUNCTION IsForm(hFile AS Object) AS Boolean  IF hFile THEN RETURN Object.Type(hFile) = "FForm"ENDPUBLIC FUNCTION LoadFile(sPath AS String) AS Object  DIM hForm AS Object  'DIM hActive AS Object  INC Application.Busy  hForm = Files[sPath]  IF NOT hForm THEN    'PRINT "Load: "; sPath    'hActive = ActiveForm    SELECT CASE Lower(File.Ext(sPath))      CASE "module", "class"        hForm = NEW FEditor(sPath)      CASE "form"        IF AllowForm() THEN hForm = NEW FForm(sPath)      CASE "png", "gif", "jpg", "jpeg", "bmp", "xpm"        hForm = NEW FIconEditor(sPath)      CASE ELSE        hForm = NEW FTextEditor(sPath)    END SELECT    Files[sPath] = hForm  ENDIF  DEC Application.Busy  RETURN hFormCATCH  DEC Application.Busy  Message.Error(("Cannot open file.") & "\n\n" & Error.Text & "\n" & Error.Where)ENDPUBLIC FUNCTION FindPath(sClass AS String) AS String  DIM sPath AS String  DIM aDir AS String[]  DIM iInd AS Integer  aDir = Dir(Project.Dir)  iInd = aDir.Find(sClass & ".class", gb.Text)  IF iInd >= 0 THEN RETURN Project.Dir &/ aDir[iInd]  iInd = aDir.Find(sClass & ".module", gb.Text)  IF iInd >= 0 THEN RETURN Project.Dir &/ aDir[iInd]  'PRINT "FindPath: "; sClass; " ?"ENDPUBLIC SUB OpenFile(sPath AS String, OPTIONAL iLine AS Integer)  DIM hForm AS Object  IF Instr(sPath, "/") = 0 THEN sPath = FindPath(sPath)  IF NOT Exist(sPath) THEN    Message.Warning("File not found!")    Project.Refresh    RETURN  ENDIF  'IF File.Ext(sPath) = "form" THEN  '  FProperty.Show  '  FToolBox.Show  'ENDIF  LoadFile(sPath)  hForm = Files[sPath]  IF NOT hForm THEN RETURN  hForm.Show  IF Object.Type(hForm) = "FEditor" THEN    hForm.Editor.SetFocus  ENDIF  IF iLine THEN hForm.GotoCenter(iLine, 0)ENDPUBLIC FUNCTION ExistForm(sName AS String) AS Boolean  RETURN Dir(Project.dir, "*.form").Find(sName & ".form", gb.Text) >= 0ENDPUBLIC SUB OpenForm(sName AS String)  DIM sPath AS String  sPath = Project.Dir &/ sName & ".form"  IF Exist(sPath) THEN OpenFile(sPath)ENDPRIVATE FUNCTION AddMessage(sVoid AS String) AS String  DIM hFic AS File  DIM sLig AS String  IF Stat(OUTPUT_FILE).Size = 0 THEN    SetMessage(sVoid)    RETURN  ELSE    OPEN OUTPUT_FILE FOR READ AS #hFic    WHILE NOT Eof(hFic)      LINE INPUT #hFic, sLig      'ProjectMessage.Add(sLig)    WEND    CLOSE #hFic  ENDIF  'ProjectMessage.Index = ProjectMessage.Count - 1  'SetMessage(sLig)  RETURN sLigENDPRIVATE SUB CompileError(sMsg AS String)  DIM iPos AS Integer  DIM sFile AS String  DIM iLine AS Integer  iPos = Instr(sMsg, ":")  'if iPos = 0 then return  sFile = Left$(sMsg, iPos - 1)  sMsg = Mid$(sMsg, iPos + 1)  iPos = Instr(sMsg, ":")  'if iPos = 0 then return  iLine = Val(Left$(sMsg, iPos - 1))  'if iLine = 0 then return  sFile = File.Dir(Path) &/ File.Name(sFile)  SetMessage(File.BaseName(sFile) & "." & CStr(iLine) & ": " & Trim(Mid$(sMsg,iPos + 1)))  OpenFile(sFile, iLine)  FGambas.Animate("Depressive")  Message.Warning(Trim(Mid$(sMsg,iPos + 1)) & "\n" & Subst(("at line &1 in &2"), CStr(iLine), File.Name(sFile)))  OpenFile(sFile, iLine)CATCHENDPUBLIC FUNCTION Quote(sPath AS String) AS String  DIM sQuote AS String  DIM iInd AS Integer  DIM sCar AS String  sPath = Conv$(sPath, Desktop.Charset, System.Charset)  FOR iInd = 1 TO Len(sPath)    sCar = Mid$(sPath, iInd, 1)    IF Instr("0123456789abcdefghijklmnopqrstuvwxyz.-/_~", LCase(sCar)) = 0 THEN      sCar = "\\" & sCar    ENDIF    sQuote = sQuote & sCar  NEXT  RETURN sQuoteENDPUBLIC FUNCTION Escape(sStr AS String) AS String  DIM sRes AS String  DIM iInd AS Integer  DIM sCar AS String  DIM iPos AS Integer  FOR iInd = 1 TO Len(sStr)    sCar = Mid$(sStr, iInd, 1)    iPos = Instr("'\"\\\n\r\t", sCar)    IF iPos THEN sCar = "\\" & Mid$("'\"\\nrt", iPos, 1)    sRes = sRes & sCar  NEXT  RETURN sResENDPUBLIC SUB Process_Read()  DIM sLig AS String  LINE INPUT #LAST, sLig  PRINT sLig

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -