void EDA_DRAW_FRAME::UseGalCanvas() { KIGFX::GAL* gal = GetGalCanvas()->GetGAL(); // Set up grid settings gal->SetGridVisibility( IsGridVisible() ); gal->SetGridSize( VECTOR2D( GetScreen()->GetGridSize() ) ); gal->SetGridOrigin( VECTOR2D( GetGridOrigin() ) ); // Transfer EDA_DRAW_PANEL settings KIGFX::VIEW_CONTROLS* viewControls = GetGalCanvas()->GetViewControls(); viewControls->EnableCursorWarping( !m_canvas->GetEnableZoomNoCenter() ); viewControls->EnableMousewheelPan( m_canvas->GetEnableMousewheelPan() ); viewControls->EnableAutoPan( m_canvas->GetEnableAutoPan() ); m_canvas->SetEvtHandlerEnabled( false ); GetGalCanvas()->SetEvtHandlerEnabled( true ); GetGalCanvas()->StartDrawing(); // Switch panes // JEY TODO: drop down to a single pane.... m_auimgr.GetPane( "DrawFrame" ).Show( false ); m_auimgr.GetPane( "DrawFrameGal" ).Show( true ); m_auimgr.Update(); // Reset current tool on switch(); SetNoToolSelected(); }
void LIB_EDIT_FRAME::OnExportBody( wxCommandEvent& aEvent ) { m_toolManager->DeactivateTool(); SetToolID( ID_LIBEDIT_EXPORT_BODY_BUTT, GetGalCanvas()->GetDefaultCursor(), _( "Export" ) ); SaveOneSymbol(); SetNoToolSelected(); m_canvas->SetIgnoreMouseEvents( false ); }
void EDA_DRAW_FRAME::UseGalCanvas( bool aEnable ) { KIGFX::VIEW* view = GetGalCanvas()->GetView(); KIGFX::GAL* gal = GetGalCanvas()->GetGAL(); // Display the same view after canvas switching if( aEnable ) { // Switch to GAL renderer from legacy if( !m_galCanvasActive ) { // Set up viewport double zoomFactor = gal->GetWorldScale() / gal->GetZoomFactor(); double zoom = 1.0 / ( zoomFactor * m_canvas->GetZoom() ); view->SetScale( zoom ); view->SetCenter( VECTOR2D( m_canvas->GetScreenCenterLogicalPosition() ) ); } // Set up grid settings gal->SetGridVisibility( IsGridVisible() ); gal->SetGridSize( VECTOR2D( GetScreen()->GetGridSize() ) ); gal->SetGridOrigin( VECTOR2D( GetGridOrigin() ) ); // Transfer EDA_DRAW_PANEL settings GetGalCanvas()->GetViewControls()->EnableCursorWarping( !m_canvas->GetEnableZoomNoCenter() ); GetGalCanvas()->GetViewControls()->EnableMousewheelPan( m_canvas->GetEnableMousewheelPan() ); GetGalCanvas()->GetViewControls()->EnableAutoPan( m_canvas->GetEnableAutoPan() ); } else if( m_galCanvasActive ) { // Switch to legacy renderer from GAL double zoomFactor = gal->GetWorldScale() / gal->GetZoomFactor(); // TODO replace it with EDA_DRAW_PANEL_GAL::GetLegacyZoom m_canvas->SetZoom( 1.0 / ( zoomFactor * view->GetScale() ) ); VECTOR2D center = view->GetCenter(); AdjustScrollBars( wxPoint( center.x, center.y ) ); } m_canvas->SetEvtHandlerEnabled( !aEnable ); GetGalCanvas()->SetEvtHandlerEnabled( aEnable ); // Switch panes m_auimgr.GetPane( wxT( "DrawFrame" ) ).Show( !aEnable ); m_auimgr.GetPane( wxT( "DrawFrameGal" ) ).Show( aEnable ); m_auimgr.Update(); // Reset current tool on switch(); SetNoToolSelected(); m_galCanvasActive = aEnable; }
void LIB_EDIT_FRAME::OnLeftClick( wxDC* DC, const wxPoint& aPosition ) { LIB_ITEM* item = GetDrawItem(); bool item_in_edit = item && item->InEditMode(); bool no_item_edited = !item_in_edit; LIB_PART* part = GetCurPart(); if( !part ) // No component loaded ! return; if( ( GetToolId() == ID_NO_TOOL_SELECTED ) && no_item_edited ) { item = LocateItemUsingCursor( aPosition ); if( item ) { MSG_PANEL_ITEMS items; item->GetMsgPanelInfo( items ); SetMsgPanel( items ); } else { DisplayCmpDoc(); if( m_canvas->GetAbortRequest() ) m_canvas->SetAbortRequest( false ); } } switch( GetToolId() ) { case ID_ZOOM_SELECTION: break; case ID_NO_TOOL_SELECTED: // If an item is currently in edit, finish edit if( item_in_edit ) { switch( item->Type() ) { case LIB_PIN_T: PlacePin(); break; default: EndDrawGraphicItem( DC ); break; } } break; case ID_LIBEDIT_PIN_BUTT: if( no_item_edited ) CreatePin( DC ); else PlacePin(); break; case ID_LIBEDIT_BODY_LINE_BUTT: case ID_LIBEDIT_BODY_ARC_BUTT: case ID_LIBEDIT_BODY_CIRCLE_BUTT: case ID_LIBEDIT_BODY_RECT_BUTT: case ID_LIBEDIT_BODY_TEXT_BUTT: if( no_item_edited ) SetDrawItem( CreateGraphicItem( part, DC ) ); else if( item ) { if( item->IsNew() ) GraphicItemBeginDraw( DC ); else EndDrawGraphicItem( DC ); } break; case ID_LIBEDIT_DELETE_ITEM_BUTT: item = LocateItemUsingCursor( aPosition ); if( item ) { deleteItem( DC, item ); } else { DisplayCmpDoc(); if( m_canvas->GetAbortRequest() ) m_canvas->SetAbortRequest( false ); } break; case ID_LIBEDIT_ANCHOR_ITEM_BUTT: SaveCopyInUndoList( part ); PlaceAnchor(); SetNoToolSelected(); break; default: wxFAIL_MSG( wxString::Format( wxT( "Unhandled command ID %d" ), GetToolId() ) ); SetNoToolSelected(); break; } }
/* Handles the selection of tools, menu, and popup menu commands. */ void PL_EDITOR_FRAME::Process_Special_Functions( wxCommandEvent& event ) { int id = event.GetId(); int idx; wxString msg; WORKSHEET_LAYOUT& pglayout = WORKSHEET_LAYOUT::GetTheInstance(); WORKSHEET_DATAITEM* item = NULL; wxCommandEvent cmd( wxEVT_COMMAND_MENU_SELECTED ); cmd.SetEventObject( this ); switch( id ) { case ID_NO_TOOL_SELECTED: SetNoToolSelected(); break; case ID_MENU_ZOOM_SELECTION: case ID_ZOOM_SELECTION: // This tool is located on the main toolbar: switch it on or off on click if( GetToolId() != ID_ZOOM_SELECTION ) SetToolID( ID_ZOOM_SELECTION, wxCURSOR_MAGNIFIER, _( "Zoom to selection" ) ); else SetNoToolSelected(); break; case ID_SELECT_PAGE_NUMBER: m_canvas->Refresh(); break; case ID_SHEET_SET: { DIALOG_PAGES_SETTINGS dlg( this ); dlg.SetWksFileName( GetCurrFileName() ); dlg.EnableWksFileNamePicker( false ); dlg.ShowModal(); cmd.SetId( ID_ZOOM_PAGE ); wxPostEvent( this, cmd ); } break; case ID_POPUP_CANCEL_CURRENT_COMMAND: if( m_canvas->IsMouseCaptured() ) { m_canvas->EndMouseCapture(); SetToolID( GetToolId(), m_canvas->GetCurrentCursor(), wxEmptyString ); } else { SetNoToolSelected(); } break; case ID_POPUP_DESIGN_TREE_ITEM_DELETE: case ID_POPUP_ITEM_DELETE: case wxID_CUT: // Delete item, and select the previous item item = m_treePagelayout->GetPageLayoutSelectedItem(); if( item == NULL ) break; SaveCopyInUndoList(); idx = pglayout.GetItemIndex( item ); pglayout.Remove( item ); RebuildDesignTree(); if( id == ID_POPUP_DESIGN_TREE_ITEM_DELETE ) { item = pglayout.GetItem( (unsigned) (idx-1) ); if( item ) m_treePagelayout->SelectCell( item ); } item = NULL; OnModify(); m_canvas->Refresh(); break; case ID_POPUP_ITEM_ADD_LINE: SaveCopyInUndoList(); idx = m_treePagelayout->GetSelectedItemIndex(); item = AddPageLayoutItem( WORKSHEET_DATAITEM::WS_SEGMENT, idx ); if( InvokeDialogNewItem( this, item ) == wxID_CANCEL ) { RemoveLastCommandInUndoList(); pglayout.Remove( item ); RebuildDesignTree(); item = NULL; } else { // Put the new item in move mode, after putting the cursor // on the start point: wxPoint position = item->GetStartPosUi(); SetCrossHairPosition( position, false ); position = GetCrossHairPosition(); if( m_canvas->IsPointOnDisplay( position ) ) m_canvas->MoveCursorToCrossHair(); else RedrawScreen( position, true ); item->SetFlags( NEW_ITEM ); MoveItem( item ); } break; case ID_POPUP_ITEM_ADD_RECT: SaveCopyInUndoList(); idx = m_treePagelayout->GetSelectedItemIndex(); item = AddPageLayoutItem( WORKSHEET_DATAITEM::WS_RECT, idx ); if( InvokeDialogNewItem( this, item ) == wxID_CANCEL ) { RemoveLastCommandInUndoList(); pglayout.Remove( item ); RebuildDesignTree(); item = NULL; } else { // Put the new item in move mode, after putting the cursor // on the start point: wxPoint position = item->GetStartPosUi(); SetCrossHairPosition( position, false ); position = GetCrossHairPosition(); if( m_canvas->IsPointOnDisplay( position ) ) m_canvas->MoveCursorToCrossHair(); else RedrawScreen( position, true ); item->SetFlags( NEW_ITEM ); MoveItem( item ); } break; case ID_POPUP_ITEM_ADD_TEXT: SaveCopyInUndoList(); idx = m_treePagelayout->GetSelectedItemIndex(); item = AddPageLayoutItem( WORKSHEET_DATAITEM::WS_TEXT, idx ); if( InvokeDialogNewItem( this, item ) == wxID_CANCEL ) { RemoveLastCommandInUndoList(); pglayout.Remove( item ); RebuildDesignTree(); item = NULL; } else { // Put the new text in move mode: item->SetFlags( NEW_ITEM | LOCATE_STARTPOINT ); MoveItem( item ); } break; case ID_POPUP_ITEM_ADD_BITMAP: SaveCopyInUndoList(); idx = m_treePagelayout->GetSelectedItemIndex(); item = AddPageLayoutItem( WORKSHEET_DATAITEM::WS_BITMAP, idx ); if( item && InvokeDialogNewItem( this, item ) == wxID_CANCEL ) { RemoveLastCommandInUndoList(); pglayout.Remove( item ); RebuildDesignTree(); item = NULL; } if( item ) { // Put the new text in move mode: item->SetFlags( NEW_ITEM | LOCATE_STARTPOINT ); MoveItem( item ); } break; case ID_POPUP_ITEM_APPEND_PAGE_LAYOUT: cmd.SetId( ID_APPEND_DESCR_FILE ); wxPostEvent( this, cmd ); break; case ID_POPUP_ITEM_PLACE: item = GetScreen()->GetCurItem(); PlaceItem( item ); break; case ID_POPUP_ITEM_PLACE_CANCEL: if( m_canvas->IsMouseCaptured() ) m_canvas->EndMouseCapture(); break; case ID_POPUP_ITEM_MOVE_START_POINT: item = m_treePagelayout->GetPageLayoutSelectedItem(); // Ensure flags are properly set item->ClearFlags( LOCATE_ENDPOINT ); item->SetFlags( LOCATE_STARTPOINT ); MoveItem( item ); break; case ID_POPUP_ITEM_MOVE_END_POINT: item = m_treePagelayout->GetPageLayoutSelectedItem(); // Ensure flags are properly set item->ClearFlags( LOCATE_STARTPOINT ); item->SetFlags( LOCATE_ENDPOINT ); MoveItem( item ); break; case ID_POPUP_ITEM_MOVE: item = m_treePagelayout->GetPageLayoutSelectedItem(); item->ClearFlags( LOCATE_ENDPOINT|LOCATE_STARTPOINT ); MoveItem( item ); break; default: wxMessageBox( wxT( "PL_EDITOR_FRAME::Process_Special_Functions error" ) ); break; } if( item ) { OnModify(); m_propertiesPagelayout->CopyPrmsFromItemToPanel( item ); m_treePagelayout->SelectCell( item ); } }