private void InitSettings() { pluginDesc = TextHelper.GetString("Info.Description"); dataPath = Path.Combine(PathHelper.DataDir, "ASCompletion"); if (!Directory.Exists(dataPath)) { Directory.CreateDirectory(dataPath); } else if (PluginBase.MainForm.RefreshConfig) { CleanData(dataPath); } settingsFile = Path.Combine(dataPath, "Settings.fdb"); settingObject = new GeneralSettings(); if (!File.Exists(settingsFile)) { // default settings settingObject.JavadocTags = GeneralSettings.DEFAULT_TAGS; settingObject.PathToFlashIDE = CallFlashIDE.FindFlashIDE(); SaveSettings(); } else { Object obj = ObjectSerializer.Deserialize(settingsFile, settingObject); settingObject = (GeneralSettings)obj; } }
/// <summary> /// Explore the possible locations for the Macromedia Flash IDE classpath /// </summary> static public string FindAuthoringConfigurationPath(string flashPath) { if (flashPath == null) { flashPath = CallFlashIDE.FindFlashIDE(true); if (flashPath == null) { return(null); } } string ext = Path.GetExtension(flashPath).ToLower(); if (ext == ".exe" || ext == ".bat" || ext == ".cmd") { flashPath = Path.GetDirectoryName(flashPath); } string basePath = flashPath; string deflang = System.Globalization.CultureInfo.CurrentUICulture.Name; deflang = deflang.Substring(0, 2); // CS4+ default configuration if (Directory.Exists(basePath + "\\Common\\Configuration\\ActionScript 3.0")) { return(basePath + "\\Common\\Configuration\\"); } // default language if (Directory.Exists(basePath + deflang + "\\Configuration\\ActionScript 3.0")) { return(basePath + deflang + "\\Configuration\\"); } // look for other languages else if (Directory.Exists(basePath)) { string[] dirs = Directory.GetDirectories(basePath); foreach (string dir in dirs) { if (Directory.Exists(dir + "\\Configuration\\ActionScript 3.0")) { return(dir + "\\Configuration\\"); } } } return(null); }
/** * Handles the incoming events */ public void HandleEvent(Object sender, NotifyEvent e, HandlingPriority priority) { try { // ignore all events when leaving if (PluginBase.MainForm.ClosingEntirely) { return; } // current active document ITabbedDocument doc = PluginBase.MainForm.CurrentDocument; // application start if (!started && e.Type == EventType.UIStarted) { started = true; PathExplorer.OnUIStarted(); // associate context to initial document e = new NotifyEvent(EventType.SyntaxChange); this.pluginUI.UpdateAfterTheme(); } // editor ready? if (doc == null) { return; } ScintillaControl sci = doc.IsEditable ? doc.SciControl : null; // // Events always handled // bool isValid; DataEvent de; switch (e.Type) { // caret position in editor case EventType.UIRefresh: if (!doc.IsEditable) { return; } timerPosition.Enabled = false; timerPosition.Enabled = true; return; // key combinations case EventType.Keys: Keys key = (e as KeyEvent).Value; if (ModelsExplorer.HasFocus) { e.Handled = ModelsExplorer.Instance.OnShortcut(key); return; } if (!doc.IsEditable) { return; } e.Handled = ASComplete.OnShortcut(key, sci); return; // user-customized shortcuts case EventType.Shortcut: de = e as DataEvent; if (de.Action == "Completion.ShowHelp") { ASComplete.HelpKeys = (Keys)de.Data; de.Handled = true; } return; // // File management // case EventType.FileSave: if (!doc.IsEditable) { return; } ASContext.Context.CheckModel(false); // toolbar isValid = ASContext.Context.IsFileValid; if (isValid && !PluginBase.MainForm.SavingMultiple) { if (ASContext.Context.Settings.CheckSyntaxOnSave) { CheckSyntax(null, null); } ASContext.Context.RemoveClassCompilerCache(); } return; case EventType.SyntaxDetect: // detect Actionscript language version if (!doc.IsEditable) { return; } if (doc.FileName.ToLower().EndsWithOrdinal(".as")) { settingObject.LastASVersion = DetectActionscriptVersion(doc); (e as TextEvent).Value = settingObject.LastASVersion; e.Handled = true; } break; case EventType.ApplySettings: case EventType.SyntaxChange: case EventType.FileSwitch: if (!doc.IsEditable) { ASContext.SetCurrentFile(null, true); ContextChanged(); return; } currentDoc = doc.FileName; currentPos = sci.CurrentPos; // check file bool ignoreFile = !doc.IsEditable; ASContext.SetCurrentFile(doc, ignoreFile); // UI ContextChanged(); return; case EventType.Completion: if (ASContext.Context.IsFileValid) { e.Handled = true; } return; // some commands work all the time case EventType.Command: de = e as DataEvent; string command = de.Action ?? ""; if (command.StartsWithOrdinal("ASCompletion.")) { string cmdData = de.Data as string; // add a custom classpath if (command == "ASCompletion.ClassPath") { Hashtable info = de.Data as Hashtable; if (info != null) { ContextSetupInfos setup = new ContextSetupInfos(); setup.Platform = (string)info["platform"]; setup.Lang = (string)info["lang"]; setup.Version = (string)info["version"]; setup.TargetBuild = (string)info["targetBuild"]; setup.Classpath = (string[])info["classpath"]; setup.HiddenPaths = (string[])info["hidden"]; ASContext.SetLanguageClassPath(setup); if (setup.AdditionalPaths != null) // report custom classpath { info["additional"] = setup.AdditionalPaths.ToArray(); } } e.Handled = true; } // send a UserClasspath else if (command == "ASCompletion.GetUserClasspath") { Hashtable info = de.Data as Hashtable; if (info != null && info.ContainsKey("language")) { IASContext context = ASContext.GetLanguageContext(info["language"] as string); if (context != null && context.Settings != null && context.Settings.UserClasspath != null) { info["cp"] = new List <string>(context.Settings.UserClasspath); } } e.Handled = true; } // update a UserClasspath else if (command == "ASCompletion.SetUserClasspath") { Hashtable info = de.Data as Hashtable; if (info != null && info.ContainsKey("language") && info.ContainsKey("cp")) { IASContext context = ASContext.GetLanguageContext(info["language"] as string); List <string> cp = info["cp"] as List <string>; if (cp != null && context != null && context.Settings != null) { string[] pathes = new string[cp.Count]; cp.CopyTo(pathes); context.Settings.UserClasspath = pathes; } } e.Handled = true; } // send the language's default compiler path else if (command == "ASCompletion.GetCompilerPath") { Hashtable info = de.Data as Hashtable; if (info != null && info.ContainsKey("language")) { IASContext context = ASContext.GetLanguageContext(info["language"] as string); if (context != null) { info["compiler"] = context.GetCompilerPath(); } } e.Handled = true; } // show a language's compiler settings else if (command == "ASCompletion.ShowSettings") { e.Handled = true; IASContext context = ASContext.GetLanguageContext(cmdData); if (context == null) { return; } string filter = "SDK"; string name = ""; switch (cmdData.ToUpper()) { case "AS2": name = "AS2Context"; break; case "AS3": name = "AS3Context"; break; default: name = cmdData.Substring(0, 1).ToUpper() + cmdData.Substring(1) + "Context"; break; } PluginBase.MainForm.ShowSettingsDialog(name, filter); } // Open types explorer dialog else if (command == "ASCompletion.TypesExplorer") { TypesExplorer(null, null); } // call the Flash IDE else if (command == "ASCompletion.CallFlashIDE") { if (flashErrorsWatcher == null) { flashErrorsWatcher = new FlashErrorsWatcher(); } e.Handled = CallFlashIDE.Run(settingObject.PathToFlashIDE, cmdData); } // create Flash 8+ trust file else if (command == "ASCompletion.CreateTrustFile") { if (cmdData != null) { string[] args = cmdData.Split(';'); if (args.Length == 2) { e.Handled = CreateTrustFile.Run(args[0], args[1]); } } } else if (command == "ASCompletion.GetClassPath") { if (cmdData != null) { string[] args = cmdData.Split(';'); if (args.Length == 1) { FileModel model = ASContext.Context.GetFileModel(args[0]); ClassModel aClass = model.GetPublicClass(); if (!aClass.IsVoid()) { Clipboard.SetText(aClass.QualifiedName); e.Handled = true; } } } } else if (command == "ProjectManager.FileActions.DisableWatchers") { foreach (PathModel cp in ASContext.Context.Classpath) { cp.DisableWatcher(); } } else if (command == "ProjectManager.FileActions.EnableWatchers") { // classpaths could be invalid now - remove those, BuildClassPath() is too expensive ASContext.Context.Classpath.RemoveAll(cp => !Directory.Exists(cp.Path)); foreach (PathModel cp in ASContext.Context.Classpath) { cp.EnableWatcher(); } } // Return requested language SDK list else if (command == "ASCompletion.InstalledSDKs") { Hashtable info = de.Data as Hashtable; if (info != null && info.ContainsKey("language")) { IASContext context = ASContext.GetLanguageContext(info["language"] as string); if (context != null) { info["sdks"] = context.Settings.InstalledSDKs; } } e.Handled = true; } } // Create a fake document from a FileModel else if (command == "ProjectManager.OpenVirtualFile") { string cmdData = de.Data as string; if (reVirtualFile.IsMatch(cmdData)) { string[] path = Regex.Split(cmdData, "::"); string fileName = path[0] + Path.DirectorySeparatorChar + path[1].Replace('.', Path.DirectorySeparatorChar).Replace("::", Path.DirectorySeparatorChar.ToString()); FileModel found = ModelsExplorer.Instance.OpenFile(fileName); if (found != null) { e.Handled = true; } } } else if (command == "ProjectManager.UserRefreshTree") { ASContext.UserRefreshRequestAll(); } break; } // // Actionscript context specific // if (ASContext.Context.IsFileValid) { switch (e.Type) { case EventType.ProcessArgs: TextEvent te = (TextEvent)e; if (reArgs.IsMatch(te.Value)) { // resolve current element Hashtable details = ASComplete.ResolveElement(sci, null); te.Value = ArgumentsProcessor.Process(te.Value, details); if (te.Value.IndexOf('$') >= 0 && reCostlyArgs.IsMatch(te.Value)) { ASResult result = ASComplete.CurrentResolvedContext.Result ?? new ASResult(); details = new Hashtable(); // Get closest list (Array or Vector) string closestListName = "", closestListItemType = ""; ASComplete.FindClosestList(ASContext.Context, result.Context, sci.CurrentLine, ref closestListName, ref closestListItemType); details.Add("TypClosestListName", closestListName); details.Add("TypClosestListItemType", closestListItemType); // get free iterator index string iterator = ASComplete.FindFreeIterator(ASContext.Context, ASContext.Context.CurrentClass, result.Context); details.Add("ItmUniqueVar", iterator); te.Value = ArgumentsProcessor.Process(te.Value, details); } } break; // menu commands case EventType.Command: de = e as DataEvent; string command = de.Action ?? ""; if (command.StartsWith("ASCompletion.", StringComparison.Ordinal)) { string cmdData = de.Data as string; switch (command) { // run MTASC case "ASCompletion.CustomBuild": if (cmdData != null) { ASContext.Context.RunCMD(cmdData); } else { ASContext.Context.RunCMD(""); } e.Handled = true; break; // build the SWF using MTASC case "ASCompletion.QuickBuild": ASContext.Context.BuildCMD(false); e.Handled = true; break; // resolve element under cursor and open declaration case "ASCompletion.GotoDeclaration": ASComplete.DeclarationLookup(sci); e.Handled = true; break; // resolve element under cursor and send a CustomData event case "ASCompletion.ResolveElement": ASComplete.ResolveElement(sci, cmdData); e.Handled = true; break; case "ASCompletion.MakeIntrinsic": ASContext.Context.MakeIntrinsic(cmdData); e.Handled = true; break; // alternative to default shortcuts case "ASCompletion.CtrlSpace": ASComplete.OnShortcut(Keys.Control | Keys.Space, ASContext.CurSciControl); e.Handled = true; break; case "ASCompletion.CtrlShiftSpace": ASComplete.OnShortcut(Keys.Control | Keys.Shift | Keys.Space, ASContext.CurSciControl); e.Handled = true; break; case "ASCompletion.CtrlAltSpace": ASComplete.OnShortcut(Keys.Control | Keys.Alt | Keys.Space, ASContext.CurSciControl); e.Handled = true; break; case "ASCompletion.ContextualGenerator": if (ASContext.HasContext && ASContext.Context.IsFileValid) { var options = new List <ICompletionListItem>(); ASGenerator.ContextualGenerator(ASContext.CurSciControl, options); EventManager.DispatchEvent(this, new DataEvent(EventType.Command, "ASCompletion.ContextualGenerator.AddOptions", options)); if (options.Count == 0) { PluginBase.MainForm.StatusLabel.Text = TextHelper.GetString("Info.NoContextGeneratorCode"); } CompletionList.Show(options, false); } break; } } return; case EventType.ProcessEnd: string procResult = (e as TextEvent).Value; ASContext.Context.OnProcessEnd(procResult); break; } } } catch (Exception ex) { ErrorManager.ShowError(ex); } }