示例#1
0
文件: cell.cpp 项目: py4/m4z3
bool Cell::can_go(char direction)
{
	return (1 << (3 - get_mask_index(direction))) & bitmask;
}
示例#2
0
文件: cell.cpp 项目: py4/m4z3
void Cell::open(char direction)
{
	bitmask |= (1 << (3 - get_mask_index(direction)));
}
示例#3
0
文件: cell.cpp 项目: py4/m4z3
void Cell::close(char direction)
{
	bitmask &= (~(1 << (3 - get_mask_index(direction))));
}
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;
}