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(); } } }
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 ); }
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); }
bool ButtonWindow::on_mouse_down(int x, int y) { if (is_tab_stop()) set_focus(); set_down(true); set_capture(); dragging = true; return true; }
bool ButtonWindow::on_cancel_mode() { release_capture(); dragging = false; set_down(false); PaintWindow::on_cancel_mode(); return true; }
void AbstractButton::PerformHoverIn (AbstractWindow* context) { if (is_pressed()) { set_down(true); if (is_checkable()) { set_checked(!is_checked()); } RequestRedraw(); } }
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); } }
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; }
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; }