summaryrefslogtreecommitdiff
path: root/pcbnew/dialogs/dialog_drclistbox.h
diff options
context:
space:
mode:
Diffstat (limited to 'pcbnew/dialogs/dialog_drclistbox.h')
-rw-r--r--pcbnew/dialogs/dialog_drclistbox.h311
1 files changed, 311 insertions, 0 deletions
diff --git a/pcbnew/dialogs/dialog_drclistbox.h b/pcbnew/dialogs/dialog_drclistbox.h
new file mode 100644
index 0000000..4848504
--- /dev/null
+++ b/pcbnew/dialogs/dialog_drclistbox.h
@@ -0,0 +1,311 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2009 Dick Hollenbeck, dick@softplc.com
+ * Copyright (C) 2004-2012 KiCad Developers, see change_log.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
+ */
+
+
+#ifndef _DIALOG_DRCLISTBOX_H_
+#define _DIALOG_DRCLISTBOX_H_
+
+#include <wx/htmllbox.h>
+
+#include <fctsys.h>
+#include <pcbnew.h>
+#include <class_drawpanel.h>
+#include <wxstruct.h>
+#include <drc_stuff.h>
+#include <class_marker_pcb.h>
+#include <class_board.h>
+
+#include <dialog_drc_base.h>
+
+
+// outside @end control identifiers since wxFormBuilder knows not DRCLISTBOX
+#define ID_DRCLISTCTRL 14000
+#define ID_POPUP_UNCONNECTED_A 14001
+#define ID_POPUP_UNCONNECTED_B 14002
+#define ID_POPUP_MARKERS_A 14003
+#define ID_POPUP_MARKERS_B 14004
+
+
+/**
+ * Class DRC_LIST_MARKERS
+ * is an implementation of the interface named DRC_ITEM_LIST which uses
+ * a BOARD instance to fulfill the interface. No ownership is taken of the
+ * BOARD.
+ */
+class DRC_LIST_MARKERS : public DRC_ITEM_LIST
+{
+ BOARD* m_board;
+
+public:
+
+ DRC_LIST_MARKERS( BOARD* aBoard ) :
+ m_board(aBoard)
+ {
+ }
+
+ /* no destructor since we do not own anything to delete, not even the BOARD.
+ ~DRC_LIST_MARKERS() {}
+ */
+
+
+ //-----<Interface DRC_ITEM_LIST>---------------------------------------
+
+ void DeleteAllItems()
+ {
+ m_board->DeleteMARKERs();
+ }
+
+
+ const DRC_ITEM* GetItem( int aIndex )
+ {
+ const MARKER_PCB* marker = m_board->GetMARKER( aIndex );
+ if( marker )
+ return &marker->GetReporter();
+ return NULL;
+ }
+
+ void DeleteItem( int aIndex )
+ {
+ MARKER_PCB* marker = m_board->GetMARKER( aIndex );
+ if( marker )
+ m_board->Delete( marker );
+ }
+
+
+ /**
+ * Function GetCount
+ * returns the number of items in the list.
+ */
+ int GetCount()
+ {
+ return m_board->GetMARKERCount();
+ }
+
+ //-----</Interface DRC_ITEM_LIST>--------------------------------------
+
+};
+
+
+/**
+ * Class DRC_LIST_UNCONNECTED
+ * is an implementation of the interface named DRC_ITEM_LIST which uses
+ * a vector of pointers to DRC_ITEMs to fulfill the interface. No ownership is taken of the
+ * vector, which will reside in class DRC
+ */
+class DRC_LIST_UNCONNECTED : public DRC_ITEM_LIST
+{
+ DRC_LIST* m_vector;
+
+public:
+
+ DRC_LIST_UNCONNECTED( DRC_LIST* aList ) :
+ m_vector(aList)
+ {
+ }
+
+ /* no destructor since we do not own anything to delete, not even the BOARD.
+ ~DRC_LIST_UNCONNECTED() {}
+ */
+
+
+ //-----<Interface DRC_ITEM_LIST>---------------------------------------
+
+ void DeleteAllItems()
+ {
+ if( m_vector )
+ {
+ for( unsigned i=0; i<m_vector->size(); ++i )
+ delete (*m_vector)[i];
+
+ m_vector->clear();
+ }
+ }
+
+
+ const DRC_ITEM* GetItem( int aIndex )
+ {
+ if( m_vector && (unsigned)aIndex < m_vector->size() )
+ {
+ const DRC_ITEM* item = (*m_vector)[aIndex];
+ return item;
+ }
+ return NULL;
+ }
+
+ void DeleteItem( int aIndex )
+ {
+ if( m_vector && (unsigned)aIndex < m_vector->size() )
+ {
+ delete (*m_vector)[aIndex];
+ m_vector->erase( m_vector->begin()+aIndex );
+ }
+ }
+
+
+ /**
+ * Function GetCount
+ * returns the number of items in the list.
+ */
+ int GetCount()
+ {
+ if( m_vector )
+ {
+ return m_vector->size();
+ }
+ return 0;
+ }
+
+ //-----</Interface DRC_ITEM_LIST>--------------------------------------
+
+};
+
+
+
+/**
+ * Class DRCLISTBOX
+ * is used to display a DRC_ITEM_LIST.
+ */
+class DRCLISTBOX : public wxHtmlListBox
+{
+private:
+ DRC_ITEM_LIST* m_list; ///< wxHtmlListBox does not own the list, I do
+
+public:
+ DRCLISTBOX( wxWindow* parent, wxWindowID id = wxID_ANY,
+ const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
+ long style = 0, const wxString choices[] = NULL, int unused = 0)
+ : wxHtmlListBox( parent, id, pos, size, style )
+ {
+ m_list = 0;
+ }
+
+
+ ~DRCLISTBOX()
+ {
+ delete m_list; // I own it, I destroy it.
+ }
+
+
+ /**
+ * Function SetList
+ * sets the DRC_ITEM_LIST for this listbox. Ownership of the DRC_ITEM_LIST is
+ * transfered to this DRCLISTBOX.
+ * @param aList The DRC_ITEM_LIST* containing the DRC_ITEMs which will be
+ * displayed in the wxHtmlListBox
+ */
+ void SetList( DRC_ITEM_LIST* aList )
+ {
+ delete m_list;
+
+ m_list = aList;
+ SetItemCount( aList->GetCount() );
+ Refresh();
+ }
+
+
+ /**
+ * Function GetItem
+ * returns a requested DRC_ITEM* or NULL.
+ */
+ const DRC_ITEM* GetItem( int aIndex )
+ {
+ if( m_list )
+ {
+ return m_list->GetItem( aIndex );
+ }
+ return NULL;
+ }
+
+
+ /**
+ * Function OnGetItem
+ * returns the html text associated with the DRC_ITEM given by index 'n'.
+ * @param n An index into the list.
+ * @return wxString - the simple html text to show in the listbox.
+ */
+ wxString OnGetItem( size_t n ) const
+ {
+ if( m_list )
+ {
+ const DRC_ITEM* item = m_list->GetItem( (int) n );
+ if( item )
+ return item->ShowHtml();
+ }
+ return wxString();
+ }
+
+
+ /**
+ * Function OnGetItem
+ * returns the html text associated with the given index 'n'.
+ * @param n An index into the list.
+ * @return wxString - the simple html text to show in the listbox.
+ */
+ wxString OnGetItemMarkup( size_t n ) const
+ {
+ return OnGetItem( n );
+ }
+
+
+ /**
+ * Function DeleteElement
+ * will delete one of the items in the list.
+ * @param aIndex The index into the list to delete.
+ */
+ void DeleteItem( int aIndex )
+ {
+ if( m_list )
+ {
+ int selection = GetSelection();
+
+ m_list->DeleteItem( aIndex );
+ int count = m_list->GetCount();
+ SetItemCount( count );
+
+ // if old selection >= new count
+ if( selection >= count )
+ SetSelection( count-1 ); // -1 is "no selection"
+ Refresh();
+ }
+ }
+
+
+ /**
+ * Function DeleteAllItems
+ * deletes all items in the list.
+ */
+ void DeleteAllItems()
+ {
+ if( m_list )
+ {
+ m_list->DeleteAllItems();
+ SetItemCount(0);
+ SetSelection( -1 ); // -1 is no selection
+ Refresh();
+ }
+ }
+};
+
+#endif // _DIALOG_DRCLISTBOX_H_
+