From 1fc0113b0684a09a3ff39ed3dbfac765673dee1f Mon Sep 17 00:00:00 2001 From: Maciej Suminski Date: Tue, 18 Jun 2013 17:01:23 +0200 Subject: [PATCH] Removed unnecessary casting from VIEW_ITEM to EDA_ITEM. Added Type() function to VIEW_ITEM. --- common/view/view.cpp | 8 ++-- include/base_struct.h | 93 -------------------------------------- include/painter.h | 3 +- include/view/view_item.h | 96 ++++++++++++++++++++++++++++++++++++++++ pcbnew/pcb_painter.cpp | 2 +- pcbnew/pcb_painter.h | 2 +- 6 files changed, 104 insertions(+), 100 deletions(-) diff --git a/common/view/view.cpp b/common/view/view.cpp index 33f83527f3..680ae1e719 100644 --- a/common/view/view.cpp +++ b/common/view/view.cpp @@ -199,7 +199,7 @@ double VIEW::ToScreen( double aCoord, bool aAbsolute ) const void VIEW::CopySettings( const VIEW* aOtherView ) { - // FIXME + wxASSERT_MSG( false, wxT( "This is not implemented" ) ); } @@ -249,7 +249,7 @@ void VIEW::SetViewport( const BOX2D& aViewport, bool aKeepAspect ) void VIEW::SetMirror( bool aMirrorX, bool aMirrorY ) { - // FIXME + wxASSERT_MSG( false, wxT( "This is not implemented" ) ); } @@ -381,13 +381,13 @@ struct VIEW::drawItem { group = gal->BeginGroup(); aItem->setGroup( currentLayer, group ); - view->m_painter->Draw( static_cast( aItem ), currentLayer ); + view->m_painter->Draw( aItem, currentLayer ); gal->EndGroup(); } } else if( aItem->ViewIsVisible() ) { - view->m_painter->Draw( static_cast( aItem ), currentLayer ); + view->m_painter->Draw( aItem, currentLayer ); } } diff --git a/include/base_struct.h b/include/base_struct.h index 0cc366e8da..ef4c299914 100644 --- a/include/base_struct.h +++ b/include/base_struct.h @@ -47,99 +47,6 @@ extern std::ostream& operator <<( std::ostream& out, const wxPoint& pt ); #endif -/** - * Enum KICAD_T - * is the set of class identification values, stored in EDA_ITEM::m_StructType - */ -enum KICAD_T { - NOT_USED = -1, ///< the 3d code uses this value - - EOT = 0, ///< search types array terminator (End Of Types) - - TYPE_NOT_INIT = 0, - PCB_T, - SCREEN_T, ///< not really an item, used to identify a screen - - // Items in pcb - PCB_MODULE_T, ///< class MODULE, a footprint - PCB_PAD_T, ///< class D_PAD, a pad in a footprint - PCB_LINE_T, ///< class DRAWSEGMENT, a segment not on copper layers - PCB_TEXT_T, ///< class TEXTE_PCB, text on a layer - PCB_MODULE_TEXT_T, ///< class TEXTE_MODULE, text in a footprint - PCB_MODULE_EDGE_T, ///< class EDGE_MODULE, a footprint edge - PCB_TRACE_T, ///< class TRACKE, a track segment (segment on a copper layer) - PCB_VIA_T, ///< class SEGVIA, a via (like a track segment on a copper layer) - PCB_ZONE_T, ///< class SEGZONE, a segment used to fill a zone area (segment on a - ///< copper layer) - PCB_MARKER_T, ///< class MARKER_PCB, a marker used to show something - PCB_DIMENSION_T, ///< class DIMENSION, a dimension (graphic item) - PCB_TARGET_T, ///< class PCB_TARGET, a target (graphic item) - PCB_ZONE_AREA_T, ///< class ZONE_CONTAINER, a zone area - PCB_ITEM_LIST_T, ///< class BOARD_ITEM_LIST, a list of board items - - // Schematic draw Items. The order of these items effects the sort order. - // It is currently ordered to mimic the old Eeschema locate behavior where - // the smallest item is the selected item. - SCH_MARKER_T, - SCH_JUNCTION_T, - SCH_NO_CONNECT_T, - SCH_BUS_WIRE_ENTRY_T, - SCH_BUS_BUS_ENTRY_T, - SCH_LINE_T, - SCH_BITMAP_T, - SCH_TEXT_T, - SCH_LABEL_T, - SCH_GLOBAL_LABEL_T, - SCH_HIERARCHICAL_LABEL_T, - SCH_FIELD_T, - SCH_COMPONENT_T, - SCH_SHEET_PIN_T, - SCH_SHEET_T, - - // Be prudent with these 3 types: - // they should be used only to locate a specific field type - // among SCH_FIELD_T items types - SCH_FIELD_LOCATE_REFERENCE_T, - SCH_FIELD_LOCATE_VALUE_T, - SCH_FIELD_LOCATE_FOOTPRINT_T, - - // General - SCH_SCREEN_T, - - /* - * Draw items in library component. - * - * The order of these items effects the sort order for items inside the - * "DRAW/ENDDRAW" section of the component definition in a library file. - * If you add a new draw item, type, please make sure you add it so the - * sort order is logical. - */ - LIB_COMPONENT_T, - LIB_ALIAS_T, - LIB_ARC_T, - LIB_CIRCLE_T, - LIB_TEXT_T, - LIB_RECTANGLE_T, - LIB_POLYLINE_T, - LIB_BEZIER_T, - LIB_PIN_T, - - /* - * Fields are not saved inside the "DRAW/ENDDRAW". Add new draw item - * types before this line. - */ - LIB_FIELD_T, - - /* - * For GerbView: items type: - */ - TYPE_GERBER_DRAW_ITEM, - - // End value - MAX_STRUCT_TYPE_ID -}; - - /** * Enum FILL_T * is the set of fill types used in plotting or drawing enclosed areas. diff --git a/include/painter.h b/include/painter.h index a9e9dc947a..d043dff2c8 100644 --- a/include/painter.h +++ b/include/painter.h @@ -41,6 +41,7 @@ namespace KiGfx { class GAL; class STROKE_FONT; +class VIEW_ITEM; /** * Class RENDER_SETTINGS @@ -205,7 +206,7 @@ public: * may know what to draw (eg. for pads there are separate layers for holes, because they * have other dimensions then the pad itself. */ - virtual bool Draw( const EDA_ITEM* aItem, int aLayer ) = 0; + virtual bool Draw( const VIEW_ITEM* aItem, int aLayer ) = 0; protected: diff --git a/include/view/view_item.h b/include/view/view_item.h index 55d7df7080..ffe7fe700f 100644 --- a/include/view/view_item.h +++ b/include/view/view_item.h @@ -34,6 +34,98 @@ #include +/** + * Enum KICAD_T + * is the set of class identification values, stored in VIEW_ITEM::m_StructType + */ +enum KICAD_T { + NOT_USED = -1, ///< the 3d code uses this value + + EOT = 0, ///< search types array terminator (End Of Types) + + TYPE_NOT_INIT = 0, + PCB_T, + SCREEN_T, ///< not really an item, used to identify a screen + + // Items in pcb + PCB_MODULE_T, ///< class MODULE, a footprint + PCB_PAD_T, ///< class D_PAD, a pad in a footprint + PCB_LINE_T, ///< class DRAWSEGMENT, a segment not on copper layers + PCB_TEXT_T, ///< class TEXTE_PCB, text on a layer + PCB_MODULE_TEXT_T, ///< class TEXTE_MODULE, text in a footprint + PCB_MODULE_EDGE_T, ///< class EDGE_MODULE, a footprint edge + PCB_TRACE_T, ///< class TRACKE, a track segment (segment on a copper layer) + PCB_VIA_T, ///< class SEGVIA, a via (like a track segment on a copper layer) + PCB_ZONE_T, ///< class SEGZONE, a segment used to fill a zone area (segment on a + ///< copper layer) + PCB_MARKER_T, ///< class MARKER_PCB, a marker used to show something + PCB_DIMENSION_T, ///< class DIMENSION, a dimension (graphic item) + PCB_TARGET_T, ///< class PCB_TARGET, a target (graphic item) + PCB_ZONE_AREA_T, ///< class ZONE_CONTAINER, a zone area + PCB_ITEM_LIST_T, ///< class BOARD_ITEM_LIST, a list of board items + + // Schematic draw Items. The order of these items effects the sort order. + // It is currently ordered to mimic the old Eeschema locate behavior where + // the smallest item is the selected item. + SCH_MARKER_T, + SCH_JUNCTION_T, + SCH_NO_CONNECT_T, + SCH_BUS_WIRE_ENTRY_T, + SCH_BUS_BUS_ENTRY_T, + SCH_LINE_T, + SCH_BITMAP_T, + SCH_TEXT_T, + SCH_LABEL_T, + SCH_GLOBAL_LABEL_T, + SCH_HIERARCHICAL_LABEL_T, + SCH_FIELD_T, + SCH_COMPONENT_T, + SCH_SHEET_PIN_T, + SCH_SHEET_T, + + // Be prudent with these 3 types: + // they should be used only to locate a specific field type + // among SCH_FIELD_T items types + SCH_FIELD_LOCATE_REFERENCE_T, + SCH_FIELD_LOCATE_VALUE_T, + SCH_FIELD_LOCATE_FOOTPRINT_T, + + // General + SCH_SCREEN_T, + + /* + * Draw items in library component. + * + * The order of these items effects the sort order for items inside the + * "DRAW/ENDDRAW" section of the component definition in a library file. + * If you add a new draw item, type, please make sure you add it so the + * sort order is logical. + */ + LIB_COMPONENT_T, + LIB_ALIAS_T, + LIB_ARC_T, + LIB_CIRCLE_T, + LIB_TEXT_T, + LIB_RECTANGLE_T, + LIB_POLYLINE_T, + LIB_BEZIER_T, + LIB_PIN_T, + + /* + * Fields are not saved inside the "DRAW/ENDDRAW". Add new draw item + * types before this line. + */ + LIB_FIELD_T, + + /* + * For GerbView: items type: + */ + TYPE_GERBER_DRAW_ITEM, + + // End value + MAX_STRUCT_TYPE_ID +}; + namespace KiGfx { // Forward declarations @@ -154,6 +246,9 @@ public: */ void ViewRelease(); + /// @copydoc EDA_ITEM::Type() + virtual KICAD_T Type() const = 0; + protected: friend class VIEW; @@ -174,6 +269,7 @@ protected: VIEW* m_view; ///* Current dynamic view the item is assigned to. bool m_viewVisible; ///* Are we visible in the current dynamic VIEW. + private: ///* Helper for storing cached items group ids typedef std::pair GroupPair; diff --git a/pcbnew/pcb_painter.cpp b/pcbnew/pcb_painter.cpp index 03b74edd82..c8591208d7 100644 --- a/pcbnew/pcb_painter.cpp +++ b/pcbnew/pcb_painter.cpp @@ -167,7 +167,7 @@ const COLOR4D& PCB_PAINTER::getItemColor( int aItemType, int aNetCode ) const } -bool PCB_PAINTER::Draw( const EDA_ITEM* aItem, int aLayer ) +bool PCB_PAINTER::Draw( const VIEW_ITEM* aItem, int aLayer ) { // the "cast" applied in here clarifies which overloaded draw() is called switch( aItem->Type() ) diff --git a/pcbnew/pcb_painter.h b/pcbnew/pcb_painter.h index 90cfd7ddd5..e20c0008db 100644 --- a/pcbnew/pcb_painter.h +++ b/pcbnew/pcb_painter.h @@ -115,7 +115,7 @@ public: PCB_PAINTER( GAL* aGal ); /// @copydoc PAINTER::Draw() - virtual bool Draw( const EDA_ITEM*, int ); + virtual bool Draw( const VIEW_ITEM*, int ); /// @copydoc PAINTER::ApplySettings() virtual void ApplySettings( RENDER_SETTINGS* aSettings )