diff --git a/src/YabInterface.cpp b/src/YabInterface.cpp index d5dc0cb..400ec01 100644 --- a/src/YabInterface.cpp +++ b/src/YabInterface.cpp @@ -288,7 +288,7 @@ void YabInterface::MessageReceived(BMessage *message) bool YabInterface::QuitRequested() { exiting = true; - return true; + return false; } void YabInterface::RefsReceived(BMessage *message){ diff --git a/src/yab-IDE.yab b/src/yab-IDE.yab deleted file mode 100755 index e423046..0000000 --- a/src/yab-IDE.yab +++ /dev/null @@ -1,3918 +0,0 @@ -#!yab - -doc Author: Jan Bungeroth -doc Thanks to: Genki, Lelldorin, lorglas, Stargater, DasJott -doc (c) 2006-2015 in terms of the Artistic License - -doc -doc The yab-IDE provides you with an integrated development suite for yab -doc Enjoy. -path() -versionnumber$="2.2.4" - -settingsRCSOff = true -globalConfigDir$ = trim$(system$("finddir B_USER_SETTINGS_DIRECTORY"))+"/yab-ide/" - -if(LoadSettings() = 1) then - - MAXFILES = 20 - DEBUG = true - - - settingsYabDir$ = path$ //"/boot/apps/yab-1.7/" - globalProjectDir$ = trim$(system$("finddir B_USER_DIRECTORY"))+"/yab_work/Programs/" - yabDir$ = yabpath$() - ideDir$ = path$ //settingsYabDir$ + "yab-IDE/" - - buildDir$ = trim$(system$("finddir B_USER_DIRECTORY"))+"/yab_work/BuildFactory/" - globalHelpDir$ = settingsYabDir$ + "Documentation/" - - settingsLangUse = true - settingsLangPath$ = "x-vnd.yab-IDE" - - settingsAutoIndent = true - settingsAutoCompletion = true - settingsACNumChar = 2 - settingsX = 50 - settingsY = 50 - settingsWidth = peek("desktopwidth")-100 - if(settingsWidth<600) settingsWidth = 600 - settingsHeight = peek("desktopheight")-100 - settingsFullScreen = false - settingsFullEditor = false - settingsVSplitDivider = 180 - settingsV2SplitDivider = 41 - settingsHSplitDivider = settingsHeight-240 - settingsCalcPatternX = 200 - settingsCalcPatternY = 150 - settingsColorSelectX = 100 - settingsColorSelectY = 100 - settingsColorSelectR = 255 - settingsColorSelectG = 255 - settingsColorSelectB = 255 - settingsAskForSaving = true - settingsFindCS = false - settingsOldSearch$ = "" - settingsFindAlert = true - settingsReformatAlert = true - settingsReformatUndoAlert = true - settingsTabSpaces = 4 - settingsFontFamily$ = "DejaVu Sans Mono" - settingsFontStyle$ = "Book" - settingsFontSize = 12 - globalRealFontSize = 15 - settingsYabParam$ = "" - settingsProgParam$ = "" - - dim globalAllNames$(MAXFILES) - dim globalTextFinder(MAXFILES) - - for i=1 to MAXFILES - globalAllNames$(i) = "" - globalTextFinder(i) = 0 - next i - -endif - - -restartSettingsLangUse = settingsLangUse -textcolor_r = 0 -textcolor_g = 0 -textcolor_b = 0 - -// globalNoRCS = system("test -e /boot/beos/bin/ci") or system("test -e /boot/beos/bin/co") or system("test -e /boot/beos/bin/rlog") or settingsRCSOff -globalNoRCS = settingsRCSOff -globalCurrentText = 0 -globalHSplitDivider = settingsHSplitDivider -globalReformatUndo = false -globalSelectErrorLines = true -globalNewNumber = 0 -globalNumOpenFiles = 0 -globalWasChanged = false -globalRealOS$ = upper$(system$("uname -o")) -globalRealOS$ = left$(globalRealOS$, 4) - -oldSpinner = 1 - -if(settingsLangUse) then - localize settingsLangPath$ -endif - - -OpenMainWindow() -ActivateMenus(false) -UpdateStatusbar() - -LoadOpenFiles() - -if(settingsFullScreen) then - menu set "View", "Full screen", "mark", "MainView" - window set "MainView", "moveto", 0,0 - window set "MainView", "resizeto", peek("desktopwidth")-1, peek("desktopheight")-1 - window set "MainView", "MinimumTo", peek("desktopwidth")-1, peek("desktopheight")-1 - window set "MainView", "MaximumTo", peek("desktopwidth")-1, peek("desktopheight")-1 -endif -if(settingsFullEditor) then - oldSplitX = splitview get "VSplit", "Divider" -// oldSplitY = splitview get "HSplit", "Divider" - tmp = window get "MainView", "Height" - splitview set "HSplit", "Divider", tmp-51 - splitview set "VSplit", "Divider", 0 - menu set "View", "Maximize editor", "mark", "MainView" -endif - -dim msg$(1) -dim pattern(8,8) - -inloop = true -while(inloop) - sleep 0.01 - n = split(message$, msg$(), "|") - for i = 1 to n - if(DEBUG and msg$(i)<>"") print msg$(i) - switch(msg$(i)) - case "ToolbarNew" - case MyTranslate$("MainView:File:New...") - foundEmpty = 0 - for j=1 to MAXFILES - if(globalAllNames$(j) = "") then - foundEmpty = j - break - endif - next j - if(not foundEmpty) then - alert MyTranslate$("Sorry, you can not open more than ")+str$(MAXFILES)+MyTranslate$(" files at once!\n\nPlease close one or more other files first."), "Ok", "Warning" - else - NewDocument(foundEmpty) - if(globalNumOpenFiles = 1) then - ActivateMenus(true) - splitview set "V2Split", "Divider", settingsV2SplitDivider - endif - endif - break - case "ToolbarOpen" - case MyTranslate$("MainView:File:Open...") - foundEmpty = 0 - for j=1 to MAXFILES - if(globalAllNames$(j) = "") then - foundEmpty = j - break - endif - next j - if(not foundEmpty) then - alert MyTranslate$("Sorry, you can not open more than ")+str$(MAXFILES)+MyTranslate$(" files at once!\n\nPlease close one or more other files first."), "Ok", "Warning" - else - tmp$ = filepanel "Load-File", "Open", globalProjectDir$ - if(tmp$<>"") then - foundProject = false - for j = 1 to MAXFILES - if(globalAllNames$(j) = tmp$) then - alert "File is already open.", "Ok", "info" - ActivateText(j) - foundProject = true - break - endif - next j - if(foundProject) break - - handle = open(tmp$, "r") - if(handle) then - WaitWindow(tmp$) - text$ = "" - while(not eof(handle)) - t$ = GetLine$(handle)+"\n" - if(len(t$)*8>4000) textedit set "Text"+str$(foundEmpty), "textwidth", len(t$)*8+8 - text$ = text$ + t$ - wend - close(handle) - globalCurrentText = foundEmpty - textedit add "Text"+str$(globalCurrentText), text$ - textedit set "Text"+str$(globalCurrentText), "changed", false - textedit set "Text"+str$(globalCurrentText), "gotoline", ReadLineFromAttr(tmp$) - stackview set "Stack", globalCurrentText - stackview set "Lines", globalCurrentText - globalAllNames$(globalCurrentText) = tmp$ - t = columnbox count "FileBox" - columnbox add "FileBox", 1, t+1,20, "__Icon__="+ideDir$+"img/gespeichert.png" - columnbox add "FileBox", 2, t+1,20, GetFileName$(tmp$) // "Filename", t, GetFileName$(tmp$) - columnbox select "FileBox", t+1 - globalTextFinder(globalCurrentText) = t+1 - option set "Text"+str$(globalCurrentText), "focus", true - oldScroll = -1 - globalNumOpenFiles = globalNumOpenFiles + 1 - if(globalNumOpenFiles = 1) then - ActivateMenus(true) - splitview set "V2Split", "Divider", settingsV2SplitDivider - endif - globalProjectDir$ = GetDirectory$(tmp$) - window close "WaitWindow" - else - alert MyTranslate$("Error while loading file:\n\n")+tmp$, "Ok", "Stop" - endif - endif - endif - break - case "ToolbarClose" - case MyTranslate$("MainView:File:Close") - if(textedit get "Text"+str$(globalCurrentText), "hasChanged") then - tmpSave = alert MyTranslate$("File \"")+GetFileName$(globalAllNames$(globalCurrentText))+MyTranslate$("\" not saved!\n\nSave the file now?"), "Cancel", "Close", "Save", "warning" - if(tmpSave = 1) break - if(tmpSave = 3) then - tmpSave = SaveCurrentFile() - if(not tmpSave) break - endif - endif - - textedit clear "Text"+str$(globalCurrentText) - globalAllNames$(globalCurrentText) = "" - - columnbox remove "FileBox", globalTextFinder(globalCurrentText) - closeFinished = 0 - newCurrent = 0 - for tmpClose = 1 to MAXFILES - if(globalTextFinder(tmpClose)>globalTextFinder(globalCurrentText)) then - if(globalTextFinder(tmpClose) = globalTextFinder(globalCurrentText) + 1) then - closeFinished = globalTextFinder(tmpClose) - 1 - newCurrent = tmpClose - endif - globalTextFinder(tmpClose) = globalTextFinder(tmpClose) - 1 - endif - next tmpClose - - if(closeFinished=0) then - closeFinished = globalTextFinder(globalCurrentText) - 1 - if(closeFinished = 0) then - newCurrent = 0 - else - for j = 1 to MAXFILES - if(globalTextFinder(j) = globalTextFinder(globalCurrentText)-1) then - newCurrent = j - break - endif - next j - endif - endif - - globalTextFinder(globalCurrentText) = 0 - globalCurrentText = newCurrent - - if(closeFinished=0) then - stackview set "Stack", MAXFILES+2 - stackview set "Lines", MAXFILES+2 - settingsV2SplitDivider = splitview get "V2Split", "Divider" - splitview set "V2Split", "Divider", 0 - ActivateMenus(false) - else - ActivateText(globalCurrentText) - endif - globalNumOpenFiles = globalNumOpenFiles - 1 - break - case "ToolbarSave" - case MyTranslate$("MainView:File:Save") - tmpNull = SaveCurrentFile() - break - case MyTranslate$("MainView:File:Save as...") - tmpSaveAs$ = filepanel "Save-File", "Save", GetDirectory$(globalAllNames$(globalCurrentText)), GetFileName$(globalAllNames$(globalCurrentText)) - print tmpSaveAs$ - if(tmpSaveAs$<>"") then - handle = open(tmpSaveAs$, "w") - if(handle) then - print #handle textedit get$ "Text"+str$(globalCurrentText); - close(handle) - tmpCurrentLine = textedit get "Text"+str$(globalCurrentText), "currentline" - attribute set "Int", "linenumber", "tmpCurrentLine", tmpSaveAs$ - textedit set "Text"+str$(globalCurrentText), "changed", false - globalAllNames$(globalCurrentText) = tmpSaveAs$ - columnbox clear "FileBox" - for j=1 to MAXFILES - for k=1 to MAXFILES - if(globalTextFinder(j)=k) then - t = columnbox count "FileBox" - columnbox add "FileBox", 1, t+1,20, "__Icon__="+ideDir$+"img/gespeichert.png" - columnbox add "FileBox", 2, t+1,20, GetFileName$(globalAllNames$(j)) - break - endif - next k - next j - columnbox select "FileBox", globalTextFinder(globalCurrentText) - else - alert "File could not be saved!", "Ok", "warning" - endif - endif - break - case MyTranslate$("MainView:File:Save as template...") - SaveAsTemplate() - break - case MyTranslate$("MainView:File:Export as HTML...") - ExportAsHTML() - break - case MyTranslate$("MainView:File:Page setup...") - printer setup globalConfigDir$+"printersetup" - break - case MyTranslate$("MainView:File:Print...") - if(globalCurrentText>0) then - err = printer globalAllNames$(globalCurrentText), globalConfigDir$+"printersetup", "Text"+str$(globalCurrentText) - if(err = 4) then - printer setup "/tmp/printersetup" - err = printer globalAllNames$(globalCurrentText), "/tmp/printersetup", "Text"+str$(globalCurrentText) - system("rm -f /tmp/printersetup >/dev/null") - endif - if(err>1 and err<5) then - alert "Error while printing!", "Ok", "warning" - endif - endif - break - case "_QuitRequested" - // TODO make backups and save open files - inloop = false - if(not settingsFullScreen) then - settingsX = window get "MainView", "Position-X" - settingsY = window get "MainView", "Position-Y" - settingsWidth = window get "MainView", "Width" - settingsHeight = window get "MainView", "Height" - endif - if(not settingsFullEditor) then - settingsVSplitDivider = splitview get "VSplit", "Divider" - settingsV2SplitDivider = splitview get "V2Split", "Divider" - settingsHSplitDivider = splitview get "HSplit", "Divider" - endif - break - case "MainView:_QuitRequested" - case MyTranslate$("MainView:File:Quit") - tmpSelect = 1 - if(globalCurrentText>0) then - for j=1 to MAXFILES - if(textedit get "Text"+str$(j), "hasChanged") then - tmpSelect = alert "Some files are not saved!\n\nDo you really want to quit?", "Quit", "Cancel", "", "warning" - break - endif - next j - endif - if(tmpSelect = 1) then - inloop = false - if(not settingsFullScreen) then - settingsX = window get "MainView", "Position-X" - settingsY = window get "MainView", "Position-Y" - settingsWidth = window get "MainView", "Width" - settingsHeight = window get "MainView", "Height" - endif - if(not settingsFullEditor) then - settingsVSplitDivider = splitview get "VSplit", "Divider" - settingsV2SplitDivider = splitview get "V2Split", "Divider" - settingsHSplitDivider = splitview get "HSplit", "Divider" - endif - endif - break - case "ToolbarCut" - case MyTranslate$("MainView:Edit:Cut") - textedit set "Text"+str$(globalCurrentText), "Cut" - break - case "ToolbarCopy" - case MyTranslate$("MainView:Edit:Copy") - if(globalIsHelp) then - textedit set "Text"+str$(MAXFILES+1), "Copy" - else - textedit set "Text"+str$(globalCurrentText), "Copy" - endif - break - case "ToolbarPaste" - case MyTranslate$("MainView:Edit:Paste") - textedit set "Text"+str$(globalCurrentText), "Paste" - break - case "ToolbarUndo" - case MyTranslate$("MainView:Edit:Undo") - textedit set "Text"+str$(globalCurrentText), "Undo" - break - case MyTranslate$("MainView:Edit:Select all") - if(globalIsHelp) then - textedit set "Text"+str$(MAXFILES+1), "Select-All" - else - textedit set "Text"+str$(globalCurrentText), "Select-All" - endif - break - case MyTranslate$("MainView:Edit:Clear") - textedit set "Text"+str$(globalCurrentText), "Clear" - break - case MyTranslate$("MainView:Edit:Find") - option set "ToolbarText", "focus", true - break - case MyTranslate$("MainView:Edit:Find again") - if(settingsOldSearch$<>"") then - if(settingsFindCS) then - searchLineNum = textedit get "Text"+str$(globalCurrentText), "Case-Sensitive-Find", settingsOldSearch$ - else - searchLineNum = textedit get "Text"+str$(globalCurrentText), "Find", settingsOldSearch$ - endif - option set "Text"+str$(globalCurrentText), "Focus", true - endif - break - case MyTranslate$("MainView:Edit:Find and replace") - if(settingsFullEditor) then - splitview set "VSplit", "Divider", oldSplitX - splitview set "HSplit", "Divider", oldSplitY - menu set "View", "Maximize editor", "plain", "MainView" - settingsFullEditor = false - endif - tabview set "HTab", 3 - option set "FindTCFind", "Focus", true - break - case "ToolbarRun" - case MyTranslate$("MainView:Program:Run") - isNotSaved = textedit get "Text"+str$(globalCurrentText), "hasChanged" - askForSaving = 3 - if(settingsAskForSaving and isNotSaved) then - askForSaving = alert "Program is not saved.\n\nSave it now?", "Cancel", "Save Always", "Save Now", "info" - endif - - if(askForSaving>1) then - if(askForSaving = 2) settingsAskForSaving = true - if(isNotSaved) then - tmpSave = SaveCurrentFile() - if(not tmpSave) break - endif - RunProgram(globalAllNames$(globalCurrentText)) - endif - break - case "ToolbarRunTerm" - case MyTranslate$("MainView:Program:Run in Terminal") - isNotSaved = textedit get "Text"+str$(globalCurrentText), "hasChanged" - askForSaving = 3 - if(settingsAskForSaving and isNotSaved) then - askForSaving = alert "Program is not saved.\n\nSave it now?", "Cancel", "Save Always", "Save Now", "info" - endif - - if(askForSaving>1) then - if(askForSaving = 2) settingsAskForSaving = true - if(isNotSaved) then - tmpSave = SaveCurrentFile() - if(not tmpSave) break - endif - RunInTerminal(globalAllNames$(globalCurrentText)) - endif - break - case MyTranslate$("MainView:Program:Set run parameters...") - SetRunParameters() - break - case "ToolbarBuild" - case MyTranslate$("MainView:Program:Build Factory...") - isNotSaved = textedit get "Text"+str$(globalCurrentText), "hasChanged" - askForSaving = 3 - if(settingsAskForSaving and isNotSaved) then - askForSaving = alert "Program is not saved.\n\nSave it now?", "Cancel", "Save Always", "Save Now", "info" - endif - - if(askForSaving>1) then - if(askForSaving = 2) settingsAskForSaving = true - if(isNotSaved) then - tmpSave = SaveCurrentFile() - if(not tmpSave) break - endif - Building() - endif - break - case MyTranslate$("MainView:Program:Open project folder...") - system("open " + globalProjectDir$) - break - case "ToolbarPattern" - case MyTranslate$("MainView:Tools:Pattern editor...") - OpenCalcPattern(settingsCalcPatternX,settingsCalcPatternY) - break - case MyTranslate$("MainView:Tools:Color selection...") - OpenColorSelection(settingsColorSelectX,settingsColorSelectY, settingsColorSelectR, settingsColorSelectG, settingsColorSelectB) - break - case MyTranslate$("MainView:Tools:ASCII table...") - AsciiWindow() - break - case MyTranslate$("MainView:View:Next file") - findNext = false - tmpCounter = globalCurrentText - while(not findNext) - tmpCounter = tmpCounter + 1 - if(tmpCounter>MAXFILES) tmpCounter = 1 - if(tmpCounter = globalCurrentText) then - findNext = true - else - if(globalAllNames$(tmpCounter)<>"") then - globalCurrentText = tmpCounter - ActivateText(globalCurrentText) - findNext = true - endif - endif - wend - break - case MyTranslate$("MainView:View:Previous file") - findNext = false - tmpCounter = globalCurrentText - while(not findNext) - tmpCounter = tmpCounter - 1 - if(tmpCounter=0) tmpCounter = MAXFILES - if(tmpCounter = globalCurrentText) then - findNext = true - else - if(globalAllNames$(tmpCounter)<>"") then - globalCurrentText = tmpCounter - ActivateText(globalCurrentText) - findNext = true - endif - endif - wend - break - case MyTranslate$("MainView:View:Full screen") - if settingsFullScreen then - menu set "View", "Full screen", "plain", "MainView" - currentDivider = peek("desktopheight")-1 - splitview get "HSplit", "Divider" - window set "MainView", "moveto", settingsX,settingsY - window set "MainView", "MinimumTo", 600,300 - window set "MainView", "MaximumTo", 2000, 2000 - window set "MainView", "resizeto", settingsWidth, settingsHeight - splitview set "HSplit", "Divider", settingsHeight-currentDivider - settingsFullScreen = false - else - settingsX = window get "MainView", "Position-X" - settingsY = window get "MainView", "Position-Y" - settingsWidth = window get "MainView", "Width" - settingsHeight = window get "MainView", "Height" - currentDivider = settingsHeight - splitview get "HSplit", "Divider" - menu set "View", "Full screen", "mark", "MainView" - window set "MainView", "moveto", 0,0 - window set "MainView", "resizeto", peek("desktopwidth")-1, peek("desktopheight")-1 - window set "MainView", "MinimumTo", peek("desktopwidth")-1, peek("desktopheight")-1 - window set "MainView", "MaximumTo", peek("desktopwidth")-1, peek("desktopheight")-1 - splitview set "HSplit", "Divider", peek("desktopheight")-1-currentDivider - settingsFullScreen = true - endif - break - case MyTranslate$("MainView:View:Maximize editor") - if(settingsFullEditor) then - splitview set "VSplit", "Divider", oldSplitX - splitview set "HSplit", "Divider", oldSplitY - menu set "View", "Maximize editor", "plain", "MainView" - settingsFullEditor = false - else - oldSplitX = splitview get "VSplit", "Divider" - oldSplitY = splitview get "HSplit", "Divider" - tmp = window get "MainView", "Height" - splitview set "HSplit", "Divider", tmp-51 - splitview set "VSplit", "Divider", 0 - menu set "View", "Maximize editor", "mark", "MainView" - settingsFullEditor = true - endif - break - case MyTranslate$("MainView:View:Auto indent") - if(settingsAutoIndent) then - menu set "View", "Auto indent", "plain", "MainView" - else - menu set "View", "Auto indent", "mark", "MainView" - endif - settingsAutoIndent = not settingsAutoIndent - for tmpAllFiles = 1 to MAXFILES - textedit set "Text"+str$(tmpAllFiles), "autoindent", settingsAutoIndent - next tmpAllFiles - break - case MyTranslate$("MainView:View:Auto completion") - if(settingsAutoCompletion) then - menu set "View", "Auto completion", "plain", "MainView" - else - menu set "View", "Auto completion", "mark", "MainView" - endif - settingsAutoCompletion = not settingsAutoCompletion - for tmpAllFiles = 1 to MAXFILES - textedit set "Text"+str$(tmpAllFiles), "has-autocompletion", settingsAutoCompletion - next tmpAllFiles - break - case MyTranslate$("MainView:View:Reformat sourcecode") - reformatUndo$ = textedit get$ "Text"+str$(globalCurrentText) - globalReformatUndo = true - menu set "View", "Undo reformat", "enable", "MainView" - textedit clear "Text"+str$(globalCurrentText) - //tmp$ = ReformatSource$(reformatUndo$) - textedit add "Text"+str$(globalCurrentText),ReformatSource$(reformatUndo$) - if(ReformatError(false,0)<>0 and settingsReformatAlert) then - tmp = alert "Reformating did not close all open loops and conditions.\nReformating currently does not support loops and conditions opened and closed by a colon (:).\nE.g. while(loop):wend\n\nYou can undo the reformating before doing any further changes.", "Do not show this warning again", "Ok" , "", "warning" - if(tmp = 1) settingsReformatAlert = false - endif - break - case MyTranslate$("MainView:View:Undo reformat") - tmp = alert "Changes made since reformating will be lost!", "Cancel", "Do not show this warning again", "Undo reformating", "warning" - if(tmp > 1) then - if(tmp=2) settingsReformatUndoAlert = false - globalReformatUndo = false - textedit clear "Text"+str$(globalCurrentText) - textedit add "Text"+str$(globalCurrentText), reformatUndo$ - menu set "View", "Undo reformat", "disable", "MainView" - endif - break - case MyTranslate$("MainView:View:Refresh colors") - textedit color "Text"+str$(globalCurrentText), "textcolor", textcolor_r, textcolor_g, textcolor_b - break - case "ToolbarOptions" - case MyTranslate$("MainView:View:Options...") - OptionWindow() - break - case "ToolbarHelp" - case MyTranslate$("MainView:Help:Short command help...") - system("open "+globalHelpDir$+"yab-Commands &") - break - case MyTranslate$("MainView:Help:Yabasic manual...") - system("open "+globalHelpDir$+"yabasic.html &") - break - case MyTranslate$("MainView:Help:Online resources:German BeUsergroup...") - system("open http://www.beusergroup.de &") - break - case MyTranslate$("MainView:Help:Online resources:BeSly database...") - system("open http://www.besly.de &") - break - case MyTranslate$("MainView:Help:Online resources:Yabasic homepage...") - system("open http://www.yabasic.de &") - break - case MyTranslate$("MainView:Help:Online resources:Haikuware yab forum...") - system("open http://haikuware.com/forum/yab &") - break - case MyTranslate$("MainView:Help:About...") - AboutWindow() - break - - // the find and replace tabview - case "FindCS:ON" - case "FindCS:OFF" - settingsFindCS = not settingsFindCS - break - case "FindFind" - settingsOldSearch$ = textcontrol get$ "FindTCFind" - if(settingsOldSearch$<>"") then - if(settingsFindCS) then - searchLineNum = textedit get "Text"+str$(globalCurrentText), "Case-Sensitive-Find", settingsOldSearch$ - else - searchLineNum = textedit get "Text"+str$(globalCurrentText), "Find", settingsOldSearch$ - endif - option set "Text"+str$(globalCurrentText), "Focus", true - endif - break - case "FindReplace" - settingsOldSearch$ = textcontrol get$ "FindTCFind" - if(settingsOldSearch$<>"") then - if(settingsFindCS) then - searchLineNum = textedit get "Text"+str$(globalCurrentText), "Case-Sensitive-Find", settingsOldSearch$ - else - searchLineNum = textedit get "Text"+str$(globalCurrentText), "Find", settingsOldSearch$ - endif - if(searchLineNum <> -1) then - changestring() - - endif - option set "Text"+str$(globalCurrentText), "Focus", true - endif - break - case "FindReplAll" - if(settingsFindAlert) then - tmpAlert = alert "The operation \"Replace All\" can not be reverted!\n\nDo you want to continue?", "Cancel", "Do not show this warning again", "Ok", "warning" - if(tmpAlert = 1) break - if(tmpAlert = 2) settingsFindAlert = false - endif - settingsOldSearch$ = textcontrol get$ "FindTCFind" - if(settingsOldSearch$<>"") then - searchLineNum = 0 - while(searchLineNum<>-1) - if(settingsFindCS) then - searchLineNum = textedit get "Text"+str$(globalCurrentText), "Case-Sensitive-Find", settingsOldSearch$ - else - searchLineNum = textedit get "Text"+str$(globalCurrentText), "Find", settingsOldSearch$ - endif - if(searchLineNum <> -1) then - changestring() - endif - wend - option set "Text"+str$(globalCurrentText), "Focus", true - endif - break - - // the immediate tabview - case "ImmediateExecute" - tmp$ = textcontrol get$ "ImmediateInput" - ImmediateExec(tmp$) - break - - end switch - - // the output listbox, handle error messages - if((left$(msg$(i),22) = "YabOutputList:_Select:") or (left$(msg$(i),22) = "YabOutputList:_Invoke:")) then - tmp$ = listbox get$ "YabOutputList", val(right$(msg$(i),len(msg$(i))-22)) - if(left$(tmp$,8) = "---Error") then - num = instr(tmp$, "line ") - if(num) then - num = num + 5 - number$ = "" - repeat - number$ = number$ + mid$(tmp$,num,1) - num = num + 1 - until (mid$(tmp$,num,1) = ":") - num = val(number$) - - errorFileName$ = globalAllNames$(globalCurrentText) - errorFileFound = false - rightBound = instr(tmp$, ".yab") - if(rightBound) then - errorFileName$ = mid$(tmp$, 13, rightBound-13+4) - endif - if(errorFileName$<>globalAllNames$(globalCurrentText)) then - // check whether library is loaded already... - for tmpCheckName = 1 to MAXFILES - if((left$(errorFileName$,1) = "/" and errorFileName$ = globalAllNames$(tmpCheckName)) or (left$(errorFileName$,1) <> "/" and right$(globalAllNames$(tmpCheckName),len(errorFileName$)) = errorFileName$)) then - ActivateText(tmpCheckName) - errorFileFound = true - break - endif - next tmpCheckName - // otherwise load it now - else - errorFileFound = true - endif - - if(errorFileFound) then - textedit set "Text"+str$(globalCurrentText),"gotoline", num+7 - textedit set "Text"+str$(globalCurrentText),"gotoline", num - textedit set "Text"+str$(globalCurrentText),"select", num - if(globalSelectErrorLines) option set "Text"+str$(globalCurrentText),"focus", true - endif - endif - endif - endif - - - // the search field in the toolbar - if(left$(msg$(i),12) = "ToolbarText:" or msg$(i) = "ToolbarFind") then - if(msg$(i) = "ToolbarFind") then - settingsOldSearch$ = textcontrol get$ "ToolbarText" - else - settingsOldSearch$ = right$(msg$(i), len(msg$(i))-12) - endif - if(settingsFindCS) then - searchLineNum = textedit get "Text"+str$(globalCurrentText), "Case-Sensitive-Find", settingsOldSearch$ - else - searchLineNum = textedit get "Text"+str$(globalCurrentText), "Find", settingsOldSearch$ - endif - if(DEBUG) print searchLineNum - option set "Text"+str$(globalCurrentText), "Focus", true - endif - - // the find and replace tabview - // if(left$(msg$(i),11) = "FindTCFind:" and ) then - // option set "FindTCReplace", "focus", true - // endif - // if(left$(msg$(i),14) = "FindTCReplace:") then - // option set "FindFind", "focus", true - // endif - - - // the immediate tabview - if(left$(msg$(i),15) = "ImmediateInput:") then - ImmediateExec(right$(msg$(i), len(msg$(i))-15)) - endif - - // the project columnbox - if(left$(msg$(i),15) = "FileBox:_Select") then - tmp$ = right$(msg$(i),len(msg$(i))-16) - for tmpFiles = 1 to MAXFILES // arraysize(globalTextFinder(),1) - if(DEBUG) print val(tmp$), globalTextFinder(tmpFiles) - if(globalTextFinder(tmpFiles)=val(tmp$)) then - ActivateText(tmpFiles) - break - endif - next tmpFiles - endif - - // something dropped on the textedit - if(left$(msg$(i),18) = "V2Split2:_Dropped:" and globalCurrentText<>0) then - tmp$ = right$(msg$(i),len(msg$(i))-18) - handle = open(tmp$, "r") - if(handle) then - WaitWindow(tmp$) - text$ = "" - while(not eof(handle)) - text$ = text$ + GetLine$(handle)+"\n" - wend - close(handle) - tmp = textedit get "Text"+str$(globalCurrentText), "currentline" - textedit add "Text"+str$(globalCurrentText), left$(text$,len(text$)-1) - textedit set "Text"+str$(globalCurrentText), "changed", true - textedit set "Text"+str$(globalCurrentText), "gotoline", tmp - option set "Text"+str$(globalCurrentText), "focus", true - oldScroll = -1 - window close "WaitWindow" - else - alert MyTranslate$("Error while loading file:\n\n")+tmp$, "Ok", "warning" - endif - endif - - // something dropped on the project columnbox - if(left$(msg$(i),17) = "VSplit1:_Dropped:") then - foundEmpty = 0 - for j=1 to MAXFILES - if(globalAllNames$(j) = "") then - foundEmpty = j - break - endif - next j - if(not foundEmpty) then - alert MyTranslate$("Sorry, you can not open more than ")+str$(MAXFILES)+MyTranslate$(" files at once!\n\nPlease close one or more other files first."), "Ok", "Warning" - else - tmp$ = right$(msg$(i),len(msg$(i))-17) - foundProject = false - for j = 1 to MAXFILES - if(globalAllNames$(j) = tmp$) then - alert "File is already open.", "Ok", "info" - ActivateText(j) - foundProject = true - break - endif - next j - if(not foundProject) then - handle = open(tmp$, "r") - if(handle) then - WaitWindow(tmp$) - text$ = "" - while(not eof(handle)) - text$ = text$ + GetLine$(handle)+"\n" - wend - close(handle) - globalCurrentText = foundEmpty - textedit add "Text"+str$(globalCurrentText), left$(text$,len(text$)-1) - textedit set "Text"+str$(globalCurrentText), "changed", false - textedit set "Text"+str$(globalCurrentText), "gotoline", ReadLineFromAttr(tmp$) - stackview set "Stack", globalCurrentText - stackview set "Lines", globalCurrentText - globalAllNames$(globalCurrentText) = tmp$ - option set "Text"+str$(globalCurrentText), "focus", true - oldScroll = -1 - window close "WaitWindow" - else - alert MyTranslate$("Error while loading file:\n\n")+tmp$, "Ok", "Stop" - endif - endif - endif - endif - - // help selected - if(left$(msg$(i),9) = "HelpTree:") then - tmp$ = right$(msg$(i), len(msg$(i))-17) - tmp$ = treebox get$ "HelpTree", val(tmp$) - t$ = SyntaxGetInfoText$(ideDir$+"data/Help_En.dat", ideDir$+"data/Help_En_Index.dat", tmp$) - if(t$<>"") then - textedit clear "Text"+str$(MAXFILES+1) - textedit add "Text"+str$(MAXFILES+1), t$ - endif - endif - - // search help - if(left$(msg$(i),9) = "HelpFind:") then - tmp$ = right$(msg$(i), len(msg$(i))-9) - tmp$ = trim$(tmp$) - tmp$ = lower$(tmp$) - t$ = SyntaxGetInfoText$(ideDir$+"data/Help_En.dat", ideDir$+"data/Help_En_Index.dat", tmp$) - if(t$<>"") then - textedit clear "Text"+str$(MAXFILES+1) - textedit add "Text"+str$(MAXFILES+1), t$ - endif - endif - next i - - if(globalCurrentText>0 and not globalWasChanged and textedit get "Text"+str$(globalCurrentText), "hasChanged") then - globalWasChanged = true - columnbox add "FileBox", 1, globalTextFinder(globalCurrentText), 20, "__Icon__="+ideDir$+"img/nichtgespeichert.png" - endif - - UpdateStatusbar() - - if(settingsFullEditor) then - tmp = window get "MainView", "Height" - 74 - if(splitview get "VSplit", "Divider" <> 0 or splitview get "HSplit", "Divider" <> tmp) then - settingsFullEditor = false - menu set "View", "Maximize editor", "plain", "MainView" - endif - endif - - if(globalCurrentText > 0) then - // Update the line numbers - // we are cheeting a bit :), we calculate the numbers for a 1200-pixel high view - scroll = textedit get "Text"+str$(globalCurrentText), "vertical-scrollbar" - v2Split = splitview get "V2Split", "divider" - if(scroll<>oldScroll or v2Split<>oldV2Split) then - scrollLine = int(scroll/globalRealFontSize) - scrollPos = mod(scroll,globalRealFontSize) - UpdateLines(scrollPos, 1200, scrollLine, globalRealFontSize) - oldScroll = scroll - oldV2Split = v2Split - // scrollLine = int((scroll+2)/15)+1 - // scrollPos = mod((globalHSplitDivider-1-peek("scrollbarwidth")+scroll),15)+5 - // scrollPos = mod((1000+scroll),15)+5 - // UpdateLines(scrollPos, globalHSplitDivider-1-peek("scrollbarwidth"), scrollLine, 15) - // UpdateLines(scrollPos, 1200, scrollLine, 15) - // oldScroll = scroll - endif - - // Check the spincontrol - spinner = spincontrol get "ToolbarGotoLine" - if(spinner <> oldSpinner) then - textedit set "Text"+str$(globalCurrentText), "gotoline", spinner - textedit set "Text"+str$(globalCurrentText), "select", 0 - textedit set "Text"+str$(globalCurrentText), "select", spinner - option set "Text"+str$(globalCurrentText), "Focus", true - oldSpinner = spinner - endif - endif - - // switch tabs from help to files and vice versa - if(globalIsHelp and tabview get "Tree" = 1) then - globalIsHelp = false - splitview set "V2Split", "divider", helpOldV2Split - if(globalCurrentText>0) then - ActivateHelpMenus(1) - stackview set "Stack", globalCurrentText - stackview set "Lines", globalCurrentText - else - ActivateHelpMenus(0) - stackview set "Stack", MAXFILES+2 - stackview set "Lines", MAXFILES+2 - endif - endif - if(not globalIsHelp and tabview get "Tree" = 2) then - ActivateHelpMenus(-1) - globalIsHelp = true - stackview set "Stack", MAXFILES+1 - stackview set "Lines", MAXFILES+1 - helpOldV2Split = splitview get "V2Split", "divider" - splitview set "V2Split", "divider", 0 - endif -wend - -window close "MainView" -SaveSettings() - -// Open main window with everything -sub OpenMainWindow() - local vsplitheight, hsplitheight, tabwidth, i, handle - local tmp$ - local err, x, y - - x = peek("desktopwidth") - y = peek("desktopheight") - - // open initialize the main window - window open settingsX-3000,settingsY-3000 to settingsX+settingsWidth-3000,settingsY+settingsHeight-3000, "MainView", "yab-IDE" - - window open x/2-250-3000, y/2-200-3000 to x/2+249-3000,y/2+199-3000, "Splash", "" - window set "Splash", "look", "bordered" - err = draw image 0,0, ideDir$+"img/Splash.png", "Splash" - draw set "HighColor", 56,61,127, "Splash" - draw set "DejaVu Sans Mono,Bold,18", "Splash" - draw text 30, 280, "Version "+versionnumber$, "Splash" - window set "Splash", "moveto", x/2-250,y/2-200 - set_up_BuildFactory() - if(err>0) window close "Splash" - - - - window set "MainView", "look", "document" - window set "MainView", "MinimumTo", 600,300 - - // set all menus - menu "File", "New...", "N", "MainView" - menu "File", "Open...", "O", "MainView" - menu "File", "Close", "W", "MainView" - menu "File", "--", "", "MainView" - menu "File", "Save", "S", "MainView" - menu "File", "Save as...", "", "MainView" - menu "File", "Save as template...", "", "MainView" - menu "File", "Export as HTML...", "", "MainView" - - menu "File", "--", "", "MainView" - menu "File", "Page setup...", "", "MainView" - menu "File", "Print...", "P", "MainView" - menu "File", "--", "", "MainView" - menu "File", "Quit", "Q", "MainView" - - menu "Edit", "Undo", "Z", "MainView" - menu "Edit", "--", "", "MainView" - menu "Edit", "Cut", "X", "MainView" - menu "Edit", "Copy", "C", "MainView" - menu "Edit", "Paste", "V", "MainView" - menu "Edit", "--", "", "MainView" - menu "Edit", "Select all", "A", "MainView" - menu "Edit", "--", "", "MainView" - menu "Edit", "Find", "F", "MainView" - menu "Edit", "Find again", "G", "MainView" - menu "Edit", "Find and replace", "E", "MainView" - - menu "Program", "Run", "R", "MainView" - menu "Program", "Run in Terminal", "T", "MainView" - menu "Program", "--", "", "MainView" - menu "Program", "Set run parameters...", "SR", "MainView" - menu "Program", "--", "", "MainView" - menu "Program", "Build Factory...", "B", "MainView" - menu "Program", "--", "", "MainView" - menu "Program", "Open project folder...", "SO", "MainView" - - if(not globalNoRCS) then - menu "RCS", "Check In", "CI", "MainView" - menu "RCS", "Check Out", "CO", "MainView" - menu "RCS", "--", "", "MainView" - menu "RCS", "Version History...", "CV", "MainView" - endif - - menu "Tools", "Pattern editor...", "CP", "MainView" - menu "Tools", "Color selection...", "CC", "MainView" - menu "Tools", "--", "", "MainView" - menu "Tools", "ASCII table...", "CA", "MainView" - - menu "View", "Next file", ".", "MainView" - menu "View", "Previous file", ",", "MainView" - menu "View", "--", "", "MainView" - menu "View", "Full screen", "CF", "MainView" - menu "View", "Maximize editor", "CE", "MainView" - menu "View", "--", "", "MainView" - menu "View", "Auto indent", "", "MainView" - menu "View", "Auto completion", "", "MainView" - menu "View", "Refresh colors", "", "MainView" - menu "View", "--", "", "MainView" - menu "View", "Reformat sourcecode", "CR", "MainView" - menu "View", "Undo reformat", "", "MainView" - menu "View", "--", "", "MainView" - menu "View", "Options...", "", "MainView" - if settingsFullScreen menu set "View", "Full screen", "mark", "MainView" - if settingsFullEditor menu set "View", "Maximize editor", "mark", "MainView" - if settingsAutoIndent menu set "View", "Auto indent", "mark", "MainView" - if settingsAutoCompletion menu set "View", "Auto completion", "mark", "MainView" - menu set "View", "Undo reformat", "disable", "MainView" - - menu "Help", "Short command help...", "H", "MainView" - menu "Help", "Yabasic manual...", "M", "MainView" - menu "Help", "--", "", "MainView" - menu "Help", "Online resources", "", "MainView" - submenu "Help", "Online resources", "German BeUsergroup...", "", "MainView" - submenu "Help", "Online resources", "BeSly database...", "", "MainView" - submenu "Help", "Online resources", "Yabasic homepage...", "", "MainView" - submenu "Help", "Online resources", "Haikuware yab forum...", "", "MainView" - menu "Help", "--", "", "MainView" - menu "Help", "About...", "", "MainView" - - // set the toolbar - ToolbarCreate(0,peek("menuheight")+1,2000, "Toolbar", ideDir$+"img/", "MainView") - ToolbarAddIcon("ToolbarNew", "New", "newp.png", "newn.png", "newd.png") - ToolbarAddIcon("ToolbarOpen", "Open", "openp.png", "openn.png", "opend.png") - ToolbarAddIcon("ToolbarSave", "Save", "savep.png", "saven.png", "saved.png") - ToolbarAddIcon("ToolbarClose", "Close", "closep.png", "closen.png", "closed.png") - ToolbarAddSeparator() - ToolbarAddIcon("ToolbarCut", "Cut", "cutp.png", "cutn.png", "cutd.png") - ToolbarAddIcon("ToolbarCopy", "Copy", "copyp.png", "copyn.png", "copyd.png") - ToolbarAddIcon("ToolbarPaste", "Paste", "pastep.png", "pasten.png", "pasted.png") - ToolbarAddIcon("ToolbarUndo", "Undo", "undop.png", "undon.png", "undod.png") - // ToolbarAddIcon("ToolbarFind", "Find", "searchp.png", "searchn.png", "searchd.png") - ToolbarAddSeparator() - ToolbarAddIcon("ToolbarRun", "Run", "runp.png", "runn.png", "rund.png") - ToolbarAddIcon("ToolbarRunTerm", "Run in Terminal", "runtermp.png", "runtermn.png", "runtermd.png") - // ToolbarAddIcon("ToolbarDebug", "Debugger", "debugp.png", "debugn.png", "debugd.png") - ToolbarAddIcon("ToolbarBuild", "Build Factory", "bindp.png", "bindn.png", "bindd.png") - // ToolbarAddSeparator() - // ToolbarAddIcon("ToolbarGui", "GUI Designer", "guip.png", "guin.png", "guid.png") - ToolbarAddSeparator() - ToolbarAddIcon("ToolbarPattern", "Pattern editor", "patternp.png", "patternn.png", "patternd.png") - ToolbarAddIcon("ToolbarOptions", "Options", "optionsp.png", "optionsn.png", "optionsd.png") - ToolbarAddIcon("ToolbarHelp", "yab Help", "helpp.png", "helpn.png", "helpd.png") - ToolbarAddSeparator() - - spincontrol 383,2, "ToolbarGotoLine", "Go to Line:", 1, 100000, 1, "Toolbar" - tooltip "ToolbarGotoLine", "Go to Line" - draw set "highcolor", 185,185,185, "Toolbar" - draw line 430,5 to 400,25, "Toolbar" - draw set "highcolor", 239,239,239, "Toolbar" - draw line 431,5 to 401,25, "Toolbar" - - button image 538,7, "ToolbarFind", ideDir$+"img/searchp.png", ideDir$+"img/searchn.png", ideDir$+"img/searchd.png", "Toolbar" - tooltip "ToolbarFind", "Find" - textcontrol 553,5 to 640,25, "ToolbarText", "", settingsOldSearch$, "Toolbar" - draw set "highcolor", 185,185,185, "Toolbar" - draw line 510,5 to 480,25, "Toolbar" - draw set "highcolor", 239,239,239, "Toolbar" - draw line 511,5 to 481,25, "Toolbar" - - // layout "top, left, right", "Toolbar" - draw set "highcolor", 200,200,200, "Toolbar" - draw line 0,29 to 2000,29, "Toolbar" - draw set "highcolor", 184,184,184, "Toolbar" - draw line 0,30 to 2000,30, "Toolbar" - draw set "highcolor", 239,239,239, "Toolbar" - draw line 0,31 to 2000,31, "Toolbar" - - - // vertical splitview - layout "standard", "MainView" - splitview 0,peek("menuheight")+31, settingsWidth,settingsHeight-peek("scrollbarwidth"), "VSplit", true, true, "MainView" - splitview set "VSplit", "Divider", settingsVSplitDivider - splitview set "VSplit", "MinimumSizes", 0,400 - - // horizontal splitview - splitview 0,0, settingsWidth-settingsVSplitDivider,settingsHeight-peek("scrollbarwidth")+1, "HSplit", false, true, "VSplit2" - splitview set "HSplit", "Divider", settingsHSplitDivider - splitview set "HSplit", "MinimumSizes", 100,51 - - splitview 0,0, settingsWidth-settingsVSplitDivider,settingsHSplitDivider-1, "V2Split", true,false, "HSplit1" - splitview set "V2Split", "Divider", 0 - splitview set "V2Split", "MinimumSizes", 0,300 - - - vsplitheight = settingsHeight - peek("menuheight")-peek("scrollbarwidth") - - // tabview and treeboxes in the left vertical splitview - tabview 0,1 to settingsVSplitDivider-1,vsplitheight-32, "Tree", "bottom", "VSplit1" - tabview add "Tree", " Files " - tabview add "Tree", " Help " - columnbox 0,0 to settingsVSplitDivider-10,vsplitheight-42-peek("tabheight"), "FileBox", false, "no-border, resizable", "Tree1" - columnbox column "FileBox", " ", 1, 20, 20, 20, "align-center" - columnbox column "FileBox", "Filename",2, 300, 32, settingsVSplitDivider-32, "align-left" - columnbox color "FileBox", "Selection-Active", 220,220,250 - columnbox color "FileBox", "Row-Divider", 255,255,255 - - treebox 0,0 to settingsVSplitDivider-10, vsplitheight-42-peek("tabheight")-40, "HelpTree", 1, "Tree2" - layout "left,bottom,right", "Tree2" - textcontrol 0,vsplitheight-42-peek("tabheight")-30 to settingsVSplitDivider-14,vsplitheight-42-peek("tabheight")-10, "HelpFind", "Command", "", "Tree2" - layout "standard", "Tree2" - - view dropzone "VSplit1" - view dropzone "V2Split2" - - // a stackview with textedits in the upper right splitview - // implement a dynamic stackview in future! - // stackview 0,0 to settingsWidth-settingsVSplitDivider-11,settingsHSplitDivider-1, "Stack", MAXFILES+2, "HSplit1" - stackview 0,0 to settingsWidth-settingsVSplitDivider-11-4,settingsHSplitDivider-1, "Stack", MAXFILES+2, "V2Split2" - stackview 0,0 to settingsV2SplitDivider,settingsHSplitDivider-1, "Lines", MAXFILES+2, "V2Split1" - for i=1 to MAXFILES - // textedit 37,0 to settingsWidth-settingsVSplitDivider-12,settingsHSplitDivider-1, "Text"+str$(i), 3, "Stack"+str$(i) - textedit 1,1 to settingsWidth-settingsVSplitDivider-12-5,settingsHSplitDivider-2, "Text"+str$(i), 3, "Stack"+str$(i) - textedit set "Text"+str$(i), "wordwrap", false - textedit set "Text"+str$(i), "textwidth", 4000 - textedit set "Text"+str$(i), "tabwidth", settingsTabSpaces*7 - textedit set "Text"+str$(i), "font", settingsFontFamily$+","+settingsFontStyle$+","+str$(settingsFontSize) - textedit set "Text"+str$(i), "autoindent", settingsAutoIndent - - // layout "left,top,bottom", "Lines"+str$(i) - // view 0,0 to 36,settingsHSplitDivider-1, "Lines"+str$(i), "LineStack"+str$(i) - draw set settingsFontFamily$+","+settingsFontStyle$+","+str$(settingsFontSize), "Lines"+str$(i) - layout "standard", "Stack"+str$(i) - - textedit set "Text"+str$(i), "autocomplete-start", settingsACNumChar - handle = open(ideDir$+"/data/autocompletion") - if(handle) then - while(not eof(handle)) - line input #handle tmp$ - textedit set "Text"+str$(i), "autocomplete", tmp$ - wend - close(handle) - endif - - handle = open(ideDir$+"/data/color1") - if(handle) then - while(not eof(handle)) - line input #handle tmp$ - textedit color "Text"+str$(i), "color1", tmp$ - wend - close(handle) - endif - handle = open(ideDir$+"/data/color2") - if(handle) then - while(not eof(handle)) - line input #handle tmp$ - textedit color "Text"+str$(i), "color2", tmp$ - wend - close(handle) - endif - handle = open(ideDir$+"/data/color3") - if(handle) then - while(not eof(handle)) - line input #handle tmp$ - textedit color "Text"+str$(i), "color3", tmp$ - wend - close(handle) - endif - handle = open(ideDir$+"/data/color4") - if(handle) then - while(not eof(handle)) - line input #handle tmp$ - textedit color "Text"+str$(i), "color4", tmp$ - wend - close(handle) - endif - handle = open(ideDir$+"/data/color5") - if(handle) then - while(not eof(handle)) - line input #handle tmp$ - textedit color "Text"+str$(i), "char-color", tmp$ - wend - close(handle) - endif - next i - - textedit 1,1 to settingsWidth-settingsVSplitDivider-12-5,settingsHSplitDivider-2, "Text"+str$(MAXFILES+1), 1, "Stack"+str$(MAXFILES+1) - textedit set "Text"+str$(MAXFILES+1), "font", settingsFontFamily$+","+settingsFontStyle$+","+str$(settingsFontSize) - textedit set "Text"+str$(MAXFILES+1), "editable", false - textedit color "Text"+str$(MAXFILES+1), "color1", "Name:" - textedit color "Text"+str$(MAXFILES+1), "color1", "Synopsis:" - textedit color "Text"+str$(MAXFILES+1), "color1", "Description:" - textedit color "Text"+str$(MAXFILES+1), "color1", "Example:" - textedit color "Text"+str$(MAXFILES+1), "color1", "Design:" - textedit color "Text"+str$(MAXFILES+1), "color1", "Layout:" - textedit color "Text"+str$(MAXFILES+1), "color1", "Message:" - textedit color "Text"+str$(MAXFILES+1), "color1", "Related:" - SyntaxLoadTree(ideDir$+"data/Help_En.dat", "HelpTree") - - // UpdateLines(0, globalHSplitDivider-1-peek("scrollbarwidth"), 1, 15) - UpdateLines(0, 1200, 1, globalRealFontSize) - - layout "h-center, v-center", "Stack"+str$(MAXFILES+2) - // view (settingsWidth-settingsVSplitDivider-12)/2-150,(settingsHSplitDivider-1)/2-190 to (settingsWidth-settingsVSplitDivider-12)/2+150,(settingsHSplitDivider-1)/2+190, "Logo", "Stack"+str$(MAXFILES+2) - view (settingsWidth-settingsVSplitDivider-12-41-4)/2-150,(settingsHSplitDivider-1)/2-190 to (settingsWidth-settingsVSplitDivider-12-41-4)/2+150,(settingsHSplitDivider-1)/2+190, "Logo", "Stack"+str$(MAXFILES+2) - draw set "bgcolor", 255,255,255, "Stack"+str$(MAXFILES+2) - draw set "bgcolor", 255,255,255, "Logo" - err = draw image 0,0 to 350,-1, ideDir$+"img/logo.png", "Logo" - stackview set "Stack", MAXFILES+2 - stackview set "Lines", MAXFILES+2 - layout "standard", "Stack"+str$(MAXFILES+2) - - hsplitheight = settingsHeight-settingsHSplitDivider-peek("scrollbarwidth")-peek("menuheight")-42 - - // the tabview in the lower right splitview - tabview 0,0 to settingsWidth-settingsVSplitDivider-11,hsplitheight, "HTab", "bottom", "HSplit2" - tabview add "HTab", "yab Output" - tabview add "HTab", "Immediate" - tabview add "HTab", "Find and replace" - if(not globalNoRCS) then - tabview add "HTab", "Version Control" - endif - - hsplitheight = hsplitheight-peek("tabheight")-12 - tabwidth = settingsWidth-settingsVSplitDivider-21 - - // the output box - listbox 0,0 to tabwidth,hsplitheight, "YabOutputList", 1, "HTab1" - - // the immediate stuff - layout "left,right,top", "HTab2" - textcontrol 5,5 to tabwidth-110,25, "ImmediateInput", "Command", "", "HTab2" - layout "right,top", "HTab2" - button tabwidth-100,3 to tabwidth-10,23, "ImmediateExecute", "Execute", "HTab2" - layout "standard", "HTab2" - textedit 10,35 to tabwidth-10,hsplitheight-10, "ImmediateOutput", 1, "HTab2" - textedit set "ImmediateOutput", "editable", false - - // search and replace - layout "left,top", "HTab3" - w = draw get "Text-width", MyTranslate$("Find:"), "HTab3" - draw text 55-w,23, "Find:", "HTab3" - w = draw get "Text-width", MyTranslate$("Replace:"), "HTab3" - draw text 55-w,48, "Replace:", "HTab3" - textcontrol 55,10 to 290,30, "FindTCFind", "", "", "HTab3" - textcontrol 55,35 to 290,55, "FindTCReplace", "", "", "HTab3" - checkbox 55,60, "FindCS", "Case Sensitive", settingsFindCS, "HTab3" - MyLine(300,5,300,90,"HTab3") - button 310,10 to 460,30, "FindFind", "Find", "HTab3" - button 310,35 to 460,55, "FindReplace", "Find and replace", "HTab3" - button 310,60 to 460,80, "FindReplAll", "Replace All", "HTab3" - - // the statusbar - layout "left, bottom", "MainView" - view 0,settingsHeight-peek("scrollbarwidth") to 2000,settingsHeight, "Statusbar", "MainView" - draw set "highcolor", 200,200,200, "Statusbar" - draw line 0,0 to 2000,0, "Statusbar" - draw set "highcolor", 184,184,184, "Statusbar" - draw line 0,1 to 2000,1, "Statusbar" - draw set "highcolor", 239,239,239, "Statusbar" - draw line 0,2 to 2000,2, "Statusbar" - - if(window count>1) window close "Splash" - - window set "MainView", "moveto", settingsX, settingsY - - return -end sub - - -// (De-)activate menus -sub ActivateMenus(toActivate) - local tmp$ - - if(toActivate) then - tmp$ = "Enable" - else - tmp$ = "Disable" - endif - - menu set "File", "Close", tmp$, "MainView" - menu set "File", "Save", tmp$, "MainView" - menu set "File", "Save as...", tmp$, "MainView" - menu set "File", "Save as template...", tmp$, "MainView" - menu set "File", "Export as HTML...", tmp$, "MainView" - menu set "File", "Page setup...", tmp$, "MainView" - menu set "File", "Print...", tmp$, "MainView" - - menu set "Edit", "Undo", tmp$, "MainView" - menu set "Edit", "Cut", tmp$, "MainView" - menu set "Edit", "Copy", tmp$, "MainView" - menu set "Edit", "Paste", tmp$, "MainView" - menu set "Edit", "Select all", tmp$, "MainView" - menu set "Edit", "Find", tmp$, "MainView" - menu set "Edit", "Find again", tmp$, "MainView" - menu set "Edit", "Find and replace", tmp$, "MainView" - - menu set "Program", "Run", tmp$, "MainView" - menu set "Program", "Run in Terminal", tmp$, "MainView" - menu set "Program", "Set run parameters...", tmp$, "MainView" - menu set "Program", "Build Factory...", tmp$, "MainView" - menu set "Program", "Open project folder...", tmp$, "MainView" - - if(not globalNoRCS) then - menu set "RCS", "Check In", tmp$, "MainView" - menu set "RCS", "Check Out", tmp$, "MainView" - menu set "RCS", "Version History...", tmp$, "MainView" - endif - - menu set "Tools", "Pattern editor...", tmp$, "MainView" - menu set "Tools", "Color selection...", tmp$, "MainView" - - menu set "View", "Next file", tmp$, "MainView" - menu set "View", "Previous file", tmp$, "MainView" - menu set "View", "Auto indent", tmp$, "MainView" - menu set "View", "Auto completion", tmp$, "MainView" - menu set "View", "Refresh colors", tmp$, "MainView" - menu set "View", "Reformat sourcecode", tmp$, "MainView" - menu set "View", "Undo reformat", "disable", "MainView" - menu set "View", "Options...", tmp$, "MainView" - - option set "ToolbarSave", "Enabled", toActivate - option set "ToolbarClose", "Enabled", toActivate - option set "ToolbarCut", "Enabled", toActivate - option set "ToolbarCopy", "Enabled", toActivate - option set "ToolbarPaste", "Enabled", toActivate - option set "ToolbarUndo", "Enabled", toActivate - option set "ToolbarFind", "Enabled", toActivate - option set "ToolbarText", "Enabled", toActivate - option set "ToolbarRun", "Enabled", toActivate - option set "ToolbarRunTerm", "Enabled", toActivate - option set "ToolbarPattern", "Enabled", toActivate - option set "ToolbarBuild", "Enabled", toActivate - option set "ToolbarOptions", "Enabled", toActivate - option set "ToolbarGotoLine", "Enabled", toActivate - - option set "FindTCFind", "Enabled", toActivate - option set "FindTCReplace", "Enabled", toActivate - option set "FindCS", "Enabled", toActivate - option set "FindFind", "Enabled", toActivate - option set "FindReplace", "Enabled", toActivate - option set "FindReplAll", "Enabled", toActivate - - return -end sub - -// (De-)activate menus when help is selected -sub ActivateHelpMenus(toActivate) - local tmp$ - - if(toActivate = 1) then - tmp$ = "Enable" - else - tmp$ = "Disable" - endif - - if(toActivate = -1) then - menu set "File", "Open...", tmp$, "MainView" - menu set "File", "New...", tmp$, "MainView" - else - menu set "File", "Open...", "Enable", "MainView" - menu set "File", "New...", "Enable", "MainView" - endif - menu set "File", "Close", tmp$, "MainView" - menu set "File", "Save", tmp$, "MainView" - menu set "File", "Save as...", tmp$, "MainView" - menu set "File", "Save as template...", tmp$, "MainView" - menu set "File", "Export as HTML...", tmp$, "MainView" - - menu set "Edit", "Undo", tmp$, "MainView" - menu set "Edit", "Cut", tmp$, "MainView" - menu set "Edit", "Paste", tmp$, "MainView" - menu set "Edit", "Find and replace", tmp$, "MainView" - - menu set "Program", "Run", tmp$, "MainView" - menu set "Program", "Run in Terminal", tmp$, "MainView" - menu set "Program", "Set run parameters...", tmp$, "MainView" - menu set "Program", "Build Factory...", tmp$, "MainView" - menu set "Program", "Open project folder...", tmp$, "MainView" - - if(not globalNoRCS) then - menu set "RCS", "Check In", tmp$, "MainView" - menu set "RCS", "Check Out", tmp$, "MainView" - menu set "RCS", "Version History...", tmp$, "MainView" - endif - - menu set "Tools", "Pattern editor...", tmp$, "MainView" - menu set "Tools", "Color selection...", tmp$, "MainView" - - menu set "View", "Next file", tmp$, "MainView" - menu set "View", "Previous file", tmp$, "MainView" - menu set "View", "Auto indent", tmp$, "MainView" - menu set "View", "Auto completion", tmp$, "MainView" - menu set "View", "Refresh colors", tmp$, "MainView" - menu set "View", "Reformat sourcecode", tmp$, "MainView" - menu set "View", "Undo reformat", "disable", "MainView" - - if(toActivate = -1) then - option set "ToolbarOpen", "Enabled", false - option set "ToolbarNew", "Enabled", false - toActivate = 0 - else - option set "ToolbarOpen", "Enabled", true - option set "ToolbarNew", "Enabled", true - endif - option set "ToolbarSave", "Enabled", toActivate - option set "ToolbarClose", "Enabled", toActivate - option set "ToolbarCut", "Enabled", toActivate - option set "ToolbarPaste", "Enabled", toActivate - option set "ToolbarUndo", "Enabled", toActivate - option set "ToolbarText", "Enabled", toActivate - option set "ToolbarRun", "Enabled", toActivate - option set "ToolbarRunTerm", "Enabled", toActivate - option set "ToolbarPattern", "Enabled", toActivate - option set "ToolbarBuild", "Enabled", toActivate - option set "ToolbarGotoLine", "Enabled", toActivate - - option set "FindTCReplace", "Enabled", toActivate - option set "FindReplace", "Enabled", toActivate - option set "FindReplAll", "Enabled", toActivate - - return -end sub - -// Update the line numbering -sub UpdateLines(starty, height, topline, fontHeight) - local i, pos - local t$ - - if(globalCurrentText > 0) then - pos = splitview get "V2Split", "Divider" - 3 - draw flush "Lines"+str$(globalCurrentText) - for i=fontHeight-4-starty to height step fontHeight - t$ = str$(int(i/fontHeight)+topline+1) - draw text pos-(draw get "text-width", t$, "Lines"+str$(globalCurrentText)),i, t$, "Lines"+str$(globalCurrentText) - next i - endif - return -end sub - -// Open new file -sub NewDocument(foundEmpty) - local inloop - local browse$ - local i, n, err, nTemplates, isButton - local handle, handle2 - local x, y, winSize, w, t - local t$, txt$ - - x = (peek("desktopwidth")-500)/2 - y = (peek("desktopheight")-390)/2-50 - if(y<50) y=50 - - window open x+200-3000,y+150-3000 to x+700-3000,y+440-3000, "NewWindow", "yab-IDE New Program" - window set "NewWindow", "Feel", "Modal-App" - window set "NewWindow", "Flags", "not-zoomable, not-h-resizable, not-v-resizable" - - Header("New yab Program", "NewWindow", 500) - - text 10,50, "NewText1", "Please select one of the available templates for your program:", "NewWindow" - listbox 10,70 to 166,200, "NewList", 1, "NewWindow" - - handle = open(ideDir$+"Templates/TemplateList", "r") - if(handle>0) then - nTemplates = 0 - while(not eof(handle)) - nTemplates = nTemplates + 1 - dim tmp$(nTemplates) - tmp$(nTemplates) = GetLine$(handle)+"\n" - tmp$(nTemplates) = left$(tmp$(nTemplates), len(tmp$(nTemplates))-1) - if(left$(tmp$(nTemplates),1) = "#") nTemplates = nTemplates - 1 - wend - close handle - else - dim tmp$(1) - tmp$(1) = "Empty" - nTemplates = 1 - endif - for i = 1 to nTemplates step 4 - listbox add "NewList", tmp$(i) - next i - view 190,70 to 490,200, "NewImage", "NewWindow" - - browse$ = globalProjectDir$+"untitled"+str$(GetNewNumber(globalProjectDir$))+".yab" - - textcontrol 10,220 to 400,240, "NewName", "Name:", browse$, "NewWindow" - button 410,220 to 490,240, "NewBrowse", "Browse...", "NewWindow" - - checkbox image 10,270, "NewAdvanced", ideDir$+"img/arrowdown.png", ideDir$+"img/arrowright.png", "", "", false, "NewWindow" - winSize = false - text 20,270, "NewText2", "Advanced Options", "NewWindow" - button 430,260 to 490,280, "NewOk", "Ok", "NewWindow" - option set "NewOk", "enabled", false - isButton = false - - draw set "highcolor", 185,185,185, "NewWindow" - draw line 0,252 to 500,252, "NewWindow" - draw line 0,292 to 500,292, "NewWindow" - draw set "highcolor", 239,239,239, "NewWindow" - draw line 0,253 to 500,253, "NewWindow" - draw line 0,293 to 500,293, "NewWindow" - - // button 260,300 to 280,310, "NewHelp", "?", "NewWindow" - button 350,295 to 490,325, "NewDel", "Remove Template", "NewWindow" - option set "NewDel", "enabled", false - - if(not globalNoRCS) then - checkbox 10, 300, "NewCheckbox", "Use RCS Version Control", settingsUseRCS, "NewWindow" - // option set "NewCheckbox", "enabled", false - // option set "NewHelp", "enabled", false - endif - - textcontrol 10,330 to 490,350, "NewProject", "Project Directory", globalProjectDir$, "NewWindow" - - window set "NewWindow", "moveto", x,y - - inloop = true - dim msg$(1) - while(inloop) - n = split(message$, msg$(), "|") - for i = 1 to n - if(DEBUG and msg$(i)<>"") print msg$(i) - if(left$(msg$(i),16) = "NewList:_Invoke:") then - msg$(i) = "NewOk" - endif - switch(msg$(i)) - case "NewOk" - if(j>0) then - browse$ = textcontrol get$ "NewName" - if(arraysize(tmp$(), 1) = 1) then - txt$ = "" - else - handle = open(ideDir$+"Templates/"+tmp$(j), "r") - if(handle) then - while(not eof(handle)) - txt$ = txt$ + GetLine$(handle)+"\n" - wend - close(handle) - // txt$ = left$(txt$, len(txt$)-1) - else - alert MyTranslate$("Could not open template: ")+tmp$(j)+"\n\n"+MyTranslate$("Opening an empty file instead."), "Ok", "warning" - txt$ = "" - endif - endif - globalCurrentText = foundEmpty - textedit add "Text"+str$(globalCurrentText), txt$ - textedit set "Text"+str$(globalCurrentText), "changed", true - textedit set "Text"+str$(globalCurrentText), "gotoline", 1 - stackview set "Stack", globalCurrentText - stackview set "Lines", globalCurrentText - globalAllNames$(globalCurrentText) = browse$ - t = columnbox count "FileBox" - columnbox add "FileBox", 1, t+1,20, "__Icon__="+ideDir$+"img/nichtgespeichert.png" - columnbox add "FileBox", 2, t+1,20, GetFileName$(browse$) - columnbox select "FileBox", t+1 - - globalTextFinder(globalCurrentText) = t+1 - - option set "Text"+str$(globalCurrentText), "focus", true - oldScroll = -1 - globalNewNumber = globalNewNumber + 1 - globalNumOpenFiles = globalNumOpenFiles + 1 - inloop = false - endif - break - case "NewAdvanced:ON" - case "NewAdvanced:OFF" - winSize = not winSize - if(winSize) then - window set "NewWindow", "MinimumTo", 500,360 - window set "NewWindow", "MaximumTo", 500,360 - window set "NewWindow", "ResizeTo", 500,360 - else - window set "NewWindow", "MinimumTo", 500,290 - window set "NewWindow", "MaximumTo", 500,290 - window set "NewWindow", "ResizeTo", 500,290 - endif - break - case "NewBrowse" - browse$ = filepanel "Save-File", "New", globalProjectDir$ - if(browse$<>"") textcontrol set "NewName", browse$ - break - case "NewWindow:_QuitRequested" - inloop = false - break - case "_QuitRequested" - //emergency break - exit(1) - break - case "NewDel" - t$ = listbox get$ "NewList", (j-1)/4+1 - t = alert MyTranslate$("Really delete template")+" \""+t$+"\"?", "Yes", "Cancel", "", "warning" - if(t = 1) then - if((j-1)/4+1 < 4) then - alert "This standard template can not be deleted!", "Ok", "warning" - else - handle = open(ideDir$+"Templates/TemplateList", "r") - handle2 = open("/tmp/TemplateList", "w") - if(handle) then - if(handle2) then - while(not eof(handle)) - t$ = GetLine$(handle)+"\n" - if(left$(t$,len(t$)-1)<>tmp$(j)) then - print #handle2 t$; - else - t$ = GetLine$(handle)+"\n" - t$ = GetLine$(handle)+"\n" - t$ = GetLine$(handle)+"\n" - endif - wend - close(handle2) - system("mv /tmp/TemplateList "+ideDir$+"Templates/TemplateList") - system("rm "+ideDir$+tmp$(j+1)) - system("rm "+ideDir$+"Templates/"+tmp$(j)) - listbox remove "NewList", (j-1)/4+1 - listbox select "NewList", (j-5)/4+1 - msg$(i) = "NewList:_Select:"+str$((j-5)/4+1) - alert "Template successfully removed.", "Ok", "info" - else - alert "Error while deleting template!", "Ok", "stop" - endif - close(handle) - else - alert "Error while deleting template!", "Ok", "stop" - endif - endif - endif - - break - end switch - if(left$(msg$(i),16) = "NewList:_Select:") then - draw rect 0,0 to 200,140, "NewImage" - draw flush "NewImage" - j = (val(mid$(msg$(i),17,len(msg$(i))-1))-1)*4+1 - if(arraysize(tmp$(),1)>=j+1) then - err = draw image 50,0 to 250,100, ideDir$+tmp$(j+1), "NewImage" - endif - if(arraysize(tmp$(),1)>=j+2) then - draw text 10,110, tmp$(j+2), "NewImage" - endif - if(arraysize(tmp$(),1)>=j+3) then - draw text 10,125, tmp$(j+3), "NewImage" - endif - if(not isButton) then - isButton = false - option set "NewOk", "enabled", true - option set "NewDel", "enabled", true - endif - endif - next i - wend - - window close "NewWindow" -end sub - -sub GetNewNumber(dir$) - local tmp$ - local num: local i: local ret - local numFound - local t$(1) - - numFound = false - ret = 0 - tmp$ = system$("ls "+dir$+"untitled*.yab") - num = token(tmp$, t$(), "\n") - while(not numFound) - numFound = true - for i=1 to num - tmp$ = left$(t$(i), len(t$(i))-4) - tmp$ = right$(tmp$, len(tmp$)-8-len(dir$)) - if(ret = val(tmp$)) then - ret = ret + 1 - numFound = false - break - endif - next i - if(numFound) then - for i=1 to MAXFILES - tmp$ = dir$+"untitled"+str$(ret)+".yab" - if(globalAllNames$(i) = tmp$) then - ret = ret + 1 - numFound = false - break - endif - next i - endif - wend - return ret -end sub - -sub ImmediateExec(command$) - local result$ - - if(instr(command$, "input")) then - alert "Suspecting user input, therefore starting in a terminal.", "Ok", "info" - result$ = system$("Terminal "+yabDir$+" -enter -execute '"+command$+":exit'") - else - result$ = system$(yabDir$+" -execute '"+command$+":exit' 2>&1") - result$ = left$(result$, len(result$)-1) - - textedit clear "ImmediateOutput" - textedit add "ImmediateOutput", result$ - endif - - return -end sub - -sub GetFileName$(directory$) - local lastSlash - local j - - lastSlash = 0 - for j=1 to len(directory$) - if(mid$(directory$,j,1)="/" and mid$(directory$,j-1,1)<>"/") - lastSlash = j - next j - - return right$(directory$,len(directory$)-lastSlash) -end sub - -sub GetDirectory$(directory$) - local lastSlash - local j - - lastSlash = 0 - for j=1 to len(directory$) - if(mid$(directory$,j,1)="/" and mid$(directory$,j-1,1)<>"/") - lastSlash = j - next j - - return left$(directory$,lastSlash) -end sub - -sub ActivateText(num) - globalCurrentText = num - globalWasChanged = textedit get "Text"+str$(globalCurrentText), "hasChanged" - stackview set "Stack", globalCurrentText - stackview set "Lines", globalCurrentText - option set "Text"+str$(globalCurrentText), "focus", true - columnbox select "FileBox", globalTextFinder(num) - oldScroll = -1 - return -end sub - -sub ReadLineFromAttr(filename$) - a$=attribute get$ "",filename$ - if instr (a$,"linenumber") then - return attribute get "linenumber", filename$ - else return 0 - endif -end sub - -sub UpdateStatusbar() - static oldText$ - local newText$ - - if(globalCurrentText = 0) then - if(oldText$<>"") then - oldText$ = "" - draw flush "Statusbar" - draw set "highcolor", 200,200,200, "Statusbar" - draw line 0,0 to 2000,0, "Statusbar" - draw set "highcolor", 184,184,184, "Statusbar" - draw line 0,1 to 2000,1, "Statusbar" - draw set "highcolor", 239,239,239, "Statusbar" - draw line 0,2 to 2000,2, "Statusbar" - endif - return - endif - - newText$ = globalAllNames$(globalCurrentText) - if(textedit get "Text"+str$(globalCurrentText), "hasChanged") then - newText$ = newText$ + MyTranslate$(" (not saved) ") - else - newText$ = newText$ + " " - endif - - newText$ = newText$ + MyTranslate$("Line:")+" "+str$(textedit get "Text"+str$(globalCurrentText), "currentline") - newText$ = newText$ + " / "+str$(textedit get "Text"+str$(globalCurrentText), "countlines") - - - if(oldText$<>newText$) then - draw flush "Statusbar" - draw set "highcolor", 200,200,200, "Statusbar" - draw line 0,0 to 2000,0, "Statusbar" - draw set "highcolor", 184,184,184, "Statusbar" - draw line 0,1 to 2000,1, "Statusbar" - draw set "highcolor", 239,239,239, "Statusbar" - draw line 0,2 to 2000,2, "Statusbar" - draw set "highcolor", 0,0,0, "Statusbar" - draw text 5,13, "File: ", "Statusbar" - // draw set "highcolor", 0,200,0, "Statusbar" - draw text (5+draw get "Text-Width", MyTranslate$("File: "), "Statusbar"),13, newText$, "Statusbar" - // draw text (5+draw get "Text-Width", "Status: ", "Statusbar"),11, globalAllNames$(globalCurrentText)+" saved", "Statusbar" - oldText$ = newText$ - endif - - return -end sub - -sub WaitWindow(text$) - local x - local y - local width - local err - - x = peek("desktopwidth")/2 - 125 - y = peek("desktopheight")/2 - 100 - window open x,y to x+249,y+79, "WaitWindow", "" - window set "WaitWindow", "feel", "modal-app" - window set "WaitWindow", "look", "modal" - window set "WaitWindow", "Flags", "not-closable, not-zoomable, not-h-resizable, not-v-resizable" - err = draw image 0,0, ideDir$+"img/Loading.png", "WaitWindow" - - w = draw get "text-width", GetFileName$(text$), "WaitWindow" - text 143-w/2,32, "TWait", GetFileName$(text$), "WaitWindow" - - w = draw get "text-width", MyTranslate$("Please wait..."), "WaitWindow" - text 143-w/2,60, "TRunning2", "Please wait...", "WaitWindow" - - draw set "Bitstream Vera Sans, Bold Oblique, 14", "WaitWindow" - w = draw get "text-width", MyTranslate$("Loading Program"), "WaitWindow" - draw text 143-w/2,20, "Loading Program", "WaitWindow" - - return -end sub - -// Run the program and display its output -sub RunProgram(yabFile$) - local tmp$, unique$ - local num, i, t, teamID, pos - local x, y, err, w - - if(isRunning) return - isRunning = true - - // easy way to make the tmp file sort-of unique - unique$ = date$+time$ - - x = peek("desktopwidth")/2 - 125 - y = peek("desktopheight")/2 - 100 - window open x,y to x+249,y+79, "Running", "" - window set "Running", "feel", "modal-app" - window set "Running", "look", "modal" - window set "Running", "Flags", "not-closable, not-zoomable, not-h-resizable, not-v-resizable" - err = draw image 0,0, ideDir$+"img/Running.png", "Running" - - w = draw get "text-width", GetFileName$(yabFile$), "Running" - text 143-w/2,32, "TRunning", GetFileName$(yabFile$), "Running" - button 150,50 to 240,75, "BRunning", "Break", "Running" - - draw set "Bitstream Vera Sans, Bold Oblique, 14", "Running" - w = draw get "text-width", MyTranslate$("Running Program"), "Running" - draw text 143-w/2,20, "Running Program", "Running" - - // text 5,5, "TRunning", MyTranslate$("Now Running: ")+GetFileName$(yabFile$), "Running" - // button 50,25 to 150,45, "BRunning", "Break", "Running" - listbox clear "YabOutputList" - window set "Running", "deactivate" - - if DEBUG print "cd "+GetDirectory$(yabFile$)+";"+yabDir$+" "+settingsYabParam$+" "+yabFile$+" "+settingsProgParam$+" &>/tmp/yab-log."+unique$+" &" - system("cd "+GetDirectory$(yabFile$)+";"+yabDir$+" "+settingsYabParam$+" "+yabFile$+" "+settingsProgParam$+" &>/tmp/yab-log."+unique$+" &") - sleep 0.1 - while(teamID <> -1) - teamID = thread get "teamid", yabDir$+" "+param$+yabFile$ - - handle = open("/tmp/yab-log."+unique$,"r") - if(handle) then - seek handle,pos - while(not eof(handle)) - tmp$ = GetLine$(handle)+"\n" - listbox add "YabOutputList", left$(tmp$, len(tmp$)-1) - listbox select "YabOutputList", listbox count "YabOutputList" - pos = tell(handle) - wend - close(handle) - endif - - if(instr(message$, "BRunning")) then - t = thread remove "teamid", teamID - if(not t) alert "Error! Program could not be killed.", "Oops", "stop" - break - endif - sleep 0.1 - wend - - window close "Running" - - system("rm -f "+"/tmp/yab-log."+unique$+" >/dev/null") - - isRunning = false - return -end sub - -// Run the program in a terminal -sub RunInTerminal(yabFile$) - local tmp$, param$ - local num, i, t, pos - local x, y, err, w - - if(isRunning) return - isRunning = true - - x = peek("desktopwidth")/2 - 150 - y = peek("desktopheight")/2 - 100 - window open x,y to x+299,y+79, "Running", "" - window set "Running", "feel", "modal-app" - window set "Running", "look", "modal" - window set "Running", "Flags", "not-closable, not-zoomable, not-h-resizable, not-v-resizable" - err = draw image 0,0, ideDir$+"img/Running.png", "Running" - - w = draw get "text-width", GetFileName$(yabFile$), "Running" - text 168-w/2,32, "TRunning", GetFileName$(yabFile$), "Running" - - w = draw get "text-width", MyTranslate$("Close terminal to break program"), "Running" - text 168-w/2,60, "TRunning2", "Close terminal to break program", "Running" - - draw set "Bitstream Vera Sans, Bold Oblique, 14", "Running" - w = draw get "text-width", MyTranslate$("Running Program"), "Running" - draw text 168-w/2,20, "Running Program", "Running" - - window set "Running", "deactivate" - sleep 0.1 - - param$ = settingsYabParam$ + " -enter" - tmp$ = system$("Terminal "+yabDir$+" "+param$+" "+yabFile$+" "+settingsProgParam$+" 2>&1") - window close "Running" - - listbox clear "YabOutputList" - dim result$(1) - num = split(tmp$, result$(), "\n") - for i = 1 to num - listbox add "YabOutputList", result$(i) - next i - - isRunning = false - return -end sub - -sub AboutWindow() - local x - local y - local width - local t - - x = peek("desktopwidth")/2 - 200 - y = peek("desktopheight")/2 - 200 - window open x-3000,y-3000 to x+400-3000, y+300-3000, "AboutWindow", "" - window set "AboutWindow", "look", "bordered" - window set "AboutWindow", "feel", "modal-app" - window set "AboutWindow", "MaximumTo", 400,300 - window set "AboutWindow", "MinimumTo", 400,300 - window set "AboutWindow", "Flags", "not-closable, not-zoomable, not-h-resizable, not-v-resizable" - - draw set "bgcolor", 255,255,255, "AboutWindow" - draw set "lowcolor", 255,255,255, "AboutWindow" - - width = draw get "text-width", "(c) 2006-2015 in terms of the Artistic License", "AboutWindow" - draw text 198-width/2, 260, "(c) 2006-2015 in terms of the Artistic License", "AboutWindow" - width = draw get "text-width", "Coded by Jan, graphics by Genki, thanks to BeSly", "AboutWindow" - draw text 200-width/2, 240, "Coded by Jan, graphics by Genki, thanks to BeSly", "AboutWindow" - - if(peek$("os") = "Haiku") then - draw set "DejaVu Sans, Bold, 18", "AboutWindow" - else - draw set "Swis721 BT, Bold, 18", "AboutWindow" - endif - width = draw get "text-width", "yab-IDE", "AboutWindow" - draw text 200-width/2, 25, "yab-IDE", "AboutWindow" - if(peek$("os") = "Haiku") then - draw set "DejaVu Sans, Bold, 10", "AboutWindow" - else - draw set "Swis721 BT, Bold, 10", "AboutWindow" - endif - width = draw get "text-width", "Version "+versionnumber$, "AboutWindow" - draw text 200-width/2, 40, "Version "+versionnumber$, "AboutWindow" - - t = draw image 100,50 to 300,-1, ideDir$+"img/yablogo.png", "AboutWindow" - - button 100,265 to 300,290, "AboutButton", "Close", "AboutWindow" - option set "AboutButton", "focus", true - - window set "AboutWindow", "moveto", x,y - - while(not instr(message$, "AboutButton")) - wend - - - window close "AboutWindow" - return -end sub - -sub SaveAsTemplate() - local x: local y - local w: local i: local n - local isButton - local handle: local handle2 - local inloop - local msg$(1) - local name$: local description1$: local description2$: local image$ - local t$ - - x = (peek("desktopwidth")-600)/2 - y = (peek("desktopheight")-200)/2-50 - if(y<50) y=50 - - window open x-3000,y-3000 to x+600-3000,y+200-3000, "SaveTempWindow", "yab-IDE Save as Template" - window set "SaveTempWindow", "Feel", "Modal-App" - window set "SaveTempWindow", "Flags", "not-zoomable, not-h-resizable, not-v-resizable" - - Header("Save as Template", "SaveTempWindow", 600) - - text 10,50, "SaveTempText1", "Save your code as a template for other programs:", "SaveTempWindow" - textcontrol 10,70 to 380,90, "SaveTempName", "Template Name", "", "SaveTempWindow" - text 10,98, "SaveTempText2", "Description (not more than 30 characters per line)", "SaveTempWindow" - textcontrol 5,110 to 380,120, "SaveTempDes1", "", "", "SaveTempWindow" - textcontrol 5,130 to 380,150, "SaveTempDes2", "", "", "SaveTempWindow" - - draw set "highcolor", 0,0,0, "SaveTempWindow" - draw set "lowcolor", 255,255,0, "SaveTempWindow" - draw set 0, "240225195135015030060120" - draw rect 390,50 to 590,150, "SaveTempWindow" - draw set 0, "lowsolidfill" - draw set "lowcolor", 216,216,216, "SaveTempWindow" - draw rect 400,60 to 580,140, "SaveTempWindow" - draw set 0, "highsolidfill" - - w = draw get "Text-width", MyTranslate$("Drop image here"), "SaveTempWindow" - draw text 490-w/2,105, "Drop image here", "SaveTempWindow" - view dropzone "SaveTempWindow" - - draw set "highcolor", 185,185,185, "SaveTempWindow" - draw line 0,162 to 600,162, "SaveTempWindow" - draw set "highcolor", 239,239,239, "SaveTempWindow" - draw line 0,163 to 600,163, "SaveTempWindow" - - button 530,170 to 590,190, "SaveTempOk", "Save", "SaveTempWindow" - option set "SaveTempOk", "enabled", false - isButton = false - - option set "SaveTempName", "focus", true - - window set "SaveTempWindow", "moveto", x,y - - inloop = true - while(inloop) - n = split(message$, msg$(), ":|") - for i = 1 to n - if(DEBUG and msg$(i)<>"") print msg$(i) - // check for emergency exit - if(i > 1) then - if(msg$(i) = "_QuitRequested" and msg$(i-1) <> "SaveTempWindow") then - exit(1) - endif - else - if(msg$(i) = "_QuitRequested") then - exit(1) - endif - endif - switch(msg$(i)) - case "_Dropped" - if(arraysize(msg$(),1)>=i+1) then - w = draw image 390,50 to 590,150, msg$(i+1), "SaveTempWindow" - if(w<>0) then - alert "Could not load image!", "Ok", "warning" - else - image$ = msg$(i+1) - endif - endif - break - case "SaveTempOk" - name$ = left$(textcontrol get$ "SaveTempName", 50) - description1$ = left$(textcontrol get$ "SaveTempDes1", 30) - description2$ = left$(textcontrol get$ "SaveTempDes2", 30) - imageShort$ = GetFileName$(image$) - system("cp "+image$+" "+ideDir$+"Templates/img/"+imageShort$) - handle = open(ideDir$+"Templates/TemplateList", "a") - if(handle) then - print #handle "#" - print #handle name$ - print #handle "Templates/img/"+imageShort$ - print #handle description1$ - print #handle description2$ - close(handle) - handle2 = open(ideDir$+"Templates/"+name$, "w") - if(handle2) then - t$ = textedit get$ "Text"+str$(globalCurrentText) - print #handle t$; - close(handle2) - else - alert "Error while saving template!", "Ok", "warning" - endif - else - alert "Error while saving template!", "Ok", "warning" - endif - inloop = false - break - case "_QuitRequested" - inloop = false - break - end switch - next i - - name$ = textcontrol get$ "SaveTempName" - if(name$<>"" and not isButton) then - option set "SaveTempOk", "enabled", true - isButton = true - endif - if(name$="" and isButton) then - option set "SaveTempOk", "enabled", false - isButton = false - endif - wend - - window close "SaveTempWindow" - return -end sub - -sub SaveCurrentFile() -local savetext$ - handle = open(globalAllNames$(globalCurrentText), "w") - if(handle) then - savetext$=textedit get$ "Text"+str$(globalCurrentText) - if right$(savetext$,1)<>chr$(10) savetext$=savetext$+chr$(10) - print #handle savetext$; - close(handle) - tmpCurrentLine = textedit get "Text"+str$(globalCurrentText), "currentline" - print "ATTR SET "; - print str$(tmpCurrentLine) - attribute set "Int", "linenumber", str$(tmpCurrentLine), globalAllNames$(globalCurrentText) - textedit set "Text"+str$(globalCurrentText), "changed", false - globalWasChanged = false - columnbox add "FileBox", 1, globalTextFinder(globalCurrentText), 20, "__Icon__="+ideDir$+"img/gespeichert.png" - else - alert "File could not be saved!", "Ok", "warning" - return false - endif - return true -end sub - -sub Header(headerText$, window$, size) - local w - local head$ - - head$ = window$+"Header" - layout "none", window$ - view 0,0 to size,40, head$, window$ - draw set "bgcolor", 230,230,255, head$ - draw set "lowcolor", 230,230,255, head$ - if(peek$("os") = "Haiku") then - draw set "DejaVu Sans, Condensed Bold, 18", head$ - else - draw set "Swis721 BT, Bold, 18", head$ - endif - draw set "highcolor", 0,0,0, head$ - w = draw get "Text-width", MyTranslate$(headerText$), head$ - draw text size-w-10,25, headerText$, head$ - draw set "highcolor", 239,239,239, head$ - draw line 0,40 to size,40, head$ - draw set "highcolor", 185,185,185, head$ - draw line 0,39 to size,39, head$ - return -end sub - -// open the build factory window -sub Building() - local x, y, inloop, isEmpty - local binName$, t$, myTab$, result$ - local msg$(1) - local i, n, tmp - - - x = (peek("desktopwidth")-500)/2 - y = (peek("desktopheight")-400)/2-50 - if(y<50) y=50 - - window open x-3000,y-3000 to x+500-3000,y+400-3000, "BuildWindow", "yab-IDE Build Factory" - window set "BuildWindow", "Feel", "Modal-App" - window set "BuildWindow", "Flags", "not-zoomable, not-h-resizable, not-v-resizable" - - Header("Build Factory", "BuildWindow", 500) - - if(right$(globalAllNames$(globalCurrentText),4) = ".yab") then - binName$ = left$(globalAllNames$(globalCurrentText), len(globalAllNames$(globalCurrentText))-4) - else - binName$= globalAllNames$(globalCurrentText)+".bin" - endif - - while (instr(binName$, "/")) - pos=instr(binName$, "/") - binName$=right$(binName$,len(binName$)-pos) - wend - - - isEmpty = false - - textcontrol 10,50 to 380,70, "BuildPath", "Target file name:", binName$, "BuildWindow" - AppSig$="application/x-vnd.yab-app" - textcontrol 10,80 to 380,100, "AppSig", "Application Signature:", AppSig$, "BuildWindow" - //button 390,50 to 490,70, "BuildBrowse", "Browse", "BuildWindow" - - button 390,100 to 490,130, "BuildBuild", "Create Binary", "BuildWindow" - - MyLine(0,140,500,140, "BuildWindow") - textedit 10,155 to 490,390, "BuildOutput", 3, "BuildWindow" - textedit set "BuildOutput", "editable", false - textedit set "BuildOutput", "wordwrap", false - textedit set "BuildOutput", "textwidth", 4000 - - window set "BuildWindow", "moveto", x, y - - if(left$(system$("gcc 2>&1"),4) <> "gcc:") then - alert "The compiler GCC was not found!\n\nPlease install a complete Haiku system.", "Ok", "stop" - window close "BuildWindow" - return - endif - - textedit add "BuildOutput", MyTranslate$("Build Factory Output\n\n") - - inloop = true - while(inloop) - n = split(message$, msg$(), "|") - for i = 1 to n - if(DEBUG and msg$(i)<>"") print msg$(i) - switch(msg$(i)) - case "BuildBuild" - option set "BuildBuild", "enabled", false - option set "BuildPath", "enabled", false - //option set "BuildBrowse", "enabled", false - option set "AppSig", "enabled", false - AppSig$=textcontrol get$ "AppSig" - if AppSig$="" AppSig$="application/x-vnd.yab-app" - binName$=textcontrol get$ "BuildPath" - textedit add "BuildOutput", MyTranslate$("Please wait, processing... (this may take a long time!)\n\n") - print "cd "+buildDir$+"; "+yabDir$+" BuildFactory.yab "+binName$+" "+globalAllNames$(globalCurrentText)+" "+AppSig$+" 2>&1\n\n" - result$ = system$("cd "+buildDir$+"; yab BuildFactory.yab "+binName$+" "+globalAllNames$(globalCurrentText)+" "+AppSig$+" yab-ide 2>&1") - textedit add "BuildOutput", result$ - - - option set "BuildBuild", "enabled", true - option set "BuildPath", "enabled", true - //option set "BuildBrowse", "enabled", true - option set "AppSig", "enabled", true - - if(IfExists(buildDir$+"/"+binName$)) then - alert "Build was successful", "Ok", "info" - else - alert "Build failed!", "Ok", "warning" - endif - system("rm "+ buildDir$+"/"+binName$) - break - //case "BuildBrowse" - // t$ = filepanel "save-file", "Save", GetDirectory$(binName$) - // if(t$<>"") then - // textcontrol set "BuildPath", t$ - // binName$ = t$ - // endif - // break - case "_QuitRequested" - case "BuildWindow:_QuitRequested" - inloop = false - break - end switch - next i - if(not isEmpty and textcontrol get$ "BuildPath" = "") then - AppSig$=textcontrol get$ "AppSig" - option set "BuildBuild", "enabled", false - isEmpty = true - endif - if(isEmpty and textcontrol get$ "BuildPath" <> "") then - AppSig$=textcontrol get$ "AppSig" - option set "BuildBuild", "enabled", true - isEmpty = false - endif - - - - wend - window close "BuildWindow" - return -end sub - -// open the option window -sub OptionWindow() - local x, y, inloop - local msg$(1), style$(1) - local styleNum, styleCount - local i, n, optCurrent - local tmp$ - local handle, j, hasItem - local family$, style$, size$ - local defaultFamily - - x = (peek("desktopwidth")-650)/2 - y = (peek("desktopheight")-400)/2-50 - if(y<50) y=50 - - window open x+100-3000,y+150-3000 to x+750-3000,y+550-3000, "OptWindow", "yab-IDE Options" - window set "OptWindow", "Feel", "Modal-App" - window set "OptWindow", "Flags", "not-zoomable, not-h-resizable, not-v-resizable" - - Header("Options", "OptWindow", 650) - - draw set "highcolor", 185,185,185, "OptWindow" - draw line 11,51 to 138,51, "OptWindow" - draw line 10,50 to 139,50, "OptWindow" - draw line 11,51 to 11,388, "OptWindow" - draw line 10,50 to 10,389, "OptWindow" - draw set "highcolor", 239,239,239, "OptWindow" - draw line 12,389 to 139,389, "OptWindow" - draw line 11,390 to 139,390, "OptWindow" - draw line 139,52 to 139,389, "OptWindow" - draw line 140,51 to 140,390, "OptWindow" - draw set "highcolor", 0,0,0, "OptWindow" - - treebox 12,52 to 138,388, "OptTree", 0, "OptWindow" - // treebox add "OptTree", "Interpreter" - // treebox add "OptTree", "Interpreter", "Libraries", true - // treebox add "OptTree", "Interpreter", "Execution", true - treebox add "OptTree", "Editor" - treebox add "OptTree", "Editor", "Auto completion", true - // treebox add "OptTree", "Editor", "Syntax Highlighting", true - treebox add "OptTree", "Editor", "General", true - treebox add "OptTree", "Environment" - if(not settingsRCSOff) treebox add "OptTree", "Environment", "Version Control", true - treebox add "OptTree", "Environment", "Language", true - treebox add "OptTree", "Environment", "Directories", true - treebox select "OptTree", 2 - - // button 430,370 to 530,390, "OptDefault", "Default", "OptWindow" - // button 540,370 to 640,390, "OptOk", "Close", "OptWindow" - - // MyLine(0,362,650,362,"OptWindow") - - optCurrent = 1 - stackview 150,50 to 640,390, "OptStack", 4, "OptWindow" - - // General - boxview 0,0 to 490, 340, "OptBox3", "General", 2, "OptStack1" - spincontrol 10,5, "OptGenSpin", "Number of spaces per tab:", 1,20,1, "OptBox3" - spincontrol set "OptGenSpin", settingsTabSpaces - MyLine(10,35,470,35, "OptBox3") - checkbox 10,45, "OptGenSaving", "Ask about saving before running a program", settingsAskForSaving, "OptBox3" - checkbox 10,65, "OptGenReformat", "Show warning when reformating sourcecode did not close all loops and conditions", settingsReformatAlert, "OptBox3" - checkbox 10,85, "OptGenReformatUndo", "Show warning before undo reformating", settingsReformatUndoAlert, "OptBox3" - checkbox 10,105, "OptGenReplaceAll", "Show warning before applying Replace All", settingsFindAlert, "OptBox3" - MyLine(10,135,470,135, "OptBox3") - - text 10,145, "OptGenTxt", "Select font for editor:", "OptBox3" - dropbox 12,165 to 240,185, "OptGenFontFamily", "Font Family", "OptBox3" - dropbox 250,165 to 370,185, "OptGenFontStyle", "Font Style", "OptBox3" - spincontrol 380,160, "OptGenFontSize", "Font Size", 8,50,1, "OptBox3" - - n = token(draw get$ "FontFamily", msg$(), "|") - for i = 1 to n - dropbox add "OptGenFontFamily", msg$(i) - if(msg$(i) = settingsFontFamily$) j = i - if(msg$(i) = "Courier10 BT") defaultFamily = i - next i - if(j>0) then - dropbox select "OptGenFontFamily", j - n = token(draw get$ settingsFontFamily$, msg$(), "|") - for i = 1 to n - dropbox add "OptGenFontStyle", msg$(i) - if(msg$(i) = settingsFontStyle$) j = i - next i - if(j>0) dropbox select "OptGenFontStyle", j - endif - spincontrol set "OptGenFontSize", settingsFontSize - - view 20,205 to 460,255, "OptGenSample", "OptBox3" - draw set "bgcolor", 255,255,255, "OptGenSample" - draw set settingsFontFamily$+","+settingsFontStyle$+","+str$(settingsFontSize), "OptGenSample" - n = draw get "text-width", MyTranslate$("My hovercraft is full of eels."), "OptGenSample" - draw text (440-n)/2,(50-settingsFontSize)/2+settingsFontSize, "My hovercraft is full of eels.", "OptGenSample" - MyLine(10,290,470,290,"OptBox3") - button 320,297 to 470,317, "OptDefault", "Factory Settings", "OptBox3" - - // Syntax Highlighing - // boxview 0,0 to 490, 340, "OptBox4", "Syntax Highlighting", 2, "OptStack2" - - // Auto completion - boxview 0,0 to 490, 340, "OptBox5", "Auto completion", 2, "OptStack2" - checkbox 10,10, "OptACCheck", "Enable auto completion", settingsAutoCompletion, "OptBox5" - spincontrol 10,30, "OptACNum", "Number of characters for starting completion:", 1,20,1, "OptBox5" - spincontrol set "OptACNum", settingsACNumChar - MyLine(10,60,470,60,"OptBox5") - listbox 10,75 to 180,275, "OptACList", 1, "OptBox5" - textcontrol 190,185 to 470,205, "OptACTC", "New Entry:", "", "OptBox5" - button 320,215 to 470,235, "OptACAdd", "Add New Entry", "OptBox5" - MyLine(190,245,470,245,"OptBox5") - MyLine(190,175,470,175,"OptBox5") - button 370,255 to 470,275, "OptACRemove", "Remove Entry", "OptBox5" - text 190,75, "OptACText1", "Note: You have to restart the IDE to update the", "OptBox5" - text 190,90, "OptACText2", "autocompletion when removing entries.", "OptBox5" - handle = open(ideDir$+"data/autocompletion", "r") - if(handle) then - while(not eof(handle)) - tmp$ = GetLine$(handle)+"\n" - listbox add "OptACList", left$(tmp$, len(tmp$)-1) - wend - close(handle) - endif - MyLine(10,290,470,290,"OptBox5") - button 320,297 to 470,317, "OptDefault", "Factory Settings", "OptBox5" - - // Dirs - boxview 0,0 to 490, 340, "OptBox6", "Directories", 2, "OptStack3" - text 10,10, "OptDirTxt", "Note: Only change the directories, when you know what you are doing!", "OptBox6" - MyLine(10,30,470,30, "OptBox6") - textcontrol 10,45 to 470,65, "OptDirBinDir", "Default yab Binary", yabDir$, "OptBox6" - // MyLine(10,45,470,45, "OptBox6") - // textcontrol 10,60 to 360,80, "OptDirProjDir", "Project Directory", globalProjectDir$, "OptBox6" - textcontrol 10,80 to 470,100, "OptDirYabDir", "Default yab Directory", settingsYabDir$, "OptBox6" - MyLine(10,115,470,115, "OptBox6") - MyLine(10,290,470,290,"OptBox6") - button 320,297 to 470,317, "OptDefault", "Factory Settings", "OptBox6" - - // Language - boxview 0,0 to 490, 340, "OptBox8", "Language", 2, "OptStack4" - checkbox 10,10, "OptLangCheck", "Use automatic localization", restartSettingsLangUse, "OptBox8" - MyLine(10,40,470,40,"OptBox8") - columnbox 10,55 to 470,275, "OptLangList", false, "", "OptBox8" - columnbox column "OptLangList", "Supported Languages", 1, 460,460,460, "align-left" - MyLine(10,290,470,290,"OptBox8") - button 320,297 to 470,317, "OptDefault", "Factory Settings", "OptBox8" - columnbox color "OptLangList", "Selection-Active", 220,220,250 - columnbox color "OptLangList", "Row-Divider", 255,255,255 - tmp$ = system$("ls /boot/common/data/locale/catalogs/"+settingsLangPath$+"/*.catalog") - n = token(tmp$, msg$(), "\n") - for i = 1 to n - columnbox add "OptLangList", 1,i,18,msg$(i) - next i - - window set "OptWindow", "moveto", x,y - - inloop = true - while(inloop) - n = split(message$, msg$(), "|") - for i = 1 to n - if(DEBUG and msg$(i)<>"") print msg$(i) - switch(msg$(i)) - case "_QuitRequested" - // emergency quit - exit(1) - break - case "OptOk" - case "OptWindow:_QuitRequested" - inloop = false - break - - // General - case "OptGenSaving:ON" - case "OptGenSaving:OFF" - settingsAskForSaving = not settingsAskForSaving - break - case "OptGenReformat:ON" - case "OptGenReformat:OFF" - settingsReformatAlert = not settingsReformatAlert - break - case "OptGenReformatUndo:ON" - case "OptGenReformatUndo:OFF" - settingsReformatUndoAlert = not settingsReformatUndoAlert - break - case "OptGenReplaceAll:ON" - case "OptGenReplaceAll:OFF" - settingsFindAlert = not settingsFindAlert - break - - // Autocompletion - case "OptACCheck" - settingsAutoCompletion = not settingsAutoCompletion - break - case "OptACRemove" - break - case "OptACAdd" - tmp$ = textcontrol get$ "OptACTC" - if(tmp$<>"") then - hasItem = false - for j=1 to listbox count "OptACList" - if(tmp$ = listbox get$ "OptACList", i) then - hasItem = true - break - endif - next j - if(not hasItem) then - listbox add "OptACList", tmp$ - listbox sort "OptACList" - else - alert "Entry already exists.", "Ok", "info" - endif - endif - break - - // Language - case "OptLangCheck:ON" - case "OptLangCheck:OFF" - restartSettingsLangUse = not restartSettingsLangUse - alert "Restart yab-IDE to change localization", "Ok", "info" - break - - // Default - case "OptDefault" - t = stackview get "OptStack" - switch(t) - case 1 - settingsAskForSaving = true - settingsReformatAlert = true - settingsReformatUndoAlert = true - settingsFindAlert = true - settingsTabSpaces = 4 - settingsFontStyle$ = "Roman" - settingsFontSize = 12 - spincontrol set "OptGenSpin", settingsTabSpaces - checkbox set "OptGenSaving", settingsAskForSaving - checkbox set "OptGenReformat", settingsReformatAlert - checkbox set "OptGenReformatUndo", settingsReformatUndoAlert - checkbox set "OptGenReplaceAll", settingsFindAlert - dropbox select "OptGenFontFamily", defaultFamily - if(settingsFontFamily$<> "Courier10 BT") then - settingsFontFamily$ = "Courier10 BT" - dropbox clear "OptGenFontStyle" - styleCount = token(draw get$ settingsFontFamily$, style$(), "|") - for styleNum = 1 to styleCount - dropbox add "OptGenFontStyle", style$(styleNum) - next styleNum - dropbox select "OptGenFontStyle", 1 - OptionUpdateSample() - endif - spincontrol set "OptGenFontSize", settingsFontSize - for j = 1 to MAXFILES - textedit set "Text"+str$(j), "TabWidth", settingsTabSpaces*7 - next j - break - case 2 - settingsAutoCompletion = true - settingsACNumChar = 2 - checkbox set "OptACCheck", settingsAutoCompletion - spincontrol set "OptACNum", settingsACNumChar - break - case 3 - if(system("test -d /boot/apps/Development/yab-1.0/") = 0) then - settingsYabDir$ = "/boot/apps/Development/yab-1.0/" - elsif(system("test -d /boot/apps/yab-1.0/") = 0) then - settingsYabDir$ = "/boot/apps/yab-1.0/" - else - alert "Could not find yab 1.0 directory!\n\nPlease do a proper installation.", "Ok", "warning" - endif - textcontrol set "OptDirYabDir", settingsYabDir$ - - if(system("test -e /boot/home/config/bin/yab") = 0) then - yabDir$ = "/boot/home/config/bin/yab" - else - alert "Could not find yab binary!\n\nPlease do a proper installation.", "Ok", "warning" - endif - textcontrol set "OptDirBinDir", yabDir$ - break - case 4 - if(restartSettingsLangUse = false) then - restartSettingsLangUse = true - checkbox set "OptLangCheck",restartSettingsLangUse - alert "Restart yab-IDE to change localization", "Ok", "info" - endif - break - end switch - break - end switch - - // Font stuff - if(left$(msg$(i), 17) = "OptGenFontFamily:") then - settingsFontFamily$ = right$(msg$(i), len(msg$(i))-17) - dropbox clear "OptGenFontStyle" - styleCount = token(draw get$ settingsFontFamily$, style$(), "|") - for styleNum = 1 to styleCount - dropbox add "OptGenFontStyle", style$(styleNum) - next styleNum - dropbox select "OptGenFontStyle", 1 - settingsFontStyle$ = style$(1) - OptionUpdateSample() - endif - if(left$(msg$(i), 16) = "OptGenFontStyle:") then - settingsFontStyle$ = right$(msg$(i), len(msg$(i))-16) - OptionUpdateSample() - endif - - if(left$(msg$(i), 8) = "OptACTC:") then - option set "OptACAdd", "focus", true - endif - if(left$(msg$(i), 16) = "OptTree:_Select:") then - t = val(right$(msg$(i), len(msg$(i))-16)) - tmp$ = treebox get$ "OptTree", t - switch(tmp$) - case MyTranslate$("General"): t = 1: break - // case MyTranslate$("Syntax Highlighting"): t = 2: break - case MyTranslate$("Auto completion"): t = 2: break - case MyTranslate$("Directories"): t = 3: break - case MyTranslate$("Language"): t = 4: break - // case MyTranslate$("Version Control"): t = 6: break - default: t = 0: break - end switch - if(t>0) then - stackview set "OptStack", t - optCurrent = t - endif - endif - - if(left$(msg$(i), 13) = "OptDirYabDir:") then - tmp$ = right$(msg$(i), len(msg$(i))-13) - if(system("test -d "+tmp$) = 0) then - settingsYabDir$ = tmp$ - alert MyTranslate$("New yab directory set to:\n\n")+tmp$+MyTranslate$("\n\nRestart the IDE using the new directory."), "Ok", "info" - else - alert MyTranslate$("Invalid directory:\n\n")+tmp$, "Ok", "warning" - textcontrol set "OptDirYabDir", settingsYabDir$ - endif - endif - if(left$(msg$(i), 13) = "OptDirBinDir:") then - tmp$ = right$(msg$(i), len(msg$(i))-13) - if(system("test -e "+tmp$) = 0) then - yabDir$ = tmp$ - alert MyTranslate$("yab binary set to:\n\n")+tmp$, "Ok", "info" - else - alert MyTranslate$("Invalid file:\n\n")+tmp$, "Ok", "warning" - textcontrol set "OptDirBinDir", yabDir$ - endif - endif - next i - if(spincontrol get "OptGenFontSize" <> settingsFontSize) then - settingsFontSize = spincontrol get "OptGenFontSize" - OptionUpdateSample() - endif - if(spincontrol get "OptGenSpin" <> settingsTabSpaces) then - settingsTabSpaces = spincontrol get "OptGenSpin" - for j = 1 to MAXFILES - textedit set "Text"+str$(j), "TabWidth", settingsTabSpaces*7 - next j - endif - wend - - window close "OptWindow" - - return -end sub - -// draw the example text (OptionWindow) -sub OptionUpdateSample() - local n - local scroll, scrollLine, scrollPos - - draw flush "OptGenSample" - draw set settingsFontFamily$+","+settingsFontStyle$+","+str$(settingsFontSize), "OptGenSample" - n = draw get "text-width", MyTranslate$("My hovercraft is full of eels."), "OptGenSample" - draw text (440-n)/2,50-(50-settingsFontSize)/2, "My hovercraft is full of eels.", "OptGenSample" - for n = 1 to MAXFILES - textedit set "Text"+str$(n), "font", settingsFontFamily$+","+settingsFontStyle$+","+str$(settingsFontSize) - draw set settingsFontFamily$+","+settingsFontStyle$+","+str$(settingsFontSize), "Lines"+str$(n) - next n - if(globalCurrentText>0) then - globalRealFontSize = textedit get "Text"+str$(globalCurrentText), "line-height", 1 - scroll = textedit get "Text"+str$(globalCurrentText), "vertical-scrollbar" - scrollLine = int(scroll/globalRealFontSize) - scrollPos = mod(scroll,globalRealFontSize) - UpdateLines(scrollPos, 1200, scrollLine, globalRealFontSize) - endif - return -end sub - -// draw a sort of 3D line -sub MyLine(x1,y1,x2,y2,View$) - draw set "highcolor", 185,185,185, View$ - draw line x1,y1 to x2,y2, View$ - draw set "highcolor", 239,239,239, View$ - if(x1=x2) then - draw line x1+1,y1 to x2+1,y2, View$ - else - draw line x1,y1+1 to x2,y2+1, View$ - endif - draw set "highcolor", 0,0,0, View$ - return -end sub - -// only translates when a translation is wanted -sub MyTranslate$(txt$) - if(settingsLangUse) return menu translate$(txt$) - return txt$ -end sub - -// returns true if filename$ exists -sub IfExists(filename$) - return not system("test -e "+filename$) -end sub - -// Create a new toolbar. -// -// x1,y1 is the upper left starting point -// x2 is the right border of the toolbar -// note: the toolbar is always 30 pixels in height! -// id$ is the toolbar ID -// dir$ is the directory, where the icons can be found -// view$ is the view on which the Toolbar is created -// -// Note: this will change the layout of your view view$. -sub ToolbarCreate(x1,y1,x2, id$, dir$, view$) - layout "left, right", view$ - view x1,y1 to x2,y1+32, id$, view$ - // layout "left,right", id$ - draw set "bgcolor", 222,219,222, id$ - // view 0,30 to x2,32, id$+"line", id$ - // draw set "bgcolor", 185,185,185, id$+"line" - layout "none", id$ - position = 10 - directory$ = dir$ - toolbarview$ = id$ - return -end sub - -// Add an icon to the toolbar. -sub ToolbarAddIcon(id$, tooltip$, pressed$, normal$, disabled$) - button image position,7, id$, directory$+pressed$, directory$+normal$, directory$+disabled$, toolbarview$ - tooltip id$, tooltip$ - position = position + 25 - return -end sub - -// Add a separator to the toolbar. -sub ToolbarAddSeparator() - draw set "highcolor", 185,185,185, toolbarview$ - draw line position-2,5 to position-2,25,toolbarview$ - draw set "highcolor", 239,239,239, toolbarview$ - draw line position-1,5 to position-1,25, toolbarview$ - position = position + 5 - return -end sub - -// Open the pattern calculation window -sub OpenCalcPattern(x,y) - local i, j, w - local msg$(1) - local inloop, n - - window open x,y to x+259,y+400, "CalcPattern", "yab-IDE Pattern editor" - window set "CalcPattern", "Feel", "Modal-App" - window set "CalcPattern", "Flags", "not-zoomable, not-h-resizable, not-v-resizable" - - Header("Pattern editor", "CalcPattern", 260) - - draw set "highcolor", 239,239,239, "CalcPattern" - draw line 0,300 to 259,300, "CalcPattern" - draw set "highcolor", 185,185,185, "CalcPattern" - draw line 0,299 to 259,299, "CalcPattern" - - view 10,50 to 249,289, "VDraw", "CalcPattern" - draw set "bgcolor", 255, 255, 255, "VDraw" - draw set "lowcolor", 0, 0, 0, "VDraw" - - view 10,310 to 90,390, "VPattern", "CalcPattern" - draw set "bgcolor", 255, 255, 255, "VPattern" - draw set "lowcolor", 0, 0, 0, "VPattern" - draw set "highcolor", 255, 255, 255, "VPattern" - - button 100,370 to 249,390, "CalcPatternInsert", "Insert Pattern", "CalcPattern" - - UpdatePattern(pattern()) - draw set 0, "LowSolidFill" - draw set "lowcolor", 0, 0, 0, "VDraw" - for i = 0 to 7 - for j = 0 to 7 - if(pattern(i,j) = 1) then - draw rect i*30,j*30 to i*30+29,j*30+29, "VDraw" - endif - next j - next i - draw set 0, "HighSolidFill" - - inloop = true - while(inloop) - CalcPatternMouse(pattern()) - n = token(message$, msg$(), "|") - for i = 1 to n - switch(msg$(i)) - case "CalcPatternInsert" - textedit add "Text"+str$(globalCurrentText), CalcPatternInsert$(pattern()) - break - case "CalcPattern:_QuitRequested" - settingsCalcPatternX = window get "CalcPattern", "Position-X" - settingsCalcPatternY = window get "CalcPattern", "Position-Y" - window close "CalcPattern" - inloop = false - break - case "_QuitRequested" - //emergency break - exit(1) - break - end switch - next i - wend - return -end sub - -// mouse stuff (PatternEditor) -sub CalcPatternMouse(pattern()) - local help$ - local i, j, refresh - - mousex = 0 - mousey = 0 - mouselmb = 0 - mousemmb = 0 - mousermb = 0 - - - refresh = 0 - - if(ismousein("VDraw")) then - GetMouseData("VDraw",239,239) - endif - - if(mouselmb) then - x = int(mousex/30) - y = int(mousey/30) - if(pattern(x,y) = 0) then - pattern(x,y) = 1 - draw set "lowcolor", 0, 0, 0, "VDraw" - draw set 0, "LowSolidFill" - draw rect x*30,y*30 to x*30+29,y*30+29, "VDraw" - UpdatePattern(pattern()) - refresh = refresh + 1 - endif - endif - - if(mousermb) then - x = int(mousex/30) - y = int(mousey/30) - if(pattern(x,y) = 1) then - pattern(x,y) = 0 - draw set "lowcolor", 255, 255, 255, "VDraw" - draw set 0, "LowSolidFill" - draw rect x*30,y*30 to x*30+29,y*30+29, "VDraw" - draw set "lowcolor", 0, 0, 0, "VDraw" - UpdatePattern(pattern()) - refresh = refresh + 1 - endif - endif - - if(refresh = 15) then - draw flush "VDraw" - draw flush "VPattern" - draw set "lowcolor", 0, 0, 0, "VDraw" - for i = 0 to 7 - for j = 0 to 7 - if(pattern(i,j)) then - draw set 0, "LowSolidFill" - draw rect i*30,j*30 to i*30+29,j*30+29, "VDraw" - draw set 0, "HighSolidFill" - endif - next j - next i - UpdatePattern(pattern()) - refresh = 0 - endif - - return -end sub - -// get pattern string (PatternEditor) -sub CalcPatternInsert$(pattern()) - local i, j - local t$, p$ - - p$ = "\"" - for i = 0 to 7 - t$ = "" - for j = 0 to 7 - t$ = t$ + str$(1-pattern(j,i)) - next j - t = dec(t$,2) - if(t<100) p$ = p$ + "0" - if(t<10) p$ = p$ + "0" - p$ = p$ + str$(t) - next i - p$ = p$ + "\"" - return p$ -end sub - -// get mouse stuff (PatternEditor) -sub GetMouseData(view$,maxx, maxy) - local n - local mouse$(1) - - mousemsg$ = mouse message$(view$) - n = split(mousemsg$, mouse$(), ":") - mousex = val(mouse$(1)) - mousey = val(mouse$(2)) - mouselmb = val(mouse$(3)) - mousemmb = val(mouse$(4)) - mousermb = val(mouse$(5)) - if(mousex<0) mousex = 0 - if(mousey<0) mousey = 0 - if(mousex>maxx) mousex = maxx - if(mousey>maxy) mousey = maxy - - return -end sub - -// update pattern (PatternEditor) -sub UpdatePattern(pattern()) - local i, j - local t$, p$ - - for i = 0 to 7 - t$ = "" - for j = 0 to 7 - t$ = t$ + str$(1-pattern(j,i)) - next j - t = dec(t$,2) - if(t<100) p$ = p$ + "0" - if(t<10) p$ = p$ + "0" - p$ = p$ + str$(t) - next i - draw flush "VPattern" - draw set 0, p$ - draw rect 0,0 to 80,80, "VPattern" - draw set 0, "HighSolidFill" - return -end sub - -// Open the color selection window -sub OpenColorSelection(x,y,r,g,b) - local i, j, w, n, num - local tmp$, msg$(1), col$(1) - local inloop - - window open x,y to x+366,y+270, "ColorSelect", "yab-IDE Color selection" - window set "ColorSelect", "Feel", "Modal-App" - window set "ColorSelect", "Flags", "not-zoomable, not-h-resizable, not-v-resizable" - - Header("Color selection", "ColorSelect", 366) - - draw set "highcolor", 239,239,239, "ColorSelect" - draw line 0,233 to 366,233, "ColorSelect" - draw line 71,55 to 71,116, "ColorSelect" - draw line 10,116 to 71,116, "ColorSelect" - draw set "highcolor", 185,185,185, "ColorSelect" - draw line 0,232 to 366,232, "ColorSelect" - draw line 9,54 to 9,115, "ColorSelect" - draw line 9,54 to 70,54, "ColorSelect" - - view 10,55 to 70,115, "ColorSelectRect", "ColorSelect" - draw set "highcolor", r,g,b, "ColorSelectRect" - draw rect 0,0 to 60,60, "ColorSelectRect" - colorcontrol 80,59, "ColorControl", "ColorSelect" - colorcontrol set "ColorControl", r,g,b - - draw set "highcolor", 0,0,0, "ColorSelect" - draw text 10,140, "Default Colors:", "ColorSelect" - draw set 1, "HighSolidFill" - for i = 45 to 305 step 30 - for j=155 to 186 step 30 - draw set 1, "HighSolidFill" - draw rect i,j to i+30,j+30, "ColorSelect" - draw set 0, "HighSolidFill" - tmp$ = str$((j-125)/30)+str$((i-15)/30) - view i+1,j+1 to i+29,j+29, "Color"+tmp$, "ColorSelect" - switch tmp$ - case "11" - draw set "bgcolor", 0,0,0, "Color11" - tooltip "Color11", "Black" - break - case "12" - draw set "bgcolor", 96,96,96, "Color12" - tooltip "Color12", "Darken 4" - break - case "13" - draw set "bgcolor", 128,128,128, "Color13" - tooltip "Color13", "Darken 3" - break - case "14" - draw set "bgcolor", 152,152,152, "Color14" - tooltip "Color14", "Darken 2" - break - case "15" - draw set "bgcolor", 184,184,184, "Color15" - tooltip "Color15", "Darken 1" - break - case "16" - draw set "bgcolor", 216,216,216, "Color16" - tooltip "Color16", "Default Background" - break - case "17" - draw set "bgcolor", 232,232,232, "Color17" - tooltip "Color17", "Lighten 1" - break - case "18" - draw set "bgcolor", 240,240,240, "Color18" - tooltip "Color18", "Lighten 2" - break - case "19" - draw set "bgcolor", 255,255,255, "Color19" - tooltip "Color19", "White" - break - case "21" - draw set "bgcolor", 255,0,0, "Color21" - tooltip "Color21", "Red" - break - case "22" - draw set "bgcolor", 192,128,0, "Color22" - tooltip "Color22", "Brown" - break - case "23" - draw set "bgcolor", 255,255,0, "Color23" - tooltip "Color23", "Yellow" - break - case "24" - draw set "bgcolor", 0,255,0, "Color24" - tooltip "Color24", "Green" - break - case "25" - draw set "bgcolor", 0,255,255, "Color25" - tooltip "Color25", "Cyan" - break - case "26" - draw set "bgcolor", 128,192,255, "Color26" - tooltip "Color26", "Light Blue" - break - case "27" - draw set "bgcolor", 0,0,255, "Color27" - tooltip "Color27", "Blue" - break - case "28" - draw set "bgcolor", 255,0,255, "Color28" - tooltip "Color28", "Magenta" - break - case "29" - draw set "bgcolor", 192,128,255, "Color29" - tooltip "Color29", "Light Magenta" - break - end switch - next j - next i - - draw set 0, "HighSolidFill" - - button 256,240 to 356,260, "ColorSelectInsert", "Insert Color", "ColorSelect" - - inloop = true - while(inloop) - ColorSelectMouse() - n = token(message$, msg$(), "|") - for i = 1 to n - if(left$(msg$(i),13) = "ColorControl:") then - tmp$ = right$(msg$(i), len(msg$(i))-13) - dim col$(3) - num = token(tmp$, col$(), ":") - if(num = 3) then - draw flush "ColorSelectRect" - draw set "highcolor", val(col$(1)), val(col$(2)), val(col$(3)), "ColorSelectRect" - draw rect 0,0 to 60,60, "ColorSelectRect" - endif - endif - switch(msg$(i)) - case "ColorSelectInsert" - textedit add "Text"+str$(globalCurrentText), ColorSelectInsert$() - break - case "ColorSelect:_QuitRequested" - settingsColorSelectX = window get "ColorSelect", "Position-X" - settingsColorSelectY = window get "ColorSelect", "Position-Y" - settingsColorSelectR = colorcontrol get "ColorControl", "red" - settingsColorSelectG = colorcontrol get "ColorControl", "green" - settingsColorSelectB = colorcontrol get "ColorControl", "blue" - window close "ColorSelect" - inloop = false - break - case "_QuitRequested" - //emergency break - exit(1) - break - end switch - next i - wend - return -end sub - -// get the color string (ColorSelect) -sub ColorSelectInsert$() - local r, g, b - - r = colorcontrol get "ColorControl", "red" - g = colorcontrol get "ColorControl", "green" - b = colorcontrol get "ColorControl", "blue" - - return " "+str$(r)+", "+str$(g)+", "+str$(b) -end sub - -// check mouse in ColorSelect -sub ColorSelectMouse() - local i, j - local tmp$ - - for i = 1 to 9 - for j = 1 to 2 - tmp$ = "Color"+str$(j)+str$(i) - if(ismousein(tmp$) and IsButtonPressed(tmp$)) then - switch tmp$ - case "Color11" - SetColor(0,0,0) - break - case "Color12" - SetColor(96,96,96) - break - case "Color13" - SetColor(128,128,128) - break - case "Color14" - SetColor(152,152,152) - break - case "Color15" - SetColor(184,184,184) - break - case "Color16" - SetColor(216,216,216) - break - case "Color17" - SetColor(232,232,232) - break - case "Color18" - SetColor(240,240,240) - break - case "Color19" - SetColor(255,255,255) - break - case "Color21" - SetColor(255,0,0) - break - case "Color22" - SetColor(192,128,0) - break - case "Color23" - SetColor(255,255,0) - break - case "Color24" - SetColor(0,255,0) - break - case "Color25" - SetColor(0,255,255) - break - case "Color26" - SetColor(128,192,255) - break - case "Color27" - SetColor(0,0,255) - break - case "Color28" - SetColor(255,0,255) - break - case "Color29" - SetColor(192,128,255) - break - end switch - endif - next j - next i -end sub - -// check for pressed mouse button (ColorSelect) -sub IsButtonPressed(view$) - local n, t - local mouselmb - - t = false - dim mouse$(1) - repeat - mousemsg$ = mouse message$(view$) - n = split(mousemsg$, mouse$(), ":") - mouselmb = val(mouse$(3)) - if(mouselmb) t = true - if(not ismousein(view$)) then - t = false - mouselmb = 0 - endif - until (mouselmb = 0) - return t -end sub - -// set a color to RGB (ColorSelect) -sub SetColor(r,g,b) - colorcontrol set "ColorControl", r,g,b - draw flush "ColorSelectRect" - draw set "highcolor", r,g,b, "ColorSelectRect" - draw rect 0,0 to 60,60, "ColorSelectRect" - return -end sub - -// beautify the code by reformating it -sub ReformatSource$(code$) - local tablevel, num, i, j, k - local tmp$, returnSource$ - local hasThen, isInTicks, firstcase - - dim beginCommand$(12) - dim endCommand$(15) - - beginCommand$(1) = "if" - beginCommand$(2) = "switch" - beginCommand$(3) = "for" - beginCommand$(4) = "while" - beginCommand$(5) = "do" - beginCommand$(6) = "repeat" - beginCommand$(7) = "case" - beginCommand$(8) = "default" - beginCommand$(9) = "else" - beginCommand$(10) = "elsif" - beginCommand$(11) = "sub" - beginCommand$(12) = "export" - - endCommand$(1) = "end if" - endCommand$(2) = "end-if" - endCommand$(3) = "endif" - endCommand$(4) = "fi" - endCommand$(5) = "end switch" - endCommand$(6) = "end-switch" - endCommand$(7) = "next" - endCommand$(8) = "wend" - endCommand$(9) = "loop" - endCommand$(10) = "until" - endCommand$(11) = "else" - endCommand$(12) = "elsif" - endCommand$(13) = "end sub" - endCommand$(14) = "case" - endCommand$(15) = "default" - - dim reformat$(1) - tablevel = 0 - firstcase = 0 - num = split(code$, reformat$(), "\n") - - for i=1 to num - tmp$ = ltrim$(lower$(reformat$(i))) - for j=1 to 15 - if(left$(tmp$, len(endCommand$(j))) = endCommand$(j) and (len(tmp$) = len(endCommand$(j)) or instr(" \n\t\f\v\r(:/", mid$(tmp$,len(endCommand$(j))+1,1)))) then - if(not firstcase) then - if(j = 5 or j = 6) tablevel = tablevel - 1 - tablevel = tablevel - 1 - // if(tablevel<0) tablevel = 0 - endif - firstcase = 0 - break - endif - next j - - for j=1 to tablevel - returnSource$ = returnSource$ + "\t" - next j - - for j=1 to 12 - if(left$(tmp$, len(beginCommand$(j))) = beginCommand$(j) and (len(tmp$) = len(beginCommand$(j)) or instr(" \n\t\f\v\r(:/", mid$(tmp$,len(beginCommand$(j))+1,1)))) then - hasThen = true - if(beginCommand$(j) = "switch") then - firstcase = 1 - elsif(beginCommand$(j) = "if") then - isInTicks = false - hasThen = false - for k=1 to len(tmp$)-3 - if(mid$(tmp$,k,1)="\"" and mid$(tmp$,k-1,1)<>"\\") isInTicks = not isInTicks - if(not isInTicks and mid$(tmp$,k,4) = "then") then - hasThen = true - break - endif - next k - endif - if(hasThen) tablevel = tablevel + 1 - break - endif - next j - returnSource$ = returnSource$ + ltrim$(reformat$(i)) - if(i0 and left$(tmp$,10) <> "/bin/grep ") then - ret = val(mid$(tmp$, t+7+len(programName$), len(tmp$)-t-7-len(programName$))) - endif - - return ret -end sub - -// Send the kill signal to all members of the team of programName$ -// Returns true when successful and false otherwise -sub KillTeam(programName$) - local ps$(1) - local found - local i, n - - n = token(system$("ps "+programName$), ps$(), chr$(10)) - found = false - - while(i<=n) - if(instr(ps$(i), programName$)) then - found = true - i = i + 1 - while(val(ps$(i))>0 and i<=n) - system("kill "+str$(val(ps$(i)))) - i = i + 1 - wend - endif - i = i + 1 - wend - - return found -end sub - -// Load the syntax tree into the given tree box from the TreeFile$ file. -sub SyntaxLoadTree(TreeFile$, TreeBoxID$) - local info, level, handle, inloop - local tmp$ - - - // Clear the treebox first - treebox clear TreeBoxID$ - - // count the number of info texts - info = 0 - // three levels: toplevel, sublevel and info text level - level = 0 - // read data from file return the file handle - handle = open (TreeFile$, "r") - if(not handle) return 0 - - // read the file - inloop = true - while(not eof(handle) and inloop) - tmp$ = GetLine$(handle) - // if it is not a comment... - if(not (left$(tmp$,1) = "&")) then - switch level - case 0 // toplevel - treebox add TreeBoxID$, tmp$ - break - case 1 // sublevel - n = instr(tmp$, ":") - treebox add TreeBoxID$, left$(tmp$,n-1), right$(tmp$, len(tmp$)-n), 0 - break - end switch - else - if(instr(tmp$, "toplevel")) level = 0 - if(instr(tmp$, "sublevel")) level = 1 - if(instr(tmp$, "infotext")) inloop = false - endif - wend - close handle - return 1 -end sub - -// Read the info text for Command$ from TreeFile$ with the index file IndexFile$. -sub SyntaxGetInfoText$(TreeFile$, IndexFile$, Command$) - local handle, position, inloop - local infotext$ - - // first read the seek position - inloop = true - handle = open (IndexFile$, "r") - if(not handle) return "" - - while(not eof(handle) and inloop) - tmp$ = GetLine$(handle) - if(tmp$=Command$) then - if (not eof(handle)) then - tmp$ = GetLine$(handle) - position = val(tmp$) - endif - inloop = false - endif - wend - close handle - - // a seek position is found; return the info text. - handle = open (TreeFile$, "r") - if(not handle) return "" - seek handle, position, "begin" - tmp$ = GetLine$(handle) - inloop = true - while(not eof(handle) and inloop) - tmp$ = GetLine$(handle) - if(left$(tmp$,1) = "&") then - inloop = false - else - infotext$ = infotext$ + tmp$ + chr$(10) - endif - wend - close handle - - return infotext$ -end sub - -// Read a line from a file -sub GetLine$(handle) - local tmp$, retString$ - - while(tmp$<>chr$(10) and tmp$<>chr$(13) and not eof(handle)) - tmp$ = chr$(peek(handle)) - if(tmp$<>chr$(10) and tmp$<>chr$(13)) retString$ = retString$ + tmp$ - wend - - return retString$ -end sub - -// Open ASCII table window -sub AsciiWindow() - local n, x, y - - window open 200,100 to 600,515, "AsciiView", "yab-IDE ASCII table" - window set "AsciiView", "flags", "Not-Zoomable, not-h-resizable, not-v-resizable" - - Header("ASCII table", "AsciiView", 400) - - draw set "highcolor", 239,239,239, "AsciiView" - draw line 6,405 to 395,405, "AsciiView" - draw line 395,51 to 395,405, "AsciiView" - draw set "highcolor", 185,185,185, "AsciiView" - draw line 5,50 to 394,50, "AsciiView" - draw line 5,50 to 5,404, "AsciiView" - draw set "highcolor", 255,255,255, "AsciiView" - draw rect 6,51 to 394,404, "AsciiView" - draw set "highcolor", 0,0,0, "AsciiView" - - x = 10 - y = 65 - for n = 32 TO 126 - draw text x,y, str$(n)+chr$(32)+chr$(n), "AsciiView" - x = x+50 - if x >= 365 then - x = 10 - y = y+30 - end if - next n - - while(not instr(message$, "Quit")) - wend - window close "AsciiView" - return -end sub - -// set the run parameters -sub SetRunParameters() - local tmp$ - local inloop - - window open 200,100 to 500,215, "RunParam", "yab-IDE Set run parameters" - window set "RunParam", "flags", "Not-Zoomable, not-h-resizable, not-v-resizable" - - Header("Set run parameters", "RunParam", 300) - - textcontrol 10,50 to 290,70, "RunParamYab", "yab Parameters:", settingsYabParam$, "RunParam" - textcontrol 10,80 to 290,110, "RunParamProg", "Program Parameters:", settingsProgParam$, "RunParam" - - inloop = true - while(inloop) - if(instr(message$, "Quit")) then - settingsYabParam$ = textcontrol get$ "RunParamYab" - settingsProgParam$ = textcontrol get$ "RunParamProg" - inloop = false - endif - wend - - window close "RunParam" - return -end sub - -// load settings on start-up -sub LoadSettings() - local handle, i, j - local tmp$ - - handle = open(globalConfigDir$+"ide-settings", "r") - if(not handle) return 1 - - while(not eof(handle)) - line input #handle tmp$ - if(left$(tmp$, 1)<>"#") then - i = i + 1 - switch(i) - case 1: settingsYabDir$ = tmp$: break - case 2: globalProjectDir$ = tmp$: break - case 3: yabDir$ = tmp$: break - case 4: ideDir$ = tmp$: break - case 5: buildDir$ = tmp$: break - case 6: globalHelpDir$ = tmp$: break - case 7: settingsLangUse = val(tmp$): break - case 8: settingsLangPath$ = tmp$: break - case 9: settingsAutoIndent = val(tmp$): break - case 10: settingsAutoCompletion = val(tmp$): break - case 11: settingsACNumChar = val(tmp$): break - case 12: settingsX = val(tmp$): break - case 13: settingsY = val(tmp$): break - case 14: settingsWidth = val(tmp$): break - case 15: settingsHeight = val(tmp$): break - case 16: settingsFullScreen = val(tmp$): break - case 17: settingsFullEditor = val(tmp$): break - case 18: settingsVSplitDivider = val(tmp$): break - case 19: settingsV2SplitDivider = val(tmp$): break - case 20: settingsHSplitDivider = val(tmp$): break - case 21: settingsCalcPatternX = val(tmp$): break - case 22: settingsCalcPatternY = val(tmp$): break - case 23: settingsColorSelectX = val(tmp$): break - case 24: settingsColorSelectY = val(tmp$): break - case 25: settingsColorSelectR = val(tmp$): break - case 26: settingsColorSelectG = val(tmp$): break - case 27: settingsColorSelectB = val(tmp$): break - case 28: settingsAskForSaving = val(tmp$): break - case 29: settingsFindCS = val(tmp$): break - case 30: settingsOldSearch$ = tmp$: break - case 31: settingsFindAlert = val(tmp$): break - case 32: settingsReformatAlert = val(tmp$): break - case 33: settingsReformatUndoAlert = val(tmp$): break - case 34: settingsTabSpaces = val(tmp$): break - case 35: break - case 36: settingsFontFamily$ = tmp$: break - case 37: settingsFontStyle$ = tmp$: break - case 38: settingsFontSize = val(tmp$): break - case 39: globalRealFontSize = val(tmp$): break - case 40: DEBUG = val(tmp$): break - case 41: MAXFILES = val(tmp$): break - case 42: settingsYabParam$ = tmp$: break - case 43: settingsProgParam$ = tmp$: break - end switch - endif - wend - close(handle) - - dim globalAllNames$(MAXFILES) - dim globalTextFinder(MAXFILES) - - for j=1 to MAXFILES - globalAllNames$(j) = "" - globalTextFinder(j) = 0 - next j - - if(i = 43) return 0 - return 1 -end sub - -// load last opened files on start-up -sub LoadOpenFiles() - local handle, mainhandle, j, t - local text$, t$ - - mainhandle = open(globalConfigDir$+"ide-openfiles", "r") - if(mainhandle) then - j = 1 - while(not eof(mainhandle) and j<=MAXFILES) - globalAllNames$(j) = GetLine$(mainhandle) - handle = open(globalAllNames$(j), "r") - if(handle) then - WaitWindow(globalAllNames$(j)) - text$ = "" - while(not eof(handle)) - t$ = GetLine$(handle)+"\n" - if(len(t$)*8>4000) textedit set "Text"+str$(j), "textwidth", len(t$)*8+8 - text$ = text$ + t$ - wend - close(handle) - globalCurrentText = j - textedit add "Text"+str$(globalCurrentText), text$ - textedit set "Text"+str$(globalCurrentText), "changed", false - textedit set "Text"+str$(globalCurrentText), "gotoline", ReadLineFromAttr(globalAllNames$(j)) - stackview set "Stack", globalCurrentText - stackview set "Lines", globalCurrentText - t = columnbox count "FileBox" - columnbox add "FileBox", 1, t+1,20, "__Icon__="+ideDir$+"img/gespeichert.png" - columnbox add "FileBox", 2, t+1,20, GetFileName$(globalAllNames$(j)) // "Filename", t, GetFileName$(tmp$) - columnbox select "FileBox", t+1 - globalTextFinder(globalCurrentText) = t+1 - option set "Text"+str$(globalCurrentText), "focus", true - oldScroll = -1 - globalNumOpenFiles = globalNumOpenFiles + 1 - if(globalNumOpenFiles = 1) then - ActivateMenus(true) - splitview set "V2Split", "Divider", settingsV2SplitDivider - endif - window close "WaitWindow" - else - globalAllNames$(j) = "" - endif - j = j + 1 - wend - close(mainhandle) - endif - - return -end sub - -// Export as HTML -sub ExportAsHTML() - local browse$ - - browse$ = filepanel "Save-File", "Export as HTML", globalProjectDir$ - if(browse$<>"") then - - handle = open(browse$, "w") - if(handle) then - print #handle "" - print #handle "" - print #handle " " - print #handle " " + GetFileName$(globalAllNames$(globalCurrentText)) + "" - print #handle " " - print #handle " " - print #handle " " - print #handle " " - print #handle "
"
-        		print #handle textedit get$ "Text"+str$(globalCurrentText);
-			print #handle "    
" - print #handle " " - print #handle "" - close(handle) - else - alert "File could not be saved!", "Ok", "warning" - return false - endif - endif -end sub - -// Save all settings before exiting -sub SaveSettings() - local handle, i - - if(system("test -d "+globalConfigDir$) = 1) then - system("mkdir "+left$(globalConfigDir$, len(globalConfigDir$)-1)) - endif - - handle = open(globalConfigDir$+"ide-settings", "w") - if(handle) then - print #handle "# yab IDE 2.2 config file" - print #handle "# " - print #handle "# Comments start with a # as first character on a line" - print #handle "# Only change this file when you know what you are doing!" - print #handle "# Do not change the order of the lines in this file!" - print #handle "# " - print #handle "# yab directory (ends on /)" - print #handle settingsYabDir$ - print #handle "# Program directory (ends on /)" - print #handle globalProjectDir$ - print #handle "# yab binary location" - print #handle yabDir$ - print #handle "# IDE directory (ends on /)" - print #handle ideDir$ - print #handle "# BuildFactory directory (ends on /)" - print #handle buildDir$ - print #handle "# Help directory (ends on /)" - print #handle globalHelpDir$ - print #handle "# Use localization (0 = false, 1 = true)" - print #handle restartSettingsLangUse - print #handle "# localization mimetype" - print #handle settingsLangPath$ - print #handle "# Auto indent (0 = false, 1 = true)" - print #handle settingsAutoIndent - print #handle "# Auto completion (0 = false, 1 = true)" - print #handle settingsAutoCompletion - print #handle "# Auto completion starts at character count:" - print #handle settingsACNumChar - print #handle "# X-coordinates of main window" - print #handle settingsX - print #handle "# Y-coordinates of main window" - print #handle settingsY - print #handle "# Width of main window" - print #handle settingsWidth - print #handle "# Height of main window" - print #handle settingsHeight - print #handle "# Start in fullscreen (0 = false, 1 = true)" - print #handle settingsFullScreen - print #handle "# Start in maximized editor (0 = false, 1 = true)" - print #handle settingsFullEditor - print #handle "# Position of main vertical divider" - print #handle settingsVSplitDivider - print #handle "# Position of the vertical divider for the line numbers" - print #handle settingsV2SplitDivider - print #handle "# Position of main horizontal divider" - print #handle settingsHSplitDivider - print #handle "# X-coordinate of the pattern editor window" - print #handle settingsCalcPatternX - print #handle "# Y-coordinate of the pattern editor window" - print #handle settingsCalcPatternY - print #handle "# X-coordinate of the color selection window" - print #handle settingsColorSelectX - print #handle "# Y-coordinate of the color selection window" - print #handle settingsColorSelectY - print #handle "# Red value for last selected color in color selection window" - print #handle settingsColorSelectR - print #handle "# Green value for last selected color in color selection window" - print #handle settingsColorSelectG - print #handle "# Blue value for last selected color in color selection window" - print #handle settingsColorSelectB - print #handle "# Ask for saving before running a program (0 = false, 1 = true)" - print #handle settingsAskForSaving - print #handle "# Is \"find\" case sensitive? (0 = false, 1 = true)" - print #handle settingsFindCS - print #handle "# Last search string" - print #handle settingsOldSearch$ - print #handle "# Show warning before applying Replace All (0 = false, 1 = true)" - print #handle settingsFindAlert - print #handle "# Show warning when reformating sourcecode did not close all loops and conditions (0 = false, 1 = true)" - print #handle settingsReformatAlert - print #handle "# Show warning before undo reformating (0 = false, 1 = true)" - print #handle settingsReformatUndoAlert - print #handle "# Number of spaces per tab" - print #handle settingsTabSpaces - print #handle "# Unused field (was: use Haiku tabs on ZETA)." - print #handle 0 - print #handle "# Font family name" - print #handle settingsFontFamily$ - print #handle "# Font style" - print #handle settingsFontStyle$ - print #handle "# Font size" - print #handle settingsFontSize - print #handle "# Real font size" - print #handle globalRealFontSize - print #handle "# Print out IDE debug information (0 = false, 1 = true)" - print #handle DEBUG - print #handle "# Maximum number of files the IDE can handle" - print #handle MAXFILES - print #handle "# yab runtime parameters (default is empty)" - print #handle settingsYabParam$ - print #handle "# Program runtime parameters (default is empty)" - print #handle settingsProgParam$ - - close(handle) - endif - - handle = open(globalConfigDir$+"ide-openfiles", "w") - if(handle) then - for i=1 to MAXFILES - if(globalAllNames$(i)<>"") print #handle globalAllNames$(i) - next i - close(handle) - endif - return -end sub - -sub path() -if (!peek("isbound")) then -path$=system$("ps") -x=instr(path$,"/yab-IDE.yab") -path$=left$(path$,x) -for x=len(path$)-1 to 1 step -1 - if (instr(path$," ",x) and catch=0) catch=x+1 -next -path$=right$(path$,len(path$)-catch) -path$=trim$(path$) -path$="/"+path$ -else -path$=trim$(peek$("directory") ) -path$=path$+"/" -end if - -end sub - - -sub yabpath$() - -if system("test -e /boot/home/config/non-packaged/bin/yab") = 0 then - return "/boot/home/config/non-packaged/bin/yab" -elseif system("test -e /boot/home/config/bin/yab") = 0 then - return "/boot/home/config/bin/yab" -elseif system("test -e /boot/system/bin/yab") = 0 then - return "/boot/system/bin/yab" - -endif - -local cmd$ -cmd$="test -e "+settingsYabDir$ -if system(cmd$)=0 then - return settingsYabDir$ -endif - -return "error" -end sub - -sub set_up_BuildFactory() -local DataDir$ - -local handel -local ddir$ - -DataDir$=trim$(system$("finddir B_USER_DIRECTORY")) - - - - -x=system("mkdir "+DataDir$+"/yab_work") -system("mkdir ~/config/settings/yab") -y=system("ls "+DataDir$+"/yab_work/BuildFactory") -y=y+system("ls "+DataDir$+"/yab_work/Programs") -if x=0 or y>0 then - system("cp -ur "+ideDir$+"/BuildFactory "+DataDir$+"/yab_work") - system("cp -ur "+ideDir$+"Programs "+DataDir$+"/yab_work") - system ("cp -ur "+ideDir$+"img "+DataDir$+"/yab_work/Programs") - system("cp -ur "+ideDir$+"Programs/libs/* /boot/home/config/settings/yab") - - - handle=open(DataDir$+"/yab_work/BuildFactory/srcfiles","r") - - - while(not eof(#handle)) - input #handle a$ - system("cp -u "+ideDir$+"/src/"+a$+" "+DataDir$+"/yab_work/BuildFactory/"+a$) - end while - close handle - - system("cp -ur "+ideDir$+"/src/column "+DataDir$+"/yab_work/BuildFactory") -end if - -x=1 -open #1, ideDir$+"/src/YabMain.cpp","r" -open #2, DataDir$+"/yab_work/BuildFactory/parts/YabMain.cpp.end","w" - -while(not eof(#1)) - line input #1 a$ - if x>9 then - print #2 a$ - end if - x=x+1 -wend -close #1 -close #2 - -end sub - - - - -sub changestring() - -TextLine$ = TEXTEDIT GET$"Text"+str$(globalCurrentText), searchLineNum -TextLine$=rtrim$(TextLine$ ) -FindPart$=textcontrol get$ "FindTCFind" -FindPart$=trim$(FindPart$) -if(settingsFindCS) then - x=instr(TextLine$, FindPart$) -else - x=instr(upper$(TextLine$), upper$(FindPart$)) - -endif -if x>0 then - x=x-1 - TextPart$= textcontrol get$ "FindTCReplace" - TextPart$=rtrim$(TextPart$) - TextLine$=left$(TextLine$,x)+TextPart$+right$(TextLine$,len(TextLine$)-(x+(len(FindPart$)))) - TEXTEDIT SET "Text"+str$(globalCurrentText), "select", searchLineNum - TEXTEDIT SET "Text"+str$(globalCurrentText), "cut" - TEXTEDIT SET "Text"+str$(globalCurrentText), "select", searchLineNum - TEXTEDIT ADD "Text"+str$(globalCurrentText), TextLine$ - TEXTEDIT SET "Text"+str$(globalCurrentText), "gotoline", searchLineNum - searchLineNum = textedit get "Text"+str$(globalCurrentText), "Find", TextPart$ - -endif - -end sub