ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

仕様書からプログラムソースを生成する方法(Excelの仕様書編 その22:イベント追加 雛形-1)

2006-12-26 18:43:33 | ケータイ

 BREWの画面部分のプログラムをExcelの仕様書から自動生成するという、シリーズ仕様書からプログラムソースを生成する方法の続きです。

 前回、出力サンプルを出しました。
 そこで、新規あるいは修正になるものは、
・画面ソースgamen1.c
・画面ヘッダgamen1.h
・画面用イベントソースgamen1event.c
・画面用イベントヘッダgamen1event.h
と書きましたので、今回は、これに対応する雛形、
・画面ソースの雛形:gamen_b_c.txt
・画面ヘッダの雛形:gamen_b_h.txt
・画面用イベントソースの雛形:gamen_event_c.txt
・画面用イベントヘッダの雛形:gamen_event_h.txt
について説明しますというか。。載せます。
制限字数の関係で、2回に分けます。

 なお、これ以外に1箇所、アプリケーションの雛形app_h.txtに

#include "IEventList.h" // イベントリスト

の1行が追加になるのですが(#include "IKHMap.h"の下)
逆に言えば、これしか変わらないので、app_h.txtは、特にソースは
だしません。



■画面ソースの雛形:gamen_b_c.txt
以下のとおりです
/*============================================
FILE: $#$CELL D2$#$.c
==============================================*/
#define _$#$CELL K2$#$_C
#define _$#$CELL K2$#$_C

#include	"$#$CELL D2$#$.h"
$#$REP 5$#$
$#$IFCELL T3,イベント一覧$#$
#include	"$#$KETA M$#$.h"
$#$IFEND$#$
$#$REPEND M$#$

/*==================================*/
//	関数名:$#$CELL D2$#$_HandleEvent		//
//	内容 :イベント処理			//
/*==================================*/
boolean $#$CELL D2$#$_HandleEvent($#$CELL B2$#$* poya, AEEEvent eCode,
				 uint16 wParam, uint32 dwParam)
{  
	$#$CELL D2$#$	*pMe;

	//	チェック
	if ( poya	==	NULL )
		return FALSE;
	if ( 	( poya->gno	!=	1 	) || 
		(poya->garea	==	NULL 	))
	{
		return FALSE;
	}
	pMe	=	($#$CELL D2$#$ *)poya->garea;

	//	項目NULLチェック
$#$REP 5$#$
	if ( pMe->$#$KETA B$#$	==	NULL )
		return	FALSE;
$#$REPEND A$#$

$#$REP 5$#$
$#$IFKETA C,HTMLCTL$#$
	//	フォームのデータ取得
	IHTMLCTL_HandleEvent(pMe->$#$KETA B$#$,eCode,wParam,dwParam);
	if ( pMe->$#$KETA B$#$->text_flg !=	0 )
	{
		return	TRUE;
	}
$#$IFEND$#$
$#$IFKETA C,TEXTCTL$#$	
	//	テキストエリア
	if ( ITEXTCTL_HandleEvent
		(pMe->$#$KETA B$#$,eCode,wParam,dwParam) == TRUE )
	{
		return	TRUE;
	}
$#$IFEND$#$
$#$IFKETA C,MENUCTL$#$	
	//	メニュー
	if ( IMENUCTL_HandleEvent
		(pMe->$#$KETA B$#$,eCode,wParam,dwParam) == TRUE )
	{
		return	TRUE;
	}
$#$IFEND$#$
$#$REPEND A$#$

	//	追加:イベント処理
	return	IEVENTLIST_HandleEvent(pMe->pElist,eCode,wParam,dwParam);
}

/*==================================*/
//関数名:$#$CELL D2$#$_InitAppData //
//内容 :領域確保・描画	         //
/*==================================*/
boolean $#$CELL D2$#$_InitAppData($#$CELL B2$#$* poya)
{
	char		*fdata;
	$#$CELL D2$#$	*pMe;
	AEERect		rect;
	AECHAR		*menubuf;
	char		*menuTitle;

	//==========================================//
	//	領域確保			        //
	//==========================================//
	pMe	=	($#$CELL D2$#$ *)MALLOC(sizeof($#$CELL D2$#$));
	if (pMe	==	NULL )
	{
		$#$CELL D2$#$_FreeAppData(poya);
		return	FALSE;
	}
	//	アプリ領域へ設定
	poya->garea	=	(void *)pMe;
	poya->gno	=	$#$CELL H2$#$;

	//	初期設定
$#$REP 5$#$
	pMe->$#$KETA B$#$		=	NULL;
$#$REPEND A$#$
	pMe->pIDisplay	= poya->pIDisplay;
	pMe->pIShell	= poya->pIShell;

	//==========================================//
	//	イベント処理		    	    //
	//==========================================//
	//	親領域の設定(イベント先で使う)
	pMe->poya	=	poya;

	//	イベント領域確保
	if ( (pMe->pElist = IEVENTLIST_Create() )	==	NULL )
	{
		return FALSE;
	}

	//	イベント設定
$#$IFCELL T3,イベント一覧$#$
	IEVENTLIST_Add(pMe->pElist,pMe,$#$KETA Z$#$,
		,$#$KETA U$#$,$#$KETA V$#$,$#$KETA W$#$,$#$KETA Y$#$);
$#$IFEND$#$
$#$REPEND T$#$


$#$REP 5$#$
$#$IFKETA C,HTMLCTL$#$
	//==========================================//
	//	表示するHTMLファイルの取得     //
	//==========================================//
	fdata = IHTMLCTL_GetDispFileData(pMe->pIShell,"$#$KETA H$#$");
	if (fdata	==	NULL )
	{
		$#$CELL D2$#$_FreeAppData(poya);
		return	FALSE;
	}


	//==========================================//
	//	HTMLViewer生成		       //
	//==========================================//
	//	読み込んだfdataをHTMLViewerに設定する
	if ( (pMe->$#$KETA B$#$ 
		= IHTMLCTL_Create(pMe->pIShell,pMe->pIDisplay))
			==	NULL )
	{
		FREEIF(fdata);
		$#$CELL D2$#$_FreeAppData(poya);
		return	FALSE;
	}

	//==========================================//
	//	HTMLViewerデータ設定	       //
	//==========================================//
	if ( IHTMLCTL_SetDispData(pMe->$#$KETA B$#$,fdata)
		!=	TRUE)
	{
		FREEIF(fdata);
		$#$CELL D2$#$_FreeAppData(poya);
		return	FALSE;
	}

	//==========================================//
	//	追加:HTMLViewer大きさ設定     //
	//==========================================//
	rect.x	=	$#$KETA D$#$;
	rect.y	=	$#$KETA E$#$;
	rect.dx	=	$#$KETA F$#$;
	rect.dy	=	$#$KETA G$#$;
	IHTMLCTL_SetRect(pMe->$#$KETA B$#$,&rect);
	
	//==========================================//
	//	HTMLViewer表示・メモリ解放     //
	//==========================================//
	FREEIF(fdata);
$#$IFEND$#$
$#$IFKETA C,TEXTCTL$#$	
	//==========================================//
	//	テキストエリア設定	       	    //
	//==========================================//
	if	( ISHELL_CreateInstance( pMe->pIShell, 
		AEECLSID_TEXTCTL, (void**)&pMe->$#$KETA B$#$ ) != SUCCESS )
	{
		$#$CELL D2$#$_FreeAppData(poya);
		return FALSE;
	}
	rect.x	=	$#$KETA D$#$;
	rect.y	=	$#$KETA E$#$;
	rect.dx	=	$#$KETA F$#$;
	rect.dy	=	$#$KETA G$#$;
	ITEXTCTL_SetRect(pMe->$#$KETA B$#$,&rect);
	ITEXTCTL_SetProperties(pMe->$#$KETA B$#$,TP_FRAME|TP_MULTILINE);
$#$IFEND$#$
$#$IFKETA C,MENUCTL$#$	
	//==========================================//
	//	メニュー設定		       	    //
	//==========================================//
	if	( ISHELL_CreateInstance( pMe->pIShell, 
		AEECLSID_MENUCTL, (void**)&pMe->$#$KETA B$#$ ) != SUCCESS )
	{
		$#$CELL D2$#$_FreeAppData(poya);
		return FALSE;
	}
	rect.x	=	$#$KETA D$#$;
	rect.y	=	$#$KETA E$#$;
	rect.dx	=	$#$KETA F$#$;
	rect.dy	=	$#$KETA G$#$;
	IMENUCTL_SetRect(pMe->$#$KETA B$#$,&rect);
$#$IFEND$#$
$#$REPEND A$#$

$#$IFCELL O3,メニュー一覧$#$
	//==========================//
	//	メニュー項目の表示  //
	//==========================//
$#$IFEND$#$
$#$REP 5$#$
$#$IFCELL O3,メニュー一覧$#$
	menuTitle = "$#$KETA R$#$";
	menubuf = (AECHAR *)MALLOC((STRLEN(menuTitle)+1)*sizeof(AECHAR));
	if ( menubuf	==	NULL )
	{
		$#$CELL D2$#$_FreeAppData(poya);
		return FALSE;
	}
	MEMSET(menubuf,0,(STRLEN(menuTitle)+1)*sizeof(AECHAR));
	STREXPAND(menuTitle,STRLEN(menuTitle),menubuf,(STRLEN(menuTitle)+1)*sizeof(AECHAR));
	IMENUCTL_AddItem(pMe->$#$KETA P$#$,NULL,NULL,$#$KETA Q$#$,menubuf,NULL);
	FREEIF(menubuf);
$#$IFEND$#$
$#$REPEND O$#$

	$#$CELL D2$#$_DispAppData(pMe);

	//	共通領域を設定
	pMe->pMap	=	poya->pMap;

    return TRUE;
}

/*==================================*/
//	関数名:$#$CELL D2$#$_FreeAppData		//
//	内容 :領域のフリー			//
/*==================================*/
void $#$CELL D2$#$_FreeAppData($#$CELL B2$#$* poya)
{
	$#$CELL D2$#$	*pMe;
 
	// 対象かどうかチェック
	if ( poya->gno	!=	1 )
		return;
	if ( poya->garea	==	NULL )
		return;
	pMe	=	($#$CELL D2$#$ *)poya->garea;

$#$REP 5$#$
$#$IFKETA C,HTMLCTL$#$
	//	フリー
	if ( pMe->$#$KETA B$#$	!=	NULL )
	{
		IHTMLCTL_Release(pMe->$#$KETA B$#$);
		pMe->$#$KETA B$#$	=	NULL;
	}

$#$IFEND$#$
$#$IFKETA C,TEXTCTL$#$	
	//	テキストフリー
	if ( pMe->$#$KETA B$#$	!=	NULL )
	{
		ITEXTCTL_Release(pMe->$#$KETA B$#$);
		pMe->$#$KETA B$#$	=	NULL;
	}
$#$IFEND$#$
$#$IFKETA C,MENUCTL$#$	
	//	メニューフリー
	if ( pMe->$#$KETA B$#$	!=	NULL )
	{
		IMENUCTL_Release(pMe->$#$KETA B$#$);
		pMe->$#$KETA B$#$	=	NULL;
	}
$#$IFEND$#$
$#$REPEND A$#$

	//	イベントフリー
	if (	pMe->pElist	!=	NULL )
	{ 
		IEVENTLIST_Release(pMe->pElist);
	}

	//	全体フリー
	FREEIF(pMe);

	//	親のエリアをクリア
	poya->garea	=	NULL;


}

/*==================================*/
//	関数名:$#$CELL D2$#$_DispAppData		//
//	内容 :画面の初期表示		//
/*==================================*/
boolean $#$CELL D2$#$_DispAppData($#$CELL D2$#$* pMe)
{
	int	curpos,buhinpos;

	//	初期化
	curpos		=	0;
	buhinpos	=	0;

	//==================================//
	//	リドローする		    //
	//==================================//
	//	ここに、
	//	1.リドローと、
	//	2.次のフォーカス指示を書く
$#$REP 5$#$
$#$IFKETA C,HTMLCTL$#$
	if ( pMe->$#$KETA B$#$	!=	NULL )
	{
		//	リドロー
		IHTMLCTL_Redraw(pMe->$#$KETA B$#$);
//		カーソル番号pMe->curnoを、htmlの項目順に数えた番号に変換する。
//		その番号をcurposとすると
		IHTMLCTL_DispData(pMe->$#$KETA B$#$,curpos,pMe->$#$KETA B$#$->scr);

//		カーソル番号pMe->curnoから、部品の番号(仕様書のA桁のNo)に
//		変換する。その番号をbuhinposだとすると
		if(buhinpos	==	$#$KETA A$#$)
			IHTMLCTL_SetActive(pMe->$#$KETA B$#$,TRUE);
		else
			IHTMLCTL_SetActive(pMe->$#$KETA B$#$,FALSE);
	}

$#$IFEND$#$
$#$IFKETA C,TEXTCTL$#$	
	//	テキストエリアのRedrawやUpdateする
	if ( pMe->$#$KETA B$#$	!=	NULL )
	{
		//	リドロー
		ITEXTCTL_Redraw(pMe->$#$KETA B$#$);
//		カーソル番号pMe->curnoから、部品の番号(仕様書のA桁のNo)に
//		変換する。その番号をbuhinposだとすると
		if(buhinpos	==	$#$KETA A$#$)
			ITEXTCTL_SetActive(pMe->$#$KETA B$#$,TRUE);
		else
			ITEXTCTL_SetActive(pMe->$#$KETA B$#$,FALSE);
	}
$#$IFEND$#$
$#$IFKETA C,MENUCTL$#$	
	//	メニューのRedrawやUpdateする
	if ( pMe->$#$KETA B$#$	!=	NULL )
	{
		//	リドロー
		IMENUCTL_Redraw(pMe->$#$KETA B$#$);
//		カーソル番号pMe->curnoから、部品の番号(仕様書のA桁のNo)に
//		変換する。その番号をbuhinposだとすると
		if(buhinpos	==	$#$KETA A$#$)
			IMENUCTL_SetActive(pMe->$#$KETA B$#$,TRUE);
		else
			IMENUCTL_SetActive(pMe->$#$KETA B$#$,FALSE);
	}
$#$IFEND$#$
$#$REPEND A$#$

	return	TRUE;
}

//=================================*//
//関数名:$#$CELL D2$#$_NextCurItem		//
//内容 :カーソル移動先を求める	//
//=================================*//
int	$#$CELL D2$#$_NextCurItem($#$CELL D2$#$* pMe,int flg)
{
	//======================================//
	//	次のカーソル移動箇所に		//
	//	ついて、			//
	//	プログラムを書いてください	//
	//======================================//
	return	0;			//	該当なし
}

(上記 ¥ < > は本当は半角です)



ここで切らないと、制限字数を超えてしまうので、
いったんここで切ります。
この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« Javaの画面表示-その5:J... | トップ | 仕様書からプログラムソース... »
最新の画像もっと見る

ケータイ」カテゴリの最新記事