Commit 706b267f authored by Dick Hollenbeck's avatar Dick Hollenbeck
Browse files

zone properties dialog was not showing previously selected net

parent d7fd8f17
Loading
Loading
Loading
Loading
+29 −13
Original line number Diff line number Diff line
@@ -510,6 +510,7 @@ void DIALOG_COPPER_ZONE::buildAvailableListOfNets()
    {
        wxString doNotShowFilter = m_DoNotShowNetNameFilter->GetValue();
        wxString ShowFilter = m_ShowNetNameFilter->GetValue();

        for( unsigned ii = 0; ii < listNetName.GetCount(); ii++ )
        {
            if( listNetName[ii].Matches( doNotShowFilter ) )
@@ -524,28 +525,43 @@ void DIALOG_COPPER_ZONE::buildAvailableListOfNets()
            }
        }
    }
    m_ListNetNameSelection->Clear();

    listNetName.Insert( wxT( "<no net>" ), 0 );
    m_ListNetNameSelection->InsertItems( listNetName, 0 );
    m_ListNetNameSelection->SetSelection( 0 );

    // Ensure current select net for the zone is visible:
    // Ensure currently selected net for the zone is visible, regardless of filters
    int selectedNetListNdx = -1;
    int net_select = m_Zone_Setting->m_NetcodeSelection;

    if( net_select > 0 )
    {
        NETINFO_ITEM* equipot = m_Parent->GetBoard()->FindNet( net_select );
        if( equipot )  // Search net in list and select it
        {
            for( unsigned ii = 0; ii < listNetName.GetCount(); ii++ )
        if( equipot )
        {
                if( listNetName[ii] == equipot->GetNetname() )
            selectedNetListNdx = listNetName.Index( equipot->GetNetname() );

            if( wxNOT_FOUND == selectedNetListNdx )
            {
                    m_ListNetNameSelection->SetSelection( ii );
                    m_ListNetNameSelection->EnsureVisible( ii );
                    break;
                // the currently selected net must *always* be visible.
                listNetName.Insert( equipot->GetNetname(), 0 );
                selectedNetListNdx = 0;
            }
        }
    }
    else if( net_select == 0 )
        selectedNetListNdx = 0;     // SetSelection() on "<no net>"
    else
    {
        // selectedNetListNdx remains -1, no net selected.
    }

    m_ListNetNameSelection->Clear();
    m_ListNetNameSelection->InsertItems( listNetName, 0 );
    m_ListNetNameSelection->SetSelection( 0 );

    if( selectedNetListNdx >= 0 )
    {
        m_ListNetNameSelection->SetSelection( selectedNetListNdx );
        m_ListNetNameSelection->EnsureVisible( selectedNetListNdx );
    }
}

+32 −21
Original line number Diff line number Diff line
/* dialog_copper_zones.h */

#ifndef DIALOG_COPPER_ZONES
#define DIALOG_COPPER_ZONES
#ifndef DIALOG_COPPER_ZONES_
#define DIALOG_COPPER_ZONES_

#include <wx/wx.h>
#include <wx/listctrl.h>
#include "dialog_copper_zones_base.h"

/* here is the derivated class from dialog_copper_zone_frame created by wxFormBuilder
/**
 * Class DIALOG_COPPER_ZONE
 * is the derivated class from dialog_copper_zone_frame created by wxFormBuilder
 */
class DIALOG_COPPER_ZONE : public DIALOG_COPPER_ZONE_BASE
{
private:
    PCB_EDIT_FRAME* m_Parent;
    wxConfig*        m_Config;      // Current config
    int m_OnExitCode;               /* exit code: ZONE_ABORT if no change,
                                     *  ZONE_OK if new values accepted
                                     *  ZONE_EXPORT_VALUES if values are exported to others zones
                                     */
    wxConfig*       m_Config;               ///< Current config

    int             m_OnExitCode;           ///< exit code: ZONE_ABORT if no change,
                                            ///< ZONE_OK if new values accepted
                                            ///< ZONE_EXPORT_VALUES if values are exported to others zones

    ZONE_SETTING*   m_Zone_Setting;
    bool            m_NetSortingByPadCount;   /* false = alphabetic sort.
                                               *  true = pad count sort.
                                               */

    bool            m_NetSortingByPadCount; ///< false = alphabetic sort.
                                            ///< true = pad count sort.

    long            m_NetFiltering;
    std::vector<int> m_LayerId;               // Handle the real layer number from layer
                                              // name position in m_LayerSelectionCtrl
    static wxString m_netNameShowFilter;    /* the filter to show nets (default * "*").
                                             *  static to keep this pattern for an entire pcbnew session
                                             */
    std::vector<int> m_LayerId;             ///< Handle the real layer number from layer
                                            ///< name position in m_LayerSelectionCtrl

    static wxString m_netNameShowFilter;    ///< the filter to show nets (default * "*").
                                            ///< static to keep this pattern for an entire pcbnew session

    wxListView*     m_LayerSelectionCtrl;

    static wxPoint  prevPosition;             // Dialog position & size
    static wxPoint  prevPosition;           ///< Dialog position & size
    static wxSize   prevSize;

public:
    DIALOG_COPPER_ZONE( PCB_EDIT_FRAME* parent, ZONE_SETTING* zone_setting );
private:

    /** Function initDialog
    /**
     * Function initDialog
     * fills in the dialog controls using the current settings.
     */
    void initDialog();

    void OnButtonOkClick( wxCommandEvent& event );
    void OnButtonCancelClick( wxCommandEvent& event );
    void OnClose( wxCloseEvent& event );
@@ -55,13 +61,17 @@ private:
     * @return bool - false if incorrect options, true if ok.
     */
    bool AcceptOptions( bool aPromptForErrors, bool aUseExportableSetupOnly = false );

    void OnNetSortingOptionSelected( wxCommandEvent& event );
    void ExportSetupToOtherCopperZones( wxCommandEvent& event );
    void OnPadsInZoneClick( wxCommandEvent& event );
    void OnRunFiltersButtonClick( wxCommandEvent& event );


    void buildAvailableListOfNets();

    /** Function initListNetsParams
    /**
     * Function initListNetsParams
     * initializes m_NetSortingByPadCount and m_NetFiltering values
     * according to m_NetDisplayOption selection.
     */
@@ -74,4 +84,5 @@ private:
     */
    wxBitmap makeLayerBitmap( int aColor );
};
#endif      // #ifndef DIALOG_COPPER_ZONES

#endif  // DIALOG_COPPER_ZONES_