SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

Windows Live Writer用のプラグインを開発する

Windows Live Writer自作プラグインの開発

  • X ポスト
  • このエントリーをはてなブックマークに追加

フォームの使用

 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を参照)。

図6 Live Writerプラグインのオプションへのアクセス方法
図6 Live Writerプラグインのオプションへのアクセス方法

 まず、プラグインにオプションフォームがあることを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オブジェクトを渡す必要があります。

図7 サンプルプラグインのオプションフォーム。
図7 サンプルプラグインのオプションフォーム。
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;
}

次のページ
SmartContentSourceプラグイン

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Scott Lovegrove(Scott Lovegrove)

Windows Live MVP for Microsoftであり、Windows Live Writerだけでなく、Windows Live全般に深く関係している。Windows Live専用のコミュニティWebサイト「LiveSide.net」の主要な寄稿者の1人であり、Windows Live...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/2783 2008/07/25 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング