d i v i n g i n t o t h e

D i v i n g i n t o t h e s o u r c e c o d e - PowerPoint PPT Presentation

D i v i n g i n t o t h e s o u r c e c o d e c r e a t i n g n e w t o o l s i n K i C a d M a c i e j S u m i s k i F O S D E M @ B r u s s e l s t h 5 F e b


  1. D i v i n g i n t o t h e ● s o u r c e c o d e c r e a t i n g n e w t o o l s i n K i C a d M a c i e j S u m i ń s k i F O S D E M @ B r u s s e l s t h 5 F e b r u a r y 2 0 1 7

  2. A g e n d a ● B u i l d i n g K i C a d ● T o o l F r a m e w o r k ● U s e f u l c l a s s e s ● E x a m p l e ● S u b m i t t i n g p a t c h e s ● D o c u m e n t a t i o n & s u p p o r t

  3. B u i l d i n g K i C a d L i n u x [ i n s t a l l d e p e n d e n c i e s ] git clone https://git.launchpad.net/kicad mkdir kicad/build cd kicad/build cmake .. make

  4. B u i l d i n g K i C a d W i n d o w s [ i n s t a l l M S Y S 2 & d e p e n d e n c i e s ] git clone https://github.com/Alexpux/MINGW-packages cd MinGW-packages/mingw-w64-kicad-git makepkg-mingw -is

  5. T o o l F r a m e w o r k V i e w V i e w ( G A L , V I E W , P A I N T E R ) ( G A L , V I E W , P A I N T E R ) T o o l F r a m e w o r k T o o l F r a m e w o r k ( T O O L , T O O L _ M A N A G E R ) ( T O O L , T O O L _ M A N A G E R ) d r a w s m o d i fj e s M o d e l M o d e l ( B O A R D , B O A R D _ I T E M ) ( B O A R D , B O A R D _ I T E M )

  6. T o o l F r a m e w o r k NEW_TOOL::NEW_TOOL() : class NEW_TOOL : public PCB_TOOL PCB_TOOL( “pcbnew.ToolName” ) { { public: // initialize variables NEW_TOOL(); } ~NEW_TOOL(); NEW_TOOL::~NEW_TOOL() void Reset( RESET_REASON aReason ); { bool Init(); // deinitialize variables } void SetTransitions(); private: int eventHandler( const TOOL_EVENT& aEvent ); };

  7. T o o l F r a m e w o r k NEW_TOOL::Reset( ... ) class NEW_TOOL : public PCB_TOOL { { switch( aReason ) public: { NEW_TOOL(); case RUN: ... ~NEW_TOOL(); case MODEL_RELOAD: void Reset( RESET_REASON aReason ); ... bool Init(); case GAL_SWITCH: ... void SetTransitions(); } } private: int eventHandler( const TOOL_EVENT& aEvent ); };

  8. T o o l F r a m e w o r k NEW_TOOL::Init() class NEW_TOOL : public PCB_TOOL { { // one-time initialization public: // when other tools are also NEW_TOOL(); // initialized, e.g. adding menus } ~NEW_TOOL(); void Reset( RESET_REASON aReason ); bool Init(); void SetTransitions(); private: int eventHandler( const TOOL_EVENT& aEvent ); };

  9. T o o l F r a m e w o r k class NEW_TOOL : public PCB_TOOL NEW_TOOL::SetTransitions() { { // set event handlers public: Go( &NEW_TOOL::eventHandler, eventA ); } NEW_TOOL(); ~NEW_TOOL(); void Reset( RESET_REASON aReason ); bool Init(); void SetTransitions(); private: int eventHandler( const TOOL_EVENT& aEvent ); };

  10. T o o l F r a m e w o r k class NEW_TOOL : public PCB_TOOL NEW_TOOL::eventHandler( ... ) { { // single action handler public: // execute an action and finish selectedItem->SetPosition( wxPoint( 0, 0 ) ); NEW_TOOL(); } ~NEW_TOOL(); void Reset( RESET_REASON aReason ); bool Init(); void SetTransitions(); private: int eventHandler( const TOOL_EVENT& aEvent ); };

  11. T o o l F r a m e w o r k class NEW_TOOL : public PCB_TOOL NEW_TOOL::eventHandler( ... ) { { // single action handler public: // execute an action and finish selectedItem->SetPosition( wxPoint( 0, 0 ) ); NEW_TOOL(); } ~NEW_TOOL(); void Reset( RESET_REASON aReason ); bool Init(); void SetTransitions(); NEW_TOOL::eventHandler( ... ) { // interactive tool private: while( OPT_TOOL_EVENT evt = Wait() ) int eventHandler( const TOOL_EVENT& aEvent ); { }; if( evt->IsClick( BUT_LEFT ) ... else if( evt->IsDrag( BUT_LEFT ) ... } }

  12. T o o l F r a m e w o r k ● A d d t h e n e w fj l e t o p c b n e w / C M a k e L i s t s . t x t ● A d d t o p c b n e w / t o o l s / t o o l s _ c o m m o n . c p p : #include <tools/new_tool.h> void registerAllTools( TOOL_MANAGER* aToolManager ) { … aToolManager->RegisterTool( new NEW_TOOL ); … }

  13. U s e f u l c l a s s e s : m o d e l E D A _ I T E M B O A R D _ I T E M ● B O A R D _ C O N N E C T E D _ I T E M – D _ P A D – T R A C K – V I A – Z O N E _ C O N T A I N E R ● B O A R D _ I T E M _ C O N T A I N E R – B O A R D – M O D U L E ● D R A W S E G M E N T ● N E T I N F O _ I T E M ● T E X T E _ M O D U L E ● T E X T E _ P C B

  14. U s e f u l c l a s s e s : w i n d o w s

  15. U s e f u l c l a s s e s : i n t r o d u c i n g c h a n g e s BOARD_COMMIT commit( frame ); commit.Add( new TRACK( … ) ) commit.Modify( module ); // saves the state // perform module modifications commit.Remove( drawing ); commit.Push( “Updated board” ); c r e a t e u n d o e n t r y u p d a t e m o d e l , v i e w , r a t s n e s t

  16. U s e f u l c l a s s e s : a c t i o n s TOOL_ACTION flip( "pcbnew.InteractiveEdit.flip", AS_GLOBAL, ‘F’, _( "Flip" ), _( "Flips selected item(s)" ), swap_layer_xpm );

  17. U s e f u l c l a s s e s : m a n a g i n g t o o l s TOOL_MANAGER ● InvokeTool() i n t e r a c t w i t h o t h e r t o o l s ● GetTool() ● RunAction() ● GetView() a c c e s s e s s e n t i a l o b j e c t s ● GetModel() ● GetEditFrame()

  18. E x a m p l e : f a n o u t t o o l

  19. E x a m p l e : f a n o u t t o o l

  20. E x a m p l e : f a n o u t t o o l

  21. / * c o d e & s h o r t d e m o * / g i t c l o n e - b f a n o u t \ h t t p s : / / g i t . l a u n c h p a d . n e t / ~ o r s o n m m z / k i c a d

  22. M o r e e x a m p l e s . . . k i c a d - s r c / p c b n e w / t o o l s : ● P L A C E M E N T _ T O O L ● Z O O M _ T O O L ● P C B _ E D I T O R _ C O N T R O L

  23. S u b m i t t i n g p a t c h e s ● C o d e f o r m a t t i n g ● S i n g l e p a t c h e s : e - m a i l o n d e v e l o p e r ’ s m a i l i n g l i s t ● L a r g e b a t c h : m e r g e r e q u e s t o n L a u n c h p a d

  24. D o c u m e n t a t i o n & s u p p o r t ● O ffj c i a l K i C a d w e b p a g e h t t p : / / k i c a d - p c b . o r g / c o n t r i b u t e / d e v e l o p e r s / ● T o o l F r a m e w o r k t u t o r i a l h t t p : / / k i c a d . r e a d t h e d o c s . i o / e n / l a t e s t / D o c u m e n t a t i o n / d e v e l o p m e n t / t o o l - f r a m e w o r k ● K i C a d d e v e l o p e r m a i l i n g l i s t h t t p s : / / l a u n c h p a d . n e t / ~ k i c a d - d e v e l o p e r s ● # k i c a d @ f r e e n o d e . n e t

  25. Q u e s t i o n s ?

Recommend


More recommend