public LocalWordsProjectPlugin(Project project)
        {
            // Save the variables so we can access them later.
            Project = project;

            // Create the collections we'll use.
            CaseInsensitiveDictionary = new HashSet<string>();
            CaseSensitiveDictionary = new HashSet<string>();

            // Load in the initial settings.
            ReadSettings();
        }
        public ImmediateCorrectionProjectPlugin(
			ImmediateCorrectionPlugin plugin,
			Project project)
        {
            // Save the various properties we need for the controller.
            Plugin = plugin;
            Project = project;

            // Set up the substitions from the configuration settings.
            Substitutions = new List<RegisteredSubstitution>();
            RetrieveSettings();
        }
        public ProjectLineBuffer(
			Project project,
			EditorView editorView)
        {
            // Save the parameters as member fields for later.
            this.project = project;
            this.editorView = editorView;

            // Pull out some common elements.
            blocks = this.project.Blocks;
            commands = project.Commands;

            // Hook up the events.
            editorView.Controller.PopulateContextMenu += OnPopulateContextMenu;
            blocks.BlockTextChanged += OnBlockTextChanged;
            blocks.TextSpansChanged += OnTextSpansChanged;
            blocks.BlockTypeChanged += OnBlockTypeChanged;
        }
 public ImmediateBlockTypesProjectPlugin(Project project)
 {
     Project = project;
 }
        /// <summary>
        /// Configures the environment to load the plugin manager and verify we
        /// have access to our plugin and projectPlugin.
        /// </summary>
        private void SetupPlugin(
			out ProjectBlockCollection blocks,
			out BlockCommandSupervisor commands,
			out PluginSupervisor plugins,
			out FilesystemPersistenceProjectPlugin projectPlugin)
        {
            // Start getting us a simple plugin manager.
            var persistencePlugin = new PersistenceFrameworkPlugin();
            var filesystemPlugin = new FilesystemPersistencePlugin();
            var spellingPlugin = new SpellingFrameworkPlugin();
            var nhunspellPlugin = new HunspellSpellingPlugin();
            var localWordsPlugin = new LocalWordsPlugin();
            var immediateCorrectionPlugin = new ImmediateCorrectionPlugin();
            var immediateBlockTypesPlugin = new ImmediateBlockTypesPlugin();
            var blockStructurePlugin = new BlockStructurePlugin();

            var pluginManager = new PluginManager(
                persistencePlugin,
                filesystemPlugin,
                spellingPlugin,
                nhunspellPlugin,
                localWordsPlugin,
                immediateCorrectionPlugin,
                immediateBlockTypesPlugin,
                blockStructurePlugin);

            PluginManager.Instance = pluginManager;
            PersistenceManager.Instance = new PersistenceManager(persistencePlugin);

            // Create a project and pull out the useful properties we'll use to
            // make changes.
            var project = new Project();

            blocks = project.Blocks;
            commands = project.Commands;
            plugins = project.Plugins;

            // Load in the plugins we'll be using in these tests.
            foreach (IPlugin plugin in pluginManager.Plugins)
            {
                plugins.Add(plugin.Key);
            }

            // Set up the local words lookup.
            var localWordsProjectPlugin =
                (LocalWordsProjectPlugin) plugins["Local Words"];

            localWordsProjectPlugin.ReadSettings();
            localWordsProjectPlugin.CaseInsensitiveDictionary.Add("teig");
            localWordsProjectPlugin.CaseSensitiveDictionary.Add("Moonfire");
            localWordsProjectPlugin.WriteSettings();

            // Set up the immediate correction plugin.
            var immediateCorrectionProjectPlugin =
                (ImmediateCorrectionProjectPlugin) plugins["Immediate Correction"];

            immediateCorrectionProjectPlugin.AddSubstitution(
                "Grey", "Gray", SubstitutionOptions.WholeWord);
            immediateCorrectionProjectPlugin.AddSubstitution(
                "GWG", "Great Waryoni Garèo", SubstitutionOptions.None);
            immediateCorrectionProjectPlugin.AddSubstitution(
                "GWB", "Great Waryoni Bob", SubstitutionOptions.None);

            // Set up the immediate block types.
            var immediateBlockTypesProjectPlugin =
                (ImmediateBlockTypesProjectPlugin) plugins["Immediate Block Types"];

            foreach (BlockType blockType in project.BlockTypes.BlockTypes.Values)
            {
                string prefix = string.Format("{0}: ", blockType.Name);

                immediateBlockTypesProjectPlugin.Settings.Replacements[prefix] =
                    blockType.Name;
            }

            // Pull out the projectPlugin for the correction and cast it (since we know
            // what type it is).
            ProjectPluginController pluginController = plugins.Controllers[1];
            projectPlugin =
                (FilesystemPersistenceProjectPlugin) pluginController.ProjectPlugin;
        }
 public IProjectPlugin GetProjectPlugin(Project project)
 {
     return new SpellingFrameworkProjectPlugin();
 }
        public void InitializePluginFramework(
			Project project,
			IEnumerable<IProjectPlugin> controllers)
        {
            foreach (IProjectPlugin controller in controllers)
            {
                HandleAddedController(project, controller);
            }
        }
        /// <summary>
        /// Configures the environment to load the plugin manager and verify we
        /// have access to our plugin and projectPlugin.
        /// </summary>
        private void SetupPlugin(
			out BlockCommandContext context,
			out ProjectBlockCollection blocks,
			out BlockCommandSupervisor commands,
			out PluginSupervisor plugins,
			out SpellEngineSpellingProjectPlugin projectPlugin)
        {
            // Start getting us a simple plugin manager.
            var spelling = new SpellingFrameworkPlugin();
            var nhunspell = new HunspellSpellingPlugin();
            var pluginManager = new PluginManager(spelling, nhunspell);

            PluginManager.Instance = pluginManager;

            // Create a project and pull out the useful properties we'll use to
            // make changes.
            var project = new Project();

            context = new BlockCommandContext(project);
            blocks = project.Blocks;
            commands = project.Commands;
            plugins = project.Plugins;

            // Load in the immediate correction editor.
            if (!plugins.Add("Spelling Framework"))
            {
                // We couldn't load it for some reason.
                throw new ApplicationException("Cannot load 'Spelling' plugin.");
            }

            if (!plugins.Add("NHunspell"))
            {
                // We couldn't load it for some reason.
                throw new ApplicationException("Cannot load 'NHunspell' plugin.");
            }

            // Pull out the projectPlugin for the correction and cast it (since we know
            // what type it is).
            ProjectPluginController pluginController = plugins.Controllers[1];
            projectPlugin =
                (SpellEngineSpellingProjectPlugin) pluginController.ProjectPlugin;
        }
 public IProjectPlugin GetProjectPlugin(Project project)
 {
     return projectPlugin;
 }
 public IProjectPlugin GetProjectPlugin(Project project)
 {
     var controller = new ImmediateCorrectionProjectPlugin(this, project);
     return controller;
 }
 public IProjectPlugin GetProjectPlugin(Project project)
 {
     var projectPlugin = new BlockStructureProjectPlugin();
     return projectPlugin;
 }
        /// <summary>
        /// Raises the project is unloaded.
        /// </summary>
        /// <param name="project">The project.</param>
        protected void RaiseProjectUnloaded(Project project)
        {
            EventHandler<ProjectEventArgs> listeners = ProjectUnloaded;

            if (listeners != null)
            {
                var args = new ProjectEventArgs(project);
                listeners(this, args);
            }
        }
        /// <summary>
        /// Sets the project and fires the various events 
        /// </summary>
        /// <param name="project">The project.</param>
        public void SetProject(Project project)
        {
            // If the project is identical to the currently loaded one, we
            // don't have to do anything nor do we want events loaded.
            if (project == Project)
            {
                return;
            }

            // If we already had a project loaded, we need to unload it
            // so the various listeners can handle the unloading (and
            // interrupt it).
            if (Project != null)
            {
                // Disconnect the project from the manager.
                Project unloadedProject = Project;
                Project = null;

                // Raise the associated event.
                RaiseProjectUnloaded(unloadedProject);
            }

            // If we have a new project, then load it and raise the appropriate
            // event.
            if (project != null)
            {
                // Set the new project in the manager.
                Project = project;

                // Raise the loaded event to listeners.
                RaiseProjectLoaded(project);
            }
        }
        /// <summary>
        /// Configures the environment to load the plugin manager and verify we
        /// have access to the ImmediateCorrectionPlugin.
        /// </summary>
        private void SetupCorrectionPlugin(
			out BlockCommandContext context,
			out ProjectBlockCollection blocks,
			out BlockCommandSupervisor commands,
			out ImmediateCorrectionProjectPlugin projectPlugin)
        {
            // Start getting us a simple plugin manager.
            var plugin = new ImmediateCorrectionPlugin();
            var pluginManager = new PluginManager(plugin);

            PluginManager.Instance = pluginManager;

            // Create a project and pull out the useful properties we'll use to
            // make changes.
            var project = new Project();

            context = new BlockCommandContext(project);
            blocks = project.Blocks;
            commands = project.Commands;

            // Load in the immediate correction editor.
            if (!project.Plugins.Add("Immediate Correction"))
            {
                // We couldn't load it for some reason.
                throw new ApplicationException("Cannot load immediate correction plugin");
            }

            // Pull out the controller for the correction and cast it (since we know
            // what type it is).
            ProjectPluginController pluginController = project.Plugins.Controllers[0];
            projectPlugin =
                (ImmediateCorrectionProjectPlugin) pluginController.ProjectPlugin;
        }
        /// <summary>
        /// Configures the environment to load the plugin manager and verify we
        /// have access to the ImmediateCorrectionPlugin.
        /// </summary>
        private void SetupPlugin(
			out ProjectBlockCollection blocks,
			out BlockCommandSupervisor commands,
			out WordCounterProjectPlugin projectPlugin)
        {
            // Start getting us a simple plugin manager.
            var plugin = new WordCounterPlugin();
            var pluginManager = new PluginManager(plugin);

            PluginManager.Instance = pluginManager;

            // Create a project and pull out the useful properties we'll use to
            // make changes.
            var project = new Project();

            blocks = project.Blocks;
            commands = project.Commands;

            // Load in the immediate correction editor.
            if (!project.Plugins.Add("Word Counter"))
            {
                // We couldn't load it for some reason.
                throw new ApplicationException("Cannot load word counter plugin.");
            }

            // Pull out the controller for the correction and cast it (since we know
            // what type it is).
            ProjectPluginController pluginController = project.Plugins.Controllers[0];
            projectPlugin = (WordCounterProjectPlugin) pluginController.ProjectPlugin;

            // Set up logging for the controller.
            WordCounterProjectPlugin.Logger = Console.WriteLine;
        }
 public IProjectPlugin GetProjectPlugin(Project project)
 {
     return new WordCounterProjectPlugin();
 }
 public IProjectPlugin GetProjectPlugin(Project project)
 {
     return new LocalWordsProjectPlugin(project);
 }
        public void HandleRemovedController(
			Project project,
			IProjectPlugin controller)
        {
            var spellingController = controller as ISpellingProjectPlugin;

            if (spellingController != null)
            {
                // Update the collections.
                SpellingControllers.Remove(spellingController);

                // Inject some additional linkage into the controller.
                spellingController.BlockAnalyzer = null;
            }
        }
        private void OnProjectMenuNewItem(
			object sender,
			EventArgs e)
        {
            // We need an open file dialog box and use that to select the project.
            var dialog = new FileChooserDialog(
                "Choose Author Intrusion Project",
                this,
                FileChooserAction.Save,
                "Cancel",
                ResponseType.Cancel,
                "Save",
                ResponseType.Accept);

            // Set up the filter on the dialog.
            var filter = new FileFilter
            {
                Name = "Project Files"
            };
            filter.AddMimeType("binary/x-author-intrusion");
            filter.AddPattern("*.aiproj");
            dialog.AddFilter(filter);

            // Show the dialog and process the results.
            try
            {
                // Show the dialog and get the button the user selected.
                int results = dialog.Run();

                // If the user accepted a file, then use that to open the file.
                if (results != (int) ResponseType.Accept)
                {
                    return;
                }

                // Create a project and (for now) add in every plugin.
                var project = new Project();

                foreach (IPlugin plugin in project.Plugins.PluginManager.Plugins)
                {
                    project.Plugins.Add(plugin.Key);
                }

                // Save the project to the given file.
                var file = new FileInfo(dialog.Filename);
                var savePlugin =
                    (FilesystemPersistenceProjectPlugin)
                        project.Plugins["Filesystem Persistence"];

                savePlugin.Settings.SetIndividualDirectoryLayout();
                savePlugin.Settings.ProjectDirectory = file.Directory.FullName;
                savePlugin.Save(file.Directory);

                // Set the project to the new plugin.
                string newProjectFilename = System.IO.Path.Combine(
                    file.Directory.FullName, "Project.aiproj");
                var projectFile = new FileInfo(newProjectFilename);
                projectManager.OpenProject(projectFile);
            }
            finally
            {
                // Destroy the dialog the box.
                dialog.Destroy();
            }
        }
 public IProjectPlugin GetProjectPlugin(Project project)
 {
     return new ImmediateBlockTypesProjectPlugin(project);
 }