フォームの使用
Windows Formsをプラグインで使用することはよくあるので、プラグインコードから正しく呼び出す方法を知ることが大切です。フォームを使用することで、ユーザーがブログエントリに挿入するものを正確に制御できます。ビデオURLを挿入する、リストから顔文字を選択する、Amazonから書籍を検索するなど、フォームはさまざまな方法で使用できます。
フォームはCreateContentメソッドから呼び出すことができます。
public override DialogResult CreateContent (IWin32Window dialogOwner, ref string content) { using (frmMain form = new frmMain()) { DialogResult result = form.ShowDialog(); if (result == DialogResult.OK) content = form.NewContent; return result; } }
上記のコードは、NewContent
というプロパティを持つ単純なフォームを表示します。このプロパティはブログエントリに挿入する新しいコンテンツ値を返します。通常、プラグインが最終的に挿入するコードは、フォームのプロパティの値に基づきます。
フォーム内の[Accept]ボタンのコードには次の行が必要です。
this.DialogResult = DialogResult.OK;
これにより、フォームが閉じたときに、その結果をチェックするif
条件が真になります。
設定の使用
プラグインの既定値をユーザーが設定できるようにしたい場合は、フォームと同様に、設定オブジェクトをプラグインに組み込みます。通常、ユーザーはLive Writerの[Options]領域でプラグインを選択し、[Options]ボタンを選択することで、プラグインの既定値を設定できます(図6を参照)。
まず、プラグインにオプションフォームがあることをLive Writerに知らせなければなりません。これを行うには、プラグイン属性でHasEditableOptions=true
を設定する必要があります。
設定クラスではWindowsLive.Writer.Apiも使用する必要があります。なぜなら、このオブジェクトには、プラグインが設定を読み書きするための媒体となるIPropertiesオブジェクトを渡す必要があるからです。設定クラスのコンストラクタは次のようになります。
IProperties m_properties;
public PluginSettings(IProperties properties)
{
m_properties = properties;
}
グローバル変数m_properties
に注目してください。これはクラスのプロパティの中でIPropertiesを呼び出すために使われます。
Live Writer APIは、String、Int、Float、Bool、Decimalという5種類の設定型を認識します。これらはすべて独自のGet
メソッドとSet
メソッドを持っており(GetString()
やSetString()
など)、これらはIPropertiesクラスの一部として公開されます。そのため、Live Writer APIを使って保存される設定の単純なプロパティは次のようになります。
public bool DefaultBoldOption { get { return m_properties.GetBoolean ("DEFAULTBOLD", true); } set { m_properties.SetBoolean ("DEFAULTBOLD", value); } }
それぞれのGet
メソッドには属性名(この場合はDEFAULTBOLD
)と既定値が必要です(プラグインの初回使用時にはこの既定値が使われます)。それぞれのSet
メソッドは、Get
メソッドと同じように属性名を必要とし、渡された値を使って単純に属性を設定します。プラグインに持たせたいすべての設定について、これを行う必要があります。
設定クラス(PluginSettings)の用意ができたら、次はプラグインコード内から設定を初期化する必要があります。元のプラグインクラスに戻り、グローバル変数を追加します。
PluginSettings m_defaultsettings;
その後、プラグイン設定を初期設定に割り当てるために、Initialize()
メソッドをオーバーライドします。
public override void Initialize (IProperties pluginOptions) { base.Initialize(pluginOptions); m_defaultsettings = new PluginSettings(pluginOptions); }
base.Initialize(pluginOptions)
により、このプラグインのレジストリからプラグイン設定が取得され、IPropertiesクラスに格納されます。このクラスをPluginSettingsオブジェクトに引き渡すことで、プラグイン設定の読み書きが可能になります。
さらに、オプションフォームを作成する必要があります。この例では、図7のようなフォームを作成しました。このフォームにPluginSettingsオブジェクトを渡す必要があります。
PluginSettings m_settings; public frmOptions(PluginSettings settings) { InitializeComponent(); m_settings = settings; // This sets the check box to be // whatever the default option was chBoldOption.Checked = m_settings.DefaultBoldOption; }
[Save]ボタンのClickイベントでは次のコードを実行します。
private void btnSave_Click (object sender, EventArgs e) { // Sets the option to whatever // the check box is currently at m_settings.DefaultBoldOption = chBoldOption.Checked; this.Close(); }
この例には設定が1つしかありませんが、プラグインの設定がどれだけ多くても原理は同じです。
次はプラグインクラスに戻り、EditOptions
メソッドをオーバーライドして、オプションフォームを呼び出すようにする必要があります。
public override void EditOptions (IWin32Window dialogOwner) { PluginSettings settings = new PluginSettings(this.Options); frmOptions op = new frmOptions(settings); op.ShowDialog(); }
この後やるべきことは、その設定をプラグインアクションに反映させることだけです。CreateContent
メソッドのコードを次のように変更します。
using (frmMain form = new frmMain()) { DialogResult result = form.ShowDialog(); if (result == DialogResult.OK) { content = form.NewContent; if (m_defaultsettings.DefaultBoldOption) { content = string.Format( "<b>{0}</b>", content); } } return result; }