ホームに戻る
 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;
}

inserted by FC2 system