Beispiel #1
0
void AbstractButton::SetDown (bool down)
{
  if (is_checkable()) {
    if (is_checked() != down) RequestRedraw();

    set_checked(down);

    if (group_) {
      group_->Toggle(this, is_checked());
    } else {
      toggled_.Invoke(is_checked());
    }

  } else {

    if (is_down() != down) RequestRedraw();

    set_down(down);
    if (group_) {
      group_->Click(this);
    } else {
      clicked_.Invoke();
    }
  }
}
Beispiel #2
0
Response AbstractButton::PerformMouseRelease (AbstractWindow* context)
{
  if (context->GetMouseButton() == MouseButtonLeft) {
    int fire_event = 0;	// 0: no event, 1: click event, 2: toggled event

    if (is_checkable()) {
      if (is_pressed()) {
        fire_event = 2;
      }
    } else {
      if (is_pressed() && is_down()) {
        fire_event = 1;
      }
    }

    RequestRedraw();

    switch (fire_event) {

      case 0:
        break;

      case 1: {
        if (group_) {
          group_->Click(this);
        } else {
          clicked_.Invoke();
        }
        break;
      }

      case 2: {
        if (is_checked() != is_last_checked()) {

          if (group_) {
            group_->Toggle(this, is_checked());
          } else {
            toggled_.Invoke(is_checked());
          }
        }
        break;
      }

      default:
        break;
    }

    set_pressed(false);
    set_down(false);

    released_.Invoke();

    return Finish;
  }

  return Ignore;
}
void press_key( int vk_code, BOOL down )
{
    INPUT input;
    init_input( &input );
    input.ki.wVk = vk_code;
    input.ki.wScan = MapVirtualKey( vk_code, MAPVK_VK_TO_VSC );
    set_down( &input, down );
    push_to_ignore_keys( vk_code, down );
    press( &input );
}
Beispiel #4
0
bool
ButtonWindow::on_mouse_move(int x, int y, unsigned keys)
{
  if (dragging) {
    set_down(x >= 0 && y >= 0 &&
             (unsigned)x < get_width() && (unsigned)y < get_height());
    return true;
  } else
    return PaintWindow::on_mouse_move(x, y, keys);
}
Beispiel #5
0
bool
ButtonWindow::on_mouse_down(int x, int y)
{
  if (is_tab_stop())
    set_focus();

  set_down(true);
  set_capture();
  dragging = true;
  return true;
}
Beispiel #6
0
bool
ButtonWindow::on_cancel_mode()
{
  release_capture();
  dragging = false;
  set_down(false);

  PaintWindow::on_cancel_mode();

  return true;
}
Beispiel #7
0
void AbstractButton::PerformHoverIn (AbstractWindow* context)
{
  if (is_pressed()) {
    set_down(true);

    if (is_checkable()) {
      set_checked(!is_checked());
    }

    RequestRedraw();
  }
}
Beispiel #8
0
bool
ButtonWindow::on_key_down(unsigned key_code)
{
  switch (key_code) {
  case VK_RETURN:
  case VK_SPACE:
    set_down(false);

    if (id != 0 && parent != NULL)
      parent->on_command(id, 0);
    return true;

  default:
    return PaintWindow::on_key_down(key_code);
  }
}
Beispiel #9
0
Response AbstractButton::PerformMousePress (AbstractWindow* context)
{
  if (context->GetMouseButton() == MouseButtonLeft) {
    set_pressed(true);
    set_down(true);

    if (is_checkable()) {
      set_last_checked(is_checked());
      set_checked(!is_checked());
    }

    RequestRedraw();

    pressed_.Invoke();
  }

  return Finish;
}
Beispiel #10
0
bool
ButtonWindow::on_mouse_up(int x, int y)
{
  if (!dragging)
    return true;

  dragging = false;
  release_capture();

  if (!down)
    return true;

  set_down(false);

  if (!on_clicked() && id != 0 && parent != NULL)
    parent->on_command(id, 0);

  return true;
}