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

📄 project.module

📁 Gambas is a graphical development environment based on a Basic interpreter, like Visual Basic. It us
💻 MODULE
📖 第 1 页 / 共 3 页
字号:
ENDPUBLIC SUB DeleteCompiledFiles()  DIM sFile AS String  EXEC [ "rm", "-rf", Project.Dir &/ ".gambas"] WAIT  IF Exist(Project.Dir &/ ".lang") THEN    FOR EACH sFile IN Dir(Project.Dir &/ ".lang", "*.pot")      TRY KILL Project.Dir &/ ".lang" &/ sFile    NEXT  ENDIFENDPUBLIC FUNCTION GetCompileCommand(bAll AS Boolean, bNoDebug AS Boolean, bIDE AS Boolean) AS String  DIM sExec AS String  sExec = System.Path &/ "bin/gbc "  IF bAll THEN sExec = sExec & "-a "  IF NOT bNoDebug THEN sExec = sExec & "-g "  IF Localize THEN sExec = sExec & "-t "  IF ControlPublic THEN sExec = sExec & "-p "  'sExec = sExec & "-c " & Quote(CLASSES_FILE) & " " & Quote(Project.Dir) & " > " & OUTPUT_FILE & " 2>&1"  IF bIDE THEN    sExec = sExec & Quote(Project.Dir)    sExec = sExec & " > " & OUTPUT_FILE & " 2>&1"  ENDIF  RETURN sExecENDPUBLIC FUNCTION Compile(OPTIONAL bAll AS Boolean, OPTIONAL bNoDebug AS Boolean) AS Boolean  DIM sExec AS String  DIM sRes AS String  DIM sDir AS String  IF Project.ReadOnly THEN RETURN  IF Project.Running THEN RETURN 'TRUE  IF {Lock}() THEN RETURN TRUE  sDir = Project.Dir  Save  SetMessage(("Compiling project") & " " & Project.Name & "...")  IF bAll THEN    CleanUpProject    DeleteCompiledFiles    WriteProject  ENDIF  sExec = GetCompileCommand(bAll, bNoDebug, TRUE)  SHELL sExec WAIT  'Stat(OUTPUT_FILE)  sRes = AddMessage(("Nothing to do."))  IF sRes THEN    IF sRes <> "OK" THEN      {Unlock}()      CompileError(sRes)      RETURN TRUE    ELSE      IF Localize THEN        TRY MKDIR sDir &/ ".lang"        SHELL "msgcat " & Quote(sDir) &/ ".lang/*.pot > " & Quote(sDir &/ ".lang/.pot") & " 2>/dev/null" WAIT      ENDIF      SetMessage(("OK"))      FGambas.Animate("Happy")    ENDIF  ENDIF  {Unlock}()ENDPRIVATE FUNCTION CheckRunning(OPTIONAL bCompileAll AS Boolean) AS Boolean  IF Project.Running THEN RETURN  IF Compile(bCompileAll) THEN RETURN TRUE  IF CheckStartupClass() THEN RETURN TRUEENDPUBLIC SUB Run(OPTIONAL bCompileAll AS Boolean, OPTIONAL iDebug AS Integer)  IF CheckRunning(bCompileAll) THEN RETURN  IF iDebug = 1 THEN    FDebug.Step  ELSE IF iDebug = 2 THEN    FDebug.Forward  ELSE IF iDebug = 3 THEN    FDebug.ReturnFrom  ELSE    FDebug.Run  ENDIFENDPUBLIC SUB Forward()  IF CheckRunning() THEN RETURN  FDebug.ForwardENDPUBLIC SUB ReturnFrom()  IF CheckRunning() THEN RETURN  FDebug.ReturnFromENDPUBLIC SUB RunUntil(hForm AS FEditor, iLine AS Integer)  IF CheckRunning() THEN RETURN  FDebug.RunUntil(hForm, iLine)ENDPUBLIC SUB Step()  IF Compile() THEN RETURN  IF CheckStartupClass() THEN RETURN  FDebug.StepENDPUBLIC SUB Save()  DIM hForm AS Object  INC Application.Busy  FOR EACH hForm IN Files    IF Object.Type(hForm) = "FEditor" THEN      IF hForm.Save(TRUE) THEN BREAK    ELSE      IF hForm.Save() THEN BREAK    ENDIF  NEXT  DEC Application.BusyENDPUBLIC SUB Insert(sName AS String, sType AS String, OPTIONAL sTemplate AS String, OPTIONAL bNoRefresh AS Boolean)  DIM sPath AS String  DIM sData AS String  sPath = Project.Dir &/ File.BaseName(sName) & "." & sType  IF Exist(sPath) THEN    Message.Warning(("File already exists."))    RETURN  ENDIF  File.Save(sPath, sTemplate)  IF NOT bNoRefresh THEN Refresh  OpenFile(sPath)ENDPUBLIC SUB InsertFile(sName AS String, sDir AS String, OPTIONAL sTemplate AS String)  DIM sPath AS String  DIM sData AS String  sPath = sDir &/ sName  IF Len(sTemplate) THEN    IF Exist(sPath) THEN      Message.Warning(("File already exists."))      RETURN    ENDIF    SHELL "cp " & Quote(sTemplate) & " " & Quote(sPath) WAIT    IF NOT Exist(sPath) THEN      Message.Error(("Cannot copy template file."))      RETURN    ENDIF  ENDIF  Refresh  RefreshLibrary  OpenFile(sPath)ENDPUBLIC SUB InsertDirectory(sPath AS String)  IF Exist(sPath) THEN    Message.Warning(("Directory already exists."))    RETURN  ENDIF  MKDIR sPath  RefreshENDPUBLIC SUB Activate(hForm AS Object)  DIM sType AS String  'PRINT Application.ActiveWindow  'TRY PRINT Application.ActiveWindow.Name  'IF Application.ActiveWindow <> hForm THEN RETURN  'IF File.Ext(hForm.Path) = "class" THEN  '  IF Exist(File.Dir(hForm.Path) &/ File.BaseName(hForm.Path) & ".form" THEN  IF AboutToQuit THEN RETURN  IF NOT hForm THEN RETURN  SelectKey(hForm.Path)  IF ActiveForm = hForm THEN RETURN  ActiveForm = hForm  IF Object.Type(hForm) = "FIconEditor" THEN    FIconTool.Raise  ELSE    FIconTool.Hide  ENDIF  FProperty.RefreshAll  FFormStack.RefreshAll'   IF Object.Type(hForm) = "FTextEditor" THEN'     FFind.SetTextOnly(TRUE)'   ELSE IF Object.Type(hForm) = "FEditor" THEN'     FFind.SetTextOnly(FALSE)'   ENDIFENDPUBLIC SUB Deactivate(hForm AS Object)  IF ActiveForm <> hForm THEN RETURN  SELECT CASE Object.Type(hForm)    CASE "FIconEditor"      FIconTool.Hide    CASE "FForm"      FProperty.HideAll      FFormStack.HideAll  END SELECTENDPUBLIC FUNCTION NewProject(sDir AS String, OPTIONAL aOption AS String[]) AS Boolean  DIM sName AS String  DIM iInd AS Integer  DIM sPath AS String  DIM sOption AS String  sName = File.Name(sDir)  MKDIR sDir  sPath = sDir &/ PROJECT_FILE  IF aOption THEN sOption = aOption.Join("\n")  File.Save(sPath, PROJECT_MAGIC & "\nProject=" & sName & "\n" & sOption)  'BrowseForm.AddProject(sDir)  RETURNCATCH  Message.Warning(("Cannot create project!") & "\n\n" & Error.Text)  RETURN TRUEENDPUBLIC FUNCTION CopyProject(sSrc AS String, sDst AS String) AS Boolean  DIM sName AS String  DIM iInd AS Integer  DIM sPath AS String  DIM sOut AS String  sOut = Temp$  SHELL "cp -r " & Quote(sSrc) & " " & Quote(sDst) & " 2> " & Quote(sOut) WAIT  sOut = File.Load(sOut)  IF sOut THEN Error.Raise(sOut)  RETURNCATCH  Message.Warning(("Cannot copy project!") & "\n\n" & Error.Text)  RETURN TRUEENDPUBLIC FUNCTION MakeExecutable(OPTIONAL bDoNotIncVersion AS Boolean, OPTIONAL bSilent AS Boolean) AS Boolean  DIM sExec AS String  IF NOT bSilent THEN    Dialog.Title = ("Make executable")    Dialog.Path = ExecPath    Dialog.Filter = [ ("All files") & " (*)" ]    IF NOT Exist(Dialog.Path) THEN      Dialog.Path = Project.Dir &/ Project.Name    ENDIF    IF Dialog.SaveFile() THEN RETURN TRUE    ExecPath = Dialog.Path  ENDIF  IF Compile(TRUE, NOT KeepDebugInfo) THEN RETURN TRUE  IF CheckStartupClass() THEN RETURN TRUE  SetMessage(("Making executable..."))  sExec = System.Path &/ "bin/gba " & Quote(Project.Dir) & " > " & OUTPUT_FILE & " 2>&1"  'PRINT sExec  SHELL sExec WAIT  IF ExecPath <> (Project.Dir &/ Project.Name) THEN    TRY KILL ExecPath    TRY RENAME Project.Dir &/ Project.Name AS ExecPath  ENDIF  'Stat(OUTPUT_FILE)  AddMessage(("Nothing to do."))  Compile(TRUE, FALSE)  IF NOT bDoNotIncVersion THEN INC ReleaseVersion  WriteProjectENDPUBLIC FUNCTION GetClasses(OPTIONAL bFullPath AS Boolean) AS String[]  DIM sFile AS String  DIM aClass AS NEW String[]  DIM bStop AS Boolean  FOR EACH sFile IN Dir(Project.Dir, "*.module")    IF bFullPath THEN      aClass.Add(Project.Dir &/ sFile)    ELSE      aClass.Add(File.BaseName(sFile))    ENDIF  NEXT  FOR EACH sFile IN Dir(Project.Dir, "*.class")    IF bFullPath THEN      aClass.Add(Project.Dir &/ sFile)    ELSE      aClass.Add(File.BaseName(sFile))    ENDIF  NEXT  aClass.Sort  RETURN aClassENDPUBLIC SUB ReadProject()  DIM hFic AS File  DIM sLig AS String  DIM iPos AS Integer  DIM sKey AS String  DIM sVal AS String  DIM cVer AS String[]  DIM sElt AS String  DIM iElt AS Integer  DIM aMissing AS NEW String[]  DIM sMsg AS String  Libraries = NEW String[]  Title = ""  TabSize = Settings["/DefaultTabSize", 2]  Arguments = ""  MajorVersion = 0  MinorVersion = 0  ReleaseVersion = 1  SnapToGrid = TRUE  ShowGrid = TRUE  Snap = Settings["/DefaultGridResolution", 8]  ControlPublic = FALSE  KeepDebugInfo = FALSE  Localize = FALSE  Description = ""  Icon = ""  Systems = NEW String[]  Menus = NEW Collection  Groups = NEW Collection  Prefix = FALSE  ExecPath = Project.Dir &/ Project.Name  OPEN Path FOR READ AS hFic  WHILE NOT Eof(hFic)    LINE INPUT #hFic, sLig    sLig = Trim(sLig)    IF Len(sLig) = 0 THEN CONTINUE    IF Left$(sLig, 1) = "#" THEN CONTINUE    iPos = Instr(sLig, "=")    IF iPos = 0 THEN CONTINUE    sKey = Lower$(Trim(Left$(sLig, iPos - 1)))    sVal = Trim(Mid$(sLig, iPos + 1))    SELECT sKey      CASE "title"        Title = sVal      CASE "startup"        DefineStartup(sVal, TRUE)      CASE "library"        IF CComponent.All.Exist(sVal) THEN          Libraries.Add(sVal)        ELSE          aMissing.Add(sVal)        ENDIF      CASE "tabsize"        TabSize = Val(sVal)      CASE "argument"        IF Arguments THEN Arguments = Arguments & "\n"        Arguments = Arguments & sVal      CASE "version"        cVer = Split(sVal, ".")        TRY MajorVersion = Val(cVer[0])        TRY MinorVersion = Val(cVer[1])        TRY ReleaseVersion = Val(cVer[2])      CASE "snaptogrid"        SnapToGrid = Val(sVal) <> 0      CASE "showgrid"        ShowGrid = Val(sVal) <> 0      CASE "snapx", "snap"        Snap = Val(sVal)      CASE "localize"        Localize = Val(sVal) <> 0'      CASE "language"'        Language = sVal      CASE "keepdebuginfo"        KeepDebugInfo = Val(sVal) <> 0      CASE "controlpublic"        ControlPublic = Val(sVal) <> 0      CASE "description"        Description = Replace(sVal, "\\n", "\n")      CASE "icon"        Icon = sVal      CASE "systems"        Systems = Split(sVal, ",")      CASE "menus"        iElt = 0        FOR EACH sElt IN Split(sVal, ",")          IF iElt >= Systems.Count THEN BREAK          Menus[Systems[iElt]] = sElt          INC iElt        NEXT      CASE "groups"        iElt = 0        FOR EACH sElt IN Split(sVal, ",")          IF iElt >= Systems.Count THEN BREAK          Groups[Systems[iElt]] = sElt          INC iElt        NEXT      CASE "prefix"        Prefix = Val(sVal)      CASE "execpath"        ExecPath = sVal    END SELECT  WEND  CLOSE hFic  IF aMissing.Count THEN    sMsg = Subst(("Some components are missing: &1"), aMissing.Join(", "))    IF Message.Error(sMsg, ("Continue"), ("Cancel")) = 2 THEN      Error.Raise("")    ENDIF  ENDIF  Libraries.Sort  FMain.UpdateTranslate  RefreshLibrary  'TileGrid = NEW Picture  'TileGrid.Type = Picture.Bitmap  'TileGrid.Resize(SnapX, SnapY)  'Draw.Begin(TileGrid)  'Draw.FillColor = Color.  'Draw.EndENDPUBLIC SUB WriteProject()  DIM hFic AS File  DIM sLib AS String  DIM sSys AS String  DIM sElt AS String  DIM sPath AS String  DIM sArg AS String  IF Project.ReadOnly THEN RETURN  OPEN Path & ".tmp" FOR CREATE AS hFic  PRINT #hFic, PROJECT_MAGIC  PRINT #hFic, "Project="; Name  IF Title THEN PRINT #hFic,"Title="; Title  IF Description THEN PRINT #hFic, "Description="; Replace(Description, "\n", "\\n")  IF Icon THEN PRINT #hFic,"Icon="; Icon  IF Startup THEN PRINT #hFic, "Startup="; Startup  'IF StackSize THEN PRINT #hFic, "Stack="; CStr(StackSize)  PRINT #hFic,"TabSize="; CStr(TabSize)  FOR EACH sArg IN Split(Arguments, "\n")    PRINT #hFic, "Argument="; sArg  NEXT  PRINT #hFic,"Version=";CStr(MajorVersion) & "." & CStr(MinorVersion) & "." & CStr(ReleaseVersion)  FOR EACH sLib IN Libraries    PRINT #hFic, "Library="; sLib  NEXT  PRINT #hFic, "SnapToGrid="; If(SnapToGrid, "1", "0")  PRINT #hFic, "ShowGrid="; If(ShowGrid, "1", "0")  PRINT #hFic, "Snap="; CStr(Snap)  PRINT #hFic, "Localize="; If(Localize, "1", "0")  'PRINT #hFic, "Language="; Language  PRINT #hFic, "KeepDebugInfo="; If(KeepDebugInfo, "1", "0")  PRINT #hFic, "ControlPublic="; If(ControlPublic, "1", "0")  IF ExecPath <> (Project.Dir &/ Project.Name) THEN    PRINT #hFic, "ExecPath="; ExecPath  ENDIF  IF Systems.Count THEN    PRINT #hFic,"Systems="; Systems.Join(",")    sElt = ""    FOR EACH sSys IN Systems      sElt = sElt & "," & Menus[sSys]    NEXT    PRINT #hFic, "Menus="; Mid$(sElt, 2)    sElt = ""    FOR EACH sSys IN Systems      sElt = sElt & "," & Groups[sSys]    NEXT    PRINT #hFic, "Groups="; Mid$(sElt, 2)  ENDIF  PRINT #hFic, "Prefix="; If(Prefix, "1", "0")  CLOSE #hFic  KILL Path  RENAME Path & ".tmp" AS Path  sPath = Project.Dir &/ ".lang/#project.pot"  TRY KILL sPath  IF Localize THEN    TRY MKDIR File.Dir(sPath)    OPEN sPath FOR CREATE AS #hFic    PRINT #hFic, "# "; Path    PRINT #hFic, File.Load("pot-header.txt")    IF Title THEN      PRINT #hFic, "#: .project:1"      PRINT #hFic, "msgid \""; Escape(Title); "\""      PRINT #hFic, "msgstr \"\"\n"    ENDIF    IF Description THEN      PRINT #hFic, "#: .project:2"      PRINT #hFic, "msgid \""; Escape(Description); "\""      PRINT #hFic, "msgstr \"\"\n"    ENDIF    CLOSE #hFic  ENDIF  RefreshLibrary  FMain.UpdateTranslateCATCH  Message.Error(("Cannot write project file.") & "\n\n" & Error.Text)END' PUBLIC FUNCTION GetSorted() AS String[]''   DIM cList AS NEW String[]'   DIM hFile AS Object'   DIM bStop AS Boolean''   ProjectTree[KEY_CLASS].MoveChild'   WHILE ProjectTree.Available'     cList.Add(ProjectTree.Item.Key)'     ProjectTree.MoveNext'   WEND''   ProjectTree[KEY_MODULE].MoveChild'   WHILE ProjectTree.Available'     cList.Add(ProjectTree.Item.Key)'     ProjectTree.MoveNext'   WEND''   'cList.Sort''   RETURN cList'' ENDPUBLIC FUNCTION GetNextEditor(sKey AS String) AS String  DIM sFirst AS String  DIM sFile AS String  DIM bNext AS Boolean  FOR EACH sFile IN GetClasses(TRUE)    IF bNext THEN RETURN sFile    IF NOT sFirst THEN      sFirst = sFile    ENDIF    IF sFile = sKey THEN      bNext = TRUE    ENDIF  NEXT  IF bNext THEN RETURN sFirstENDPUBLIC FUNCTION GetPreviousEditor(sKey AS String) AS String  DIM sLast AS String  DIM sFile AS String  FOR EACH sFile IN GetClasses(TRUE)    IF sFile = sKey THEN      IF sLast THEN        RETURN sLast      ENDIF    ENDIF    sLast = sFile  NEXT  RETURN sLastENDPRIVATE $bBlock AS BooleanPUBLIC SUB Shortcut(Code AS Integer, Ascii AS String, State AS Integer)  IF $bBlock THEN RETURN  $bBlock = TRUE  SELECT CASE Code    CASE Key.F2      FExplorer.Show    CASE Key.F4      FProperty.Show    CASE Key.F5      ME.Run    CASE Key.F6      FToolBox.Show    CASE Key.F7      Compile(State AND Mouse.Alt)    CASE Key.F8      ME.Step  END SELECT  $bBlock = FALSEENDPUBLIC SUB SetMessage(sMsg AS String)  ProjectMessage.Text = sMsg  WAITENDPUBLIC SUB DeleteFile(sPath AS String)  DIM sExt AS String  DIM hForm AS Object  IF NOT Exist(sPath) THEN RETURN  hForm = Files[sPath]

⌨️ 快捷键说明

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