Kデスクトップ環境

3.6. OpenParts の要 - OpenParts::MainWindow インタフェース

もう1つの重要なコンポーネントは呼び出されたOpenParts::MainWindowです。 これは実装上のKTMainWindowに由来するもので(それゆえ、アプリケーションのトップレベルウィンドウです。)、目に見えるサブウィンドウや共有 GUI 要素のまわりのシェルです。

メインウィンドウの機能性は、いくつかのビルトイン集合体で拡張されます。それは、メニュー-/ツール-/ステイタスバーの管理オブジェクトです。 これらのオブジェクトは、メインウィンドウインタフェースの*barManager()メソッドを通して直接利用するか、集合体にすることで間接的にし、したがってコンポーネントインタフェースレポジトリ(getInterface(),supportsInterface(),...)を利用するかです。

Part は、メインウィンドウにのみ表示可能で、メインウィンドウは、このことについての理解が必要です。 ですから Part を表示する前に、Part をメインウィンドウに登録しなければなりません。 これは、Part インタフェースのsetMainWindow()メソッドを呼ぶことで行えます(詳しくは登録の過程についての前章をご覧ください。)。 これで、Part に単一のIDが与えられます(たとえば、*バーマネージャオブジェクトによって Part のGUIを当てるのに使用されます。)。

メインウィンドウは、シェルとして全ての共有GUI要素を完全に制御することができます。 これは次のことを管理しているということです。

*バーマネージャの作成は、通常適切なマネージャへのポインタを返す*barManager()へ見せかけの呼び出しを実行することで簡単に行えます。 もしマネージャがまだ存在しないならば、新規作成もおこないます。 メインウィンドウの構造上この呼び出しを実行することをお勧めします。

スケルトン GUI の作成/操作は、後にOPメニュー(バー)/OPツールバーの章で説明します。

メインウィンドウは、Qt シグナル(activePartChanged)を発します。 これは、アクティブ Part のフォーカス変更について情報提供します。つまりユーザが非アクティブ Part をクイックすると、そのフォーカスを受け入れます。 このシグナルの純粋に有益な点に加え、このシグナルに接続し、スロット実装時の以下にあげる2つのステップを実行することをお勧めします:

  1. *bar managersclear()関数を呼んで、以前アクティブになっている Part の GUI を非アクティブにします。そうすると、ジョブが行われ、内部的なものが、GUI イベント(前章をご覧ください)を Part に発します。

  2. *bar managerscreate()関数を呼んで、新しいアクティブ Part GUIをアクティブにします。 これはアクティブ化に類似し、Part にイベントを発するはずです。 実際に、要求はされませんが、強く推奨されています。 次のコードはこのことを扱っています:
       1       void NameOfYourMainWindow::slotActivePartChanged( unsigned long old_id,
       2                                                         unsigned long new_id )
       3       {
       4         // メニュー/ツール/ステイタスバー を削除
       5         menuBarManager()->clear();
       6         toolBarManager()->clear();
       7         statusBarManager()->clear();
       8         // create the new Part's GUI
       9         menuBarManager()->create( new_id );
      10         toolBarManager()->create( new_id );
      11         statusBarManager()->create( new_id );
      12       }
      13       

メインウィンドウが全ての共有物を処理しますが、このドキュメントでまだ説明していなかったことがあります: メインウィンドウのキャプションは? OpenParts メインウィンドウインタフェースは、Part が独自のウィンドウキャプションをを持つことを許可していますが、OpenPartsはどのようにしてこれを処理しているのでしょうか?

方法は2つあります:

  1. OPMainWindowは、アクティブパートが変わる場合はいつでもメインウィンドウのキャプションを自動的に変更する、いわゆるAutoCaptionモードを提供します。 これはデフォルトで使用できるようになっています。

  2. しかし時々シェルがウインドウのキャプションを完全に制御したがります。 これは、AutoCaptionモードを無効にすることで実行できます。 そうするとウインドウのキャプションが、どんな方法でも OpenParts では変更されないようになり、代わりに自分でそれを制御できるようにします。