diff --git a/src/YabInterface.cpp b/src/YabInterface.cpp index 2cd5391..d5dc0cb 100644 --- a/src/YabInterface.cpp +++ b/src/YabInterface.cpp @@ -331,7 +331,7 @@ bool YabInterface::ExitRequested() // printf("QUITDEBUG: 3\n"); - BMessenger(be_app).SendMessage(new BMessage(B_QUIT_REQUESTED)); + // BMessenger(be_app).SendMessage(new BMessage(B_QUIT_REQUESTED)); Quit(); // printf("QUITDEBUG: Quit\n"); // printf("QUITDEBUG: wait\n"); @@ -369,7 +369,6 @@ void YabInterface::OpenWindow(const BRect frame, const char* id, const char* tit int YabInterface::CloseWindow(const char* view) { - int tmp = 0; YabView *myView = cast_as((BView*)viewList->GetView(view), YabView); if(myView) @@ -451,7 +450,7 @@ int YabInterface::CloseWindow(const char* view) } else Error(view, "VIEW"); - + return tmp; } @@ -9390,12 +9389,12 @@ void YabInterface::MouseSet(const char* opt) const char* YabInterface::GetMessageString() { - snooze(85000); - BString tmp; + snooze(20000); + BString tmp(""); if(exiting) { tmp += "_QuitRequested|"; - //exiting = false; + exiting = false; } tmp += localMessage; localMessage = ""; diff --git a/src/yab-IDE.yab b/src/yab-IDE.yab new file mode 100755 index 0000000..e423046 --- /dev/null +++ b/src/yab-IDE.yab @@ -0,0 +1,3918 @@ +#!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