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

📄 feditor.class

📁 Gambas is a graphical development environment based on a Basic interpreter, like Visual Basic. It us
💻 CLASS
📖 第 1 页 / 共 3 页
字号:
PUBLIC Name AS StringPUBLIC Path AS StringPUBLIC Editor AS GambasEditorPUBLIC Scan AS CollectionPRIVATE $bModify AS Boolean'PRIVATE $cLine AS NEW CollectionPRIVATE $bToolbar AS BooleanPRIVATE $iLastLine AS IntegerPRIVATE $hSymbol AS CSymbolInfoPRIVATE $bCheckSignature AS BooleanPRIVATE $iPosSignature AS IntegerPRIVATE $bCompletion AS BooleanPRIVATE $bCleanOnSave AS BooleanSTATIC PRIVATE $hVirtualSymbol AS NEW CSymbolInfoSTATIC PRIVATE $bPublic AS BooleanSTATIC PRIVATE $bStatic AS BooleanSTATIC PRIVATE $sName AS StringSTATIC PRIVATE $cType AS NEW CollectionPRIVATE $iStartLine AS IntegerPRIVATE $iEndLine AS IntegerPUBLIC CONST NBR_COLOR AS Integer = 15PRIVATE CONST TYPE_SYMBOL AS Integer = 0PRIVATE CONST TYPE_FUNCTION AS Integer = 1PRIVATE CONST TYPE_ARRAY AS Integer = 2'PRIVATE $iSymbolType AS IntegerPRIVATE $bLastStatic AS BooleanPUBLIC frmCompletion AS FCompletionPUBLIC frmSignature AS FSignatureSTATIC PUBLIC SUB _init()  $cType["Boolean"] = "b"  $cType["Byte"] = "c"  $cType["Short"] = "h"  $cType["Integer"] = "i"  $cType["Float"] = "f"  $cType["Date"] = "d"  $cType["String"] = "s"  $cType["Variant"] = "v"  $cType["Object"] = "o"ENDPUBLIC SUB _new(sPath AS String)  Path = sPath  Name = File.BaseName(Path)  frmCompletion = NEW FCompletion(ME)  frmCompletion.Hide  frmSignature = NEW FSignature(ME)  frmSignature.Hide  ReadConfig  Refresh  Editor = edtEditor  ME.Icon = Picture["img/16/" &/ File.ext(sPath) & ".png"]  'sPos = Project.Config.ReadString("/Window" &/ Name &/ "X", "")  'IF sPos THEN  '  cPos.FromString(sPos, ",")  '  ME.Move(cPos[0], cPos[1], cPos[2], cPos[3])  'ELSE  Project.InitMove(ME)  'ENDIF  SetReadOnly  'btnSave.Enabled = NOT Project.ReadOnly  'mnuSave.Enabled = NOT Project.ReadOnly  Reload  edtEditor.SetFocus  DrawTitle  UpdateMenuENDPUBLIC SUB Refresh()  edtEditor.TabLength = Project.TabSizeENDPUBLIC SUB ReadConfig()  DIM iInd AS Integer  DIM iColor AS Integer  DIM hTheme AS Integer[]  $bToolBar = Settings["/Editor/Toolbar", TRUE]  Form_Resize  edtEditor.Frozen = TRUE  edtEditor.Font = Font[Settings["/Editor/Font", Project.DEFAULT_FONT]]  hTheme = FOption.DefaultTheme  FOR iInd = 0 TO NBR_COLOR - 1    iColor = Val(Settings["/Editor/Color[" & CStr(iInd) & "]", "-1"])    IF iColor = -1 THEN iColor = hTheme[iInd]    edtEditor.Colors[iInd] = iColor  NEXT  edtEditor.ShowProc = Settings["/Editor/ShowProc", TRUE]  edtEditor.ShowCurrent = Settings["/Editor/ShowCurrent", TRUE]  edtEditor.UseRelief = Settings["/Editor/UseRelief", TRUE]  edtEditor.ShowChange = Settings["/Editor/ShowChange", TRUE]  'edtEditor.Refresh  edtEditor.Frozen = FALSE  $bCompletion = Settings["/ShowCompletion", TRUE]  $bCleanOnSave = Settings["/Editor/CleanOnSave", FALSE]ENDPUBLIC FUNCTION Save(OPTIONAL bReset AS Boolean) AS Boolean  DIM iLig AS Integer  DIM iProc AS Integer  DIM iFull AS Integer  DIM sLig AS String  DIM iPosProc AS Integer  DIM sData AS String  DIM iLine AS Integer  DIM iCol AS Integer  DIM bChange AS Boolean  DIM iCount AS Integer  DIM iVoidLine AS Integer  IF Project.ReadOnly THEN RETURN  IF NOT $bModify THEN    IF bReset THEN edtEditor.Reset    RETURN  ENDIF  Save.Begin(Path)  IF $bCleanOnSave THEN    iProc = -1    iLine = edtEditor.Line    iCol = edtEditor.Column    iCount = edtEditor.Lines.Count    FOR iLig = 0 TO iCount      IF iLig < iCount THEN        sLig = RTrim(edtEditor.Lines[iLig])      ELSE        sLig = "SUB gambas()"      ENDIF      IF NOT LTrim(sLig) THEN        INC iVoidLine        CONTINUE      ENDIF      IF IsProc(sLig) THEN        IF iProc >= 0 THEN'           IF iFull < 2 THEN'             bChange = TRUE'             sData = Left(sData, iPosProc)'             IF iLine > iProc THEN'               IF iLine < iLig THEN'                 iLine = iProc - 1'               ELSE'                 iLine = iLine - (iLig - iProc + 1)'               ENDIF'             ENDIF'           ENDIF        ENDIF        iProc = iLig        iFull = 0        iPosProc = Len(sData)      ELSE        INC iFull      ENDIF      IF iLig < iCount THEN        sData = sData & String(iVoidLine, "\n") & sLig & "\n"        iVoidLine = 0      ENDIF    NEXT    'IF Len(sData) <> Len(edtEditor.Text) THEN    File.Save(Path, sData)    IF bChange THEN      edtEditor.Frozen = TRUE      edtEditor.Text = sData      bReset = TRUE      TRY edtEditor.Line = iLine      IF NOT ERROR THEN        TRY edtEditor.Column = iCol      ENDIF      edtEditor.Frozen = FALSE    ENDIF  ELSE    File.Save(Path, edtEditor.Text)  ENDIF  $bModify = FALSE  DrawTitle  IF bReset THEN edtEditor.Reset  Save.End()CATCH  RETURN Save.Error()ENDPRIVATE SUB DrawTitle()  DIM sTitle AS String  sTitle = File.Name(Path) & " " & CStr(edtEditor.Line + 1) & ":" & CStr(edtEditor.Column + 1)  IF $bModify THEN sTitle = sTitle & " [" & ("modified") & "]"  ME.Title = sTitle '& " - " & Project.NameENDPUBLIC SUB Modify(OPTIONAL bReset AS Boolean)  IF Project.ReadOnly THEN RETURN  IF $bModify <> bReset THEN RETURN  $bModify = NOT bReset  DrawTitleENDPUBLIC FUNCTION IsModified() AS Boolean  RETURN $bModifyENDPUBLIC SUB Form_Resize()  HideCompletion  HideSignature  panToolbar.Visible = $bToolbar  panToolBar.W = ME.ClientW  IF $bToolbar THEN    btnForm.Visible = Project.ExistForm(File.BaseName(Name))    'panToolbar.Resize(ME.ClientW, btnGoto.Y + btnGoto.H)    'panToolbar.W = ME.ClientW    edtEditor.Move(0, panToolBar.H, ME.ClientW, ME.ClientH - panToolbar.H)  ELSE    edtEditor.Move(0, 0, ME.ClientW, ME.ClientH)  ENDIF  'lblCursor.Move(0, ME.ClientH - lblCursor.Height)ENDPUBLIC SUB edtEditor_Change()  ModifyENDPUBLIC SUB edtEditor_Cursor()  IF edtEditor.Line <> $iLastLine THEN    $iLastLine = edtEditor.Line    HideCompletion    HideSignature    IF IsModified() THEN Scan = NULL  ELSE IF $bCheckSignature OR frmSignature.Visible THEN    $bCheckSignature = FALSE    CheckSignature  ENDIF  DrawTitle  'TRY PRINT Editor.Analyze(Editor.Lines[Editor.Line]).Join(",")ENDPUBLIC SUB Form_Activate()  Project.Activate(ME)  'edtEditor.SetFocusENDPUBLIC SUB Form_Deactivate()  HideCompletion  HideSignatureENDPUBLIC SUB Goto(iLine AS Integer, OPTIONAL iColumn AS Integer = -1)  DEC iLine  IF iColumn < 0 THEN iColumn = edtEditor.Column  edtEditor.Goto(iLine, iColumn)  SavePositionENDPUBLIC SUB GotoCenter(iLine AS Integer, OPTIONAL iColumn AS Integer = -1)  ME.Goto(iLine, iColumn)  edtEditor.EnsureVisibleENDPUBLIC SUB edtEditor_Menu()  DIM hMenu AS Menu  DIM iInd AS Integer  mnuForm.Visible = Project.ExistForm(File.BaseName(Name))  CreateMenu  mnuEditor.PopupENDPRIVATE SUB CreateMenu()  DIM iInd AS Integer  DIM sLine AS String  DIM sName AS String  DIM hMenu AS Menu  DIM cFunc AS NEW String[]  DIM sParent AS String  DIM sNewParent AS String  DIM hParent AS Menu  DIM sFullName AS String  DIM sDesc AS String  DIM iPos AS Integer  DIM hSymbol AS CSymbolInfo  DIM iLine AS Integer  DIM cSymbol AS Collection  'DIM hPoint AS Picture  'IF $hMenuGo THEN $hMenuGo.Delete  '$hMenuGo = NEW Menu(mnuEditor)  '$hMenuGo.Caption = "&Go to"  INC Application.Busy  mnuGoto.Children.Clear  cSymbol = CComponent.GetClassSymbols(Name)  FOR EACH hSymbol IN cSymbol    IF LCase(hSymbol.Kind) <> "m" THEN CONTINUE    IF hSymbol.LineNumber = 0 THEN CONTINUE    cFunc.Add(hSymbol.Name)  NEXT  cFunc.Sort(gb.Text)  hParent = mnuGoto  'hPoint = Picture["img/16/point.png"]  FOR EACH sName IN cFunc    hSymbol = cSymbol[sName]    sFullName = sName    iPos = Instr(sName, "_")    IF iPos THEN      sNewParent = Left$(sName, iPos - 1)      sName = Mid$(sName, iPos + 1)      IF Len(sNewParent) = 0 THEN        sNewParent = "(Special)"        sName = "_" & sName      ENDIF    ELSE      sNewParent = ""    ENDIF    IF UCase(sNewParent) <> UCase(sParent) THEN      IF sNewParent THEN        hParent = NEW Menu(mnuGoto)        hParent.Text = sNewParent      ELSE        hParent = mnuGoto      ENDIF      sParent = sNewParent    ENDIF    hMenu = NEW Menu(hParent) AS "mnuGoto"    hMenu.Text = sName    hMenu.Tag = hSymbol.LineNumber - 1    'IF NOT hSymbol.NotPublic THEN hMenu.Picture = hPoint  NEXT  mnuGoto.Visible = cFunc.count > 0  mnuSepGoto.Visible = cFunc.count > 0  UpdateMenu  DEC Application.BusyENDPRIVATE SUB UpdateMenu()  DIM bVisible AS Boolean  mnuWatch.Visible = Project.Running AND Len(Trim(edtEditor.Selection.Text)) > 0  btnWatch.Visible = Project.Running  'mnuUntil.Visible = mnuWatch.Visible  bVisible = NOT edtEditor.ReadOnly  mnuUndo.Visible = bVisible  mnuRedo.Visible = bVisible  mnuSepUndo.Visible = bVisible  mnuCut.Visible = bVisible  mnuPaste.Visible = bVisible  mnuComment.Visible = bVisible  mnuUncomment.Visible = bVisible  mnuSepComment.Visible = bVisible  mnuReload.Visible = bVisible  btnUndo.Visible = bVisible  btnRedo.Visible = bVisible  btnCut.Visible = bVisible  btnPaste.Visible = bVisible  btnComment.Visible = bVisible  btnUncomment.Visible = bVisible  btnIndent.Visible = bVisible  btnUnIndent.Visible = bVisible  btnReload.Visible = bVisible  btnSave.Visible = bVisibleENDPUBLIC SUB mnuGoto_Click()  DIM iLine AS Integer  iLine = LAST.Tag  edtEditor.Column = 0  edtEditor.Line = iLine - 10  edtEditor.Line = iLine + 10  edtEditor.Line = iLineENDPUBLIC SUB GotoEvent(sName AS String, sEvent AS String, OPTIONAL sSign AS String)  DIM iLine AS Integer  DIM iPos AS Integer  DIM iLast AS Integer  DIM sProc AS String  iLast = -1  sProc = UCase(sName & "_" & sEvent)  FOR iLine = 0 TO edtEditor.Lines.Count - 1    IF IsProc(edtEditor.Lines[iLine]) THEN      IF UCase($sName) = sProc THEN        ME.GotoCenter(iLine + 2)        RETURN      ENDIF      'IF iLast < 0 THEN      '  iPos = Instr($sName, "_")      '  IF iPos THEN      '    IF UCase(Left$($sName, iPos - 1)) = UCase(sName) THEN      '      iLast = iLine      '    ENDIF      '  ENDIF      'ENDIF    ENDIF  NEXT  IF iLast >= 0 THEN    ME.GotoCenter(iLast + 2)    RETURN  ENDIF  edtEditor.Line = iLine - 1  edtEditor.Column = Len(edtEditor.Lines[edtEditor.Line])  IF edtEditor.Column THEN edtEditor.Insert("\n")  edtEditor.Insert("\nPUBLIC SUB " & sName & "_" & sEvent & "(" & sSign & ")\n\n  \n\nEND\n")  ME.GotoCenter(iLine + 3, 3)END'PUBLIC SUB Form_KeyPress(Ascii AS String, Code AS Integer, State AS Integer)''  'IF State AND Mouse.Control THEN'  ''  '  IF Code = Asc("S") THEN Save'  ''  'ENDIF''  IF Asc(Ascii) = 13 THEN''    PRINT "Return !"'    PRINT''  ENDIF''ENDPUBLIC SUB mnuSave_Click()  SaveENDPUBLIC SUB edtEditor_KeyPress()  DIM sLine AS String  DIM iLine AS Integer  DIM iInd AS Integer  DIM iPos AS Integer  DIM bStop AS Boolean  IF NOT edtEditor.ReadOnly THEN    iLine = edtEditor.Line    IF frmCompletion.Visible THEN      bStop = frmCompletion.ManageKey()    ENDIF    IF frmSignature.Visible THEN      bStop = bStop OR frmSignature.ManageKey()      'IF Key.Text THEN CheckSignature(Key.Text)    ENDIF    IF bStop THEN      STOP EVENT      RETURN    ENDIF  ENDIF  IF Key.Code = Key.F8 THEN    IF Key.Shift THEN      Project.Forward    ELSE IF Key.Alt THEN      Project.ReturnFrom    ELSE      Project.Step    ENDIF    STOP EVENT    RETURN  ELSE IF Key.Code = Key.F2 THEN    IF Key.Shift THEN      LastPosition    ELSE IF Key.Normal THEN      FindDefinition    ENDIF    STOP EVENT  ELSE IF Key.Code = Key.Pause THEN    IF Key.Alt THEN

⌨️ 快捷键说明

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