ホームに戻る
newtのテスト(エディットとラジオボタン)
/*
* newt_test01
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <newt.h>
/*
* gcc -Wall -lnewt newt_test01.c -o newt_test01
*
* 実行すると「test grid」と書かれたグリッド、
* 「this is newt_test01\n\n entry」と書かれたテキストボックス、
* 20文字までのエディット(newtではEntryと呼ぶらしい)、
* select mode 1 から select mode 3 までのラジオボタン、
* それぞれ「next」「end」と書かれたボタンが表示される。
* 「next」を押しても反応は無い、
* 「end」を押すと終了する。
* 終了のとき result.txt というファイルにエディットとラジオボタンの状態を保存する。
* 例えば、
*
* entry:abc mode:2
*
* と記録を残す。
*/
int main(int argc, char* argv[])
{
newtComponent form;
newtGrid grid1, grid2;
newtComponent text1;
newtComponent entry1;
newtComponent radio1, radio2, radio3;
newtComponent button1, button2;
struct newtExitStruct es;
FILE *fp;
char *s;
int mode;
/* initialize */
newtInit();
newtCls();
text1 = newtTextbox(-1, -1, 20, 3, NEWT_TEXTBOX_WRAP);
newtTextboxSetText(text1, "this is newt_test01\n\n entry");
entry1 = newtEntry(1, 1, "", 20, &s, 0);
radio1 = newtRadiobutton(-1, -1, "select mode 1", 1, NULL);
radio2 = newtRadiobutton(-1, -1, "select mode 2", 0, radio1);
radio3 = newtRadiobutton(-1, -1, "select mode 3", 0, radio2);
button1 = newtButton( -1,-1, "next");
button2 = newtButton( -1,-1, "end");
/* フォームの作成 */
form = newtForm(NULL, "newt_test01", 0);
/* 引数1:X座標 引数2:Y座標 引数3:表示文字 */
newtDrawRootText(0, 0, "--- newt test01 ---");
/* 引数1:X方向のコンポーネント数 引数2:Y方向のコンポーネント数 */
grid1 = newtCreateGrid(1, 6);
/* 引数1:X方向のコンポーネント数 引数2:Y方向のコンポーネント数 */
grid2 = newtCreateGrid(2, 1);
newtGridSetField(grid2, 0, 0, NEWT_GRID_COMPONENT, button1, 0, 0, 0, 0, 0, 0);
newtGridSetField(grid2, 1, 0, NEWT_GRID_COMPONENT, button2, 0, 0, 0, 0, 0, 0);
newtGridSetField(grid1, 0, 0, NEWT_GRID_COMPONENT, text1, 0, 0, 0, 1, NEWT_ANCHOR_LEFT, 0);
newtGridSetField(grid1, 0, 1, NEWT_GRID_COMPONENT, entry1, 0, 0, 0, 1, NEWT_ANCHOR_LEFT, 0);
newtGridSetField(grid1, 0, 2, NEWT_GRID_COMPONENT, radio1, 0, 0, 0, 0, NEWT_ANCHOR_LEFT, 0);
newtGridSetField(grid1, 0, 3, NEWT_GRID_COMPONENT, radio2, 0, 0, 0, 0, NEWT_ANCHOR_LEFT, 0);
newtGridSetField(grid1, 0, 4, NEWT_GRID_COMPONENT, radio3, 0, 0, 0, 1, NEWT_ANCHOR_LEFT, 0);
newtGridSetField(grid1, 0, 5, NEWT_GRID_SUBGRID, grid2, 0, 0, 0, 0, 0, NEWT_GRID_FLAG_GROWX);
/* コンポーネントをフォームへ追加 */
newtFormAddComponents(form, text1, entry1, radio1, radio2, radio3, button1, button2, NULL );
newtGridWrappedWindow(grid1, "test grid");
newtGridFree(grid2, 1);
for(;;) {
/* フォームを実行 */
newtFormRun(form, &es);
if (es.reason == NEWT_EXIT_COMPONENT && es.u.co == button2)
break;
}
/* ラジオボタンの状態を得る */
if(newtRadioGetCurrent(radio1) == radio1){
mode = 1;
}
else if(newtRadioGetCurrent(radio1) == radio2){
mode = 2;
}
else if(newtRadioGetCurrent(radio1) == radio3){
mode = 3;
}
else{
mode = 0;
}
/* 結果のファイルへの書きこみ */
if((fp =fopen("result.txt", "w")) != NULL){
fprintf(fp, "entry:%s mode:%d\n", s, mode);
fclose(fp);
}
/* 終了 */
newtFormDestroy(form);
newtFinished();
/* この時点で s は NULL */
return 0;
}