X-Git-Url: https://ecere.com/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=ide%2Fsrc%2Fdesigner%2FCodeEditor.ec;h=e7970baf6b8c97ac0d8a748b108b91376948dc88;hb=84e623c3cb902d941ac9967bcf91767bae8f128b;hp=54d341cf2bf8f642a3869a3db79c95921ad34050;hpb=f0440a1683be1723ae8462c7de1bff8867a55a2e;p=sdk diff --git a/ide/src/designer/CodeEditor.ec b/ide/src/designer/CodeEditor.ec index 54d341c..e7970ba 100644 --- a/ide/src/designer/CodeEditor.ec +++ b/ide/src/designer/CodeEditor.ec @@ -1,68 +1,5 @@ import "ide" -// *** Color Schemes *** - -// *** The Old Color Scheme that was causing me auras and ophtalmic migraines -- Uncomment at your own risk! *** -/* -FontResource panelFont { $"Courier New", 10 }; -FontResource codeFont { $"Courier New", 10 }; -Color selectionColor = Color { 10, 36, 106 }; -Color selectionText = white; -Color viewsBackground = white; -Color viewsText = black; -Color outputBackground = white; -Color outputText = black; -Color projectViewBackground = white; -Color projectViewText = black; -Color codeEditorBG = white; -Color codeEditorFG = black; -Color marginColor = Color {230, 230, 230}; -Color selectedMarginColor = Color {200, 200, 200}; -Color lineNumbersColor = Color {60, 60, 60}; -SyntaxColorScheme colorScheme -{ - keywordColors = [ blue, blue ]; - commentColor = dimGray; - charLiteralColor = crimson; - stringLiteralColor = crimson; - preprocessorColor = green; - numberColor = teal; -}; -*/ - -// The new nice dark scheme -- so peaceful on my brain - -FontResource panelFont { $"Courier New", 10 }; -FontResource codeFont { $"Courier New", 10 }; -/* -FontResource panelFont { $"Consolas", 12 }; -FontResource codeFont { $"Consolas", 12 }; -*/ -Color selectionColor = lightYellow; -Color selectionText = Color { 30, 40, 50 }; -Color viewsBackground = Color { 30, 40, 50 }; -Color viewsText = lightGray; -Color outputBackground = black; -Color outputText = lime; -Color projectViewBackground = Color { 30, 40, 50 }; -Color projectViewText = lightGray; -Color codeEditorBG = black; -Color codeEditorFG = ivory; -Color marginColor = Color {24, 24, 24}; -Color selectedMarginColor = Color {64, 64, 64}; -Color lineNumbersColor = Color {160, 160, 160}; -SyntaxColorScheme colorScheme -{ - keywordColors = [ skyBlue, skyBlue ]; - commentColor = Color { 125, 125, 125 }; - charLiteralColor = Color { 245, 50, 245 }; - stringLiteralColor = Color { 245, 50, 245 }; - preprocessorColor = { 120, 220, 140 }; - numberColor = Color { 0, 192, 192 }; -}; - -// ********************* - import "findCtx" import "findExp" import "findParams" @@ -606,7 +543,7 @@ bool Code_IsFunctionEmpty(ClassFunction function, Method method, ObjectInfo obje // Check if it contains any code if((!body.compound.declarations || !body.compound.declarations->count) && (!body.compound.statements || body.compound.statements->count <= 1)) { - Class moduleClass = eSystem_FindClass(object.instance._class.module, "Module"); + // Class moduleClass = eSystem_FindClass(object.instance._class.module, "Module"); Statement stmt = body.compound.statements ? body.compound.statements->first : null; Type dataType = method.dataType; Type returnType = dataType.returnType; @@ -618,7 +555,7 @@ bool Code_IsFunctionEmpty(ClassFunction function, Method method, ObjectInfo obje confirmation = false; // Check if default function should be calling base class: - if(object.instance._class._vTbl[method.vid] == moduleClass._vTbl[__ecereVMethodID___ecereNameSpace__ecere__com__Module_OnLoad]) // Temp Check for DefaultFunction + if(object.instance._class._vTbl[method.vid] == null /*moduleClass._vTbl[__ecereVMethodID___ecereNameSpace__ecere__com__Module_OnLoad]*/) // Temp Check for DefaultFunction { if(returnType.kind != voidType) { @@ -695,7 +632,7 @@ bool Code_IsFunctionEmpty(ClassFunction function, Method method, ObjectInfo obje class CodeEditor : Window { - background = marginColor; + background = colorScheme.marginColor; borderStyle = sizableDeep; hasMaximize = true; hasMinimize = true; @@ -760,7 +697,7 @@ class CodeEditor : Window bool inUseDebug; OpenedFileInfo openedFileInfo; - FontResource font { codeFont.faceName, codeFont.size }; + FontResource font { codeFont.faceName, codeFont.size, codeFont.bold, codeFont.italic }; saveDialog = codeEditorFileDialog; Designer designer { codeEditor = this, visible = false, saveDialog = codeEditorFormFileDialog }; @@ -892,8 +829,8 @@ class CodeEditor : Window freeCaret = ideSettings.useFreeCaret, caretFollowsScrolling = ideSettings.caretFollowsScrolling, tabKey = true, smartHome = true; tabSelection = true, /*maxLineSize = 65536, */parent = this, hasHorzScroll = true, hasVertScroll = true; - selectionColor = selectionColor, selectionText = selectionText, - background = codeEditorBG, foreground = codeEditorFG, syntaxColorScheme = colorScheme, + selectionColor = colorScheme.selectionColor, selectionText = colorScheme.selectionText, + background = colorScheme.codeEditorBG, foreground = colorScheme.codeEditorFG, syntaxColorScheme = colorScheme.syntaxColors, font = font, borderStyle = none; anchor = Anchor { left = 0, right = 0, top = 0, bottom = 0 }; @@ -1752,7 +1689,7 @@ class CodeEditor : Window display.FontExtent(font, ")", 1, &parW, null); string[0] = 0; - if(editor.functionType) + if(editor.functionType && type.kind == functionType) { PrintType(type.returnType, string, true, true); display.FontExtent(font, string, strlen(string), &functionW, null); @@ -1918,7 +1855,7 @@ class CodeEditor : Window display.FontExtent(font, ")", 1, &parW, null); string[0] = 0; - if(editor.functionType && type) + if(editor.functionType && type && type.kind == functionType) { PrintType(type.returnType, string, true, true); display.FontExtent(font, string, strlen(string), &functionW, null); @@ -2050,7 +1987,7 @@ class CodeEditor : Window int line = editBox.lineNumber + 1; if(projectView) { - CompilerConfig compiler = ideSettings.GetCompilerConfig(ide.workspace.compiler); + CompilerConfig compiler = ideConfig.compilers.GetCompilerConfig(ide.workspace.activeCompiler); ProjectConfig config = projectView.project.config; int bitDepth = ide.workspace.bitDepth; bool useValgrind = ide.workspace.useValgrind; @@ -2101,7 +2038,7 @@ class CodeEditor : Window if(!parentClosing) { if(ide.workspace && fileName) - ide.workspace.UpdateOpenedFileInfo(fileName, closed); + ide.workspace.UpdateOpenedFileInfo(fileName, closed, false); if(inUseDebug && !debugClosing) { debugClosing = true; @@ -2136,7 +2073,7 @@ class CodeEditor : Window void OnDestroy(void) { ObjectInfo oClass, next; - Class windowClass = eSystem_FindClass(this.privateModule, "ecere::gui::Window"); + // Class windowClass = eSystem_FindClass(this.privateModule, "ecere::gui::Window"); FreeType(this.functionType); FreeType(this.instanceType); @@ -2185,9 +2122,6 @@ class CodeEditor : Window classes.Delete(oClass); } - if(windowClass && windowClass.data) - UnapplySkin(windowClass); - FreeParser(); if(sheet.codeEditor == this) @@ -2335,7 +2269,7 @@ class CodeEditor : Window sprintf(message, $"The document %s was modified by another application.\n" "Would you like to reload it and lose your changes?", fileName); - if(MessageBox { type = yesNo, master = /*parent = */parent, text = $"Document has been modified", + if(MessageBox { creationActivation = flash, type = yesNo, master = /*parent = */parent, text = $"Document has been modified", contents = message }.Modal() == yes) reload = true; } @@ -2380,7 +2314,7 @@ class CodeEditor : Window void OnRedraw(Surface surface) { // Line Numbers - surface.SetBackground(marginColor); + surface.SetBackground(colorScheme.marginColor); surface.Area(0, 0, editBox.anchor.left.distance, clientSize.h - 1); if(ideSettings.showLineNumbers) { @@ -2396,15 +2330,15 @@ class CodeEditor : Window currentLineNumber = editBox.scroll.y / spaceH + 1; sprintf(lineFormat, " %%%du", maxLineNumberLength); - surface.SetForeground(lineNumbersColor); + surface.SetForeground(colorScheme.lineNumbersColor); for(i = 0; i < editBox.clientSize.h - 4; i += spaceH) { // Highlight current line if(editBox.lineNumber == currentLineNumber - 1) { - surface.SetBackground(selectedMarginColor); + surface.SetBackground(colorScheme.selectedMarginColor); surface.Area(0, i, editBox.anchor.left.distance, i+spaceH-1); - surface.SetBackground(marginColor); + surface.SetBackground(colorScheme.marginColor); } sprintf(lineText, lineFormat, currentLineNumber); if(currentLineNumber <= editBox.numLines) @@ -2613,6 +2547,7 @@ class CodeEditor : Window void ModifyCode() { + fixCaret = true; selected.modified = true; selected.oClass.modified = true; @@ -2626,19 +2561,25 @@ class CodeEditor : Window ****************************************************************************/ void FreeParser() { + { + Class windowClass = eSystem_FindClass(privateModule, "ecere::gui::Window"); + if(windowClass && windowClass.data) + UnapplySkin(windowClass); + } + SetCurrentNameSpace(null); - if(ast != null) + if(ast) { FreeASTTree(ast); ast = null; } - this.defines.Free(FreeModuleDefine); - this.imports.Free(FreeModuleImport); // Moved this after FreeAST because Debug printing causes ModuleImports to be created + defines.Free(FreeModuleDefine); + imports.Free(FreeModuleImport); // Moved this after FreeAST because Debug printing causes ModuleImports to be created - FreeExcludedSymbols(this.excludedSymbols); - FreeContext(this.globalContext); + FreeExcludedSymbols(excludedSymbols); + FreeContext(globalContext); FreeIncludeFiles(); - FreeGlobalData(&this.globalData); + FreeGlobalData(&globalData); FindCtx_Terminate(); FindParams_Terminate(); @@ -2654,11 +2595,26 @@ class CodeEditor : Window SetPrivateModule(null); } + // Note: This code should probably be merged with FreeParser() + if(ast) + { + FreeASTTree(ast); + ast = null; + //SetAST(null); + } + defines.Free(FreeModuleDefine); + imports.Free(FreeModuleImport); + + FreeContext(this.globalContext); + FreeExcludedSymbols(this.excludedSymbols); + + FreeIncludeFiles(); + FreeGlobalData(&this.globalData); + if(this.privateModule) { FreeTypeData(this.privateModule); delete this.privateModule; - this.privateModule = null; } } @@ -2691,7 +2647,7 @@ class CodeEditor : Window #endif Project project; - // This temporarily fixes issue with 2 overrides in release mode with VC6 (only happens with both ecere.dll and ide.exe compiled in release mode) + // This temporarily fixes issue with 2 overrides in release mode with VC6 (only happens with both ecere.dll and ecere-ide.exe compiled in release mode) if(reentrant) return; reentrant = true; @@ -2721,18 +2677,6 @@ class CodeEditor : Window editBox.GetSelPos(&l1, &y1, &x1, &l2, &y2, &x2, false); - FindCtx_Terminate(); - FindParams_Terminate(); - - SetGlobalData(&globalData); - SetGlobalContext(globalContext); - SetExcludedSymbols(&excludedSymbols); - SetTopContext(globalContext); - SetCurrentContext(globalContext); - SetDefines(&defines); - SetImports(&imports); - SetCurrentNameSpace(null); - /* sprintf(command, "C:\\Program Files\\Microsoft Visual Studio\\VC98\\Bin\\cl " "/nologo /D \"MSC\" /D \"WIN32\" /D \"NDEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" " @@ -2821,38 +2765,21 @@ class CodeEditor : Window this.oClass = null; } - { - Class windowClass = eSystem_FindClass(this.privateModule, "ecere::gui::Window"); - if(windowClass && windowClass.data) - UnapplySkin(windowClass); - } - designer = backDesigner; SetEchoOn(true); fileInput = editFile = EditBoxStream { editBox = editBox }; SetFileInput(fileInput); - if(ast) - { - FreeASTTree(ast); - ast = null; - //SetAST(null); - } - defines.Free(FreeModuleDefine); - imports.Free(FreeModuleImport); - - FreeContext(this.globalContext); - FreeExcludedSymbols(this.excludedSymbols); - - FreeIncludeFiles(); - FreeGlobalData(&this.globalData); + FreeParser(); - if(this.privateModule) - { - FreeTypeData(this.privateModule); - delete this.privateModule; - } + SetGlobalData(&globalData); + SetGlobalContext(globalContext); + SetExcludedSymbols(&excludedSymbols); + SetTopContext(globalContext); + SetCurrentContext(globalContext); + SetDefines(&defines); + SetImports(&imports); #ifdef _TIMINGS startTime = GetTime(); @@ -2863,7 +2790,7 @@ class CodeEditor : Window if(ide.workspace) { - CompilerConfig compiler = ideSettings.GetCompilerConfig(ide.workspace.compiler); + CompilerConfig compiler = ideConfig.compilers.GetCompilerConfig(ide.workspace.activeCompiler); SetTargetBits(ide.workspace.bitDepth ? ide.workspace.bitDepth : GetHostBits()); delete compiler; } @@ -2916,11 +2843,12 @@ class CodeEditor : Window // TODO: Get symbolsDir from project settings instead... if(ide.projectView) { - CompilerConfig compiler = ideSettings.GetCompilerConfig(ide.workspace.compiler); + CompilerConfig compiler = ideConfig.compilers.GetCompilerConfig(ide.workspace.activeCompiler); ProjectConfig config = project.config; int bitDepth = ide.workspace.bitDepth; DirExpression objDir = project.GetObjDir(compiler, config, bitDepth); SetSymbolsDir(objDir.dir); + SetDefaultNameSpace(project.GetDefaultNameSpace(config)); ide.SetPath(true, compiler, config, bitDepth); delete objDir; @@ -2938,6 +2866,7 @@ class CodeEditor : Window } SetIncludeDirs(null); SetSysIncludeDirs(null); + SetDefaultNameSpace(null); } { @@ -3354,7 +3283,7 @@ class CodeEditor : Window { Property prop = (Property) curMember; Class propertyClass = prop.dataTypeClass; - bool variable = false; + bool variable = true; if(!propertyClass) propertyClass = prop.dataTypeClass = eSystem_FindClass(this.privateModule, prop.dataTypeString); @@ -3433,16 +3362,19 @@ class CodeEditor : Window ObjectInfo check; if(!strcmp(name, "this")) { - char * name = computed.member.member.string; - ObjectInfo check; - for(check = classObject.instances.first; check; check = check.next) - if(check.name && !strcmp(name, check.name)) - { - if(prop.Set) - ((void (*)(void *, void *))(void *)prop.Set)(control, check.instance); - variable = false; - break; - } + if(computed.member.member) + { + char * name = computed.member.member.string; + ObjectInfo check; + for(check = classObject.instances.first; check; check = check.next) + if(check.name && !strcmp(name, check.name)) + { + if(prop.Set) + ((void (*)(void *, void *))(void *)prop.Set)(control, check.instance); + variable = false; + break; + } + } } else { @@ -3805,7 +3737,7 @@ class CodeEditor : Window { Map i18nStrings = object.i18nStrings; bool i18n = true; - if(i18nStrings && i18nStrings.GetAtPosition(prop.name, false)) + if(i18nStrings && i18nStrings.GetAtPosition(prop.name, false, null)) i18n = false; f.Printf("%s\"", i18n ? "$" : ""); @@ -4363,7 +4295,7 @@ class CodeEditor : Window } else { - Class moduleClass = eSystem_FindClass(this.privateModule, "Module"); + // Class moduleClass = eSystem_FindClass(this.privateModule, "Module"); // ADDING METHOD HERE f.Printf("\n "); @@ -4392,7 +4324,7 @@ class CodeEditor : Window f.Printf(")\n"); f.Printf(" %c\n\n", OpenBracket); - if(control._class._vTbl[method.vid] == moduleClass._vTbl[__ecereVMethodID___ecereNameSpace__ecere__com__Module_OnLoad]) // Temp Check for DefaultFunction + if(control._class._vTbl[method.vid] == null /*moduleClass._vTbl[__ecereVMethodID___ecereNameSpace__ecere__com__Module_OnLoad]*/) // Temp Check for DefaultFunction { if(returnType.kind == classType && !strcmp(returnType._class.string, "bool")) f.Printf(" return true;\n"); @@ -4530,7 +4462,7 @@ class CodeEditor : Window { Map i18nStrings = classObject.i18nStrings; bool i18n = true; - if(i18nStrings && i18nStrings.GetAtPosition(prop.name, false)) + if(i18nStrings && i18nStrings.GetAtPosition(prop.name, false, null)) i18n = false; f.Printf("\n %s%s = %s\"", specify ? "property::" : "", prop.name, i18n ? "$" : ""); @@ -4976,7 +4908,7 @@ class CodeEditor : Window Type dataType = method.dataType; Type returnType = dataType.returnType; Type param; - Class moduleClass = eSystem_FindClass(this.privateModule, "Module"); + // Class moduleClass = eSystem_FindClass(this.privateModule, "Module"); f.Printf("\n\n"); f.Printf(" "); @@ -5002,7 +4934,7 @@ class CodeEditor : Window f.Printf(")\n"); f.Printf(" %c\n\n", OpenBracket); - if(test._class._vTbl[method.vid] == moduleClass._vTbl[__ecereVMethodID___ecereNameSpace__ecere__com__Module_OnLoad]) // Temp Check for DefaultFunction + if(test._class._vTbl[method.vid] == null /*moduleClass._vTbl[__ecereVMethodID___ecereNameSpace__ecere__com__Module_OnLoad]*/) // Temp Check for DefaultFunction { if(returnType && returnType.kind == classType && !strcmp(returnType._class.string, "bool")) f.Printf(" return true;\n"); @@ -6372,7 +6304,7 @@ class CodeEditor : Window Type dataType = method.dataType; Type returnType = dataType.returnType; Type param; - Class moduleClass = eSystem_FindClass(this.privateModule, "Module"); + // Class moduleClass = eSystem_FindClass(this.privateModule, "Module"); if(insideDef.prev) f.Printf("\n\n"); @@ -6414,7 +6346,7 @@ class CodeEditor : Window if(!_class || ( - (isInstance ? _class : _class.base)._vTbl[method.vid] == moduleClass._vTbl[__ecereVMethodID___ecereNameSpace__ecere__com__Module_OnLoad] || + (isInstance ? _class : _class.base)._vTbl[method.vid] == null /*moduleClass._vTbl[__ecereVMethodID___ecereNameSpace__ecere__com__Module_OnLoad]*/ || (isInstance ? _class : _class.base)._vTbl[method.vid] == DummyMethod)) // Temp Check for DefaultFunction { if(returnType && returnType.kind == classType && !strcmp(returnType._class.string, "bool"))