class_marker_pcb.h 3.9 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
/*
 * This program source code file is part of KiCad, a free EDA CAD application.
 *
 * Copyright (C) 2009-2014 Jean-Pierre Charras, jean-pierre.charras@ujf-grenoble.fr
 * Copyright (C) 1992-2012 KiCad Developers, see AUTHORS.txt for contributors.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, you may find one here:
 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
 * or you may search the http://www.gnu.org website for the version 2 license,
 * or you may write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
 */

25 26 27 28
/**
 * @file class_marker_pcb.h
 * @brief Markers used to show a drc problem on boards.
 */
29

30 31
#ifndef CLASS_MARKER_PCB_H
#define CLASS_MARKER_PCB_H
32

33

34 35
#include <class_board_item.h>
#include <class_marker_base.h>
36

37

38 39 40
class MSG_PANEL_ITEM;


41
class MARKER_PCB : public BOARD_ITEM, public MARKER_BASE
42
{
dickelbeck's avatar
dickelbeck committed
43

44
public:
45

46
    MARKER_PCB( BOARD_ITEM* aParent );
47 48 49 50

    /**
     * Constructor
     * @param aErrorCode The categorizing identifier for an error
51
     * @param aMarkerPos The position of the MARKER_PCB on the BOARD
52 53 54 55 56
     * @param aText Text describing the first of two objects
     * @param aPos The position of the first of two objects
     * @param bText Text describing the second of the two conflicting objects
     * @param bPos The position of the second of two objects
     */
57
    MARKER_PCB( int aErrorCode, const wxPoint& aMarkerPos,
58 59
                const wxString& aText, const wxPoint& aPos,
                const wxString& bText, const wxPoint& bPos );
60 61

    /**
62 63
     * Constructor
     * @param aErrorCode The categorizing identifier for an error
64
     * @param aMarkerPos The position of the MARKER_PCB on the BOARD
65 66 67
     * @param aText Text describing the object
     * @param aPos The position of the object
     */
68
    MARKER_PCB( int aErrorCode, const wxPoint& aMarkerPos,
69
                const wxString& aText, const wxPoint& aPos );
70

71
    ~MARKER_PCB();
dickelbeck's avatar
dickelbeck committed
72

73
    void Move(const wxPoint& aMoveVector)
74 75 76
    {
        m_Pos += aMoveVector;
    }
77

78
    void Rotate( const wxPoint& aRotCentre, double aAngle );
79

80
    void Flip( const wxPoint& aCentre );
81

82 83
    void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC,
               GR_DRAWMODE aDrawMode, const wxPoint& aOffset = ZeroOffset )
84
    {
85
        DrawMarker( aPanel, aDC, aDrawMode, aOffset );
86 87
    }

Dick Hollenbeck's avatar
Dick Hollenbeck committed
88 89
    const wxPoint& GetPosition() const          { return m_Pos; }
    void SetPosition( const wxPoint& aPos )     { m_Pos = aPos; }
dickelbeck's avatar
dickelbeck committed
90

91 92 93 94 95 96 97 98 99 100
    void SetItem( const BOARD_ITEM* aItem )
    {
        m_item = aItem;
    }

    const BOARD_ITEM* GetItem() const
    {
        return m_item;
    }

101
    bool HitTest( const wxPoint& aPosition ) const
102
    {
103
        return HitTestMarker( aPosition );
104 105
    }

106
    bool IsOnLayer( LAYER_ID aLayer ) const;
107

108
    void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
109

110
    wxString GetSelectMenuText() const;
111

112
    BITMAP_DEF GetMenuImage() const { return  drc_xpm; }
113

114 115 116 117 118 119 120 121 122
    ///> @copydoc VIEW_ITEM::ViewBBox()
    virtual const BOX2I ViewBBox() const
    {
        return GetParent()->ViewBBox();
    }

    ///> @copydoc VIEW_ITEM::ViewGetLayers()
    virtual void ViewGetLayers( int aLayers[], int& aCount ) const;

123 124 125
#if defined(DEBUG)
    void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); } // override
#endif
126 127 128 129

protected:
    ///> Pointer to BOARD_ITEM that causes DRC error.
    const BOARD_ITEM* m_item;
130
};
131

132
#endif      //  CLASS_MARKER_PCB_H