bool wxChoice::OS2Command( WXUINT uParam , WXWORD WXUNUSED(wId) ) { if (uParam != LN_SELECT) { // // "selection changed" is the only event we're after // return false; } int n = GetSelection(); if (n > -1) { wxCommandEvent vEvent( wxEVT_CHOICE ,m_windowId ); vEvent.SetInt(n); vEvent.SetEventObject(this); vEvent.SetString(GetStringSelection()); if (HasClientObjectData()) vEvent.SetClientObject(GetClientObject(n)); else if (HasClientUntypedData()) vEvent.SetClientData(GetClientData(n)); ProcessCommand(vEvent); } return true; } // end of wxChoice::OS2Command
void wxChoice::SetString(unsigned int n, const wxString& s) { wxCHECK_RET( IsValid(n), wxT("invalid item index in wxChoice::SetString") ); // we have to delete and add back the string as there is no way to change a // string in place // we need to preserve the client data manually void *oldData = NULL; wxClientData *oldObjData = NULL; if ( HasClientUntypedData() ) oldData = GetClientData(n); else if ( HasClientObjectData() ) oldObjData = GetClientObject(n); ::SendMessage(GetHwnd(), CB_DELETESTRING, n, 0); ::SendMessage(GetHwnd(), CB_INSERTSTRING, n, (LPARAM)s.wx_str() ); // restore the client data if ( oldData ) SetClientData(n, oldData); else if ( oldObjData ) SetClientObject(n, oldObjData); InvalidateBestSize(); }
void wxChoice::SetString(unsigned int n, const wxString& s) { wxCHECK_RET( IsValid(n), wxT("invalid item index in wxChoice::SetString") ); // we have to delete and add back the string as there is no way to change a // string in place // we need to preserve the client data manually void *oldData = NULL; wxClientData *oldObjData = NULL; if ( HasClientUntypedData() ) oldData = GetClientData(n); else if ( HasClientObjectData() ) oldObjData = GetClientObject(n); // and also the selection if we're going to delete the item that was // selected const bool wasSelected = static_cast<int>(n) == GetSelection(); ::SendMessage(GetHwnd(), CB_DELETESTRING, n, 0); ::SendMessage(GetHwnd(), CB_INSERTSTRING, n, (LPARAM)s.wx_str() ); // restore the client data if ( oldData ) SetClientData(n, oldData); else if ( oldObjData ) SetClientObject(n, oldObjData); // and the selection if ( wasSelected ) SetSelection(n); // the width could have changed so the best size needs to be recomputed InvalidateBestSize(); }
bool wxListBox::SendEvent(wxEventType type, int item) { wxCommandEvent event(type, m_windowId); event.SetEventObject(this); // use the current item by default if ( item == -1 ) { item = m_current; } // client data and string parameters only make sense if we have an item if ( item != -1 ) { if ( HasClientObjectData() ) event.SetClientObject(GetClientObject(item)); else if ( HasClientUntypedData() ) event.SetClientData(GetClientData(item)); event.SetString(GetString(item)); } event.SetInt(item); return GetEventHandler()->ProcessEvent(event); }
void EnumEditControl::on_select(wxCommandEvent&) { if (events_enabled_) { std::string selection; void* client_data = NULL; int selection_index = GetSelection(); if (selection_index != -1) // -1 means there is no selection { selection = (const char*) GetString(selection_index); client_data = GetClientData(selection_index); } else { // TODO: See if the user can select NONE } for (std::list<EnumEditControlSelectListener*>::iterator iter=select_listeners_.begin(); iter != select_listeners_.end(); ++iter) (*iter)->enum_edit_selected(selection, client_data); } }
void OGLPopupDivisionMenu::OnMenu(wxCommandEvent &event) { wxDivisionShape *division = (wxDivisionShape *)GetClientData(); switch (event.GetInt()) { case DIVISION_MENU_SPLIT_HORIZONTALLY: { division->Divide(wxHORIZONTAL); break; } case DIVISION_MENU_SPLIT_VERTICALLY: { division->Divide(wxVERTICAL); break; } case DIVISION_MENU_EDIT_LEFT_EDGE: { division->EditEdge(DIVISION_SIDE_LEFT); break; } case DIVISION_MENU_EDIT_TOP_EDGE: { division->EditEdge(DIVISION_SIDE_TOP); break; } default: break; } }
void wxListBox::SetString(unsigned int n, const wxString& rsString) { wxCHECK_RET( IsValid(n), wxT("invalid index in wxListBox::SetString") ); // // Remember the state of the item // bool bWasSelected = IsSelected(n); void* pOldData = NULL; wxClientData* pOldObjData = NULL; if ( HasClientUntypedData() ) pOldData = GetClientData(n); else if ( HasClientObjectData() ) pOldObjData = GetClientObject(n); // // Delete and recreate it // ::WinSendMsg( GetHwnd() ,LM_DELETEITEM ,(MPARAM)n ,(MPARAM)0 ); int nNewN = n; if (n == (m_nNumItems - 1)) nNewN = -1; ::WinSendMsg( GetHwnd() ,LM_INSERTITEM ,(MPARAM)nNewN ,(MPARAM)rsString.wx_str() ); // // Restore the client data // if (pOldData) SetClientData(n, pOldData); else if (pOldObjData) SetClientObject(n, pOldObjData); // // We may have lost the selection // if (bWasSelected) Select(n); #if wxUSE_OWNER_DRAWN if (m_windowStyle & wxLB_OWNERDRAW) // // Update item's text // m_aItems[n]->SetName(rsString); #endif //USE_OWNER_DRAWN } // end of wxListBox::SetString
void wxRearrangeList::Swap(int pos1, int pos2) { // update the internally stored order wxSwap(m_order[pos1], m_order[pos2]); // and now also swap all the attributes of the items // first the label const wxString stringTmp = GetString(pos1); SetString(pos1, GetString(pos2)); SetString(pos2, stringTmp); // then the checked state const bool checkedTmp = IsChecked(pos1); wxCheckListBox::Check(pos1, IsChecked(pos2)); wxCheckListBox::Check(pos2, checkedTmp); // and finally the client data, if necessary switch ( GetClientDataType() ) { case wxClientData_None: // nothing to do break; case wxClientData_Object: { wxClientData * const dataTmp = DetachClientObject(pos1); SetClientObject(pos1, DetachClientObject(pos2)); SetClientObject(pos2, dataTmp); } break; case wxClientData_Void: { void * const dataTmp = GetClientData(pos1); SetClientData(pos1, GetClientData(pos2)); SetClientData(pos2, dataTmp); } break; } }
void MaxCheckListBox::Delete(unsigned int n) { if (HasClientUntypedData()) { void * data = GetClientData(n); if (data) { BBRELEASE((BBObject*)data); SetClientData(n, 0); } } wxCheckListBox::Delete(n); }
void wxControlWithItemsBase::InitCommandEventWithItems(wxCommandEvent& event, int n) { InitCommandEvent(event); if ( n != wxNOT_FOUND ) { if ( HasClientObjectData() ) event.SetClientObject(GetClientObject(n)); else if ( HasClientUntypedData() ) event.SetClientData(GetClientData(n)); } }
void MaxCheckListBox::Clear() { // we need to free any items int count = GetCount(); if (HasClientUntypedData()) { for (int i = 0; i < count; i++) { void * data = GetClientData(i); if (data) { BBRELEASE((BBObject*)data); SetClientData(i, 0); } } } wxCheckListBox::Clear(); }
void wxListBox::HandleLineEvent( unsigned int n, bool doubleClick ) { wxCommandEvent event( doubleClick ? wxEVT_COMMAND_LISTBOX_DOUBLECLICKED : wxEVT_COMMAND_LISTBOX_SELECTED, GetId() ); event.SetEventObject( this ); if ( HasClientObjectData() ) event.SetClientObject( GetClientObject(n) ); else if ( HasClientUntypedData() ) event.SetClientData( GetClientData(n) ); event.SetString( GetString(n) ); event.SetInt( n ); event.SetExtraLong( 1 ); HandleWindowEvent(event); }
MaxComboBox::~MaxComboBox() { wxunbind(this); // we need to free any items int count = GetCount(); if (HasClientUntypedData()) { for (int i = 0; i < count; i++) { void * data = GetClientData(i); if (data) { BBRELEASE((BBObject*)data); } } } }
bool wxListBoxBase::SendEvent(wxEventType evtType, int item, bool selected) { wxCommandEvent event(evtType, GetId()); event.SetEventObject(this); event.SetInt(item); event.SetString(GetString(item)); event.SetExtraLong(selected); if ( HasClientObjectData() ) event.SetClientObject(GetClientObject(item)); else if ( HasClientUntypedData() ) event.SetClientData(GetClientData(item)); return HandleWindowEvent(event); }
void wxListBox::SetString(int N, const wxString& s) { wxCHECK_RET( N >= 0 && N < m_noItems, wxT("invalid index in wxListBox::SetString") ); // remember the state of the item bool wasSelected = IsSelected(N); void *oldData = NULL; wxClientData *oldObjData = NULL; if ( m_clientDataItemsType == wxClientData_Void ) oldData = GetClientData(N); else if ( m_clientDataItemsType == wxClientData_Object ) oldObjData = GetClientObject(N); // delete and recreate it SendMessage(GetHwnd(), LB_DELETESTRING, N, 0); int newN = N; if ( N == m_noItems - 1 ) newN = -1; ListBox_InsertString(GetHwnd(), newN, s); // restore the client data if ( oldData ) SetClientData(N, oldData); else if ( oldObjData ) SetClientObject(N, oldObjData); #if wxUSE_OWNER_DRAWN if ( m_windowStyle & wxLB_OWNERDRAW ) { // update item's text m_aItems[N]->SetName(s); // reassign the item's data ListBox_SetItemData(GetHwnd(), N, m_aItems[N]); } #endif //USE_OWNER_DRAWN // we may have lost the selection if ( wasSelected ) Select(N); InvalidateBestSize(); }
void wxListBox::SetString(unsigned int n, const wxString& s) { wxCHECK_RET( IsValid(n), wxT("invalid index in wxListBox::SetString") ); // remember the state of the item bool wasSelected = IsSelected(n); void *oldData = NULL; wxClientData *oldObjData = NULL; if ( m_clientDataItemsType == wxClientData_Void ) oldData = GetClientData(n); else if ( m_clientDataItemsType == wxClientData_Object ) oldObjData = GetClientObject(n); // delete and recreate it SendMessage(GetHwnd(), LB_DELETESTRING, n, 0); int newN = n; if ( n == (m_noItems - 1) ) newN = -1; ListBox_InsertString(GetHwnd(), newN, s); // restore the client data if ( oldData ) SetClientData(n, oldData); else if ( oldObjData ) SetClientObject(n, oldObjData); #if wxUSE_OWNER_DRAWN if ( m_windowStyle & wxLB_OWNERDRAW ) { // update item's text m_aItems[n]->SetName(s); // reassign the item's data ListBox_SetItemData(GetHwnd(), n, m_aItems[n]); } #endif //USE_OWNER_DRAWN // we may have lost the selection if ( wasSelected ) Select(n); SetHorizontalExtent(); }
bool wxListBox::OS2Command( WXUINT uParam , WXWORD WXUNUSED(wId)) { wxEventType eEvtType; if (uParam == LN_SELECT) { eEvtType = wxEVT_COMMAND_LISTBOX_SELECTED; } else if (uParam == LN_ENTER) { eEvtType = wxEVT_COMMAND_LISTBOX_DOUBLECLICKED; } else { // // Some event we're not interested in // return false; } wxCommandEvent vEvent( eEvtType ,m_windowId ); vEvent.SetEventObject(this); wxArrayInt aSelections; int n; int nCount = GetSelections(aSelections); if (nCount > 0) { n = aSelections[0]; if (HasClientObjectData()) vEvent.SetClientObject(GetClientObject(n)); else if ( HasClientUntypedData() ) vEvent.SetClientData(GetClientData(n)); vEvent.SetString(GetString(n)); } else { n = -1; } vEvent.SetInt(n); return GetEventHandler()->ProcessEvent(vEvent); } // end of wxListBox::OS2Command
void wxListBox::MacDoClick() { wxArrayInt aSelections; int n ; size_t count = GetSelections(aSelections); if ( count == m_selectionPreImage.GetCount() ) { bool hasChanged = false ; for ( size_t i = 0 ; i < count ; ++i ) { if ( aSelections[i] != m_selectionPreImage[i] ) { hasChanged = true ; break ; } } if ( !hasChanged ) { return ; } } m_selectionPreImage = aSelections; wxCommandEvent event(wxEVT_COMMAND_LISTBOX_SELECTED, m_windowId); event.SetEventObject( this ); if ( count > 0 ) { n = aSelections[0]; if ( HasClientObjectData() ) event.SetClientObject( GetClientObject(n) ); else if ( HasClientUntypedData() ) event.SetClientData( GetClientData(n) ); event.SetString(GetString(n)); } else { n = -1; } event.SetInt(n); GetEventHandler()->ProcessEvent(event); }
bool wxListBox::MSWCommand(WXUINT param, WXWORD WXUNUSED(id)) { if ((param == LBN_SELCHANGE) && HasMultipleSelection()) { CalcAndSendEvent(); return true; } wxEventType evtType; int n; if ( param == LBN_SELCHANGE ) { evtType = wxEVT_COMMAND_LISTBOX_SELECTED; n = SendMessage(GetHwnd(), LB_GETCARETINDEX, 0, 0); // NB: conveniently enough, LB_ERR is the same as wxNOT_FOUND } else if ( param == LBN_DBLCLK ) { evtType = wxEVT_COMMAND_LISTBOX_DOUBLECLICKED; n = HitTest(ScreenToClient(wxGetMousePosition())); } else { // some event we're not interested in return false; } // retrieve the affected item if ( n == wxNOT_FOUND ) return false; wxCommandEvent event(evtType, m_windowId); event.SetEventObject(this); if ( HasClientObjectData() ) event.SetClientObject( GetClientObject(n) ); else if ( HasClientUntypedData() ) event.SetClientData( GetClientData(n) ); event.SetString(GetString(n)); event.SetInt(n); return HandleWindowEvent(event); }
wxInt32 wxChoice::MacControlHit(WXEVENTHANDLERREF WXUNUSED(handler) , WXEVENTREF WXUNUSED(event) ) { wxCommandEvent event(wxEVT_COMMAND_CHOICE_SELECTED, m_windowId ); int n = GetSelection(); // actually n should be made sure by the os to be a valid selection, but ... if ( n > -1 ) { event.SetInt( n ); event.SetString(GetStringSelection()); event.SetEventObject(this); if ( HasClientObjectData() ) event.SetClientObject( GetClientObject(n) ); else if ( HasClientUntypedData() ) event.SetClientData( GetClientData(n) ); ProcessCommand(event); } return noErr ; }
void wxCheckListBox::DoToggleItem( int n, int x ) { if( x > 0 && x < 23 ) { wxString label = wxListBox::GetString(n); label[1u] = (!::IsChecked(label)) ? checkChar : uncheckChar; wxListBox::SetString(n, label); wxCommandEvent event(wxEVT_COMMAND_CHECKLISTBOX_TOGGLED, GetId()); if( HasClientObjectData() ) event.SetClientObject( GetClientObject(n) ); else if( HasClientUntypedData() ) event.SetClientData( GetClientData(n) ); event.SetInt(n); event.SetExtraLong(true); event.SetEventObject(this); event.SetString(GetString(n)); HandleWindowEvent(event); } }
void wxControlBase::InitCommandEvent(wxCommandEvent& event) const { event.SetEventObject((wxControlBase *)this); // const_cast // event.SetId(GetId()); -- this is usuall done in the event ctor switch ( m_clientDataType ) { case wxClientData_Void: event.SetClientData(GetClientData()); break; case wxClientData_Object: event.SetClientObject(GetClientObject()); break; case wxClientData_None: // nothing to do ; } }
bool wxChoice::OSXHandleClicked( double WXUNUSED(timestampsec) ) { wxCommandEvent event( wxEVT_COMMAND_CHOICE_SELECTED, m_windowId ); // actually n should be made sure by the os to be a valid selection, but ... int n = GetSelection(); if ( n > -1 ) { event.SetInt( n ); event.SetString( GetStringSelection() ); event.SetEventObject( this ); if ( HasClientObjectData() ) event.SetClientObject( GetClientObject( n ) ); else if ( HasClientUntypedData() ) event.SetClientData( GetClientData( n ) ); ProcessCommand( event ); } return true ; }
bool wxListBox::MSWCommand(WXUINT param, WXWORD WXUNUSED(id)) { wxEventType evtType; if ( param == LBN_SELCHANGE ) { evtType = wxEVT_COMMAND_LISTBOX_SELECTED; } else if ( param == LBN_DBLCLK ) { evtType = wxEVT_COMMAND_LISTBOX_DOUBLECLICKED; } else { // some event we're not interested in return false; } wxCommandEvent event(evtType, m_windowId); event.SetEventObject( this ); // retrieve the affected item int n = SendMessage(GetHwnd(), LB_GETCARETINDEX, 0, 0); if ( n != LB_ERR ) { if ( HasClientObjectData() ) event.SetClientObject( GetClientObject(n) ); else if ( HasClientUntypedData() ) event.SetClientData( GetClientData(n) ); event.SetString(GetString(n)); event.SetExtraLong( HasMultipleSelection() ? IsSelected(n) : true ); } event.SetInt(n); return GetEventHandler()->ProcessEvent(event); }
bool wxChoice::MSWCommand(WXUINT param, WXWORD WXUNUSED(id)) { if ( param != CBN_SELCHANGE) { // "selection changed" is the only event we're after return false; } int n = GetSelection(); if (n > -1) { wxCommandEvent event(wxEVT_COMMAND_CHOICE_SELECTED, m_windowId); event.SetInt(n); event.SetEventObject(this); event.SetString(GetStringSelection()); if ( HasClientObjectData() ) event.SetClientObject( GetClientObject(n) ); else if ( HasClientUntypedData() ) event.SetClientData( GetClientData(n) ); ProcessCommand(event); } return true; }
void wxListBox::SetString(unsigned int n, const wxString& s) { wxCHECK_RET( IsValid(n), wxT("invalid index in wxListBox::SetString") ); // remember the state of the item bool wasSelected = IsSelected(n); void *oldData = NULL; wxClientData *oldObjData = NULL; if ( HasClientUntypedData() ) oldData = GetClientData(n); else if ( HasClientObjectData() ) oldObjData = GetClientObject(n); // delete and recreate it SendMessage(GetHwnd(), LB_DELETESTRING, n, 0); int newN = n; if ( n == (m_noItems - 1) ) newN = -1; ListBox_InsertString(GetHwnd(), newN, s.wx_str()); // restore the client data if ( oldData ) SetClientData(n, oldData); else if ( oldObjData ) SetClientObject(n, oldObjData); // we may have lost the selection if ( wasSelected ) Select(n); MSWOnItemsChanged(); }
void wxBitmapComboBox::RecreateControl() { // // Recreate control so that WM_MEASUREITEM gets called again. // Can't use CBS_OWNERDRAWVARIABLE because it has odd // mouse-wheel behaviour. // wxString value = GetValue(); wxPoint pos = GetPosition(); wxSize size = GetSize(); size.y = GetBestSize().y; const wxArrayString strings = GetStrings(); const unsigned numItems = strings.size(); unsigned i; // Save the client data pointers before clearing the control, if any. const wxClientDataType clientDataType = GetClientDataType(); wxVector<wxClientData*> objectClientData; wxVector<void*> voidClientData; switch ( clientDataType ) { case wxClientData_None: break; case wxClientData_Object: objectClientData.reserve(numItems); for ( i = 0; i < numItems; ++i ) objectClientData.push_back(GetClientObject(i)); break; case wxClientData_Void: voidClientData.reserve(numItems); for ( i = 0; i < numItems; ++i ) voidClientData.push_back(GetClientData(i)); break; } wxComboBox::DoClear(); HWND hwnd = GetHwnd(); DissociateHandle(); ::DestroyWindow(hwnd); if ( !MSWCreateControl(wxT("COMBOBOX"), wxEmptyString, pos, size) ) return; // initialize the controls contents for ( i = 0; i < numItems; i++ ) { wxComboBox::Append(strings[i]); if ( !objectClientData.empty() ) SetClientObject(i, objectClientData[i]); else if ( !voidClientData.empty() ) SetClientData(i, voidClientData[i]); } // and make sure it has the same attributes as before if ( m_hasFont ) { // calling SetFont(m_font) would do nothing as the code would // notice that the font didn't change, so force it to believe // that it did wxFont font = m_font; m_font = wxNullFont; SetFont(font); } if ( m_hasFgCol ) { wxColour colFg = m_foregroundColour; m_foregroundColour = wxNullColour; SetForegroundColour(colFg); } if ( m_hasBgCol ) { wxColour colBg = m_backgroundColour; m_backgroundColour = wxNullColour; SetBackgroundColour(colBg); } else { SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); } ::SendMessage(GetHwnd(), CB_SETITEMHEIGHT, 0, MeasureItem(0)); // Revert the old string value if ( !HasFlag(wxCB_READONLY) ) ChangeValue(value); }
void TASInputDlg::OnCheckboxToggle(wxCommandEvent& event) { auto cbox = static_cast<wxCheckBox*>(event.GetEventObject()); static_cast<Button*>(cbox->GetClientData())->is_checked = event.IsChecked(); }
OID ctlComboBoxFix::GetOIDKey(int sel) { if (sel < 0) sel = GetSelection(); return (OID)GetClientData(sel); }
void wxListBox::SetString( int N , const wxString& rsString ) { wxCHECK_RET( N >= 0 && N < m_nNumItems, wxT("invalid index in wxListBox::SetString") ); // // Remember the state of the item // bool bWasSelected = IsSelected(N); void* pOldData = NULL; wxClientData* pOldObjData = NULL; if (m_clientDataItemsType == wxClientData_Void) pOldData = GetClientData(N); else if (m_clientDataItemsType == wxClientData_Object) pOldObjData = GetClientObject(N); // // Delete and recreate it // ::WinSendMsg( GetHwnd() ,LM_DELETEITEM ,(MPARAM)N ,(MPARAM)0 ); int nNewN = N; if (N == m_nNumItems - 1) nNewN = -1; ::WinSendMsg( GetHwnd() ,LM_INSERTITEM ,(MPARAM)nNewN ,(MPARAM)rsString.c_str() ); // // Restore the client data // if (pOldData) SetClientData( N ,pOldData ); else if (pOldObjData) SetClientObject( N ,pOldObjData ); // // We may have lost the selection // if (bWasSelected) Select(N); #if wxUSE_OWNER_DRAWN if (m_windowStyle & wxLB_OWNERDRAW) // // Update item's text // m_aItems[N]->SetName(rsString); #endif //USE_OWNER_DRAWN } // end of wxListBox::SetString