[Regnessem-devel] 03/05/10 CVS版の変更点

Back to archive index

-rao- hjmr9****@yahoo*****
2003年 5月 10日 (土) 13:10:25 JST


このところ激いそがしで,夜中と明け方以外になかなかソースを触る時間が取れ
ないため,ちょっと動きが鈍くなっています.すみません.

掲示板にも書きましたが,ちょろちょろとSimpleUIの改造を試みていまして,と
りあえず出来ているところまで,昨晩CVSに上げました.

変更したのはSimpleUIとnsmsgs本体の複数ファイルです.

1) プラグインからメニューに項目を追加できる機構の追加
2) ヘルプファイルの参照(レグネ本体と同じフォルダに入れたayami_wingさん
作のヘルプを開くようにしてあります.感謝>ayami_wingさん)
3) リンク先のSF.jpへの変更
4) 本体のバージョン番号をα10に向けて 0.5.10 系に設定しました.

1) についてですが,プラグインからメニューに項目を追加する方法は以下のよ
うな感じにしてみました.

----- UIサービスの仕様 -----
1) UIサービスの登録
メニューに登録したい項目があるプラグインは以下のUIサービスを
CreateServiceにより登録します.

プロトコルプラグインの場合:
 /Protocol/<プロトコル名>/Connection/UIService/Member/<サービス名>
 /Protocol/<プロトコル名>/Connection/UIService/Group/<サービス名>

AddInプラグインの場合:
 /AddIn/<名前>/UIService/Main/<サービス名>
 /AddIn/<名前>/UIService/Member/<サービス名>
 /AddIn/<名前>/UIService/Group/<サービス名>
 /AddIn/<名前>/UIService/Tab/<サービス名>

Main:メインウィンドウの「機能」メニューに登録
Member,Group:メンバーやグループを右クリックしたときのメニューに登録
Tab:メインウィンドウのタブを右クリックしたときのメニューに登録

注1) Memberメニューに関しては,登録されたメニュー(従来の互換メニューを
含む)のうち,一番上に位置する項目(最初に登録された項目)がデフォルトと
なります(これもいい方法があれば変えたい)

注2) Memberメニューに登録されるプロトコルUIサービスは「名前をコピー」と
いう項目の上に,アドインUIサービスはメニューの末尾に追加されます.

2) UIサービスの実装
UIサービスの仕様は以下の通りです.

Integer TNsmServiceProc(Cardinal wParam, Cardinal lParam);
wParam: HNsmConnection(Main, Tabの場合は不定)
lParam: struct TNsmUIServiceInfoへのポインタ

struct TNsmUIServiceInfo {
  Integer cbSize;     // 構造体のサイズ=sizeof(TNsmUIServiceInfo)
  Integer nInfoKey;   // UIサービス呼び出し理由(NMUI_XXXXで指定)
  Integer nGroupId;   // グループID(Member, Groupの時のみ有効)
  LPCTSTR lpAccount;  // アカウント(Memberの時のみ有効)
  PNsmInfo lpInfo;    // 情報設定用
  Integer nFlags;     // 予約
};

[引数の内容]
a) nInfoKey = NMUI_GETCAPTION の場合
nGroupId = 不定
lpAccount = 不定
lpInfo->nType = NMIT_WIDESTRING
lpInfo->lpBuffer = バッファ
lpInfo->nBufferSize = lpBufferの大きさ

b) nInfoKey = NMUI_ONCLICK の場合
b-1) クリックされた対象がメンバの場合
(〜/UIService/Member/〜が呼び出された場合)
nGroupId = メンバの所属するグループのID
lpAccount = メンバのアカウント名
lpInfo = NULL

b-2) クリックされた対象がグループの場合
(〜/UIService/Group/〜が呼び出された場合)
nGroupId = グループのID
lpAccount = NULL
lpInfo = NULL

b-3) それ以外の場合
nGroupId = 0
lpAccount = NULL
lpInfo = NULL

[返り値]
失敗した場合 0
成功した場合 0以外
a) nInfoKey = NMUI_GETCAPTION(キャプション取得要求)の場合には以下の情
報も返す
lpInfo->nType = NMIT_WIDESTRING
lpInfo->lpBuffer = メニューに設定するキャプション
lpInfo->nBufferSize = lpBufferの大きさ
設定例
  wcsncpy(lpInfo->lpBuffer, <キャプション>, (lpInfo->nBufferSize)/2);

3) 従来との互換UIサービス
上記のフォーマットのUIサービス以外に,以下のUIサービスは対応するキャプショ
ンと共に右クリックメニューに登録されます.

これにより従来のプラグインも利用できますが,【使用されていない(できない)
UIサービスはメニューには表示されません】ので注意して下さい.

サービス
/Protocol/<プロトコル名>/Session/Open
/Protocol/<プロトコル名>/Connection/AddMember
/Protocol/<プロトコル名>/Connection/RemoveMember
/Protocol/<プロトコル名>/Connection/AddGroup
/Protocol/<プロトコル名>/Connection/RemoveGroup
/Protocol/<プロトコル名>/Connection/ChangeGroupName
----- ここまで -----

これだけだと分かりにくいので,実際に動いているサンプルプラグインを添付し
ます.
(追記:と思ったのですが,メイルのサイズが大きくなりすぎましたので以下の
URLにアップしておきます
http://www007.upp.so-net.ne.jp/rao/regne/test/AddInMenuTest.zip
http://www007.upp.so-net.ne.jp/rao/regne/test/ProtocolMenuTest.zip
)

AddInMenuTest(ソース付き)
AddInメニューの簡単なサンプルで,機能メニュー,タブメニュー,メンバ右ク
リックメニュー,グループ右クリックメニューに「ダイアログを開く」という項
目を追加します.

ProtocolMenuTest(ソース無し)
拙作の Yahoo!ニュースヘッドラインプラグインを改造したもので,
NMS_PROTOCOL_SESSION_OPEN に割り当てられていた機能を,独自に追加した「ニュー
スを読む」というメニュー項目で置き換えています.プロトコルUIサービスとア
ドインUIサービスの動作の違いを見るためなので,ソースは付けていません.

なお,今回の変更では,メンバ右クリックメニューから「会話ログを見る」とい
う項目をなくしています.UFrmHistory も NotUsed ディレクトリに移動し,
会話履歴の表示をSimpleUIでは面倒を見なくなりました.これに合わせてログ表
示機能をSimpleLogプラグインに実装しないといけないのですが,ちょっと忙し
くて手が回りませんでした…すんません.

-Rao-


__________________________________________________
Do You Yahoo!?
Yahoo! BB is Broadband by Yahoo!  http://bb.yahoo.co.jp/




Regnessem-devel メーリングリストの案内
Back to archive index