Beispiel #1
0
 /// <summary>
 /// プラグインメニューを追加します。
 /// </summary>
 /// <param name="plugin">対象のプラグインを表すIImageBatchPlugin。</param>
 private void addPluginMenu(Plugins.IImageBatchPlugin plugin)
 {
     // Toolボタンに追加
     this.tbtBatch.DropDownItems.Add(this.getPluginMenuItem(plugin));
     // メニューに追加
     this.mniBatch.DropDownItems.Add(this.getPluginMenuItem(plugin));
 }
Beispiel #2
0
        /// <summary>
        /// プラグインをロードします。
        /// </summary>
        private void loadPlugins()
        {
            foreach (var dllPath in Directory.GetFiles(this.PluginPath, "*.dll"))
            {
                Assembly asm = null;

                try
                {
                    asm = Assembly.LoadFrom(dllPath);
                }
                catch (Exception)
                {
                    // DLL読込エラーは無視
                    continue;
                }

                foreach (var libType in asm.GetTypes())
                {
                    // パブリッククラスのみ対象
                    if (!libType.IsClass)
                    {
                        continue;
                    }
                    if (!libType.IsPublic)
                    {
                        continue;
                    }
                    // IImageBatchPluginをインプリメントしているクラスのみ
                    if (!typeof(Plugins.IImageBatchPlugin).IsAssignableFrom(libType))
                    {
                        continue;
                    }

                    Plugins.IImageBatchPlugin plugin = null;
                    try
                    {
                        plugin = Activator.CreateInstance(libType) as Plugins.IImageBatchPlugin;
                        if (plugin == null)
                        {
                            continue;
                        }

                        plugin.PluginFolderPath = this.PluginPath;
                    }
                    catch (Exception ex)
                    {
                        // インスタンス化のエラーは無視
                        Debug.WriteLine(ex.ToString());
                        continue;
                    }

                    this.addPluginMenu(plugin);
                }
            }
        }
Beispiel #3
0
        /// <summary>
        /// プラグイン実行用のToolStripMenuItemを取得します。
        /// </summary>
        /// <param name="plugin">対象のプラグインを表すIImageBatchPlugin。</param>
        /// <returns>プラグイン実行用のToolStripMenuItem。</returns>
        private ToolStripMenuItem getPluginMenuItem(Plugins.IImageBatchPlugin plugin)
        {
            ToolStripMenuItem pluginMenu = new ToolStripMenuItem(plugin.PluginInformations.MenuText,
                                                                 plugin.PluginInformations.MenuImage,
                                                                 this.pluginMenuItem_Click);

            pluginMenu.Tag     = plugin;
            pluginMenu.Enabled = false;
            this.pluginMenuList.Add(pluginMenu);

            return(pluginMenu);
        }
Beispiel #4
0
        /// <summary>
        /// プラグインを実行します。
        /// </summary>
        /// <param name="plugin">実行するプラグインを表すIImageBatchPlugin。</param>
        private void execPlugin(Plugins.IImageBatchPlugin plugin)
        {
            try
            {
                this.Cursor          = Cursors.WaitCursor;
                this.tscMain.Enabled = false;

                var retList     = new List <Plugins.BatchTargetImage>();
                var targetList  = this.getBatchTargetList();
                var targetCount = 0;

                if (plugin.IsTargetAllFiles)
                {
                    targetCount = targetList.Count;
                }
                else
                {
                    targetCount = tnvMain.SelectedIndices.Count;
                }

                // プログレスバーを表示
                if (0 < targetList.Count)
                {
                    this.showPluginProgress(targetCount);
                }

                foreach (var item in targetList)
                {
                    if (!item.HasError)
                    {
                        // エラーが無い場合のみ
                        retList.AddRange(plugin.Execute(item));
                    }

                    // プログレスバーをインクリメント
                    this.tpbPlugin.Increment(1);
                    TaskbarManager.Instance.SetProgressValue(this.tpbPlugin.Value, targetCount);
                }
            }
            finally
            {
                TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.NoProgress);
                this.tpbPlugin.Visible = false;
                this.tscMain.Enabled   = true;
                this.Cursor            = Cursors.Default;
            }
        }