使ってみよう! Windows Live SDK/API

第8回 Windows Live Writer ―― プラグインの作成 Part II

この記事を読むのに必要な時間:およそ 5 分

入力ウィンドウの利用

CreateContetが呼び出されたときユーザに何か値を入力させ,それに基づき挿入する内容を決めることもできます。たとえば図3のようなWindowsフォームを用意します。フォームにTextBoxを貼り付け,そのTextプロパティの値をStyleTextという名前のプロパティを通して取得できるようにしました。フォームを使用するためSystem.Drawingも参照します。

図3 入力ウィンドウの例

図3 入力ウィンドウの例

コードを次のように書きます。以下では選択したテキストに入力ウィンドウで指定したスタイル属性を付ける処理をしています。挿入項目をクリック時にブログ記事中のテキストを選択していた場合,引数のcontentにはその文字列が格納されているため,このようなことが可能です。

Public Overrides Function CreateContent(ByVal dialogOwner As System.Windows.Forms.IWin32Window, ByRef content As String) As System.Windows.Forms.DialogResult
    Dim frm = New StyleSelectionForm ' 自作ウィンドウ
    Dim result = frm.ShowDialog(dialogOwner)
    If result = Windows.Forms.DialogResult.OK Then
        content = "<span style=""" & frm.StyleText & """>" & content & "</span>"
    End If
    frm.Dispose()
    Return result
End Function

また,CreateContentメソッドにはSystem.Windows.Forms.IWin32Window型のdialogOwnerという引数もあります。WindowsフォームのShowDialogメソッドを呼ぶときに指定することでオーナーフォームの指定が可能になっています。

スマート挿入プラグイン

次は,SmartContentSourceクラスを継承した挿入プラグインを作ってみましょう。プロジェクト作成やクラスの属性については,これまでと同じです。クラスには次のメソッドが必要になります。

CreateContent

挿入するたびに1度だけ最初に呼ばれます。引数はContentSourceクラスのときと異なっています。参照渡しのString型の引数の代わりにISmartContentというオブジェクトが渡されます。挿入するHTMLはここでは決定せずGeneratePublishHtmlメソッドを使います。

CreateEditor

プラグインの種別ごとに最初の挿入時にただ1度だけ呼ばれるメソッドです。サイドバーに表示するエディタとなるSmartContentEditorクラスのインスタンスを生成し戻り値として返すことになります。

GeneratePublishHtml

ブログ記事へ挿入するHTMLを戻り値に指定するメソッドになります。戻り値がString型になっています。

挿入した内容の保持

スマートプラグインは1度 挿入した後にも内容を変更することができます。その内容を保持するためにISmartContentインタフェースにあるPropertiesというプロパティを利用します。このプロパティの型はIPropertiesというインタフェースになっています。

IPropertiesインタフェースは,SetStringやGetStringといったメソッドを持っています。SetString・GetStringは名前が示すようにString型の情報を保持するためのものです。

SetString

値を設定するときに使用します。引数は次のとおりです。戻り値はありません。ここでいうプロパティ名とは,設定した値を単に識別するためのもので,自由に名前を決めて構いません。

name(String型) プロパティ名
value(String型) 設定する値
GetString

値を取得するときに使用します。引数は次のとおりです。戻り値は指定したプロパティ名の値になります。もしその名前のプロパティが存在しない場合,規定値に指定した値が返ってきます。

name(String型) プロパティ名
defaultValue(String型) 指定したプロパティが存在しないときの規定値

GetString・SetStringのほかに,GetBoolean,GetDecimal,GetFloat,GetIntなど基本的な型のものが用意されています。

ISmartContentインタフェースはCreateContentとGeneratePublishHtmlメソッドの引数にあり,たとえば次のように使用します。CreateContentメソッド内でTextというプロパティ名を指定して「こんにちは」という値を格納しています。そして,GeneratePublishHtmlメソッドにて,その値を取り出して戻り値に指定しています。

Public Overrides Function CreateContent(ByVal dialogOwner As System.Windows.Forms.IWin32Window, ByVal newContent As WindowsLive.Writer.Api.ISmartContent) As System.Windows.Forms.DialogResult
    newContent.Properties.SetString("Text", "こんにちは")
    Return Windows.Forms.DialogResult.OK
End Function

Public Overrides Function GeneratePublishHtml(ByVal content As WindowsLive.Writer.Api.ISmartContent, ByVal publishingContext As WindowsLive.Writer.Api.IPublishingContext) As String
    Return content.Properties.GetString("Text", "Hello, world.")
End Function

注目すべき点は,どちらもメソッドの引数で渡された変数を使用して値の設定・取得をしています。WLWによって適切なオブジェクトが渡されるためグローバル(Private)な領域に通常は記憶しておく必要はありません。ただし,上記のコードはCreateEditorメソッドを実装していないため,正常にプラグインは動きません。

著者プロフィール

松江祐輔(まつえゆうすけ)

日本システムウエア株式会社 勤務。現在,ハードウェア設計・検証業務を担当。大学生・大学院生時代はベンチャー企業 有限会社ミレニアムシステムズにプログラマーとして従事。趣味はプログラミング。好きな言語はVisual Basic。Microsoft MVP for Windows Live Platform(Jul 2010 - Jun 2011),Windows Live(Jul 2011 - Jun 2013)。

URL:http://katamari.jp

コメント

コメントの記入