void wxSlider::TriggerScrollEvent( wxEventType scrollEvent) { // Whatever the native value is, we may need to invert it for calling // SetValue and putting the possibly inverted value in the event int value = ValueInvertOrNot( GetPeer()->GetValue() ); SetValue( value ); wxScrollEvent event( scrollEvent, m_windowId ); event.SetPosition( value ); event.SetEventObject( this ); HandleWindowEvent( event ); wxCommandEvent cevent( wxEVT_SLIDER, m_windowId ); cevent.SetInt( value ); cevent.SetEventObject( this ); HandleWindowEvent( cevent ); }
void wxSlider::MacHandleControlClick( WXWidget control, wxInt16 controlpart, bool mouseStillDown ) { // Whatever the native value is, we may need to invert it for calling // SetValue and putting the possibly inverted value in the event int value = ValueInvertOrNot( m_peer->GetValue() ); SetValue( value ); wxScrollEvent event( wxEVT_SCROLL_THUMBTRACK, m_windowId ); event.SetPosition( value ); event.SetEventObject( this ); GetEventHandler()->ProcessEvent( event ); wxCommandEvent cevent( wxEVT_COMMAND_SLIDER_UPDATED, m_windowId ); cevent.SetInt( value ); cevent.SetEventObject( this ); GetEventHandler()->ProcessEvent( cevent ); }
wxInt32 wxSlider::MacControlHit( WXEVENTHANDLERREF handler , WXEVENTREF mevent ) { // Whatever the native value is, we may need to invert it for calling // SetValue and putting the possibly inverted value in the event int value = ValueInvertOrNot( m_peer->GetValue() ) ; SetValue( value ) ; wxScrollEvent event( wxEVT_SCROLL_THUMBRELEASE, m_windowId ); event.SetPosition( value ); event.SetEventObject( this ); GetEventHandler()->ProcessEvent( event ); wxCommandEvent cevent( wxEVT_COMMAND_SLIDER_UPDATED, m_windowId ); cevent.SetInt( value ); cevent.SetEventObject( this ); GetEventHandler()->ProcessEvent( cevent ); return noErr; }
// process a scroll event static void ProcessScrollEvent(wxSlider *win, wxEventType evtType, double dvalue) { int orient = win->GetWindowStyleFlag() & wxSL_VERTICAL ? wxVERTICAL : wxHORIZONTAL; int value = (int)(dvalue < 0 ? dvalue - 0.5 : dvalue + 0.5); wxScrollEvent event( evtType, win->GetId(), value, orient ); event.SetEventObject( win ); win->HandleWindowEvent( event ); if ( evtType != wxEVT_SCROLL_THUMBTRACK ) { wxScrollEvent event2(wxEVT_SCROLL_CHANGED, win->GetId(), value, orient); event2.SetEventObject( win ); win->HandleWindowEvent( event2 ); } wxCommandEvent cevent( wxEVT_SLIDER, win->GetId() ); cevent.SetEventObject( win ); cevent.SetInt( value ); win->HandleWindowEvent( cevent ); }
void wxSlider::MacHandleControlClick( WXWidget control , wxInt16 controlpart, bool mouseStillDown ) { SInt16 value = ::GetControl32BitValue( (ControlHandle) m_macControl ) ; SetValue( value ) ; wxEventType scrollEvent = wxEVT_NULL ; if ( mouseStillDown ) scrollEvent = wxEVT_SCROLL_THUMBTRACK; else scrollEvent = wxEVT_SCROLL_THUMBRELEASE; wxScrollEvent event(scrollEvent, m_windowId); event.SetPosition(value); event.SetEventObject( this ); GetEventHandler()->ProcessEvent(event); wxCommandEvent cevent( wxEVT_COMMAND_SLIDER_UPDATED, m_windowId ); cevent.SetInt( value ); cevent.SetEventObject( this ); GetEventHandler()->ProcessEvent( cevent ); }
void LWSlider::OnKeyEvent(wxKeyEvent & event) { if (mEnabled) { switch( event.GetKeyCode() ) { case WXK_RIGHT: case WXK_UP: Increase( mScrollLine ); SendUpdate( mCurrentValue ); break; case WXK_LEFT: case WXK_DOWN: Decrease( mScrollLine ); SendUpdate( mCurrentValue ); break; case WXK_PAGEUP: #if !wxCHECK_VERSION(2,7,0) case WXK_PRIOR: #endif Increase( mScrollPage ); SendUpdate( mCurrentValue ); break; case WXK_PAGEDOWN: #if !wxCHECK_VERSION(2,7,0) case WXK_NEXT: #endif Decrease( mScrollPage ); SendUpdate( mCurrentValue ); break; case WXK_HOME: SendUpdate( mMinValue ); break; case WXK_END: SendUpdate( mMaxValue ); break; case WXK_TAB: { wxNavigationKeyEvent nevent; nevent.SetWindowChange( event.ControlDown() ); nevent.SetDirection( !event.ShiftDown() ); nevent.SetEventObject( mParent ); nevent.SetCurrentFocus( mParent ); mParent->GetParent()->ProcessEvent( nevent ); } break; case WXK_RETURN: case WXK_NUMPAD_ENTER: { wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(mParent), wxTopLevelWindow); wxWindow *def = tlw->GetDefaultItem(); if (def && def->IsEnabled()) { wxCommandEvent cevent(wxEVT_COMMAND_BUTTON_CLICKED, def->GetId()); mParent->ProcessEvent(cevent); } } default: // Allow it to propagate event.Skip(); break; } } event.Skip(); }
void wxGenericFileDialog::OnTextEnter( wxCommandEvent &WXUNUSED(event) ) { wxCommandEvent cevent(wxEVT_COMMAND_BUTTON_CLICKED, wxID_OK); cevent.SetEventObject( this ); GetEventHandler()->ProcessEvent( cevent ); }
void wxMenuButton::OnButton( wxCommandEvent &event) { int win_id = event.GetId(); if (win_id == IDD_DROPDOWN_BUTTON) { wxNotifyEvent mevent(wxEVT_MENUBUTTON_OPEN, GetId()); mevent.SetEventObject(this); if (GetEventHandler()->ProcessEvent(mevent) && !mevent.IsAllowed()) return; if (!m_menu) return; PopupMenu(m_menu, wxPoint(0, GetSize().y)); m_labelButton->Refresh(FALSE); m_dropdownButton->Refresh(FALSE); } else if (win_id == m_labelButton->GetId()) { wxCommandEvent cevent(wxEVT_COMMAND_MENU_SELECTED, win_id); cevent.SetEventObject(this); cevent.SetId(win_id); GetParent()->GetEventHandler()->ProcessEvent(cevent); if (!m_menu) return; const wxMenuItemList &items = m_menu->GetMenuItems(); int first_radio_id = -1; int checked_id = -1; bool check_next = FALSE; // find the next available radio item to check for (wxMenuItemList::Node *node = items.GetFirst(); node; node = node->GetNext()) { wxMenuItem *mi = (wxMenuItem*)node->GetData(); if (mi && (mi->GetKind() == wxITEM_RADIO)) { if (first_radio_id == -1) first_radio_id = mi->GetId(); if (check_next) { check_next = FALSE; checked_id = mi->GetId(); break; } else if (mi->IsChecked()) check_next = TRUE; } } // the last item was checked, go back to the first if (check_next && (first_radio_id != -1)) checked_id = first_radio_id; if (checked_id != -1) { m_menu->Check(checked_id, TRUE); wxCommandEvent mevent( wxEVT_COMMAND_MENU_SELECTED, checked_id); mevent.SetEventObject( m_menu ); mevent.SetInt(1); GetEventHandler()->ProcessEvent(mevent); } } }
void Grid::OnKeyDown(wxKeyEvent &event) { switch (event.GetKeyCode()) { case WXK_LEFT: case WXK_RIGHT: { int rows = GetNumberRows(); int cols = GetNumberCols(); int crow = GetGridCursorRow(); int ccol = GetGridCursorCol(); if (event.GetKeyCode() == WXK_LEFT) { if (crow == 0 && ccol == 0) { // do nothing } else if (ccol == 0) { SetGridCursor(crow - 1, cols - 1); } else { SetGridCursor(crow, ccol - 1); } } else { if (crow == rows - 1 && ccol == cols - 1) { // do nothing } else if (ccol == cols - 1) { SetGridCursor(crow + 1, 0); } else { SetGridCursor(crow, ccol + 1); } } #if wxUSE_ACCESSIBILITY // Make sure the NEW cell is made available to the screen reader mAx->SetCurrentCell(GetGridCursorRow(), GetGridCursorCol()); #endif } break; case WXK_TAB: { int rows = GetNumberRows(); int cols = GetNumberCols(); int crow = GetGridCursorRow(); int ccol = GetGridCursorCol(); if (event.ControlDown()) { int flags = wxNavigationKeyEvent::FromTab | ( event.ShiftDown() ? wxNavigationKeyEvent::IsBackward : wxNavigationKeyEvent::IsForward ); Navigate(flags); return; } else if (event.ShiftDown()) { if (crow == 0 && ccol == 0) { Navigate(wxNavigationKeyEvent::FromTab | wxNavigationKeyEvent::IsBackward); return; } else if (ccol == 0) { SetGridCursor(crow - 1, cols - 1); } else { SetGridCursor(crow, ccol - 1); } } else { if (crow == rows - 1 && ccol == cols - 1) { Navigate(wxNavigationKeyEvent::FromTab | wxNavigationKeyEvent::IsForward); return; } else if (ccol == cols - 1) { SetGridCursor(crow + 1, 0); } else { SetGridCursor(crow, ccol + 1); } } MakeCellVisible(GetGridCursorRow(), GetGridCursorCol()); #if wxUSE_ACCESSIBILITY // Make sure the NEW cell is made available to the screen reader mAx->SetCurrentCell(GetGridCursorRow(), GetGridCursorCol()); #endif } break; case WXK_RETURN: case WXK_NUMPAD_ENTER: { if (!IsCellEditControlShown()) { wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow); wxWindow *def = tlw->GetDefaultItem(); if (def && def->IsEnabled()) { wxCommandEvent cevent(wxEVT_COMMAND_BUTTON_CLICKED, def->GetId()); GetParent()->GetEventHandler()->ProcessEvent(cevent); } } else { wxGrid::OnKeyDown(event); // This looks strange, but what it does is selects the cell when // enter is pressed after editing. Without it, Jaws and Window-Eyes // do not speak the NEW cell contents (the one below the edited one). SetGridCursor(GetGridCursorRow(), GetGridCursorCol()); } break; } default: wxGrid::OnKeyDown(event); break; } }
void wxKnob::OnMouse (wxMouseEvent &event) { int cx, cy; double dx, dy, theta, dt; int newval; wxEventType scrollEvent = wxEVT_NULL ; if (event.Moving ()) { event.Skip (); return; } if (event.GetWheelRotation() < 0) { SetValue(GetValue() - 1); event.Skip (); return; } if (event.GetWheelRotation() > 0) { SetValue(GetValue() + 1); event.Skip (); return; } GetCenter (cx, cy); dx = event.m_x - cx; dy = cy - event.m_y; if (dx == 0. && dy == 0.) return; theta = atan2 (dy, dx) * 180. / Pi; if (theta < 0.) theta += 360.; dt = theta - m_maxAngle; if (dt < 0.) dt += 360; if (dt > m_range) return; newval = int (m_max - (dt / m_range) * (m_max - m_min)); SetValue (newval); if (event.Dragging () || event.ButtonUp ()) { if (event.ButtonUp ()) scrollEvent = wxEVT_SCROLL_THUMBRELEASE; else scrollEvent = wxEVT_SCROLL_THUMBTRACK; wxScrollEvent event (scrollEvent, m_windowId); event.SetPosition (newval); event.SetEventObject (this); GetEventHandler()->ProcessEvent (event); wxCommandEvent cevent (wxEVT_COMMAND_SLIDER_UPDATED, m_windowId); cevent.SetInt (newval); cevent.SetEventObject (this); GetEventHandler()->ProcessEvent (cevent); } }
void TimeTextCtrl::OnKeyDown(wxKeyEvent &event) { event.Skip(false); int keyCode = event.GetKeyCode(); int digit = mFocusedDigit; if (mFocusedDigit < 0) mFocusedDigit = 0; if (mFocusedDigit >= (int)mDigits.GetCount()) mFocusedDigit = mDigits.GetCount()-1; // Convert numeric keypad entries. if ((keyCode >= WXK_NUMPAD0) && (keyCode <= WXK_NUMPAD9)) keyCode -= WXK_NUMPAD0 - '0'; if (keyCode >= '0' && keyCode <= '9') { mValueString[mDigits[mFocusedDigit].pos] = wxChar(keyCode); ControlsToValue(); ValueToControls(); mFocusedDigit = (mFocusedDigit+1)%(mDigits.GetCount()); Updated(); } else if (keyCode == WXK_BACK) { // Moves left, replaces that char with '0', stays there... mFocusedDigit--; mFocusedDigit += mDigits.GetCount(); mFocusedDigit %= mDigits.GetCount(); mValueString[mDigits[mFocusedDigit].pos] = '0'; ControlsToValue(); ValueToControls(); Updated(); } else if (keyCode == WXK_LEFT) { mFocusedDigit--; mFocusedDigit += mDigits.GetCount(); mFocusedDigit %= mDigits.GetCount(); Refresh(); } else if (keyCode == WXK_RIGHT) { mFocusedDigit++; mFocusedDigit %= mDigits.GetCount(); Refresh(); } else if (keyCode == WXK_HOME) { mFocusedDigit = 0; Refresh(); } else if (keyCode == WXK_END) { mFocusedDigit = mDigits.GetCount() - 1; Refresh(); } else if (keyCode == WXK_UP) { Increase(1); Updated(); } else if (keyCode == WXK_DOWN) { Decrease(1); Updated(); } else if (keyCode == WXK_TAB) { wxWindow *parent = GetParent(); wxNavigationKeyEvent nevent; nevent.SetWindowChange(event.ControlDown()); nevent.SetDirection(!event.ShiftDown()); nevent.SetEventObject(parent); nevent.SetCurrentFocus(parent); GetParent()->ProcessEvent(nevent); } else if (keyCode == WXK_RETURN || keyCode == WXK_NUMPAD_ENTER) { wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow); wxWindow *def = tlw->GetDefaultItem(); if (def && def->IsEnabled()) { wxCommandEvent cevent(wxEVT_COMMAND_BUTTON_CLICKED, def->GetId()); GetParent()->ProcessEvent(cevent); } } else { event.Skip(); return; } if (digit != mFocusedDigit) { SetFieldFocus(mFocusedDigit); } event.Skip(false); }
bool wxSlider::MSWOnScroll(int WXUNUSED(orientation), WXWORD wParam, WXWORD WXUNUSED(pos), WXHWND control) { wxEventType scrollEvent; switch ( wParam ) { case SB_TOP: scrollEvent = wxEVT_SCROLL_TOP; break; case SB_BOTTOM: scrollEvent = wxEVT_SCROLL_BOTTOM; break; case SB_LINEUP: scrollEvent = wxEVT_SCROLL_LINEUP; break; case SB_LINEDOWN: scrollEvent = wxEVT_SCROLL_LINEDOWN; break; case SB_PAGEUP: scrollEvent = wxEVT_SCROLL_PAGEUP; break; case SB_PAGEDOWN: scrollEvent = wxEVT_SCROLL_PAGEDOWN; break; case SB_THUMBTRACK: scrollEvent = wxEVT_SCROLL_THUMBTRACK; m_isDragging = true; break; case SB_THUMBPOSITION: if ( m_isDragging ) { scrollEvent = wxEVT_SCROLL_THUMBRELEASE; m_isDragging = false; } else { // this seems to only happen when the mouse wheel is used: in // this case, as it might be unexpected to get THUMBRELEASE // without preceding THUMBTRACKs, we don't generate it at all // but generate CHANGED event because the control itself does // not send us SB_ENDSCROLL for whatever reason when mouse // wheel is used scrollEvent = wxEVT_SCROLL_CHANGED; } break; case SB_ENDSCROLL: scrollEvent = wxEVT_SCROLL_CHANGED; break; default: // unknown scroll event? return false; } int newPos = ValueInvertOrNot((int) ::SendMessage((HWND) control, TBM_GETPOS, 0, 0)); if ( (newPos < GetMin()) || (newPos > GetMax()) ) { // out of range - but we did process it return true; } SetValue(newPos); wxScrollEvent event(scrollEvent, m_windowId); event.SetPosition(newPos); event.SetEventObject( this ); HandleWindowEvent(event); wxCommandEvent cevent( wxEVT_SLIDER, GetId() ); cevent.SetInt( newPos ); cevent.SetEventObject( this ); return HandleWindowEvent( cevent ); }