さとりすとのプラグインを作成する

Last-modified: 2015-05-30 (土) 10:54:59

このページについて

さとりすとのプラグインシステムをかんがえています。
要望とかあれば教えて下さい。
そもそもどういう情報が必要なのかわからないので、漠然とした感じですが、
とりあえずこれで実装を進めています。
質問などは直接作者にどうぞ。

要件

  • .NET クラスライブラリ。
  • 下のインターフェースを実装してればだいたい動きそう。
  • .NET Framework 4.5
  • プラグインDLLはsatori_editor.exeにあるフォルダのpluginフォルダに。

インターフェースのソースコード

data/SatolistPlugin.dll アセンブリを参照すれば、ISatolistPluginを参照できるようになります。


最新版だとこのインターフェースを実装すれば動くようにしてあるはず。
ビルドしたものを、pluginフォルダを作成してそこにいれて、起動すればプラグインメニューが出るはず。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace SatolistPlugin
{
	public enum SatolistPanelMode
	{
		//とか初期表示位置について書いてある
		Unknown = 0,
		Float = 1,
		DockTopAutoHide = 2,
		DockLeftAutoHide = 3,
		DockBottomAutoHide = 4,
		DockRightAutoHide = 5,
		Document = 6,
		DockTop = 7,
		DockLeft = 8,
		DockBottom = 9,
		DockRight = 10,
		Hidden = 11,
		None = 12
	}
	public interface ISatolistPlugin
	{
		//インスタンス作成後に呼ばれます。
		//このメソッドが例外をスローした場合はロード失敗扱いで直ちにUnload()が呼び出されます。
		//バージョンはプラグインホストバージョン。
		void Load(int version, Dictionary<String, Object> args);
		//さとりすとの終了時に呼び出されます。
		//ロードに失敗した時にも呼び出されます。
		void Unload();
		//さとりすとのパネルとして動作するかどうかを返します。
		//None以外を返した場合はパネルとして扱います。ただし継承ツリーにUserControlが必要です。
		//継承ツリーにUserControlがない場合はプラグインの読み込みに失敗します。
		//Noneを返した場合はパネルではないツールとして扱われます。
		//パネルの場合はプラグイン1個がパネル1個です。
		SatolistPanelMode GetPanelMode();
		//さとりすとが基本的な情報を要求した場合に呼ばれます。
		//特にこのメソッドはプラグインの基礎情報を取得するために、
		//Load() 前に呼ばれることに注意してください。
		//可能な限りリテラルを返すようにします。
		String GetBaseProperty(String property_name);
		//パネルじゃない場合に呼ばれます。
		//プラグインメニューの情報を設定できます。
		//(パネルの場合は表示ボタンになる)
		ToolStripItem GetMenuItems();
		//さとりすとが拡張的な情報を要求した場合に呼ばれます。
		//property_name に対応する文字列を返してください。
		//情報がない場合は、nullを返します。
		//注意: 必須となるいくつかの項目にnullを返した場合、ロード失敗扱いになります。
		String GetProperty( String property_name );
		//状況が変わった時などにイベントとして通知されます。
		void Event(String event_name, Dictionary<String, Object> args);
	}
}

注意

今のところ、各種のメソッドにnullを返しても特にエラーチェックしていないので、動作は未定義です。
SatolistPanelMode はNoneかそれ以外の2択で、パネルの場合右側に出るようになってます。
パネルの位置は記憶されません(記憶するようにはする予定)

GetBasePropertyについて

今のところ、次の情報を要求します。

craftman

作者名。

craftma_nurl

作者サイト。

description

プラグインの説明。

description_short

短いプラグインの説明(リストに表示されるので収まるように)

plugin_name

プラグインの名前。表示に使用する自由なもの。(アセンブリ名とかである必要はないです。)

説明

起動方法

さとりすとのメニューバーに「プラグイン」メニューを追加して、プルダウンメニューに各プラグインが表示されるようになります。
プラグイン1つあたりプルダウンメニュー1つぶんを使います。


「プラグイン」
 →プラグインの管理
 →プラグイン1
 →プラグイン2


のような。

基本

大きく分けて「パネル型」と「メニュー型」になります。

パネル型

パネル型は「単語群・文リスト」のようなドッキングウィンドウとして表示されます。
上のインターフェースを実装した上で継承ツリーにUserControlがあることが条件で、
パネルにそのUserControlがFillで表示されます。
メニューバーの項目は表示ボタンとして機能します。

メニュー型

メニューバーの項目を1つ使って(さらに子を作ってツリーにすることは可能)、
クリックされたときのイベントから自由に動きを設定することができます。
( GetMenuItems() メソッド で得たメニューをそのまま表示します。イベントハンドラもプラグイン側からどうぞ )