共通デスクトップ環境 ToolTalk メッセージの概要

ToolTalk 対応エディタ・アプリケーションが実行する必要があるタスク

前述の 「各 ToolTalk 対応アプリケーションが実行する必要があるタスク」で説明しているタスクの他に、ToolTalk 対応エディタ・アプリケーションは次のタスクも実行する必要があります。

この節では、これらの追加タスクを実行できるようにエディタ・アプリケーションに組み込む必要がある ToolTalk のコーディング例を取り上げます。


注 -

この節で使用しているコーディングの一部分は、CoEditor.C ファイルから引用しています。このファイルには、エディタ・アプリケーション用の特定コマンドが入っています。詳細なソースコードについては、付録 B 「CoEd デモンストレーション・プログラム」を参照してください。


メディア・ロード・パターン・コールバックの記述

ToolTalk 関数を組み込むためにエディタ・アプリケーションをコーディングする前に、実行しなければならない手順が 1 つあります。この手順は、メディア・ロード・パターン・コールバック・ルーチンを記述する必要があるということです。たとえば、次のようになります。

Tt_message
CoEditor::loadISOLatin1_(
   Tt_message         msg,
   void               *pWidget,
   Ttttk_op           op,
   Tt_status          diagnosis,
   unsigned char      *contents,
   int                len,
   char               *file,
   char               *docname
)

このコールバックは、実行時にメディア・ロード関数に渡されます。

ptype の宣言

型情報は (アプリケーションのインストール時に) 1 回だけしか指定されないので、アプリケーションを起動するたびにその ptype を宣言する必要があります。

メディア・ロード・パターン・コールバックのパス

前述したメディア・ロード・パターン・コールバック・ルーチンは実行時に渡されます。コールバックは、アプリケーションがセッションに参加するときに登録されます。ツールが要求を処理することにすると、コールバック・メッセージが送信されます。ファイルが参加する、あるいはメッセージが無視される場合にも、コールバック・メッセージは送信されます。

// Join the session and register patterns and callbacks 
sessPats = ttdt_session_join( 0, 0, session_shell, this, 1 );        

// Accept responsibility to handle a request
    _contractPats = ttdt_message_accept(msg, CoEditor::_contractCB_, 
                                        shell, this, 1, 1 ); 

// Optional task: Join a file (Can be called recursively)
    if (_filePats == 0) {_filePats = ttdt_file_join( _file, TT_SCOPE_NONE, 1,
                                                     CoEditor::_fileCB_, this );
    }        

// Fail a message 
tttk_message_fail( msg, TT_DESKTOP_ENODATA, 0, 1 );

要求完了時の応答

アプリケーションはオペレーションの要求を完了した後、送信側アプリケーションに応答しなければなりません。次のメッセージは、テキストの編集された内容を送信側に返します。

// Reply to media load pattern callback 
// with edited contents of text 
ttmedia_load_reply( _contract, (unsigned char *)contents, len, 1 );