//--------------------------------------------------------------------------- // // Geoworks (R) application software and GEOS (R) operating system // software copyright (C) 1990-1998 Geoworks. All rights reserved. // United States Patents 5327529, 5237651, and 5438662. U.K. Patents // 0375703 and 0631677. German Patents P3854269.2-08 and // 69307728.1-08. French Patents 0375703 and 0631677. Other // international patents pending. // // このソフトウェアは、Geoworks の専有する秘密情報 // ("企業秘密") です。この企業秘密を公開してはならず、 // Geoworks と締結したライセンス契約書の条件に // 従ってのみ使用することができます。 // // // プロジェクト : GEOS-SC マニュアル // モジュール : チュートリアル // ファイル : tutsamp.cpp // // バージョン : 2.2 // //--------------------------------------------------------------------------- #include //GEOS-SC の標準データ型を使用します #include //UI ファクトリを使用します #include //UI のヒントを使用します #include //TCHAR 文字列関数 (Tstrcpy) を使用します #include "tutsamp.h" //クラス定義を使用します #include "resource.h" //ユーザーに表示される文字列を使用します // アプリケーションの static 変数に対してシステムが使用する名前を設定します AppNameAttribute tutsampAppName(&tutsampApp, TUTSAMPAPP_FRAME_TITLE); //--------------------------------------------------------------------------- // TutorialApp::TutorialApp() //--------------------------------------------------------------------------- // // 説明 : このアプリケーションの App オブジェクトのコンストラクタ。 // このコンストラクタは、アプリケーションを // 起動する前に _builtUI フラグを初期化する // という点で役に立つ // スコープ : public // パラメータ : なし // 戻り値 : なし // //--------------------------------------------------------------------------- TutorialApp::TutorialApp() : _builtUI( FALSE ), _layout( NULL ) {}; // End of TutorialApp::TutorialApp() //--------------------------------------------------------------------------- // TutorialApp::SetAppContext() //--------------------------------------------------------------------------- // // 概要 : アプリケーションの起動時またはこのアプリケーションに // 切り替わったときに呼び出される。UI が既に構築されているかどうかを調べ、 // 構築されていない場合は BuildUI() を呼び出して UI を構築する // // 次に、コンテキスト文字列があれば読み取る // // スコープ : public // 戻り値 : void // パラメータ : [in] context - アプリケーションのコンテキスト // //--------------------------------------------------------------------------- /* virtual */ void TutorialApp::SetAppContext(const TCHAR *context) { // // アプリケーションの UI がまだ構築されていない場合は、 // ヘルパー関数を呼び出して UI を構築します // if ((!_builtUI) && BuildUI() != SUCCESS) { EC_WARN("UI を作成できません。"); // Exit を呼び出してアプリケーションを終了し、クリーンアップを行います Exit(); } if (context) { if (Tstrcmp( context, _TEXT("+")) == 0) { _helloworldLabel->SetVisible(TRUE); return; } if (Tstrcmp( context, _TEXT("-")) == 0) { _helloworldLabel->SetVisible(FALSE); return; } EC_WARN("解釈できないコンテキスト文字列です。"); } } // End of TutorialApp::SetAppContext() //--------------------------------------------------------------------------- // TutorialApp::GetAppContext() //--------------------------------------------------------------------------- // // 概要 : アプリケーションの状態を表す文字列を返す。 // 状態は、ラベルが現在表示されているかどうかによって決定される // スコープ : public // 戻り値 : TCHAR * - new 演算子を使って作成する文字列 // アプリケーションの現在の状態を表す // //--------------------------------------------------------------------------- /* virtual */ TCHAR * TutorialApp::GetAppContext(void) { if (_builtUI != TRUE ) { return NULL; } TCHAR scratch[30]; if (_helloworldLabel->IsVisible() == TRUE) { Tstrcpy( scratch, _TEXT("+")); } else { Tstrcpy( scratch, _TEXT("-")); } TCHAR *context = new TCHAR[Tstrlen( scratch ) + 1 ]; if ( context == NULL ) { EC_WARN("コンテキスト文字列を割り当てられませんでした; コンテキストは保存されません。"); return NULL; } Tstrcpy( context, scratch ); return context; } // End of TutorialApp::GetAppContext //--------------------------------------------------------------------------- // TutorialApp::Exit() //--------------------------------------------------------------------------- // // 概要 : アプリケーションの終了時に呼び出される // スコープ : Private // 戻り値 : なし // 実装方法 : AppBase 下に追加された UI 要素をすべてクリーンアップする // 必要はない。ただし、これらのオブジェクトに追加されたレイアウトや // 受信オブジェクトがあれば、削除する必要がある // //--------------------------------------------------------------------------- /* virtual */ void TutorialApp::Exit(void) { delete _layout; // 継承したメソッドを呼び出してデフォルトの動作を行います AppBase::Exit(); } // End of TutorialApp::Exit() //--------------------------------------------------------------------------- // BuildUI() //--------------------------------------------------------------------------- // // 概要 : アプリケーションの UI を構築する // スコープ : public // 戻り値 : SUCCESS または FAILURE // UI を作成する関数のいずれかが失敗した場合、この関数も // 失敗する // パラメータ : なし // エラー : この関数は、既に作成されているが AppBase 下の // UI ツリーにはまだ追加されていない UI 要素のメモリを // クリーンアップする // //--------------------------------------------------------------------------- Result TutorialApp::BuildUI(void) { // // フレームを作成します。これはアプリケーションのメイン画面としても動作します // FlexFrame *frame = theUIFactory->CreateFlexFrame( HINT_FRAME_WITH_NO_CLOSE_BUTTON, TUTSAMPAPP_FRAME_TITLE ); if (frame == NULL) { EC_WARN("フレームを作成できませんでした。"); return FAILURE; } if (Add(frame) != SUCCESS) { EC_WARN("フレームを AppBase に追加できません。"); delete frame; return FAILURE; } _layout = new VerticalFlowLayout; if ( _layout == NULL ) { EC_WARN("フレームのレイアウトを割り当てられませんでした。"); return FAILURE; } frame->SetLayout(_layout); FlexButton *button = theUIFactory->CreateFlexButton( HINT_BUTTON_JAVA_LOOK_AND_FEEL); if (button == NULL) { EC_WARN("ボタンを作成できませんでした。"); return FAILURE; } if ( frame->Add(button) != SUCCESS ) { EC_WARN("ボタンをフレームに追加できませんでした。"); delete button; return FAILURE; } button->SetLabelString(TUTSAMPAPP_BUTTON_LABEL); if ( button->AddActionListener(*this) != SUCCESS ) { EC_WARN("ボタンにアクション リスナーを追加できませんでした。"); return FAILURE; } _helloworldLabel = theUIFactory->CreateFlexLabel(); if ( _helloworldLabel == NULL ) { EC_WARN("ラベルを作成できませんでした。"); return FAILURE; } if ( frame->Add(_helloworldLabel) != SUCCESS ) { EC_WARN("ラベルをフレームに追加できませんでした。"); delete _helloworldLabel; return FAILURE; } _helloworldLabel->SetText(TUTSAMPAPP_LABEL_TEXT); _helloworldLabel->SetVisible( FALSE ); frame->SetVisible(TRUE); _builtUI = TRUE; return SUCCESS; } // End of TutorialApp::BuildUI() //--------------------------------------------------------------------------- // TutorialApp::ActionPerformed() //--------------------------------------------------------------------------- // // 概要 : このメソッドは、ボタンが押下されたときに呼び出され、 // 画面表示を更新する // スコープ : Private // パラメータ : [in] event - ボタン押下に関する情報が格納された // 構造体。ここでは無視する // 戻り値 : なし // //--------------------------------------------------------------------------- /* virtual */ void TutorialApp::ActionPerformed(ActionEvent& event) { USE_IT( event ); if (_helloworldLabel->IsVisible()) { _helloworldLabel->SetVisible(FALSE); } else { _helloworldLabel->SetVisible(TRUE); } } // End of TutorialApp::ActionPerformed()