Exemple #1
0
void main_loop() {
    char c;
    int rinc=100,storage_pos=1;
    
    while (c!='Q') {
	display_pos();
        c=getch();
	if (c==27) c=getch();
	move(20,0);
	//printw("keycode: %d  ",c);
	switch (c)
	{
	    case  32:  reset();break;			/* SPACE */
	    case 104:					/* h */
	    case  72: helpscreen();break;		/* H */
	    case  82: rsend("RS");break;    		/* R */
	    case 121: 					/* y */
	    case 122: rmove_base(rinc);break;		/* z  */
	    case 120: rmove_base(-rinc);break;		/* x  */
	    case 113: rmove_shoulder(rinc);break;	/* q  */
	    case  97: rmove_shoulder(-rinc);break;	/* a  */
	    case 119: rmove_elbow(rinc);break;		/* w  */
	    case 115: rmove_elbow(-rinc);break;		/* s  */
	    case 101: rmove_pitch(rinc);break;		/* e  */
	    case 100: rmove_pitch(-rinc);break;		/* d  */
	    case 114: rmove_turnhand(rinc);break;	/* r  */
	    case 116: rmove_turnhand(-rinc);break;	/* t  */
	    case 102: rmove_grip(1);break;		/* f  */
	    case 103: rmove_grip(0);break;		/* g  */
	    case 45:  					/* -  */
		      rinc -= rinc/2;
		      if (rinc < MIN_INC) rinc=MIN_INC;
		      show_panel(6,itoa(rinc));
		      break;
	    case 43: 					/* +  */
		      rinc = rinc < 100 ? 100:rinc+100;
		      if (rinc > MAX_INC) rinc= MAX_INC;
		      show_panel(6,itoa(rinc));
		      break;

	    case 68: posdata[storage_pos].saved=0;     /* D */
		      show_panel(7,itoa(storage_pos));break;
	    case 44: storage_pos+=49;			/* , */
	    case  5: storage_pos++ ;			/* CRSR_left  */
		     if (storage_pos > POS_SPACE) storage_pos=POS_SPACE;
		     show_panel(7,itoa(storage_pos));
		     break;
	    case 46: storage_pos-=49;			/* . */
	    case  4: storage_pos-- ;			/* CRSR_right */
	             if (storage_pos < 1) storage_pos=1;
		     show_panel(7,itoa(storage_pos));
		     break;
	    case   2: store_position(storage_pos);break; /* CRSR_down  */
	    case   3: recall_position(storage_pos);break;/* CRSR_up  */
	    case  71: rsend("RN 1");break;		/* SHIFT_G  */
	    case   7: run_program();break;		/* CTRL_G */
	    case 65 : load_posdata();			/* CTRL_CRSR_UP" */
		      show_panel(7,itoa(storage_pos));break;
	    case 66 : save_posdata();break;		/* CTRL_CRSR_DOWN */
	}
    }
}
int GrowToolbar::event_handler( GlowWind *w, glow_eEvent event, int x, int y, double fx,
	double fy)
{
  int sts, lsts;
  int hot_type;
  int idx, mask_idx, category;
  double rx, ry;  

  if ( invisible || dimmed)
    return 0;

  if ( !ctx->trace_started)
    return GrowNode::event_handler( w, event, x, y, fx, fy);

  switch ( event) {
  case glow_eEvent_Key_Right:
  case glow_eEvent_Key_Left:
  case glow_eEvent_Key_BackSpace:
  case glow_eEvent_Key_Return:
  case glow_eEvent_Key_Ascii:
  case glow_eEvent_Key_Up:
  case glow_eEvent_Key_Down:
    return 0;
  default:
    ;
  }

  // Convert koordinates to local koordinates
  trf.reverse( fx, fy, &rx, &ry);

  sts = 0;
  if ( event == ctx->event_move_node) {
    sts = nc->event_handler( w, event, rx, ry);
    if ( sts) {
      /* Register node for potential movement */
      ctx->move_insert( this);
      store_position();
    }
    return sts;
  }
  else if ( event == ctx->event_create_con) {
    return sts;
  }
  switch ( event) {
    case glow_eEvent_MB1Down:
      if ( ctx->trace_started) {
	sts = nc_event_handler( w, event, rx, ry, &idx);
	if ( sts)
	  ((GrowNode *)nc->a.a[idx])->set_color_inverse(1);
      }
      break;
    case glow_eEvent_MB1Up:
      if ( ctx->trace_started) {
	sts = nc_event_handler( w, event, rx, ry, &idx);
	if ( sts)
	  ((GrowNode *)nc->a.a[idx])->set_color_inverse(0);
      }
      break;
    case glow_eEvent_CursorMotion: {
      int redraw = 0;

      if ( ctx->hot_mode == glow_eHotMode_TraceAction) {
        if ( ctx->hot_found)
          sts = 0;
        else {
          if ( is_sensitive()) {
            sts = nc_event_handler( w, event, rx, ry, &idx);
            if ( sts) {
	      ((GrowNode *)nc->a.a[idx])->set_hot(1);
	      redraw = 1;
              ctx->hot_found = 1;
	    }
          }
        }
      }
      else {
        if ( ctx->hot_found)
          sts = 0;
        else {
          sts = nc_event_handler( w, event, rx, ry, &idx);
          if ( sts)
            ctx->hot_found = 1;
        }
      }
      if ( sts && !hot  &&
	   !(ctx->node_movement_active || ctx->node_movement_paste_active)) {
        if ( (hot_type = ctx->send_hot_request( this))) {
          if ( !ctx->trace_started) {
            ctx->gdraw->set_cursor( w, glow_eDrawCursor_CrossHair);
            hot = 1;
            redraw = 1;
	    ctx->tiptext_event( this, x, y);
          }
          else if ( hot_type & glow_mHotType_CursorCrossHair) {
            ctx->gdraw->set_cursor( w, glow_eDrawCursor_CrossHair);
            hot_tool = idx + 1;
	    lsts = get_mask_index( idx, &category, &mask_idx);
	    if ( ODD(lsts))
	      ctx->tiptext_toolbar_event( this, x, y, category, mask_idx);
            redraw = 1;
          }
          else if ( hot_type & glow_mHotType_CursorHand) {
            ctx->gdraw->set_cursor( w, glow_eDrawCursor_Hand);
            hot_tool = idx + 1;
	    lsts = get_mask_index( idx, &category, &mask_idx);
	    if ( ODD(lsts))
	      ctx->tiptext_toolbar_event( this, x, y, category, mask_idx);
            redraw = 1;
          }
        }
      }
      if ( !sts && (( !ctx->trace_started && hot) || (ctx->trace_started && hot_tool))) {
        if ( !ctx->hot_found)
          ctx->gdraw->set_cursor( w, glow_eDrawCursor_Normal);
        if ( root_node)
          root_node->erase( w);
        else
          erase( w);
	if ( hot_tool)
	  ((GrowNode *)nc->a.a[hot_tool - 1])->set_hot(0);
	hot_tool = 0;
        hot = 0;
        redraw = 1;
	ctx->tiptext->remove_text( this);
      }
      if ( redraw) {
	draw();
      }
      break;
    }
    case glow_eEvent_MB1Click:
      sts = nc_event_handler( w, event, rx, ry, &idx);
      if ( sts) {
	lsts = get_mask_index( idx, &category, &mask_idx);
	if ( ODD(lsts))
	  ((GrowCtx *)ctx)->send_toolbar_callback( this, event, fx, fy, category, mask_idx);
      }
      break;
    default:
      sts = nc_event_handler( w, event, rx, ry, &idx);
  }

  return sts;
}