void CSafeCombinationEntry::CreateControls() { ////@begin CSafeCombinationEntry content construction CSafeCombinationEntry* itemDialog1 = this; wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxHORIZONTAL); itemDialog1->SetSizer(itemBoxSizer2); wxStaticBitmap* itemStaticBitmap3 = new wxStaticBitmap( itemDialog1, wxID_STATIC, itemDialog1->GetBitmapResource(wxT("graphics/cpane.xpm")), wxDefaultPosition, itemDialog1->ConvertDialogToPixels(wxSize(49, 46)), 0 ); itemBoxSizer2->Add(itemStaticBitmap3, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); wxBoxSizer* itemBoxSizer4 = new wxBoxSizer(wxVERTICAL); itemBoxSizer2->Add(itemBoxSizer4, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); wxBoxSizer* itemBoxSizer5 = new wxBoxSizer(wxHORIZONTAL); itemBoxSizer4->Add(itemBoxSizer5, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5); wxStaticBitmap* itemStaticBitmap6 = new wxStaticBitmap( itemDialog1, wxID_STATIC, itemDialog1->GetBitmapResource(wxT("graphics/psafetxt.xpm")), wxDefaultPosition, wxDefaultSize, 0 ); itemBoxSizer5->Add(itemStaticBitmap6, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); m_version = new wxStaticText( itemDialog1, wxID_STATIC, _("VX.YY"), wxDefaultPosition, wxDefaultSize, 0 ); itemBoxSizer5->Add(m_version, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); wxStaticText* itemStaticText8 = new wxStaticText( itemDialog1, wxID_STATIC, _("Open Password Database:"), wxDefaultPosition, wxDefaultSize, 0 ); itemBoxSizer4->Add(itemStaticText8, 0, wxALIGN_LEFT|wxALL, 3); wxBoxSizer* itemBoxSizer9 = new wxBoxSizer(wxHORIZONTAL); itemBoxSizer4->Add(itemBoxSizer9, 50, wxGROW|wxALL, 5); wxArrayString m_filenameCBStrings; m_filenameCB = new wxComboBox( itemDialog1, ID_DBASECOMBOBOX, wxEmptyString, wxDefaultPosition, wxSize(itemDialog1->ConvertDialogToPixels(wxSize(140, -1)).x, -1), m_filenameCBStrings, wxCB_DROPDOWN ); itemBoxSizer9->Add(m_filenameCB, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxBOTTOM, 0); wxButton* itemButton11 = new wxButton( itemDialog1, ID_ELLIPSIS, wxT("..."), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT ); itemBoxSizer9->Add(itemButton11, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); wxStaticText* itemStaticText12 = new wxStaticText( itemDialog1, wxID_STATIC, _("Safe Combination:"), wxDefaultPosition, wxDefaultSize, 0 ); itemBoxSizer4->Add(itemStaticText12, 0, wxALIGN_LEFT|wxALL, 3); m_combinationEntry = new CSafeCombinationCtrl( itemDialog1, ID_COMBINATION, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); itemBoxSizer4->Add(m_combinationEntry, 0, wxGROW|wxRIGHT|wxTOP|wxBOTTOM, 5); wxBoxSizer* itemBoxSizer14 = new wxBoxSizer(wxHORIZONTAL); itemBoxSizer4->Add(itemBoxSizer14, 0, wxGROW|wxALL, 5); wxCheckBox* itemCheckBox15 = new wxCheckBox( itemDialog1, ID_READONLY, _("Open as read-only"), wxDefaultPosition, wxDefaultSize, 0 ); itemCheckBox15->SetValue(false); itemBoxSizer14->Add(itemCheckBox15, 0, wxALIGN_CENTER_VERTICAL|wxALL, 0); itemBoxSizer14->Add(120, 10, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); wxButton* itemButton17 = new wxButton( itemDialog1, ID_NEWDB, _("New..."), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT ); itemBoxSizer14->Add(itemButton17, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxTOP|wxBOTTOM, 5); wxBoxSizer* itemBoxSizer18 = new wxBoxSizer(wxHORIZONTAL); itemBoxSizer4->Add(itemBoxSizer18, 0, wxGROW|wxALL, 5); #ifndef NO_YUBI m_YubiBtn = new wxBitmapButton( itemDialog1, ID_YUBIBTN, itemDialog1->GetBitmapResource(wxT("graphics/Yubikey-button.xpm")), wxDefaultPosition, itemDialog1->ConvertDialogToPixels(wxSize(40, 15)), wxBU_AUTODRAW ); itemBoxSizer18->Add(m_YubiBtn, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxBOTTOM|wxSHAPED, 5); m_yubiStatusCtrl = new wxStaticText( itemDialog1, ID_YUBISTATUS, _("Please insert your YubiKey"), wxDefaultPosition, wxDefaultSize, 0 ); itemBoxSizer18->Add(m_yubiStatusCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); #endif wxStdDialogButtonSizer* itemStdDialogButtonSizer21 = new wxStdDialogButtonSizer; itemBoxSizer4->Add(itemStdDialogButtonSizer21, 0, wxGROW|wxALL, 0); wxButton* itemButton22 = new wxButton( itemDialog1, wxID_OK, _("OK"), wxDefaultPosition, wxDefaultSize, 0 ); itemButton22->SetDefault(); itemStdDialogButtonSizer21->AddButton(itemButton22); wxButton* itemButton23 = new wxButton( itemDialog1, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxDefaultSize, 0 ); itemStdDialogButtonSizer21->AddButton(itemButton23); wxButton* itemButton24 = new wxButton( itemDialog1, wxID_HELP, _("&Help"), wxDefaultPosition, wxDefaultSize, 0 ); itemStdDialogButtonSizer21->AddButton(itemButton24); itemStdDialogButtonSizer21->Realize(); // Set validators m_filenameCB->SetValidator( wxGenericValidator(& m_filename) ); itemCheckBox15->SetValidator( wxGenericValidator(& m_readOnly) ); ////@end CSafeCombinationEntry content construction m_combinationEntry->SetValidatorTarget(& m_password); #if (REVISION == 0) m_version->SetLabel(wxString::Format(wxT("V%d.%d %ls"), MAJORVERSION, MINORVERSION, SPECIALBUILD)); #else m_version->SetLabel(wxString::Format(wxT("V%d.%d.%d %ls"), MAJORVERSION, MINORVERSION, REVISION, SPECIALBUILD)); #endif wxArrayString recentFiles; wxGetApp().recentDatabases().GetAll(recentFiles); m_filenameCB->Append(recentFiles); // The underlying native combobox widget might not yet be ready // to hand back the string we just added wxCommandEvent cmdEvent(wxEVT_COMMAND_COMBOBOX_SELECTED, m_filenameCB->GetId()); GetEventHandler()->AddPendingEvent(cmdEvent); SetIcons(wxGetApp().GetAppIcons()); }
/* OnHotKey. * ** Commands are case insensitive ** * Some commands are relative to the item under the mouse cursor * aDC = current device context * aHotkeyCode = hotkey code (ascii or wxWidget code for special keys) * aPosition The cursor position in logical (drawing) units. * aItem = NULL or pointer on a EDA_ITEM under the mouse cursor */ void PL_EDITOR_FRAME::OnHotKey( wxDC* aDC, int aHotkeyCode, const wxPoint& aPosition, EDA_ITEM* aItem ) { bool busy = GetScreen()->GetCurItem() != NULL; wxCommandEvent cmd( wxEVT_COMMAND_MENU_SELECTED ); cmd.SetEventObject( this ); /* Convert lower to upper case (the usual toupper function has problem with non ascii * codes like function keys */ if( (aHotkeyCode >= 'a') && (aHotkeyCode <= 'z') ) aHotkeyCode += 'A' - 'a'; EDA_HOTKEY * HK_Descr = GetDescriptorFromHotkey( aHotkeyCode, s_PlEditor_Hotkey_List ); if( HK_Descr == NULL ) HK_Descr = GetDescriptorFromHotkey( aHotkeyCode, s_Common_Hotkey_List ); if( HK_Descr == NULL ) return; WORKSHEET_DATAITEM* item; switch( HK_Descr->m_Idcommand ) { case HK_NOT_FOUND: return; case HK_LEFT_CLICK: OnLeftClick( aDC, aPosition ); break; case HK_LEFT_DCLICK: // Simulate a double left click: generate 2 events OnLeftClick( aDC, aPosition ); OnLeftDClick( aDC, aPosition ); break; case HK_HELP: // Display Current hotkey list DisplayHotkeyList( this, s_PlEditor_Hokeys_Descr ); break; case HK_UNDO: case HK_REDO: if( busy ) break; cmd.SetId( HK_Descr->m_IdMenuEvent ); GetEventHandler()->ProcessEvent( cmd ); break; case HK_ZOOM_IN: cmd.SetId( ID_POPUP_ZOOM_IN ); GetEventHandler()->ProcessEvent( cmd ); break; case HK_ZOOM_OUT: cmd.SetId( ID_POPUP_ZOOM_OUT ); GetEventHandler()->ProcessEvent( cmd ); break; case HK_ZOOM_REDRAW: cmd.SetId( ID_ZOOM_REDRAW ); GetEventHandler()->ProcessEvent( cmd ); break; case HK_ZOOM_CENTER: cmd.SetId( ID_POPUP_ZOOM_CENTER ); GetEventHandler()->ProcessEvent( cmd ); break; case HK_ZOOM_AUTO: cmd.SetId( ID_ZOOM_PAGE ); GetEventHandler()->ProcessEvent( cmd ); break; case HK_RESET_LOCAL_COORD: // Reset the relative coord GetScreen()->m_O_Curseur = GetCrossHairPosition(); break; case HK_SET_GRID_ORIGIN: SetGridOrigin( GetCrossHairPosition() ); break; case HK_MOVE_ITEM: case HK_MOVE_START_POINT: case HK_MOVE_END_POINT: case HK_DELETE_ITEM: if( busy ) break; if( (item = Locate( aPosition )) == NULL ) break; // Only rect and lines have a end point. if( HK_Descr->m_Idcommand == HK_MOVE_END_POINT && !item->HasEndPoint() ) break; if( m_treePagelayout->GetPageLayoutSelectedItem() != item ) m_treePagelayout->SelectCell( item ); cmd.SetId( HK_Descr->m_IdMenuEvent ); GetEventHandler()->ProcessEvent( cmd ); break; case HK_PLACE_ITEM: if( busy ) { cmd.SetId( HK_Descr->m_IdMenuEvent ); GetEventHandler()->ProcessEvent( cmd ); } break; default: wxMessageBox( wxT("Unknown hotkey") ); return; } }
void wxSashLayoutWindow::OnCalculateLayout(wxCalculateLayoutEvent& event) { wxRect clientSize(event.GetRect()); int flags = event.GetFlags(); if (!IsShown()) return; // Let's assume that all windows stretch the full extent of the window in // the direction of that window orientation. This will work for non-docking toolbars, // and the status bar. Note that the windows have to have been created in a certain // order to work, else you might get a left-aligned window going to the bottom // of the window, and the status bar appearing to the right of it. The // status bar would have to be created after or before the toolbar(s). wxRect thisRect; // Try to stretch int length = (GetOrientation() == wxLAYOUT_HORIZONTAL) ? clientSize.width : clientSize.height; wxLayoutOrientation orient = GetOrientation(); // We assume that a window that says it's horizontal, wants to be stretched in that // direction. Is this distinction too fine? Do we assume that any horizontal // window needs to be stretched in that direction? Possibly. int whichDimension = (GetOrientation() == wxLAYOUT_HORIZONTAL) ? wxLAYOUT_LENGTH_X : wxLAYOUT_LENGTH_Y; wxQueryLayoutInfoEvent infoEvent(GetId()); infoEvent.SetEventObject(this); infoEvent.SetRequestedLength(length); infoEvent.SetFlags(orient | whichDimension); if (!GetEventHandler()->ProcessEvent(infoEvent)) return; wxSize sz = infoEvent.GetSize(); if (sz.x == 0 && sz.y == 0) // Assume it's invisible return; // Now we know the size it wants to be. We wish to decide where to place it, i.e. // how it's aligned. switch (GetAlignment()) { case wxLAYOUT_TOP: { thisRect.x = clientSize.x; thisRect.y = clientSize.y; thisRect.width = sz.x; thisRect.height = sz.y; clientSize.y += thisRect.height; clientSize.height -= thisRect.height; break; } case wxLAYOUT_LEFT: { thisRect.x = clientSize.x; thisRect.y = clientSize.y; thisRect.width = sz.x; thisRect.height = sz.y; clientSize.x += thisRect.width; clientSize.width -= thisRect.width; break; } case wxLAYOUT_RIGHT: { thisRect.x = clientSize.x + (clientSize.width - sz.x); thisRect.y = clientSize.y; thisRect.width = sz.x; thisRect.height = sz.y; clientSize.width -= thisRect.width; break; } case wxLAYOUT_BOTTOM: { thisRect.x = clientSize.x; thisRect.y = clientSize.y + (clientSize.height - sz.y); thisRect.width = sz.x; thisRect.height = sz.y; clientSize.height -= thisRect.height; break; } case wxLAYOUT_NONE: { break; } } if ((flags & wxLAYOUT_QUERY) == 0) { // If not in query mode, resize the window. // TODO: add wxRect& form to wxWindow::SetSize wxSize sz2 = GetSize(); wxPoint pos = GetPosition(); SetSize(thisRect.x, thisRect.y, thisRect.width, thisRect.height); // Make sure the sash is erased when the window is resized if ((pos.x != thisRect.x || pos.y != thisRect.y || sz2.x != thisRect.width || sz2.y != thisRect.height) && (GetSashVisible(wxSASH_TOP) || GetSashVisible(wxSASH_RIGHT) || GetSashVisible(wxSASH_BOTTOM) || GetSashVisible(wxSASH_LEFT))) Refresh(true); } event.SetRect(clientSize); }
bool PCB_EDIT_FRAME::OnHotkeyEditItem( int aIdCommand ) { BOARD_ITEM* item = GetCurItem(); bool itemCurrentlyEdited = item && item->GetFlags(); if( itemCurrentlyEdited ) return false; item = PcbGeneralLocateAndDisplay(); if( item == NULL ) return false; SetCurItem( item ); int evt_type = 0; //Used to post a wxCommandEvent on demand switch( item->Type() ) { case PCB_TRACE_T: case PCB_VIA_T: if( aIdCommand == HK_EDIT_ITEM ) { // Be sure the corresponding netclass is selected before edit: SetCurrentNetClass( ( (BOARD_CONNECTED_ITEM*)item )->GetNetClassName() ); evt_type = ID_POPUP_PCB_EDIT_TRACKSEG; } break; case PCB_TEXT_T: if( aIdCommand == HK_EDIT_ITEM ) evt_type = ID_POPUP_PCB_EDIT_TEXTEPCB; break; case PCB_MODULE_T: if( aIdCommand == HK_EDIT_ITEM ) evt_type = ID_POPUP_PCB_EDIT_MODULE_PRMS; else if( aIdCommand == HK_EDIT_MODULE_WITH_MODEDIT ) evt_type = ID_POPUP_PCB_EDIT_MODULE_WITH_MODEDIT; break; case PCB_PAD_T: // Until dec 2012 a EDIT_MODULE event is posted here to prevent pads // from being edited by hotkeys. // Process_Special_Functions takes care of finding the parent. // After dec 2012 a EDIT_PAD event is posted, because there is no // reason to not allow pad edit by hotkey // (pad coordinates are no more modified by rounding, in nanometer version // when using inches or mm in dialog) if( aIdCommand == HK_EDIT_ITEM ) evt_type = ID_POPUP_PCB_EDIT_PAD; break; case PCB_TARGET_T: if( aIdCommand == HK_EDIT_ITEM ) evt_type = ID_POPUP_PCB_EDIT_MIRE; break; case PCB_DIMENSION_T: if( aIdCommand == HK_EDIT_ITEM ) evt_type = ID_POPUP_PCB_EDIT_DIMENSION; break; case PCB_MODULE_TEXT_T: if( aIdCommand == HK_EDIT_ITEM ) evt_type = ID_POPUP_PCB_EDIT_TEXTMODULE; break; case PCB_LINE_T: if( aIdCommand == HK_EDIT_ITEM ) evt_type = ID_POPUP_PCB_EDIT_DRAWING; break; case PCB_ZONE_AREA_T: if( aIdCommand == HK_EDIT_ITEM ) evt_type = ID_POPUP_PCB_EDIT_ZONE_PARAMS; break; default: break; } if( evt_type != 0 ) { wxCommandEvent evt( wxEVT_COMMAND_MENU_SELECTED ); evt.SetEventObject( this ); evt.SetId( evt_type ); GetEventHandler()->ProcessEvent( evt ); return true; } return false; }
/* * Called on a double click: * If an editable item (field, pin, graphic): * Call the suitable dialog editor. */ void LIB_EDIT_FRAME::OnLeftDClick( wxDC* DC, const wxPoint& aPosition ) { LIB_PART* part = GetCurPart(); if( !part ) return; if( !m_drawItem || !m_drawItem->InEditMode() ) { // We can locate an item m_drawItem = LocateItemUsingCursor( aPosition ); if( m_drawItem == NULL ) { wxCommandEvent cmd( wxEVT_COMMAND_MENU_SELECTED ); cmd.SetId( ID_LIBEDIT_GET_FRAME_EDIT_PART ); GetEventHandler()->ProcessEvent( cmd ); } } if( m_drawItem ) SetMsgPanel( m_drawItem ); else return; m_canvas->SetIgnoreMouseEvents( true ); bool not_edited = !m_drawItem->InEditMode(); switch( m_drawItem->Type() ) { case LIB_PIN_T: if( not_edited ) { wxCommandEvent cmd( wxEVT_COMMAND_MENU_SELECTED ); cmd.SetId( ID_LIBEDIT_EDIT_PIN ); GetEventHandler()->ProcessEvent( cmd ); } break; case LIB_ARC_T: case LIB_CIRCLE_T: case LIB_RECTANGLE_T: if( not_edited ) EditGraphicSymbol( DC, m_drawItem ); break; case LIB_POLYLINE_T: if( not_edited ) EditGraphicSymbol( DC, m_drawItem ); else if( m_drawItem->IsNew() ) EndDrawGraphicItem( DC ); break; case LIB_TEXT_T: if( not_edited ) EditSymbolText( DC, m_drawItem ); break; case LIB_FIELD_T: if( not_edited ) EditField( (LIB_FIELD*) m_drawItem ); break; default: wxFAIL_MSG( wxT( "Unhandled item <" ) + m_drawItem->GetClass() + wxT( ">" ) ); break; } m_canvas->MoveCursorToCrossHair(); m_canvas->SetIgnoreMouseEvents( false ); }
void wxTextCtrl::OnChar(wxKeyEvent& event) { int key = event.GetKeyCode() ; bool eat_key = false ; long from, to; if ( !IsEditable() && !event.IsKeyInCategory(WXK_CATEGORY_ARROW | WXK_CATEGORY_TAB) && !( key == WXK_RETURN && ( (m_windowStyle & wxTE_PROCESS_ENTER) || (m_windowStyle & wxTE_MULTILINE) ) ) // && key != WXK_PAGEUP && key != WXK_PAGEDOWN && key != WXK_HOME && key != WXK_END ) { // eat it return ; } // Check if we have reached the max # of chars (if it is set), but still // allow navigation and deletion GetSelection( &from, &to ); if ( !IsMultiLine() && m_maxLength && GetValue().length() >= m_maxLength && !event.IsKeyInCategory(WXK_CATEGORY_ARROW | WXK_CATEGORY_TAB | WXK_CATEGORY_CUT) && !( key == WXK_RETURN && (m_windowStyle & wxTE_PROCESS_ENTER) ) && from == to ) { // eat it, we don't want to add more than allowed # of characters // TODO: generate EVT_TEXT_MAXLEN() return; } // assume that any key not processed yet is going to modify the control m_dirty = true; switch ( key ) { case WXK_RETURN: if (m_windowStyle & wxTE_PROCESS_ENTER) { wxCommandEvent event(wxEVT_COMMAND_TEXT_ENTER, m_windowId); event.SetEventObject( this ); event.SetString( GetValue() ); if ( HandleWindowEvent(event) ) return; } if ( !(m_windowStyle & wxTE_MULTILINE) ) { wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow); if ( tlw && tlw->GetDefaultItem() ) { wxButton *def = wxDynamicCast(tlw->GetDefaultItem(), wxButton); if ( def && def->IsEnabled() ) { wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, def->GetId() ); event.SetEventObject(def); def->Command(event); return ; } } // this will make wxWidgets eat the ENTER key so that // we actually prevent line wrapping in a single line text control eat_key = true; } break; case WXK_TAB: if ( !(m_windowStyle & wxTE_PROCESS_TAB)) { int flags = 0; if (!event.ShiftDown()) flags |= wxNavigationKeyEvent::IsForward ; if (event.ControlDown()) flags |= wxNavigationKeyEvent::WinChange ; Navigate(flags); return; } else { // This is necessary (don't know why); // otherwise the tab will not be inserted. WriteText(wxT("\t")); eat_key = true; } break; default: break; } if (!eat_key) { // perform keystroke handling event.Skip(true) ; } // osx_cocoa sends its event upon insertText #if wxOSX_USE_CARBON if ( ( key >= 0x20 && key < WXK_START ) || ( key >= WXK_NUMPAD0 && key <= WXK_DIVIDE ) || key == WXK_RETURN || key == WXK_DELETE || key == WXK_BACK) { wxCommandEvent event1(wxEVT_COMMAND_TEXT_UPDATED, m_windowId); event1.SetEventObject( this ); wxPostEvent( GetEventHandler(), event1 ); } #endif }
bool PCB_EDIT_FRAME::OnHotkeyRotateItem( int aIdCommand ) { BOARD_ITEM* item = GetCurItem(); bool itemCurrentlyEdited = item && item->GetFlags(); int evt_type = 0; // Used to post a wxCommandEvent on demand // Allows block rotate operation on hot key. if( GetScreen()->m_BlockLocate.GetState() != STATE_NO_BLOCK ) { evt_type = ID_POPUP_ROTATE_BLOCK; } else { if( !itemCurrentlyEdited ) item = PcbGeneralLocateAndDisplay(); if( item == NULL ) return false; SetCurItem( item ); switch( item->Type() ) { case PCB_MODULE_T: if( aIdCommand == HK_ROTATE_ITEM ) // Rotation evt_type = ID_POPUP_PCB_ROTATE_MODULE_COUNTERCLOCKWISE; if( aIdCommand == HK_FLIP_ITEM ) // move to other side evt_type = ID_POPUP_PCB_CHANGE_SIDE_MODULE; break; case PCB_TEXT_T: if( aIdCommand == HK_ROTATE_ITEM ) // Rotation evt_type = ID_POPUP_PCB_ROTATE_TEXTEPCB; else if( aIdCommand == HK_FLIP_ITEM ) evt_type = ID_POPUP_PCB_FLIP_TEXTEPCB; break; case PCB_MODULE_TEXT_T: if( aIdCommand == HK_ROTATE_ITEM ) // Rotation evt_type = ID_POPUP_PCB_ROTATE_TEXTMODULE; break; default: break; } } if( evt_type != 0 ) { wxCommandEvent evt( wxEVT_COMMAND_MENU_SELECTED ); evt.SetEventObject( this ); evt.SetId( evt_type ); GetEventHandler()->ProcessEvent( evt ); return true; } return false; }
void FreqWindow::SendRecalcEvent() { wxCommandEvent e(EVT_FREQWINDOW_RECALC, wxID_ANY); GetEventHandler()->AddPendingEvent(e); }
bool wxMenu::HandleCommandUpdateStatus( wxMenuItem* item, wxWindow* senderWindow ) { int menuid = item ? item->GetId() : 0; wxUpdateUIEvent event(menuid); event.SetEventObject( this ); bool processed = false; // Try the menu's event handler { wxEvtHandler *handler = GetEventHandler(); if ( handler ) processed = handler->ProcessEvent(event); } // Try the window the menu was popped up from // (and up through the hierarchy) if ( !processed ) { wxWindow *win = GetWindow(); if ( win ) processed = win->HandleWindowEvent(event); } if ( !processed && senderWindow != NULL) { processed = senderWindow->HandleWindowEvent(event); } if ( processed ) { // if anything changed, update the changed attribute if (event.GetSetText()) SetLabel(menuid, event.GetText()); if (event.GetSetChecked()) Check(menuid, event.GetChecked()); if (event.GetSetEnabled()) Enable(menuid, event.GetEnabled()); } else { #if wxOSX_USE_CARBON // these two items are also managed by the Carbon Menu Manager, therefore we must // always reset them ourselves UInt32 cmd = 0; if ( menuid == wxApp::s_macExitMenuItemId ) { cmd = kHICommandQuit; } else if (menuid == wxApp::s_macPreferencesMenuItemId ) { cmd = kHICommandPreferences; } if ( cmd != 0 ) { if ( !item->IsEnabled() || wxDialog::OSXHasModalDialogsOpen() ) DisableMenuCommand( NULL , cmd ) ; else EnableMenuCommand( NULL , cmd ) ; } #endif } return processed; }
bool wxSplitterWindow::DoSendEvent(wxSplitterEvent& event) { return !GetEventHandler()->ProcessEvent(event) || event.IsAllowed(); }
void Wizard::OnCancel(wxCommandEvent&) { WizardEvent eventCancel( wxFB_EVT_WIZARD_CANCEL, GetId(), false, m_page ); GetEventHandler()->ProcessEvent( eventCancel ); }
/* * Method: OnToolClick() * Purpose: called when the user click on of the tools on the * toll bar * Comments: none */ void CMainWindow::OnToolClick(wxCommandEvent& aEvent) { wxTreeItemId lItem = iTree->GetSelection(); if(lItem.IsOk() && lItem != iRoot || aEvent.GetId() == ID_SEEK) { CTreeItemData* lData = (CTreeItemData *)iTree->GetItemData(lItem); switch(aEvent.GetId()) { case ID_INFO: { if(!lData->iInfo) { // create the info window CInfoWindow* lWindow = new CInfoWindow(*this,lData->iData); if(lWindow) { // keep a pointer to it lData->iInfo = lWindow; // and show the window lWindow->Show(true); } } else lData->iInfo->Raise(); break; } case ID_CTRL: { if(!lData->iCtrl) { if(!lData->iHandle) lData->iHandle = OpenCamera(lData->iData.UniqueId,lData->iOwner); if(lData->iHandle) { // create the info window CCtrlWindow* lWindow = new CCtrlWindow(*this,lData->iData,lData->iHandle,lData->iOwner); if(lWindow) { // keep a pointer to it lData->iCtrl = lWindow; // and show the window lWindow->Show(true); if(lData->iFinder) lData->iCtrl->Notify(kEvnLiveOpened,lData->iFinder,true); } } else { wxMessageBox(L"Sorry, the camera couldn't be open.", L"Ooops ...", wxOK | wxICON_ERROR,this); } } else lData->iCtrl->Raise(); break; } case ID_LIVE: { if(!lData->iFinder) { if(!lData->iHandle) lData->iHandle = OpenCamera(lData->iData.UniqueId,lData->iOwner); if(lData->iHandle) { // create the info window CFinderWindow* lWindow = new CFinderWindow(*this,lData->iData,lData->iHandle); if(lWindow) { // keep a pointer to it lData->iFinder = lWindow; // and show the window lWindow->Show(true); if(lData->iCtrl) lData->iCtrl->Notify(kEvnLiveOpened,lWindow,true); } } else { wxMessageBox(L"Sorry, the camera couldn't be open.", L"Ooops ...", wxOK | wxICON_ERROR,this); } } else lData->iFinder->Raise(); break; } case ID_SEEK: { wxTextEntryDialog lDialog(this,L"Please enter the IP address of the camera",L"Seek a camera ...",L"0.0.0.0"); if(lDialog.ShowModal() == wxID_OK) { unsigned long lAddr = inet_addr(lDialog.GetValue().mb_str(wxConvUTF8)); if(lAddr) { iSeeking = new CSeeker(dSEEKER,GetEventHandler(),lAddr); if(iSeeking) if(!iSeeking->Start()) { delete iSeeking; iSeeking = NULL; } } else wxMessageBox(L"You need to enter a valid IP address", L"Ooops ...", wxOK | wxICON_ERROR,this); } break; } case ID_EXPO: { bool lClose = false; if(!lData->iHandle) { lData->iHandle = OpenCamera(lData->iData.UniqueId,lData->iOwner); lClose = true; } if(lData->iHandle) { wxFileDialog lDialog(NULL,wxT("Select an output file"),wxT(""), wxString(lData->iData.SerialNumber,wxConvUTF8), wxT("Text files (*.txt)|*.txt"),wxSAVE | wxOVERWRITE_PROMPT); if(lDialog.ShowModal() == wxID_OK) { wxString lExt = wxT(".txt"); wxString lPath = lDialog.GetPath(); if(!lPath.Contains(lExt)) lPath = lPath + lExt; if(!ExportCamera(lData->iHandle,lPath)) wxMessageBox(wxT("Camera's setup export failed."),wxT("Ooops ..."),wxOK | wxICON_ERROR,this); } if(lClose) { CloseCamera(lData->iHandle); lData->iHandle = NULL; } } break; } case ID_EVNT: { if(!lData->iEvnt) { if(!lData->iHandle) lData->iHandle = OpenCamera(lData->iData.UniqueId,lData->iOwner); if(lData->iOwner) { if(lData->iHandle) { // create the info window CEvntWindow* lWindow = new CEvntWindow(*this,lData->iData,lData->iHandle); if(lWindow) { // keep a pointer to it lData->iEvnt = lWindow; // and show the window lWindow->Show(true); } } else { wxMessageBox(L"Sorry, the camera couldn't be open.", L"Ooops ...", wxOK | wxICON_ERROR,this); } } else { wxMessageBox(L"Sorry, the camera is already open", L"Ooops ...", wxOK | wxICON_ERROR,this); } } else lData->iEvnt->Raise(); break; } case ID_SRIO: { if(!lData->iSrio) { if(!lData->iHandle) lData->iHandle = OpenCamera(lData->iData.UniqueId,lData->iOwner); if(lData->iOwner) { if(lData->iHandle) { // create the info window CSerialWindow* lWindow = new CSerialWindow(*this,lData->iData,lData->iHandle); if(lWindow) { // keep a pointer to it lData->iSrio = lWindow; // and show the window lWindow->Show(true); } } else { wxMessageBox(L"Sorry, the camera couldn't be open.", L"Ooops ...", wxOK | wxICON_ERROR,this); } } else { wxMessageBox(L"Sorry, the camera is already open", L"Ooops ...", wxOK | wxICON_ERROR,this); } } else lData->iSrio->Raise(); break; } } // refresh the list of window RefreshWindowsList(); // and force the window to be updated Update(); } else { wxMessageBox(L"You must select a camera first.", L"Ooops ...", wxOK | wxICON_ERROR,this); } }
/* * Method: CMainWindow() * Purpose: constructor * Comments: none */ CMainWindow::CMainWindow() : wxFrame(NULL,dMAINWINDOW,gMainWindowTitle,wxDefaultPosition,wxSize(250,350), wxMINIMIZE_BOX | wxSYSTEM_MENU | wxCAPTION | wxCLOSE_BOX | wxCLIP_CHILDREN) { // Give it an icon SetIcon(wxIcon(SampleViewer)); iSeeking = NULL; iMenuBar = new wxMenuBar; if(iMenuBar) { #ifndef __WXMAC__ wxMenu* lMenu = new wxMenu; if(lMenu) { lMenu->Append(ID_QUIT,L"E&xit"); iMenuBar->Append(lMenu,L"&File"); } iMenuWin = new wxMenu; if(iMenuWin) { iMenuWin->Append(ID_RAISE,L"&Show all"); iMenuWin->Append(ID_CLOSE,L"&Close all"); iMenuWin->AppendSeparator(); iMenuBar->Append(iMenuWin,L"&Windows"); iMenuWin->Enable(ID_RAISE,false); iMenuWin->Enable(ID_CLOSE,false); } iMenuHelp = new wxMenu; if(iMenuHelp) { iMenuHelp->Append(ID_ABOUT,L"&About ..."); iMenuBar->Append(iMenuHelp,L"&Help"); } #endif iMenuHelp = new wxMenu; if(iMenuHelp) { iMenuHelp->Append(wxID_ABOUT,L"&About ..."); iMenuHelp->Append(ID_ABOUT,L"&About ..."); iMenuBar->Append(iMenuHelp,L"&Help"); } SetMenuBar(iMenuBar); CreateStatusBar(); // create the tool barCTreeItemData iToolBar = CreateToolBar(); if(iToolBar) { // fill the toolbar iToolBar->AddTool(ID_INFO,_T("info"),wxBitmap(bitmap1),_T("Information")); iToolBar->AddTool(ID_CTRL,_T("ctrl"),wxBitmap(bitmap2),_T("Controls")); iToolBar->AddTool(ID_LIVE,_T("live"),wxBitmap(bitmap3),_T("Live view")); iToolBar->AddTool(ID_SEEK,_T("seek"),wxBitmap(bitmap7),_T("Seek a camera")); iToolBar->AddTool(ID_EXPO,_T("expo"),wxBitmap(bitmap8),_T("Export camera's setup")); iToolBar->AddTool(ID_EVNT,_T("evnt"),wxBitmap(bitmap9),_T("Events view")); iToolBar->AddTool(ID_SRIO,_T("evnt"),wxBitmap(bitmap10),_T("Serial IO shell")); iToolBar->Realize(); } // creat the cameras tree iTree = new wxTreeCtrl(this,wxID_ANY,wxDefaultPosition,wxDefaultSize,wxTR_HAS_BUTTONS | wxTR_SINGLE); if(iTree) iRoot = iTree->AddRoot(_T("Host")); // append a custom event to simuate a post-on-screen event wxCommandEvent lEvent(dOPENING,GetId()); lEvent.SetEventObject(this); GetEventHandler()->AddPendingEvent(lEvent); } }
bool wxCheckListBox::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result) { // prepare the event // ----------------- wxCommandEvent event(wxEVT_NULL, m_windowId); event.SetEventObject(this); wxEventType eventType = wxEVT_NULL; NMHDR *nmhdr = (NMHDR *)lParam; if ( nmhdr->hwndFrom == GetHwnd() ) { // almost all messages use NM_LISTVIEW NM_LISTVIEW *nmLV = (NM_LISTVIEW *)nmhdr; const int iItem = nmLV->iItem; bool processed = true; switch ( nmhdr->code ) { case LVN_ITEMCHANGED: // we translate this catch all message into more interesting // (and more easy to process) wxWidgets events // first of all, we deal with the state change events only and // only for valid items (item == -1 for the virtual list // control) if ( nmLV->uChanged & LVIF_STATE && iItem != -1 ) { // temp vars for readability const UINT stOld = nmLV->uOldState; const UINT stNew = nmLV->uNewState; // Check image changed if ((stOld & LVIS_STATEIMAGEMASK) != (stNew & LVIS_STATEIMAGEMASK)) { event.SetEventType(wxEVT_CHECKLISTBOX); event.SetInt(IsChecked(iItem)); (void) GetEventHandler()->ProcessEvent(event); } if ( (stNew & LVIS_SELECTED) != (stOld & LVIS_SELECTED) ) { eventType = wxEVT_LISTBOX; event.SetExtraLong( (stNew & LVIS_SELECTED) != 0 ); // is a selection event.SetInt(iItem); } } if ( eventType == wxEVT_NULL ) { // not an interesting event for us return false; } break; default: processed = false; } if ( !processed ) return wxControl::MSWOnNotify(idCtrl, lParam, result); } else { // where did this one come from? return false; } // process the event // ----------------- event.SetEventType(eventType); bool processed = GetEventHandler()->ProcessEvent(event); if ( processed ) *result = 0; return processed; }
bool wxScrollBar::PerformAction(const wxControlAction& action, long numArg, const wxString& strArg) { int thumbOld = m_thumbPos; bool notify = false; // send an event about the change? wxEventType scrollType; // test for thumb move first as these events happen in quick succession if ( action == wxACTION_SCROLL_THUMB_MOVE ) { DoSetThumb(numArg); // VS: we have to force redraw here, otherwise the thumb will lack // behind mouse cursor UpdateThumb(); scrollType = wxEVT_SCROLLWIN_THUMBTRACK; } else if ( action == wxACTION_SCROLL_LINE_UP ) { scrollType = wxEVT_SCROLLWIN_LINEUP; ScrollLines(-1); } else if ( action == wxACTION_SCROLL_LINE_DOWN ) { scrollType = wxEVT_SCROLLWIN_LINEDOWN; ScrollLines(1); } else if ( action == wxACTION_SCROLL_PAGE_UP ) { scrollType = wxEVT_SCROLLWIN_PAGEUP; ScrollPages(-1); } else if ( action == wxACTION_SCROLL_PAGE_DOWN ) { scrollType = wxEVT_SCROLLWIN_PAGEDOWN; ScrollPages(1); } else if ( action == wxACTION_SCROLL_START ) { scrollType = wxEVT_SCROLLWIN_THUMBRELEASE; // anything better? ScrollToStart(); } else if ( action == wxACTION_SCROLL_END ) { scrollType = wxEVT_SCROLLWIN_THUMBRELEASE; // anything better? ScrollToEnd(); } else if ( action == wxACTION_SCROLL_THUMB_DRAG ) { // we won't use it but this line suppresses the compiler // warning about "variable may be used without having been // initialized" scrollType = wxEVT_NULL; } else if ( action == wxACTION_SCROLL_THUMB_RELEASE ) { // always notify about this notify = true; scrollType = wxEVT_SCROLLWIN_THUMBRELEASE; } else return wxControl::PerformAction(action, numArg, strArg); // has scrollbar position changed? bool changed = m_thumbPos != thumbOld; if ( notify || changed ) { if ( IsStandalone() ) { // we should generate EVT_SCROLL events for the standalone // scrollbars and not the EVT_SCROLLWIN ones // // NB: we assume that scrollbar events are sequentially numbered // but this should be ok as other code relies on this as well scrollType += wxEVT_SCROLL_TOP - wxEVT_SCROLLWIN_TOP; wxScrollEvent event(scrollType, this->GetId(), m_thumbPos, IsVertical() ? wxVERTICAL : wxHORIZONTAL); event.SetEventObject(this); GetEventHandler()->ProcessEvent(event); } else // part of the window { wxScrollWinEvent event(scrollType, m_thumbPos, IsVertical() ? wxVERTICAL : wxHORIZONTAL); event.SetEventObject(this); GetParent()->GetEventHandler()->ProcessEvent(event); } } return true; }
int wxTreebook::DoSetSelection(size_t pagePos, int flags) { wxCHECK_MSG( IS_VALID_PAGE(pagePos), wxNOT_FOUND, wxT("invalid page index in wxListbook::DoSetSelection()") ); wxASSERT_MSG( GetPageCount() == DoInternalGetPageCount(), wxT("wxTreebook logic error: m_treeIds and m_pages not in sync!")); wxBookCtrlEvent event(wxEVT_COMMAND_TREEBOOK_PAGE_CHANGING, m_windowId); const int oldSel = m_selection; wxTreeCtrl *tree = GetTreeCtrl(); bool allowed = false; if (flags & SetSelection_SendEvent) { event.SetEventObject(this); event.SetSelection(pagePos); event.SetOldSelection(m_selection); // don't send the event if the old and new pages are the same; do send it // otherwise and be prepared for it to be vetoed allowed = (int)pagePos == m_selection || !GetEventHandler()->ProcessEvent(event) || event.IsAllowed(); } if ( !(flags & SetSelection_SendEvent) || allowed ) { // hide the previously shown page wxTreebookPage * const oldPage = DoGetCurrentPage(); if ( oldPage ) oldPage->Hide(); // then show the new one m_selection = pagePos; wxTreebookPage *page = wxBookCtrlBase::GetPage(m_selection); if ( !page ) { // find the next page suitable to be shown: the first (grand)child // of this one with a non-NULL associated page wxTreeItemId childId = m_treeIds[pagePos]; int actualPagePos = pagePos; while ( !page && childId.IsOk() ) { wxTreeItemIdValue cookie; childId = tree->GetFirstChild( childId, cookie ); if ( childId.IsOk() ) { page = wxBookCtrlBase::GetPage(++actualPagePos); } } m_actualSelection = page ? actualPagePos : m_selection; } if ( page ) page->Show(); tree->SelectItem(DoInternalGetPage(pagePos)); if (flags & SetSelection_SendEvent) { // notify about the (now completed) page change event.SetEventType(wxEVT_COMMAND_TREEBOOK_PAGE_CHANGED); (void)GetEventHandler()->ProcessEvent(event); } } else if ( (flags & SetSelection_SendEvent) && !allowed) // page change vetoed { // tree selection might have already had changed if ( oldSel != wxNOT_FOUND ) tree->SelectItem(DoInternalGetPage(oldSel)); } return oldSel; }
bool FOOTPRINT_EDIT_FRAME::OnHotKey( wxDC* aDC, int aHotKey, const wxPoint& aPosition, EDA_ITEM* aItem ) { if( aHotKey == 0 ) return false; bool blockActive = GetScreen()->m_BlockLocate.GetCommand() != BLOCK_IDLE; BOARD_ITEM* item = GetCurItem(); bool ItemFree = (item == 0) || (item->GetFlags() == 0); wxCommandEvent cmd( wxEVT_COMMAND_MENU_SELECTED ); cmd.SetEventObject( this ); /* Convert lower to upper case (the usual toupper function has problem with non ascii * codes like function keys */ if( (aHotKey >= 'a') && (aHotKey <= 'z') ) aHotKey += 'A' - 'a'; EDA_HOTKEY* HK_Descr = GetDescriptorFromHotkey( aHotKey, common_Hotkey_List ); if( HK_Descr == NULL ) HK_Descr = GetDescriptorFromHotkey( aHotKey, module_edit_Hotkey_List ); if( HK_Descr == NULL ) return false; switch( HK_Descr->m_Idcommand ) { default: case HK_NOT_FOUND: return false; case HK_HELP: // Display Current hotkey list DisplayHotkeyList( this, g_Module_Editor_Hokeys_Descr ); break; case HK_RESET_LOCAL_COORD: // set local (relative) coordinate origin GetScreen()->m_O_Curseur = GetCrossHairPosition(); break; case HK_LEFT_CLICK: OnLeftClick( aDC, aPosition ); break; case HK_LEFT_DCLICK: // Simulate a double left click: generate 2 events OnLeftClick( aDC, aPosition ); OnLeftDClick( aDC, aPosition ); break; case HK_SET_GRID_ORIGIN: SetGridOrigin( GetCrossHairPosition() ); m_canvas->Refresh(); break; case HK_RESET_GRID_ORIGIN: SetGridOrigin( wxPoint(0,0) ); m_canvas->Refresh(); break; case HK_SWITCH_UNITS: cmd.SetId( (g_UserUnit == INCHES) ? ID_TB_OPTIONS_SELECT_UNIT_MM : ID_TB_OPTIONS_SELECT_UNIT_INCH ); GetEventHandler()->ProcessEvent( cmd ); break; case HK_ZOOM_IN: cmd.SetId( ID_POPUP_ZOOM_IN ); GetEventHandler()->ProcessEvent( cmd ); break; case HK_ZOOM_OUT: cmd.SetId( ID_POPUP_ZOOM_OUT ); GetEventHandler()->ProcessEvent( cmd ); break; case HK_ZOOM_REDRAW: cmd.SetId( ID_ZOOM_REDRAW ); GetEventHandler()->ProcessEvent( cmd ); break; case HK_ZOOM_CENTER: cmd.SetId( ID_POPUP_ZOOM_CENTER ); GetEventHandler()->ProcessEvent( cmd ); break; case HK_UNDO: case HK_REDO: if( ItemFree && !blockActive ) { wxCommandEvent event( wxEVT_COMMAND_TOOL_CLICKED, HK_Descr->m_IdMenuEvent ); wxPostEvent( this, event ); } break; case HK_ZOOM_AUTO: cmd.SetId( ID_ZOOM_PAGE ); GetEventHandler()->ProcessEvent( cmd ); break; case HK_EDIT_ITEM: OnHotkeyEditItem( HK_EDIT_ITEM ); break; case HK_DELETE: OnHotkeyDeleteItem( HK_DELETE ); break; case HK_MOVE_ITEM: OnHotkeyMoveItem( HK_MOVE_ITEM ); break; case HK_ROTATE_ITEM: OnHotkeyRotateItem( HK_ROTATE_ITEM ); break; } return true; }
void wxTopLevelWindowMac::DoMoveWindow(int x, int y, int width, int height) { wxMacPortStateHelper help( (GrafPtr) GetWindowPort( (WindowRef) m_macWindow) ) ; wxMacWindowClipper clip (this); int former_x = m_x ; int former_y = m_y ; int former_w = m_width ; int former_h = m_height ; int actualWidth = width; int actualHeight = height; int actualX = x; int actualY = y; if ((m_minWidth != -1) && (actualWidth < m_minWidth)) actualWidth = m_minWidth; if ((m_minHeight != -1) && (actualHeight < m_minHeight)) actualHeight = m_minHeight; if ((m_maxWidth != -1) && (actualWidth > m_maxWidth)) actualWidth = m_maxWidth; if ((m_maxHeight != -1) && (actualHeight > m_maxHeight)) actualHeight = m_maxHeight; bool doMove = false ; bool doResize = false ; if ( actualX != former_x || actualY != former_y ) { doMove = true ; } if ( actualWidth != former_w || actualHeight != former_h ) { doResize = true ; } if ( doMove || doResize ) { m_x = actualX ; m_y = actualY ; if ( doMove ) ::MoveWindow((WindowRef)m_macWindow, m_x, m_y , false); // don't make frontmost m_width = actualWidth ; m_height = actualHeight ; if ( doResize ) ::SizeWindow((WindowRef)m_macWindow, m_width, m_height , true); // the OS takes care of invalidating and erasing the new area so we only have to // take care of refreshing for full repaints if ( doResize && HasFlag(wxFULL_REPAINT_ON_RESIZE) ) Refresh() ; if ( IsKindOf( CLASSINFO( wxFrame ) ) ) { wxFrame* frame = (wxFrame*) this ; #if wxUSE_STATUSBAR frame->PositionStatusBar(); #endif #if wxUSE_TOOLBAR frame->PositionToolBar(); #endif } if ( doMove ) wxWindowMac::MacTopLevelWindowChangedPosition() ; // like this only children will be notified MacRepositionScrollBars() ; if ( doMove ) { wxPoint point(m_x, m_y); wxMoveEvent event(point, m_windowId); event.SetEventObject(this); GetEventHandler()->ProcessEvent(event) ; } if ( doResize ) { MacRepositionScrollBars() ; wxSize size(m_width, m_height); wxSizeEvent event(size, m_windowId); event.SetEventObject(this); GetEventHandler()->ProcessEvent(event); } } }
void wxLayoutWindow::OnMouse(int eventId, wxMouseEvent& event) { wxClientDC dc( this ); PrepareDC( dc ); if ( (eventId != WXLOWIN_MENU_MOUSEMOVE #ifndef __WXMSW__ || m_FocusFollowMode #endif ) && (wxWindow::FindFocus() != this) ) { SetFocus(); } wxPoint findPos; findPos.x = dc.DeviceToLogicalX(event.GetX()); findPos.y = dc.DeviceToLogicalY(event.GetY()); findPos.x -= WXLO_XOFFSET; findPos.y -= WXLO_YOFFSET; if(findPos.x < 0) findPos.x = 0; if(findPos.y < 0) findPos.y = 0; m_ClickPosition = wxPoint(event.GetX(), event.GetY()); // Scroll the window if the mouse is at the end of it: if(m_Selecting && eventId == WXLOWIN_MENU_MOUSEMOVE) { //WXLO_DEBUG(("selecting at : %d/%d", (int) event.GetX(), (int)event.GetY())); int left, top; GetViewStart(&left, &top); wxSize size = GetClientSize(); int xdelta, ydelta; if(event.GetX() < WXLO_SCROLLMARGIN_X) xdelta = -(WXLO_SCROLLMARGIN_X-event.GetX()); else if(event.GetX() > size.x-WXLO_SCROLLMARGIN_X) xdelta = event.GetX()-size.x+WXLO_SCROLLMARGIN_X; else xdelta = 0; if(event.GetY() < WXLO_SCROLLMARGIN_Y) ydelta = -(WXLO_SCROLLMARGIN_Y-event.GetY()); else if(event.GetY() > size.y-WXLO_SCROLLMARGIN_Y) ydelta = event.GetY()-size.y+WXLO_SCROLLMARGIN_Y; else ydelta = 0; //WXLO_DEBUG(("xdelta: %d", (int) xdelta)); if(xdelta != 0 || ydelta != 0) { top += ydelta; if(top < 0) top = 0; left += xdelta; if(left < 0) left = 0; Scroll(left, top); } } wxPoint cursorPos; bool found; wxLayoutObject *obj = m_llist->FindObjectScreen(dc, findPos, &cursorPos, &found); wxLayoutObject::UserData *u = obj ? obj->GetUserData() : NULL; // has the mouse only been moved? switch ( eventId ) { case WXLOWIN_MENU_MOUSEMOVE: { // this variables is used to only erase the message in the status // bar if we had put it there previously - otherwise empting status // bar might be undesirable #if wxUSE_STATUSBAR static bool s_hasPutMessageInStatusBar = false; #endif // wxUSE_STATUSBAR // found is only true if we are really over an object, not just // behind it if(found && u && ! m_Selecting) { if(!m_HandCursor) SetCursor(wxCURSOR_HAND); m_HandCursor = true; #if wxUSE_STATUSBAR if(m_StatusBar && m_StatusFieldLabel != -1) { const wxString &label = u->GetLabel(); if(label.Length()) { m_StatusBar->SetStatusText(label,m_StatusFieldLabel); s_hasPutMessageInStatusBar = true; } } #endif // wxUSE_STATUSBAR } else { if(m_HandCursor) SetCursor(wxCURSOR_IBEAM); m_HandCursor = false; #if wxUSE_STATUSBAR if( m_StatusBar && m_StatusFieldLabel != -1 && s_hasPutMessageInStatusBar ) { m_StatusBar->SetStatusText(wxEmptyString, m_StatusFieldLabel); } #endif // wxUSE_STATUSBAR } } // selecting? if ( event.LeftIsDown() ) { // m_Selecting might not be set if the button got pressed // outside this window, so check for it: if( m_Selecting ) { m_llist->ContinueSelection(cursorPos, m_ClickPosition); RequestUpdate(); // TODO: we don't have to redraw everything! } } if ( u ) { u->DecRef(); u = NULL; } break; case WXLOWIN_MENU_LDOWN: { // always move cursor to mouse click: m_llist->MoveCursorTo(cursorPos); // clicking a mouse removes the selection if ( m_llist->HasSelection() ) { m_llist->DiscardSelection(); m_Selecting = false; RequestUpdate(); // TODO: we don't have to redraw everything! } // Calculate where the top of the visible area is: int x0, y0; GetViewStart(&x0,&y0); int dx, dy; GetScrollPixelsPerUnit(&dx, &dy); x0 *= dx; y0 *= dy; wxPoint offset(-x0+WXLO_XOFFSET, -y0+WXLO_YOFFSET); if(m_CursorVisibility == -1) m_CursorVisibility = 1; #ifdef WXLAYOUT_USE_CARET if ( m_CursorVisibility == 1 ) GetCaret()->Show(); #endif // WXLAYOUT_USE_CARET if(m_CursorVisibility) { // draw a thick cursor for editable windows with focus m_llist->DrawCursor(dc, m_HaveFocus && IsEditable(), offset); } #ifdef __WXGTK__ RequestUpdate(); // RequestUpdate suppresses flicker under GTK #endif // wxGTK // start selection m_llist->StartSelection(wxPoint(-1, -1), m_ClickPosition); m_Selecting = true; } break; case WXLOWIN_MENU_LUP: if ( m_Selecting ) { // end selection at the cursor position corresponding to the // current mouse position, but don´t move cursor there. m_llist->EndSelection(cursorPos,m_ClickPosition); m_Selecting = false; RequestUpdate(); // TODO: we don't have to redraw everything! } break; case WXLOWIN_MENU_MDOWN: Paste(true); break; case WXLOWIN_MENU_DBLCLICK: // select a word under cursor m_llist->MoveCursorTo(cursorPos); m_llist->MoveCursorWord(-1); m_llist->StartSelection(); m_llist->MoveCursorWord(1, false); m_llist->EndSelection(); m_Selecting = false; RequestUpdate(); // TODO: we don't have to redraw everything! break; } // notify about mouse events? if( m_doSendEvents ) { // only do the menu if activated, editable and not on a clickable object if(eventId == WXLOWIN_MENU_RCLICK && IsEditable() && (! obj || u == NULL)) { PopupMenu(m_PopupMenu, m_ClickPosition.x, m_ClickPosition.y); if(u) u->DecRef(); return; } // find the object at this position if(obj) { wxCommandEvent commandEvent(wxEVT_COMMAND_MENU_SELECTED, eventId); commandEvent.SetEventObject( this ); commandEvent.SetClientData((char *)obj); GetEventHandler()->ProcessEvent(commandEvent); } } if( u ) u->DecRef(); }
void wxTopLevelWindowMac::MacCreateRealWindow( const wxString& title, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) { OSStatus err = noErr ; SetName(name); m_windowStyle = style; m_isShown = FALSE; // create frame. Rect theBoundsRect; m_x = (int)pos.x; m_y = (int)pos.y; if ( m_y < 50 ) m_y = 50 ; if ( m_x < 20 ) m_x = 20 ; m_width = WidthDefault(size.x); m_height = HeightDefault(size.y); ::SetRect(&theBoundsRect, m_x, m_y , m_x + m_width, m_y + m_height); // translate the window attributes in the appropriate window class and attributes WindowClass wclass = 0; WindowAttributes attr = kWindowNoAttributes ; if ( HasFlag( wxFRAME_TOOL_WINDOW) ) { if ( HasFlag( wxMINIMIZE_BOX ) || HasFlag( wxMAXIMIZE_BOX ) || HasFlag( wxSYSTEM_MENU ) || HasFlag( wxCAPTION ) || HasFlag(wxTINY_CAPTION_HORIZ) || HasFlag(wxTINY_CAPTION_VERT) ) { wclass = kFloatingWindowClass ; if ( HasFlag(wxTINY_CAPTION_VERT) ) { attr |= kWindowSideTitlebarAttribute ; } } else { #if TARGET_CARBON wclass = kPlainWindowClass ; #else wclass = kFloatingWindowClass ; #endif } } else if ( HasFlag( wxCAPTION ) ) { wclass = kDocumentWindowClass ; } else { if ( HasFlag( wxMINIMIZE_BOX ) || HasFlag( wxMAXIMIZE_BOX ) || HasFlag( wxCLOSE_BOX ) || HasFlag( wxSYSTEM_MENU ) ) { wclass = kDocumentWindowClass ; } else { #if TARGET_CARBON wclass = kPlainWindowClass ; #else wclass = kModalWindowClass ; #endif } } if ( HasFlag( wxMINIMIZE_BOX ) ) { attr |= kWindowCollapseBoxAttribute ; } if ( HasFlag( wxMAXIMIZE_BOX ) ) { attr |= kWindowFullZoomAttribute ; } if ( HasFlag( wxRESIZE_BORDER ) ) { attr |= kWindowResizableAttribute ; } if ( HasFlag( wxCLOSE_BOX) ) { attr |= kWindowCloseBoxAttribute ; } if (UMAGetSystemVersion() >= 0x1000) { //turn on live resizing (OS X only) attr |= kWindowLiveResizeAttribute; } #if TARGET_CARBON #if 0 // having problems right now with that if (HasFlag(wxSTAY_ON_TOP)) wclass = kUtilityWindowClass; #endif #endif //this setup lets us have compositing and non-compositing //windows in the same application. #if UNIVERSAL_INTERFACES_VERSION >= 0x0400 if ( wxTopLevelWindowMac::s_macWindowCompositing ) { attr |= kWindowCompositingAttribute; m_macUsesCompositing = TRUE; } else #endif { m_macUsesCompositing = FALSE; } #if TARGET_CARBON if ( HasFlag(wxFRAME_SHAPED) ) { WindowDefSpec customWindowDefSpec; customWindowDefSpec.defType = kWindowDefProcPtr; customWindowDefSpec.u.defProc = NewWindowDefUPP(wxShapedMacWindowDef); err = ::CreateCustomWindow( &customWindowDefSpec, wclass, attr, &theBoundsRect, (WindowRef*) &m_macWindow); } else #endif { err = ::CreateNewWindow( wclass , attr , &theBoundsRect , (WindowRef*)&m_macWindow ) ; } wxCHECK_RET( err == noErr, wxT("Mac OS error when trying to create new window") ); wxAssociateWinWithMacWindow( (WindowRef) m_macWindow , this ) ; UMASetWTitle( (WindowRef)m_macWindow , title , m_font.GetEncoding() ) ; if ( wxTopLevelWindowMac::s_macWindowCompositing ) { ::GetRootControl( (WindowRef)m_macWindow, (ControlHandle*)&m_macRootControl ) ; } else { ::CreateRootControl( (WindowRef)m_macWindow , (ControlHandle*)&m_macRootControl ) ; } #if TARGET_CARBON InstallStandardEventHandler( GetWindowEventTarget(MAC_WXHWND(m_macWindow)) ) ; InstallWindowEventHandler(MAC_WXHWND(m_macWindow), GetwxMacWindowEventHandlerUPP(), GetEventTypeCount(eventList), eventList, this, (EventHandlerRef *)&m_macEventHandler); #endif m_macFocus = NULL ; #if TARGET_CARBON if ( HasFlag(wxFRAME_SHAPED) ) { // default shape matches the window size wxRegion rgn(0, 0, m_width, m_height); SetShape(rgn); } #endif wxWindowCreateEvent event(this); GetEventHandler()->ProcessEvent(event); }
bool PCB_EDIT_FRAME::OnHotKey( wxDC* aDC, int aHotkeyCode, const wxPoint& aPosition, EDA_ITEM* aItem ) { if( aHotkeyCode == 0 ) return false; bool itemCurrentlyEdited = GetCurItem() && GetCurItem()->GetFlags(); MODULE* module = NULL; int evt_type = 0; //Used to post a wxCommandEvent on demand PCB_SCREEN* screen = GetScreen(); DISPLAY_OPTIONS* displ_opts = (DISPLAY_OPTIONS*)GetDisplayOptions(); /* Convert lower to upper case * (the usual toupper function has problem with non ascii codes like function keys */ if( (aHotkeyCode >= 'a') && (aHotkeyCode <= 'z') ) aHotkeyCode += 'A' - 'a'; EDA_HOTKEY* HK_Descr = GetDescriptorFromHotkey( aHotkeyCode, common_Hotkey_List ); if( HK_Descr == NULL ) HK_Descr = GetDescriptorFromHotkey( aHotkeyCode, board_edit_Hotkey_List ); if( HK_Descr == NULL ) return false; int hk_id = HK_Descr->m_Idcommand; if( (m_RecordingMacros != -1) && !( hk_id > HK_MACRO_ID_BEGIN && hk_id < HK_MACRO_ID_END) ) { MACROS_RECORD macros_record; macros_record.m_HotkeyCode = aHotkeyCode; macros_record.m_Idcommand = HK_Descr->m_Idcommand; macros_record.m_Position = GetNearestGridPosition( aPosition ) - m_Macros[m_RecordingMacros].m_StartPosition; m_Macros[m_RecordingMacros].m_Record.push_back( macros_record ); wxString msg; msg.Printf( _( "Add key [%c] in macro %d" ), aHotkeyCode, m_RecordingMacros ); SetStatusText( msg ); } // Create a wxCommandEvent that will be posted in some hot keys functions wxCommandEvent cmd( wxEVT_COMMAND_MENU_SELECTED ); cmd.SetEventObject( this ); LAYER_NUM ll; switch( hk_id ) { default: case HK_NOT_FOUND: return false; case HK_LEFT_CLICK: OnLeftClick( aDC, aPosition ); break; case HK_LEFT_DCLICK: // Simulate a double left click: generate 2 events OnLeftClick( aDC, aPosition ); OnLeftDClick( aDC, aPosition ); break; case HK_RECORD_MACROS_0: case HK_RECORD_MACROS_1: case HK_RECORD_MACROS_2: case HK_RECORD_MACROS_3: case HK_RECORD_MACROS_4: case HK_RECORD_MACROS_5: case HK_RECORD_MACROS_6: case HK_RECORD_MACROS_7: case HK_RECORD_MACROS_8: case HK_RECORD_MACROS_9: RecordMacros( aDC, hk_id - HK_RECORD_MACROS_0 ); break; case HK_CALL_MACROS_0: case HK_CALL_MACROS_1: case HK_CALL_MACROS_2: case HK_CALL_MACROS_3: case HK_CALL_MACROS_4: case HK_CALL_MACROS_5: case HK_CALL_MACROS_6: case HK_CALL_MACROS_7: case HK_CALL_MACROS_8: case HK_CALL_MACROS_9: CallMacros( aDC, GetCrossHairPosition( false ), hk_id - HK_CALL_MACROS_0 ); break; case HK_SWITCH_TRACK_WIDTH_TO_NEXT: if( GetCanvas()->IsMouseCaptured() ) GetCanvas()->CallMouseCapture( aDC, wxDefaultPosition, false ); if( GetDesignSettings().GetTrackWidthIndex() < GetDesignSettings().m_TrackWidthList.size() - 1 ) GetDesignSettings().SetTrackWidthIndex( GetDesignSettings().GetTrackWidthIndex() + 1 ); else GetDesignSettings().SetTrackWidthIndex( 0 ); if( GetCanvas()->IsMouseCaptured() ) GetCanvas()->CallMouseCapture( aDC, wxDefaultPosition, false ); break; case HK_SWITCH_TRACK_WIDTH_TO_PREVIOUS: if( GetCanvas()->IsMouseCaptured() ) GetCanvas()->CallMouseCapture( aDC, wxDefaultPosition, false ); if( GetDesignSettings().GetTrackWidthIndex() <= 0 ) GetDesignSettings().SetTrackWidthIndex( GetDesignSettings().m_TrackWidthList.size() -1 ); else GetDesignSettings().SetTrackWidthIndex( GetDesignSettings().GetTrackWidthIndex() - 1 ); if( GetCanvas()->IsMouseCaptured() ) GetCanvas()->CallMouseCapture( aDC, wxDefaultPosition, false ); break; case HK_SWITCH_GRID_TO_FASTGRID1: SetFastGrid1(); break; case HK_SWITCH_GRID_TO_FASTGRID2: SetFastGrid2(); break; case HK_SWITCH_GRID_TO_NEXT: SetNextGrid(); break; case HK_SWITCH_GRID_TO_PREVIOUS: SetPrevGrid(); break; case HK_SWITCH_LAYER_TO_PREVIOUS: ll = GetActiveLayer(); if( !IsCopperLayer( ll ) ) break; if( ll == F_Cu ) ll = B_Cu; else if( ll == B_Cu ) ll = ToLAYER_ID( GetBoard()->GetCopperLayerCount() - 2 ); else ll = ll - 1; SwitchLayer( aDC, ToLAYER_ID( ll ) ); break; case HK_SWITCH_LAYER_TO_NEXT: ll = GetActiveLayer(); if( !IsCopperLayer( ll ) ) break; if( ll == B_Cu ) ll = F_Cu; else if( ++ll >= GetBoard()->GetCopperLayerCount() - 1 ) ll = B_Cu; SwitchLayer( aDC, ToLAYER_ID( ll ) ); break; case HK_SWITCH_LAYER_TO_COMPONENT: SwitchLayer( aDC, F_Cu ); break; case HK_SWITCH_LAYER_TO_COPPER: SwitchLayer( aDC, B_Cu ); break; case HK_SWITCH_LAYER_TO_INNER1: SwitchLayer( aDC, In1_Cu ); break; case HK_SWITCH_LAYER_TO_INNER2: SwitchLayer( aDC, In2_Cu ); break; case HK_SWITCH_LAYER_TO_INNER3: SwitchLayer( aDC, In3_Cu ); break; case HK_SWITCH_LAYER_TO_INNER4: SwitchLayer( aDC, In4_Cu ); break; case HK_SWITCH_LAYER_TO_INNER5: SwitchLayer( aDC, In5_Cu ); break; case HK_SWITCH_LAYER_TO_INNER6: SwitchLayer( aDC, In6_Cu ); break; case HK_HELP: // Display Current hotkey list DisplayHotkeyList( this, g_Board_Editor_Hokeys_Descr ); break; case HK_ZOOM_IN: evt_type = ID_POPUP_ZOOM_IN; break; case HK_ZOOM_OUT: evt_type = ID_POPUP_ZOOM_OUT; break; case HK_ZOOM_REDRAW: evt_type = ID_ZOOM_REDRAW; break; case HK_ZOOM_AUTO: evt_type = ID_ZOOM_PAGE; break; case HK_ZOOM_CENTER: evt_type = ID_POPUP_ZOOM_CENTER; break; case HK_ADD_MODULE: evt_type = ID_PCB_MODULE_BUTT; break; case HK_UNDO: case HK_REDO: if( !itemCurrentlyEdited ) { wxCommandEvent event( wxEVT_COMMAND_TOOL_CLICKED, HK_Descr->m_IdMenuEvent ); wxPostEvent( this, event ); } break; case HK_RESET_LOCAL_COORD: // Set the relative coord GetScreen()->m_O_Curseur = GetCrossHairPosition(); break; case HK_SET_GRID_ORIGIN: SetGridOrigin( GetCrossHairPosition() ); OnModify(); // because grid origin is saved in board, show as modified m_canvas->Refresh(); break; case HK_RESET_GRID_ORIGIN: SetGridOrigin( wxPoint( 0,0 ) ); OnModify(); // because grid origin is saved in board, show as modified m_canvas->Refresh(); break; case HK_SWITCH_UNITS: evt_type = (g_UserUnit == INCHES) ? ID_TB_OPTIONS_SELECT_UNIT_MM : ID_TB_OPTIONS_SELECT_UNIT_INCH; break; case HK_SWITCH_TRACK_DISPLAY_MODE: displ_opts->m_DisplayPcbTrackFill = !displ_opts->m_DisplayPcbTrackFill; m_canvas->Refresh(); break; case HK_DELETE: OnHotkeyDeleteItem( aDC ); break; case HK_BACK_SPACE: if( IsCopperLayer( GetActiveLayer() ) ) { if( !itemCurrentlyEdited ) { // no track is currently being edited - select a segment and remove it. // @todo: possibly? pass the HK command code to PcbGeneralLocateAndDisplay() // so it can restrict its search to specific item types. BOARD_ITEM * item = PcbGeneralLocateAndDisplay(); // don't let backspace delete modules!! if( item && item->IsTrack() ) { Delete_Segment( aDC, (TRACK*) item ); SetCurItem( NULL ); } OnModify(); } else if( GetCurItem()->IsTrack() ) { // then an element is being edited - remove the last segment. // simple lines for debugger: TRACK* track = (TRACK*) GetCurItem(); track = Delete_Segment( aDC, track ); SetCurItem( track ); OnModify(); } } break; case HK_GET_AND_MOVE_FOOTPRINT: if( !itemCurrentlyEdited ) evt_type = ID_POPUP_PCB_GET_AND_MOVE_MODULE_REQUEST; break; case HK_FIND_ITEM: if( !itemCurrentlyEdited ) evt_type = ID_FIND_ITEMS; break; case HK_LOAD_BOARD: if( !itemCurrentlyEdited ) evt_type = ID_LOAD_FILE ; break; case HK_SAVE_BOARD: if( !itemCurrentlyEdited ) evt_type = ID_SAVE_BOARD; break; case HK_ADD_MICROVIA: // Place a micro via if a track is in progress if( GetToolId() != ID_TRACK_BUTT ) return true; if( !itemCurrentlyEdited ) // no track in progress: nothing to do break; if( GetCurItem()->Type() != PCB_TRACE_T ) // Should not occur return true; if( !GetCurItem()->IsNew() ) return true; // place micro via and switch layer if( IsMicroViaAcceptable() ) evt_type = ID_POPUP_PCB_PLACE_MICROVIA; break; case HK_ADD_BLIND_BURIED_VIA: case HK_ADD_THROUGH_VIA: // Switch to alternate layer and Place a via if a track is in progress if( GetBoard()->GetDesignSettings().m_BlindBuriedViaAllowed && hk_id == HK_ADD_BLIND_BURIED_VIA ) GetBoard()->GetDesignSettings().m_CurrentViaType = VIA_BLIND_BURIED; else GetBoard()->GetDesignSettings().m_CurrentViaType = VIA_THROUGH; if( !itemCurrentlyEdited ) // no track in progress: switch layer only { Other_Layer_Route( NULL, aDC ); if( displ_opts->m_ContrastModeDisplay ) m_canvas->Refresh(); break; } if( GetToolId() != ID_TRACK_BUTT ) return true; if( GetCurItem()->Type() != PCB_TRACE_T ) return true; if( !GetCurItem()->IsNew() ) return true; evt_type = hk_id == HK_ADD_BLIND_BURIED_VIA ? ID_POPUP_PCB_PLACE_BLIND_BURIED_VIA : ID_POPUP_PCB_PLACE_THROUGH_VIA; break; case HK_SEL_LAYER_AND_ADD_THROUGH_VIA: case HK_SEL_LAYER_AND_ADD_BLIND_BURIED_VIA: if( GetCurItem() == NULL || !GetCurItem()->IsNew() || GetCurItem()->Type() != PCB_TRACE_T ) break; evt_type = hk_id == HK_SEL_LAYER_AND_ADD_BLIND_BURIED_VIA ? ID_POPUP_PCB_SELECT_CU_LAYER_AND_PLACE_BLIND_BURIED_VIA : ID_POPUP_PCB_SELECT_CU_LAYER_AND_PLACE_THROUGH_VIA; break; case HK_SWITCH_TRACK_POSTURE: /* change the position of initial segment when creating new tracks * switch from _/ to -\ . */ evt_type = ID_POPUP_PCB_SWITCH_TRACK_POSTURE ; break; case HK_DRAG_TRACK_KEEP_SLOPE: OnHotkeyMoveItem( HK_DRAG_TRACK_KEEP_SLOPE ); break; case HK_PLACE_ITEM: OnHotkeyPlaceItem( aDC ); break; case HK_ADD_NEW_TRACK: // Start new track, if possible OnHotkeyBeginRoute( aDC ); break; case HK_EDIT_ITEM: // Edit board item OnHotkeyEditItem( HK_EDIT_ITEM ); break; case HK_EDIT_MODULE_WITH_MODEDIT: // Edit module with module editor OnHotkeyEditItem( HK_EDIT_MODULE_WITH_MODEDIT ); break; // Footprint edition: case HK_LOCK_UNLOCK_FOOTPRINT: // toggle module "MODULE_is_LOCKED" status: // get any module, locked or not locked and toggle its locked status if( !itemCurrentlyEdited ) { wxPoint pos = RefPos( true ); module = GetBoard()->GetFootprint( pos, screen->m_Active_Layer, true ); } else if( GetCurItem()->Type() == PCB_MODULE_T ) { module = (MODULE*) GetCurItem(); } if( module ) { SetCurItem( module ); module->SetLocked( !module->IsLocked() ); OnModify(); SetMsgPanel( module ); } break; case HK_DRAG_ITEM: // Start drag module or track segment OnHotkeyMoveItem( HK_DRAG_ITEM ); break; case HK_MOVE_ITEM: // Start move item OnHotkeyMoveItem( HK_MOVE_ITEM ); break; case HK_COPY_ITEM: evt_type = OnHotkeyCopyItem(); break; case HK_ROTATE_ITEM: // Rotation OnHotkeyRotateItem( HK_ROTATE_ITEM ); break; case HK_FLIP_ITEM: OnHotkeyRotateItem( HK_FLIP_ITEM ); break; case HK_MOVE_ITEM_EXACT: case HK_DUPLICATE_ITEM: case HK_DUPLICATE_ITEM_AND_INCREMENT: case HK_CREATE_ARRAY: OnHotkeyDuplicateOrArrayItem( HK_Descr->m_Idcommand ); break; case HK_SWITCH_HIGHCONTRAST_MODE: // switch to high contrast mode and refresh the canvas displ_opts->m_ContrastModeDisplay = !displ_opts->m_ContrastModeDisplay; m_canvas->Refresh(); break; case HK_CANVAS_CAIRO: evt_type = ID_MENU_CANVAS_CAIRO; break; case HK_CANVAS_OPENGL: evt_type = ID_MENU_CANVAS_OPENGL; break; case HK_CANVAS_LEGACY: evt_type = ID_MENU_CANVAS_LEGACY; break; case HK_ZONE_FILL_OR_REFILL: evt_type = ID_POPUP_PCB_FILL_ALL_ZONES; break; case HK_ZONE_REMOVE_FILLED: evt_type = ID_POPUP_PCB_REMOVE_FILLED_AREAS_IN_ALL_ZONES; break; } if( evt_type != 0 ) { wxCommandEvent evt( wxEVT_COMMAND_MENU_SELECTED ); evt.SetEventObject( this ); evt.SetId( evt_type ); GetEventHandler()->ProcessEvent( evt ); } return true; }
void QuickFindBar::OnReplaceEnter(wxCommandEvent& e) { wxUnusedVar(e); wxCommandEvent evt(wxEVT_COMMAND_TOOL_CLICKED, ID_TOOL_REPLACE); GetEventHandler()->AddPendingEvent(evt); }
bool PCB_EDIT_FRAME::OnHotkeyMoveItem( int aIdCommand ) { BOARD_ITEM* item = GetCurItem(); bool itemCurrentlyEdited = item && item->GetFlags(); if( itemCurrentlyEdited ) return false; item = PcbGeneralLocateAndDisplay(); if( item == NULL ) return false; SetCurItem( item ); int evt_type = 0; // Used to post a wxCommandEvent on demand switch( item->Type() ) { case PCB_TRACE_T: case PCB_VIA_T: if( aIdCommand == HK_MOVE_ITEM ) evt_type = ID_POPUP_PCB_MOVE_TRACK_NODE; if( aIdCommand == HK_DRAG_ITEM ) evt_type = ID_POPUP_PCB_DRAG_TRACK_SEGMENT; if( aIdCommand == HK_DRAG_TRACK_KEEP_SLOPE ) evt_type = ID_POPUP_PCB_DRAG_TRACK_SEGMENT_KEEP_SLOPE; break; case PCB_MODULE_T: { if( aIdCommand == HK_MOVE_ITEM ) evt_type = ID_POPUP_PCB_MOVE_MODULE_REQUEST; if( aIdCommand == HK_DRAG_ITEM ) evt_type = ID_POPUP_PCB_DRAG_MODULE_REQUEST; } break; case PCB_PAD_T: // Post MODULE_REQUEST events here to prevent pads // from being moved or dragged by hotkeys. // Process_Special_Functions takes care of finding // the parent. if( aIdCommand == HK_MOVE_ITEM ) evt_type = ID_POPUP_PCB_MOVE_MODULE_REQUEST; if( aIdCommand == HK_DRAG_ITEM ) evt_type = ID_POPUP_PCB_DRAG_MODULE_REQUEST; break; case PCB_TEXT_T: if( aIdCommand == HK_MOVE_ITEM ) evt_type = ID_POPUP_PCB_MOVE_TEXTEPCB_REQUEST; break; case PCB_TARGET_T: if( aIdCommand == HK_MOVE_ITEM ) evt_type = ID_POPUP_PCB_MOVE_MIRE_REQUEST; break; case PCB_ZONE_AREA_T: if( aIdCommand == HK_MOVE_ITEM ) evt_type = ID_POPUP_PCB_MOVE_ZONE_OUTLINES; if( aIdCommand == HK_DRAG_ITEM ) evt_type = ID_POPUP_PCB_DRAG_ZONE_OUTLINE_SEGMENT; break; case PCB_MODULE_TEXT_T: if( aIdCommand == HK_MOVE_ITEM ) evt_type = ID_POPUP_PCB_MOVE_TEXTMODULE_REQUEST; break; case PCB_LINE_T: if( aIdCommand == HK_MOVE_ITEM ) evt_type = ID_POPUP_PCB_MOVE_DRAWING_REQUEST; break; case PCB_DIMENSION_T: if( aIdCommand == HK_MOVE_ITEM ) evt_type = ID_POPUP_PCB_MOVE_TEXT_DIMENSION_REQUEST; break; default: break; } if( evt_type != 0 ) { wxCommandEvent evt( wxEVT_COMMAND_MENU_SELECTED ); evt.SetEventObject( this ); evt.SetId( evt_type ); GetEventHandler()->ProcessEvent( evt ); return true; } return false; }
void wxFrame::GtkOnSize() { // avoid recursions if (m_resizing) return; m_resizing = true; // this shouldn't happen: wxFrame, wxMDIParentFrame and wxMDIChildFrame have m_wxwindow wxASSERT_MSG( (m_wxwindow != NULL), wxT("invalid frame") ); // space occupied by m_frameToolBar and m_frameMenuBar int client_area_x_offset = 0, client_area_y_offset = 0; /* wxMDIChildFrame derives from wxFrame but it _is_ a wxWindow as it uses wxWindow::Create to create it's GTK equivalent. m_mainWidget is only set in wxFrame::Create so it is used to check what kind of frame we have here. if m_mainWidget is NULL it is a wxMDIChildFrame and so we skip the part which handles m_frameMenuBar, m_frameToolBar and (most importantly) m_mainWidget */ int minWidth = GetMinWidth(), minHeight = GetMinHeight(), maxWidth = GetMaxWidth(), maxHeight = GetMaxHeight(); if ((minWidth != -1) && (m_width < minWidth)) m_width = minWidth; if ((minHeight != -1) && (m_height < minHeight)) m_height = minHeight; if ((maxWidth != -1) && (m_width > maxWidth)) m_width = maxWidth; if ((maxHeight != -1) && (m_height > maxHeight)) m_height = maxHeight; if (m_mainWidget) { // TODO // Rewrite this terrible code to using GtkVBox // m_mainWidget holds the menubar, the toolbar and the client // area, which is represented by m_wxwindow. #if wxUSE_MENUS_NATIVE if (m_frameMenuBar && !(m_fsIsShowing && (m_fsSaveFlag & wxFULLSCREEN_NOMENUBAR) != 0)) { if (m_frameMenuBar->IsShown() && !GTK_WIDGET_VISIBLE(m_frameMenuBar->m_widget)) gtk_widget_show( m_frameMenuBar->m_widget ); int xx = m_miniEdge; int yy = m_miniEdge + m_miniTitle; int ww = m_width - 2*m_miniEdge; if (ww < 0) ww = 0; int hh = m_menuBarHeight; if (m_menuBarDetached) hh = wxPLACE_HOLDER; m_frameMenuBar->m_x = xx; m_frameMenuBar->m_y = yy; m_frameMenuBar->m_width = ww; m_frameMenuBar->m_height = hh; gtk_pizza_set_size( GTK_PIZZA(m_mainWidget), m_frameMenuBar->m_widget, xx, yy, ww, hh ); client_area_y_offset += hh; } else { if (m_frameMenuBar) { if (GTK_WIDGET_VISIBLE(m_frameMenuBar->m_widget)) gtk_widget_hide( m_frameMenuBar->m_widget ); } } #endif // wxUSE_MENUS_NATIVE #if wxUSE_TOOLBAR if ((m_frameToolBar) && m_frameToolBar->IsShown() && (m_frameToolBar->m_widget->parent == m_mainWidget)) { int xx = m_miniEdge; int yy = m_miniEdge + m_miniTitle; #if wxUSE_MENUS_NATIVE if (m_frameMenuBar) { if (!m_menuBarDetached) yy += m_menuBarHeight; else yy += wxPLACE_HOLDER; } #endif // wxUSE_MENUS_NATIVE m_frameToolBar->m_x = xx; m_frameToolBar->m_y = yy; // don't change the toolbar's reported height/width int ww, hh; if ( m_frameToolBar->GetWindowStyle() & wxTB_VERTICAL ) { ww = m_toolBarDetached ? wxPLACE_HOLDER : m_frameToolBar->m_width; hh = m_height - 2*m_miniEdge; client_area_x_offset += ww; } else if( m_frameToolBar->HasFlag(wxTB_RIGHT) ) { yy += 2; ww = m_toolBarDetached ? wxPLACE_HOLDER : m_frameToolBar->m_width; xx = GetClientSize().x - 1; hh = m_height - 2*m_miniEdge; if( hh < 0 ) hh = 0; } else if( m_frameToolBar->GetWindowStyle() & wxTB_BOTTOM ) { xx = m_miniEdge; yy = GetClientSize().y; #if wxUSE_MENUS_NATIVE yy += m_menuBarHeight; #endif // wxUSE_MENU_NATIVE m_frameToolBar->m_x = xx; m_frameToolBar->m_y = yy; ww = m_width - 2*m_miniEdge; hh = m_toolBarDetached ? wxPLACE_HOLDER : m_frameToolBar->m_height; } else { ww = m_width - 2*m_miniEdge; hh = m_toolBarDetached ? wxPLACE_HOLDER : m_frameToolBar->m_height; client_area_y_offset += hh; } if (ww < 0) ww = 0; if (hh < 0) hh = 0; gtk_pizza_set_size( GTK_PIZZA(m_mainWidget), m_frameToolBar->m_widget, xx, yy, ww, hh ); } #endif // wxUSE_TOOLBAR int client_x = client_area_x_offset + m_miniEdge; int client_y = client_area_y_offset + m_miniEdge + m_miniTitle; int client_w = m_width - client_area_x_offset - 2*m_miniEdge; int client_h = m_height - client_area_y_offset- 2*m_miniEdge - m_miniTitle; if (client_w < 0) client_w = 0; if (client_h < 0) client_h = 0; gtk_pizza_set_size( GTK_PIZZA(m_mainWidget), m_wxwindow, client_x, client_y, client_w, client_h ); } else { // If there is no m_mainWidget between m_widget and m_wxwindow there // is no need to set the size or position of m_wxwindow. } #if wxUSE_STATUSBAR if (m_frameStatusBar && m_frameStatusBar->IsShown() && !(m_fsIsShowing && (m_fsSaveFlag & wxFULLSCREEN_NOSTATUSBAR) != 0)) { if (!GTK_WIDGET_VISIBLE(m_frameStatusBar->m_widget)) gtk_widget_show( m_frameStatusBar->m_widget ); int xx = 0 + m_miniEdge; int yy = m_height - wxSTATUS_HEIGHT - m_miniEdge - client_area_y_offset; int ww = m_width - 2*m_miniEdge; if (ww < 0) ww = 0; int hh = wxSTATUS_HEIGHT; m_frameStatusBar->m_x = xx; m_frameStatusBar->m_y = yy; m_frameStatusBar->m_width = ww; m_frameStatusBar->m_height = hh; gtk_pizza_set_size( GTK_PIZZA(m_wxwindow), m_frameStatusBar->m_widget, xx, yy, ww, hh ); } else { if (m_frameStatusBar) { if (GTK_WIDGET_VISIBLE(m_frameStatusBar->m_widget)) gtk_widget_hide( m_frameStatusBar->m_widget ); } } #endif // wxUSE_STATUSBAR m_sizeSet = true; // send size event to frame wxSizeEvent event( wxSize(m_width,m_height), GetId() ); event.SetEventObject( this ); GetEventHandler()->ProcessEvent( event ); #if wxUSE_STATUSBAR // send size event to status bar if (m_frameStatusBar) { wxSizeEvent event2( wxSize(m_frameStatusBar->m_width,m_frameStatusBar->m_height), m_frameStatusBar->GetId() ); event2.SetEventObject( m_frameStatusBar ); m_frameStatusBar->GetEventHandler()->ProcessEvent( event2 ); } #endif // wxUSE_STATUSBAR m_resizing = false; }
void wxWindow::SetScrollbar(int orient, int pos, int pageSize, int range, bool refresh) { #if wxUSE_SCROLLBAR wxASSERT_MSG( pageSize <= range, wxT("page size can't be greater than range") ); bool hasClientSizeChanged = false; wxScrollBar *scrollbar = GetScrollbar(orient); if ( range && (pageSize < range) ) { if ( !scrollbar ) { // create it #if wxUSE_TWO_WINDOWS SetInsertIntoMain( true ); #endif scrollbar = new wxWindowScrollBar(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, orient & wxVERTICAL ? wxSB_VERTICAL : wxSB_HORIZONTAL); #if wxUSE_TWO_WINDOWS SetInsertIntoMain( false ); #endif if ( orient & wxVERTICAL ) m_scrollbarVert = scrollbar; else m_scrollbarHorz = scrollbar; // the client area diminished as we created a scrollbar hasClientSizeChanged = true; PositionScrollbars(); } else if ( GetWindowStyle() & wxALWAYS_SHOW_SB ) { // we might have disabled it before scrollbar->Enable(); } scrollbar->SetScrollbar(pos, pageSize, range, pageSize, refresh); } else // no range means no scrollbar { if ( scrollbar ) { // wxALWAYS_SHOW_SB only applies to the vertical scrollbar if ( (orient & wxVERTICAL) && (GetWindowStyle() & wxALWAYS_SHOW_SB) ) { // just disable the scrollbar scrollbar->SetScrollbar(pos, pageSize, range, pageSize, refresh); scrollbar->Disable(); } else // really remove the scrollbar { delete scrollbar; if ( orient & wxVERTICAL ) m_scrollbarVert = NULL; else m_scrollbarHorz = NULL; // the client area increased as we removed a scrollbar hasClientSizeChanged = true; // the size of the remaining scrollbar must be adjusted if ( m_scrollbarHorz || m_scrollbarVert ) { PositionScrollbars(); } } } } // give the window a chance to relayout if ( hasClientSizeChanged ) { #if wxUSE_TWO_WINDOWS wxWindowNative::SetSize( GetSize() ); #else wxSizeEvent event(GetSize()); (void)GetEventHandler()->ProcessEvent(event); #endif } #else wxUnusedVar(orient); wxUnusedVar(pos); wxUnusedVar(pageSize); wxUnusedVar(range); wxUnusedVar(refresh); #endif // wxUSE_SCROLLBAR }
void wxListBoxBase::Command(wxCommandEvent& event) { SetSelection(event.GetInt(), event.GetExtraLong() != 0); (void)GetEventHandler()->ProcessEvent(event); }
void wxFlatNotebook::SetSelection(size_t page) { if(page >= m_windows.GetCount()) return; // Support for disabed tabs if(!m_pages->GetEnabled(page) && m_windows.GetCount() > 1 && !m_bForceSelection) return; if( m_sendPageChangeEvent ) { // Allow the user to veto the selection int oldSelection = GetSelection(); wxFlatNotebookEvent event(wxEVT_COMMAND_FLATNOTEBOOK_PAGE_CHANGING, GetId()); event.SetSelection( (int)page ); event.SetOldSelection( oldSelection ); event.SetEventObject( this ); GetEventHandler()->ProcessEvent(event); if( !event.IsAllowed() ) { return; } } int curSel = m_pages->GetSelection(); // program allows the page change Freeze(); if(curSel >= 0) { // Remove the window from the main sizer m_mainSizer->Detach(m_windows[curSel]); m_windows[curSel]->Hide(); } if(m_windowStyle & wxFNB_BOTTOM) { m_mainSizer->Insert(0, m_windows[page], 1, wxEXPAND); } else { // We leave a space of 1 pixel around the window m_mainSizer->Add(m_windows[page], 1, wxEXPAND); } m_windows[page]->Show(); m_mainSizer->Layout(); Thaw(); if( page != (size_t)m_pages->m_iActivePage ){ //keep the page history m_pages->PushPageHistory(m_pages->m_iActivePage); } m_pages->m_iActivePage = (int)page; m_pages->DoSetSelection(page); if( m_sendPageChangeEvent ) { // Fire event 'Page Changed' wxFlatNotebookEvent event(wxEVT_COMMAND_FLATNOTEBOOK_PAGE_CHANGED, GetId()); event.SetSelection( (int)page ); event.SetEventObject( this ); GetEventHandler()->ProcessEvent(event); } }
void wxSTEditorFindReplacePanel::Send(wxFindDialogEvent& event) { // we copy the data to dialog->GetData() as well m_findReplaceData->SetFlags(event.GetFlags()); m_findReplaceData->SetFindString(event.GetFindString()); if (!event.GetFindString().IsEmpty()) m_findReplaceData->AddFindString(event.GetFindString()); if ( HasFlag(wxFR_REPLACEDIALOG) && (event.GetEventType() == wxEVT_COMMAND_FIND_REPLACE || event.GetEventType() == wxEVT_COMMAND_FIND_REPLACE_ALL) ) { m_findReplaceData->SetReplaceString(event.GetReplaceString()); m_findReplaceData->AddReplaceString(event.GetReplaceString()); } // translate wxEVT_COMMAND_FIND_NEXT to wxEVT_COMMAND_FIND if needed if ( event.GetEventType() == wxEVT_COMMAND_FIND_NEXT ) { if ( m_findReplaceData->GetFindString() != m_lastSearch ) { event.SetEventType(wxEVT_COMMAND_FIND); m_lastSearch = m_findReplaceData->GetFindString(); } } // ExtraLong is the line number pressed in the find all editor // when -1 it means that we want a new find all search if (m_findReplaceData->HasFlag(STE_FR_FINDALL) && m_resultEditor && (event.GetExtraLong() == -1) && ((event.GetEventType() == wxEVT_COMMAND_FIND) || (event.GetEventType() == wxEVT_COMMAND_FIND_NEXT))) { m_findReplaceData->GetFindAllStrings()->Clear(); m_resultEditor->SetReadOnly(false); m_resultEditor->SetText(wxEmptyString); m_resultEditor->SetReadOnly(true); } wxWindow *target = GetTargetWindow(); // first send event to ourselves then to the target if ( !GetEventHandler()->ProcessEvent(event) && target ) { // the event is not propagated upwards to the parent automatically // because the dialog is a top level window, so do it manually as // in 9 cases of 10 the message must be processed by the dialog // owner and not the dialog itself (void)target->GetEventHandler()->ProcessEvent(event); } if (m_findReplaceData->HasFlag(STE_FR_FINDALL) && m_resultEditor && (event.GetExtraLong() == -1) && ((event.GetEventType() == wxEVT_COMMAND_FIND) || (event.GetEventType() == wxEVT_COMMAND_FIND_NEXT))) { wxSTEditor* edit = GetEditor(); if (edit) { m_resultEditor->SetLanguage(edit->GetLanguageId()); } wxArrayString* findAllStrings = m_findReplaceData->GetFindAllStrings(); size_t n, count = findAllStrings->GetCount(); wxString str; for (n = 0; n < count; n++) str += findAllStrings->Item(n).AfterFirst(wxT('|')); m_resultEditor->Clear(); m_resultEditor->ClearAllIndicators(); m_resultEditor->SetReadOnly(false); m_resultEditor->SetText(str); m_resultEditor->SetReadOnly(true); m_resultEditor->Colourise(0, -1); wxSTEditorStyles::GetGlobalEditorStyles().SetEditorStyle( 3, STE_STYLE_STRING, m_resultEditor, false); wxSTEditorStyles::GetGlobalEditorStyles().SetEditorStyle( 4, STE_STYLE_NUMBER, m_resultEditor, false); for (n = 0; n < count; n++) { str = findAllStrings->Item(n).AfterFirst(wxT('|')); int pos = m_resultEditor->PositionFromLine(n); m_resultEditor->StartStyling(pos, 31); int length = str.BeforeFirst(wxT('(')).Length() - 1; m_resultEditor->SetStyling(length, 3); pos = pos + length + 1; m_resultEditor->StartStyling(pos, 31); length = str.AfterFirst(wxT('(')).BeforeFirst(wxT(')')).Length() + 2; m_resultEditor->SetStyling(length, 4); } m_resultEditor->IndicateAllStrings(m_findReplaceData->GetFindString(), m_findReplaceData->GetFlags(), wxSTC_INDIC0_MASK); } UpdateButtons(); }
// kbd handling: notice that we use OnChar() and not OnKeyDown() for // compatibility here - if we used OnKeyDown(), the programs which process // arrows themselves in their OnChar() would never get the message and like // this they always have the priority void wxScrolledWindow::OnChar(wxKeyEvent& event) { int stx, sty, // view origin szx, szy, // view size (total) clix, cliy; // view size (on screen) GetViewStart(&stx, &sty); GetClientSize(&clix, &cliy); GetVirtualSize(&szx, &szy); if( m_xScrollPixelsPerLine ) { clix /= m_xScrollPixelsPerLine; szx /= m_xScrollPixelsPerLine; } else { clix = 0; szx = -1; } if( m_yScrollPixelsPerLine ) { cliy /= m_yScrollPixelsPerLine; szy /= m_yScrollPixelsPerLine; } else { cliy = 0; szy = -1; } int xScrollOld = GetScrollPos(wxHORIZONTAL), yScrollOld = GetScrollPos(wxVERTICAL); int dsty; switch ( event.GetKeyCode() ) { case WXK_PAGEUP: case WXK_PRIOR: dsty = sty - (5 * cliy / 6); Scroll(-1, (dsty == -1) ? 0 : dsty); break; case WXK_PAGEDOWN: case WXK_NEXT: Scroll(-1, sty + (5 * cliy / 6)); break; case WXK_HOME: Scroll(0, event.ControlDown() ? 0 : -1); break; case WXK_END: Scroll(szx - clix, event.ControlDown() ? szy - cliy : -1); break; case WXK_UP: Scroll(-1, sty - 1); break; case WXK_DOWN: Scroll(-1, sty + 1); break; case WXK_LEFT: Scroll(stx - 1, -1); break; case WXK_RIGHT: Scroll(stx + 1, -1); break; default: // not for us event.Skip(); return; } int xScroll = GetScrollPos(wxHORIZONTAL); if ( xScroll != xScrollOld ) { wxScrollWinEvent event(wxEVT_SCROLLWIN_THUMBTRACK, xScroll, wxHORIZONTAL); event.SetEventObject(this); GetEventHandler()->ProcessEvent(event); } int yScroll = GetScrollPos(wxVERTICAL); if ( yScroll != yScrollOld ) { wxScrollWinEvent event(wxEVT_SCROLLWIN_THUMBTRACK, yScroll, wxVERTICAL); event.SetEventObject(this); GetEventHandler()->ProcessEvent(event); } }
bool wxWizardEx::ShowPage(wxWizardPageEx *page, bool goingForward) { wxASSERT_MSG( page != m_page, wxT("this is useless") ); wxSizerFlags flags(1); flags.Border(wxALL, m_border).Expand(); if ( !m_started ) { if ( m_usingSizer ) { m_sizerBmpAndPage->Add(m_sizerPage, flags); // now that our layout is computed correctly, hide the pages // artificially shown in wxWizardSizer::Insert() back again m_sizerPage->HidePages(); } } // we'll use this to decide whether we have to change the label of this // button or not (initially the label is "Next") bool btnLabelWasNext = true; // remember the old bitmap (if any) to compare with the new one later wxBitmap bmpPrev; // check for previous page if ( m_page ) { // send the event to the old page wxWizardExEvent event(wxEVT_WIZARDEX_PAGE_CHANGING, GetId(), goingForward, m_page); if ( m_page->GetEventHandler()->ProcessEvent(event) && !event.IsAllowed() ) { // vetoed by the page return false; } m_page->Hide(); btnLabelWasNext = HasNextPage(m_page); if ( !m_usingSizer ) m_sizerBmpAndPage->Detach(m_page); } // set the new page m_page = page; // is this the end? if ( !m_page ) { // terminate successfully if ( IsModal() ) { EndModal(wxID_OK); } else { SetReturnCode(wxID_OK); Hide(); } // and notify the user code (this is especially useful for modeless // wizards) wxWizardEvent event(wxEVT_WIZARDEX_FINISHED, GetId(), false, 0); (void)GetEventHandler()->ProcessEvent(event); return true; } // position and show the new page (void)m_page->TransferDataToWindow(); if ( m_usingSizer ) { // wxWizardSizer::RecalcSizes wants to be called when m_page changes m_sizerPage->RecalcSizes(); } else // pages are not managed by the sizer { m_sizerBmpAndPage->Add(m_page, flags); m_sizerBmpAndPage->SetItemMinSize(m_page, GetPageSize()); } // and update the buttons state m_btnPrev->Enable(HasPrevPage(m_page)); bool hasNext = HasNextPage(m_page); if ( btnLabelWasNext != hasNext ) { m_btnNext->SetLabel(hasNext ? _("&Next >") : _("&Finish")); } // nothing to do: the label was already correct m_btnNext->SetDefault(); // send the change event to the new page now wxWizardExEvent event(wxEVT_WIZARDEX_PAGE_CHANGED, GetId(), goingForward, m_page); (void)m_page->GetEventHandler()->ProcessEvent(event); // and finally show it m_page->Show(); m_page->SetFocus(); if ( !m_usingSizer ) m_sizerBmpAndPage->Layout(); if ( !m_started ) { m_started = true; if ( wxSystemSettings::GetScreenType() > wxSYS_SCREEN_PDA ) { GetSizer()->SetSizeHints(this); if ( m_posWizard == wxDefaultPosition ) CentreOnScreen(); } } return true; }