dialog_design_rules.h 3.56 KB
Newer Older
1 2 3 4 5 6 7
///////////////////////////////////////////////////////////////////////////////
/// Class DIALOG_DESIGN_RULES
///////////////////////////////////////////////////////////////////////////////

#ifndef __dialog_design_rules_h_
#define __dialog_design_rules_h_

8
#include <../class_board.h>
9

10
#include <dialog_design_rules_base.h>
11

12 13 14 15 16

class PCB_EDIT_FRAME;
class BOARD_DESIGN_SETTINGS;


17
// helper struct to handle a net and its netclass in dialog design rule editor
18 19 20 21 22 23 24 25
struct NETCUP
{
    NETCUP( const wxString& aNet, const wxString& aClass )
    {
        net = aNet;
        clazz = aClass;
    }

dickelbeck's avatar
dickelbeck committed
26 27
    wxString    net;            ///< a net name
    wxString    clazz;          ///< a class name
28 29
};

dickelbeck's avatar
dickelbeck committed
30

31 32
typedef std::vector<NETCUP>     NETCUPS;
typedef std::vector<NETCUP*>    PNETCUPS;
33 34 35

class DIALOG_DESIGN_RULES : public DIALOG_DESIGN_RULES_BASE
{
dickelbeck's avatar
dickelbeck committed
36 37 38

private:

dickelbeck's avatar
dickelbeck committed
39
    static const wxString wildCard;     ///< the name of a ficticious netclass which includes all NETs
dickelbeck's avatar
dickelbeck committed
40

41
    PCB_EDIT_FRAME*         m_Parent;
dickelbeck's avatar
dickelbeck committed
42
    BOARD*                  m_Pcb;
Dick Hollenbeck's avatar
Dick Hollenbeck committed
43
    BOARD_DESIGN_SETTINGS   m_BrdSettings;
dickelbeck's avatar
dickelbeck committed
44

dickelbeck's avatar
dickelbeck committed
45 46
    static int              s_LastTabSelection;     ///< which tab user had open last

dickelbeck's avatar
dickelbeck committed
47 48 49 50 51 52
    /**
     * A two column table which gets filled once and never loses any elements, so it is
     * basically constant, except that the NETCUP::clazz member can change for any
     * given row a NET is moved in and out of a class.  clazz reflects the respective
     * NET's current net class.
     */
dickelbeck's avatar
dickelbeck committed
53 54
    NETCUPS                 m_AllNets;

55
    // List of values to "customize" some tracks and vias
56
    std::vector <VIA_DIMENSION> m_ViasDimensionsList;
57
    std::vector <int> m_TracksWidthList;
58

dickelbeck's avatar
dickelbeck committed
59
private:
60 61
    void OnNetClassesNameLeftClick( wxGridEvent& event ){ event.Skip(); }
    void OnNetClassesNameRightClick( wxGridEvent& event ){ event.Skip(); }
dickelbeck's avatar
dickelbeck committed
62 63 64 65
    void OnCancelButtonClick( wxCommandEvent& event );
    void OnOkButtonClick( wxCommandEvent& event );
    void OnAddNetclassClick( wxCommandEvent& event );
    void OnRemoveNetclassClick( wxCommandEvent& event );
dickelbeck's avatar
dickelbeck committed
66
    void OnMoveUpSelectedNetClass( wxCommandEvent& event );
dickelbeck's avatar
dickelbeck committed
67 68 69 70 71 72 73
    void OnLeftCBSelection( wxCommandEvent& event );
    void OnRightCBSelection( wxCommandEvent& event );
    void OnRightToLeftCopyButton( wxCommandEvent& event );
    void OnLeftToRightCopyButton( wxCommandEvent& event );
    void OnLeftSelectAllButton( wxCommandEvent& event );
    void OnRightSelectAllButton( wxCommandEvent& event );
    bool TestDataValidity( );
74
    void InitDialogRules();
75
    void InitGlobalRules();
dickelbeck's avatar
dickelbeck committed
76
    void InitRulesList();
77
    void InitDimensionsLists();
dickelbeck's avatar
dickelbeck committed
78 79
    void InitializeRulesSelectionBoxes();
    void CopyRulesListToBoard();
80 81
    void CopyGlobalRulesToBoard();
    void CopyDimensionsListsToBoard( );
dickelbeck's avatar
dickelbeck committed
82
    void SetRoutableLayerStatus();
83
    void FillListBoxWithNetNames( NETS_LIST_CTRL* aListCtrl, const wxString& aNetClass );
84
    void PrintCurrentSettings( );
dickelbeck's avatar
dickelbeck committed
85 86 87 88 89 90 91 92

    /**
     * Function swapNetClass
     * replaces one net class name with another in the master list, m_AllNets.
     */
    void swapNetClass( const wxString& oldClass, const wxString& newClass )
    {
        for( NETCUPS::iterator i = m_AllNets.begin(); i!=m_AllNets.end();  ++i )
93
        {
dickelbeck's avatar
dickelbeck committed
94 95
            if( i->clazz == oldClass )
                i->clazz = newClass;
96
        }
dickelbeck's avatar
dickelbeck committed
97 98 99
    }

    void makePointers( PNETCUPS* aList, const wxString& aNetClassName );
100

dickelbeck's avatar
dickelbeck committed
101
    void setNetClass( const wxString& aNetName, const wxString& aClassName );
102

103
    void moveSelectedItems( NETS_LIST_CTRL* src, const wxString& newClassName );
104

105

dickelbeck's avatar
dickelbeck committed
106
public:
107
    DIALOG_DESIGN_RULES( PCB_EDIT_FRAME* parent );
dickelbeck's avatar
dickelbeck committed
108
    ~DIALOG_DESIGN_RULES( ) { };
109 110 111 112

};

#endif //__dialog_design_rules_h_