1: /* $Id: 1048615.html,v 1.1.1.1 2000/08/28 11:39:25 hidetosi Exp $ */
   2: #include <btron/btron.h>
   3: #include <btron/hmi.h>
   4: #include <btron/vobj.h>
   5: #include <typedef.h>
   6: #include <bstdlib.h>
   7: #include "paperbox.h"
   8: #include "view.h"
   9: #include "doc.h"
  10: #include "databox.h"
  11: 
  12: W idMenu;
  13: MENUITEM itmMNApplet,itmMNWnd;
  14: 
  15: /* メニューの初期化 */
  16: BOOL MenuInit(W aidWnd)
  17: {
  18:         idMenu=mopn_men(ID_MN); /* メニューの登録 */
  19:         if(idMenu<0)
  20:         {
  21:                return FALSE;
  22:         }
  23: 
  24:         /* メニュー項目の取り出し */
  25:         mget_itm(idMenu,ID_MN_APPLET,&itmMNApplet);
  26:         mget_itm(idMenu,ID_MN_WND,&itmMNWnd);
  27: 
  28:         /* 実行・小物・仮身操作・実身操作・ディスク操作のメニュー項目の設定 */
  29:         oget_vmn(0,NULL,&(itmMNApplet.ptr),NULL,
  30:                           NULL,NULL,NULL);
  31:         mset_itm(idMenu,ID_MN_APPLET,&itmMNApplet);
  32: 
  33:         /* ウインドウのメニュー項目の設定 */
  34:         wget_dmn(&itmMNWnd.ptr);
  35:         mset_itm(idMenu,ID_MN_WND,&itmMNWnd);
  36: 
  37:         return TRUE;
  38: }
  39: 
  40: 
  41: void TrayMenu(W aidWnd,W awType,PNT aptPushed)
  42: {
  43:         PNT ptLocalPoint;
  44:         W idMouseWnd;
  45: 
  46:         wfnd_wnd(&aptPushed,&ptLocalPoint,&idMouseWnd);
  47:         if(idMouseWnd!=aidWnd) /* メニューボタンを押した場所が
  48:                                    他のウインドウの上だったとき */
  49:         {
  50:                ptLocalPoint.x=0;
  51:                ptLocalPoint.y=0;
  52:         }
  53: 
  54:         switch(awType)
  55:         {
  56:         case ID_MN_EDIT_COPY:
  57:                /* トレイにコピー */
  58:                if(GetSelectedVobj()!=NULL)
  59:                      SendSelectedDataToTray(FALSE,ptLocalPoint,0);
  60:                break;
  61:         }
  62: }
  63: 
  64: /* メニューの結果に対する動作 */
  65: /* 戻り値: 終了が選ばれた=FALSE, その他=TRUE */
  66: BOOL ExecuteMenu(W awSelectedMenu,W aidWnd,PNT aptPushed)
  67: {
  68:         DrawSelectFrame(aidWnd,0,0,0);
  69: 
  70:         if(awSelectedMenu<=0)
  71:         {
  72:                MakeSelectFrame();
  73:                return TRUE;
  74:         }
  75:         switch(awSelectedMenu >>8)
  76:         {
  77:         case ID_MN_END:
  78:                return FALSE;
  79:         case ID_MN_VIEW:
  80:                switch(awSelectedMenu & 0x00ff)
  81:                {
  82:                case ID_MN_VIEW_FULLWND:
  83:                      /* 全面表示切り替え */
  84:                      SwitchFullWindow(aidWnd);
  85:                      break;
  86:                case ID_MN_VIEW_REPAINT:
  87:                      /* 再描画 */
  88:                      wreq_dsp(aidWnd);
  89:                      break;
  90:                }
  91:                break;
  92:         case ID_MN_EDIT:
  93:                switch(awSelectedMenu & 0x00ff)
  94:                {
  95:                case ID_MN_EDIT_COPY:
  96:                      TrayMenu(aidWnd,awSelectedMenu & 0x00ff,aptPushed);
  97:                      break;
  98:                }
  99:                break;
 100: 
 101:         case ID_MN_WND:
 102:                /* ウインドウの切り替え */
 103:                wexe_dmn(awSelectedMenu);
 104:                break;
 105:         case ID_MN_APPLET:
 106:                /* 小物の起動 */
 107:                oexe_apg(0,awSelectedMenu);
 108:                break;
 109:         }
 110:         MakeSelectFrame();
 111:         return TRUE;
 112: }
 113: 
 114: 
 115: /* メニューの表示 */
 116: /* 戻り値: 終了が選ばれた=FALSE, その他=TRUE */
 117: BOOL OpenMenu(PNT aptPoint,W aidWnd)
 118: {
 119:         W SelectedMenu;
 120: 
 121:         if(GetSelectedVobj()!=NULL && IsFusen(GetSelectedVobj()))
 122:         {
 123:                mchg_atr(idMenu,ID_MN_EDIT<<8|ID_MN_EDIT_COPY,M_ACT);
 124:         }else{
 125:                mchg_atr(idMenu,ID_MN_EDIT<<8|ID_MN_EDIT_COPY,M_INACT);
 126:         }
 127: 
 128:         gset_ptr(PS_SELECT,NULL,-1,-1);
 129:         SelectedMenu=msel_men(idMenu,aptPoint); /* メニューの動作 */
 130: 
 131:         return ExecuteMenu(SelectedMenu,aidWnd,aptPoint);
 132: }
 133: 
 134: 
 135: /* 命令キーを押しながら他のキーを押した時の処理 */
 136: BOOL MenuKey(W aKeyCode,W aidWnd,PNT aptPushed)
 137: {
 138:         W SelectedMenu;
 139: 
 140:         /* メニューのマクロの処理 */
 141:         SelectedMenu=mfnd_key(idMenu,aKeyCode);
 142:         if(SelectedMenu>=0)
 143:                return ExecuteMenu(SelectedMenu,aidWnd,aptPushed);
 144:         else
 145:                return FALSE;
 146: }
 147: 
 148: /* 全画面表示のインジケータの変更 */
 149: void SwitchFullWindowIndicator(void)
 150: {
 151:         W ItemNum;
 152: 
 153:         ItemNum=ID_MN_VIEW<<8 | ID_MN_VIEW_FULLWND;
 154:         if(mchg_atr(idMenu,ItemNum,M_STAT) & 0x0001)
 155:                mchg_atr(idMenu,ItemNum,M_NOSEL);
 156:         else
 157:                mchg_atr(idMenu,ItemNum,M_SEL);
 158: }
 159: 
 160: BOOL GetFullWindowIndicator(void)
 161: {
 162:         W ItemNum;
 163: 
 164:         ItemNum=ID_MN_VIEW<<8 | ID_MN_VIEW_FULLWND;
 165:         if(mchg_atr(idMenu,ItemNum,M_STAT) & M_SEL)
 166:                return TRUE;
 167:         else
 168:                return FALSE;
 169: }
 170: