committed by
jean-pierre charras
15 changed files with 1138 additions and 0 deletions
-
1bitmaps_png/CMakeLists.txt
-
38bitmaps_png/cpp_26/pin_table.cpp
-
195bitmaps_png/sources/pin_table.svg
-
2eeschema/CMakeLists.txt
-
563eeschema/dialogs/dialog_lib_edit_pin_table.cpp
-
18eeschema/dialogs/dialog_lib_edit_pin_table.h
-
46eeschema/dialogs/dialog_lib_edit_pin_table_base.cpp
-
193eeschema/dialogs/dialog_lib_edit_pin_table_base.fbp
-
53eeschema/dialogs/dialog_lib_edit_pin_table_base.h
-
1eeschema/eeschema_id.h
-
3eeschema/lib_pin.h
-
19eeschema/libeditframe.cpp
-
3eeschema/libeditframe.h
-
2eeschema/tool_lib.cpp
-
1include/bitmaps.h
@ -0,0 +1,38 @@ |
|||
|
|||
/* Do not modify this file, it was automatically generated by the
|
|||
* PNG2cpp CMake script, using a *.png file as input. |
|||
*/ |
|||
|
|||
#include <bitmaps.h>
|
|||
|
|||
static const unsigned char png[] = { |
|||
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, |
|||
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c, |
|||
0xce, 0x00, 0x00, 0x01, 0x53, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0x96, 0x31, 0x4b, 0xc3, |
|||
0x40, 0x14, 0xc7, 0xff, 0x54, 0x04, 0x33, 0x69, 0x05, 0xa5, 0x83, 0x83, 0xb8, 0x09, 0x99, 0xeb, |
|||
0x54, 0x1a, 0x45, 0x0a, 0x82, 0xa3, 0x7e, 0x86, 0x8a, 0x4b, 0x71, 0x71, 0x11, 0xaa, 0xe2, 0xa0, |
|||
0x43, 0x70, 0x71, 0x74, 0xe9, 0x28, 0x7e, 0x0a, 0xf1, 0x13, 0xc4, 0xcf, 0xe0, 0xe8, 0x66, 0x45, |
|||
0xa1, 0xb4, 0x3d, 0xef, 0x1f, 0xee, 0xe0, 0x88, 0x25, 0xbe, 0x23, 0x35, 0x3a, 0x18, 0xf8, 0x25, |
|||
0x8f, 0x24, 0xe4, 0x97, 0x7b, 0xf7, 0xde, 0x25, 0x50, 0x4a, 0xa1, 0x0c, 0xbe, 0x9c, 0xb8, 0x07, |
|||
0x66, 0x2e, 0x80, 0x75, 0xc2, 0x78, 0xea, 0xa2, 0x6b, 0x20, 0x38, 0x03, 0x62, 0x4d, 0x5f, 0xa3, |
|||
0x0c, 0x8c, 0x63, 0x5e, 0x9b, 0x8a, 0xc8, 0x48, 0x12, 0x47, 0x90, 0x25, 0x29, 0x2a, 0x4b, 0x77, |
|||
0x66, 0x24, 0xe9, 0x43, 0x6f, 0xeb, 0x75, 0x95, 0xf4, 0x7a, 0x29, 0x8c, 0x1d, 0x59, 0x5c, 0x48, |
|||
0xc4, 0x79, 0xb0, 0xe9, 0xe2, 0x83, 0x47, 0x83, 0x81, 0xb2, 0x1b, 0x63, 0x47, 0xf6, 0x76, 0x0e, |
|||
0x6c, 0xe9, 0x63, 0xe4, 0xc9, 0x4a, 0x2a, 0xe2, 0xa4, 0xdb, 0xb7, 0xe6, 0x28, 0xb2, 0x1b, 0xcf, |
|||
0xe5, 0xa4, 0x54, 0xc2, 0x8b, 0x66, 0xb9, 0x0c, 0xd1, 0xeb, 0x15, 0x30, 0x2f, 0x4e, 0xdd, 0x89, |
|||
0x66, 0x0d, 0x18, 0xad, 0x7a, 0xb0, 0x03, 0x74, 0x2e, 0x81, 0xaa, 0x57, 0x31, 0x1c, 0x02, 0x77, |
|||
0x00, 0x9a, 0x02, 0x3a, 0x9a, 0xa1, 0xa1, 0xe9, 0x55, 0xde, 0xc7, 0x41, 0xd0, 0xdf, 0x6e, 0x34, |
|||
0x1e, 0xa3, 0x28, 0x7a, 0xf8, 0x0e, 0x23, 0x9b, 0x2c, 0x72, 0x1b, 0xb6, 0x0b, 0xbc, 0x5b, 0x01, |
|||
0xe3, 0x76, 0xad, 0xf6, 0x2c, 0x95, 0x88, 0x44, 0x96, 0x39, 0x60, 0x73, 0x49, 0xdf, 0x44, 0x18, |
|||
0x4b, 0x05, 0x7f, 0x4f, 0x54, 0x4a, 0xea, 0x4a, 0x2b, 0x06, 0x49, 0x79, 0x73, 0x64, 0x85, 0x44, |
|||
0xd2, 0x86, 0x3d, 0xad, 0x54, 0x86, 0xfb, 0x61, 0xf8, 0xb4, 0x17, 0x86, 0x49, 0x1e, 0x6c, 0x52, |
|||
0xb7, 0x61, 0xff, 0xd7, 0x3a, 0x56, 0xe0, 0xc7, 0x2e, 0x70, 0xc4, 0x74, 0xe4, 0xb1, 0x01, 0xdc, |
|||
0x14, 0x5a, 0xeb, 0x5a, 0xc0, 0xd8, 0x99, 0x64, 0x29, 0x7e, 0xe5, 0x7d, 0xa0, 0x25, 0xb3, 0xfe, |
|||
0x92, 0xfc, 0x86, 0xe5, 0x97, 0xd4, 0x6d, 0x58, 0xae, 0xda, 0x8b, 0x40, 0x4b, 0xb8, 0x72, 0x67, |
|||
0x59, 0xf8, 0xbd, 0xdf, 0xad, 0x9f, 0xe6, 0x13, 0xee, 0x33, 0xf3, 0x74, 0xce, 0xbb, 0x6e, 0x19, |
|||
0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, |
|||
}; |
|||
|
|||
const BITMAP_OPAQUE pin_table_xpm[1] = {{ png, sizeof( png ), "pin_table_xpm" }}; |
|||
|
|||
//EOF
|
@ -0,0 +1,195 @@ |
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
|||
<svg |
|||
xmlns:dc="http://purl.org/dc/elements/1.1/" |
|||
xmlns:cc="http://creativecommons.org/ns#" |
|||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" |
|||
xmlns:svg="http://www.w3.org/2000/svg" |
|||
xmlns="http://www.w3.org/2000/svg" |
|||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" |
|||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" |
|||
height="26" |
|||
width="26" |
|||
version="1.1" |
|||
id="svg2" |
|||
inkscape:version="0.48.5 r10040" |
|||
sodipodi:docname="pin_table.svg"> |
|||
<metadata |
|||
id="metadata87"> |
|||
<rdf:RDF> |
|||
<cc:Work |
|||
rdf:about=""> |
|||
<dc:format>image/svg+xml</dc:format> |
|||
<dc:type |
|||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> |
|||
<dc:title /> |
|||
</cc:Work> |
|||
</rdf:RDF> |
|||
</metadata> |
|||
<sodipodi:namedview |
|||
pagecolor="#ffffff" |
|||
bordercolor="#666666" |
|||
borderopacity="1" |
|||
objecttolerance="10" |
|||
gridtolerance="10" |
|||
guidetolerance="10" |
|||
inkscape:pageopacity="0" |
|||
inkscape:pageshadow="2" |
|||
inkscape:window-width="1918" |
|||
inkscape:window-height="1078" |
|||
id="namedview85" |
|||
showgrid="true" |
|||
inkscape:snap-grids="true" |
|||
inkscape:zoom="22.961538" |
|||
inkscape:cx="3.4405358" |
|||
inkscape:cy="13" |
|||
inkscape:window-x="1920" |
|||
inkscape:window-y="0" |
|||
inkscape:window-maximized="0" |
|||
inkscape:current-layer="svg2"> |
|||
<inkscape:grid |
|||
type="xygrid" |
|||
id="grid3832" |
|||
empspacing="2" |
|||
visible="true" |
|||
enabled="true" |
|||
snapvisiblegridlinesonly="true" /> |
|||
</sodipodi:namedview> |
|||
<defs |
|||
id="defs4" /> |
|||
<path |
|||
style="fill:none;stroke:#404040;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" |
|||
d="m 8,11 c 12,0 12,0 12,0" |
|||
id="path5327" |
|||
inkscape:connector-curvature="0" /> |
|||
<path |
|||
style="fill:none;stroke:#404040;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" |
|||
d="m 8,13 12,0" |
|||
id="path5329" |
|||
inkscape:connector-curvature="0" /> |
|||
<path |
|||
style="fill:none;stroke:#404040;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" |
|||
d="m 8,15 12,0" |
|||
id="path5331" |
|||
inkscape:connector-curvature="0" /> |
|||
<path |
|||
style="fill:none;stroke:#404040;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" |
|||
d="m 8,17 12,0" |
|||
id="path5333" |
|||
inkscape:connector-curvature="0" /> |
|||
<path |
|||
style="fill:none;stroke:#404040;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" |
|||
d="m 8,19 12,0" |
|||
id="path5335" |
|||
inkscape:connector-curvature="0" /> |
|||
<path |
|||
style="fill:none;stroke:#404040;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" |
|||
d="m 19,10 0,10" |
|||
id="path5337" |
|||
inkscape:connector-curvature="0" /> |
|||
<path |
|||
style="fill:none;stroke:#404040;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" |
|||
d="m 17,10 0,10" |
|||
id="path5339" |
|||
inkscape:connector-curvature="0" /> |
|||
<path |
|||
style="fill:none;stroke:#404040;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" |
|||
d="m 15,10 0,10" |
|||
id="path5341" |
|||
inkscape:connector-curvature="0" /> |
|||
<path |
|||
style="fill:none;stroke:#404040;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" |
|||
d="m 13,10 0,10" |
|||
id="path5343" |
|||
inkscape:connector-curvature="0" /> |
|||
<path |
|||
style="fill:none;stroke:#404040;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" |
|||
d="m 11,10 0,10" |
|||
id="path5345" |
|||
inkscape:connector-curvature="0" /> |
|||
<path |
|||
style="fill:none;stroke:#404040;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" |
|||
d="M 9,10 9,20" |
|||
id="path5347" |
|||
inkscape:connector-curvature="0" /> |
|||
<rect |
|||
style="opacity:0.98999999000000005;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2.50000000000000000;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" |
|||
id="rect3768" |
|||
width="16" |
|||
height="14" |
|||
x="6" |
|||
y="8" /> |
|||
<path |
|||
sodipodi:type="arc" |
|||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#800000;stroke-width:2.50000000000000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" |
|||
id="path3003" |
|||
sodipodi:cx="20" |
|||
sodipodi:cy="13" |
|||
sodipodi:rx="4" |
|||
sodipodi:ry="4" |
|||
d="m 24,13 a 4,4 0 1 1 -8,0 4,4 0 1 1 8,0 z" |
|||
transform="matrix(-1,0,0,1,26,-6)" /> |
|||
<path |
|||
style="fill:none;stroke:#800000;stroke-width:2.50000000000000000;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" |
|||
d="M 11,7 24,7" |
|||
id="path3771" |
|||
inkscape:connector-curvature="0" /> |
|||
<g |
|||
transform="matrix(2.4566,0,0,2.2316,-37.589,-61.022)" |
|||
id="g17"> |
|||
<rect |
|||
height="16" |
|||
width="16" |
|||
y="0" |
|||
x="0" |
|||
id="rect19" |
|||
style="fill-opacity:0" /> |
|||
</g> |
|||
<g |
|||
transform="matrix(2.6586,0,0,2.1996,5.9761,-10.078)" |
|||
id="g47"> |
|||
<rect |
|||
height="16" |
|||
width="16" |
|||
y="0" |
|||
x="0" |
|||
id="rect49" |
|||
style="fill-opacity:0" /> |
|||
</g> |
|||
<g |
|||
id="g69" |
|||
transform="matrix(2.4482476,0,0,2.4295429,2.830298,-7.57155)"> |
|||
<rect |
|||
style="fill-opacity:0" |
|||
id="rect71" |
|||
x="0" |
|||
y="0" |
|||
width="16" |
|||
height="16" /> |
|||
</g> |
|||
<g |
|||
id="g73" |
|||
transform="matrix(2.4482476,0,0,2.4295429,5.162342,-14.86007)"> |
|||
<rect |
|||
style="fill-opacity:0" |
|||
id="rect75" |
|||
x="0" |
|||
y="0" |
|||
width="16" |
|||
height="16" /> |
|||
</g> |
|||
<path |
|||
transform="matrix(-1,0,0,1,26,6)" |
|||
d="m 24,13 a 4,4 0 1 1 -8,0 4,4 0 1 1 8,0 z" |
|||
sodipodi:ry="4" |
|||
sodipodi:rx="4" |
|||
sodipodi:cy="13" |
|||
sodipodi:cx="20" |
|||
id="path3079" |
|||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#800000;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" |
|||
sodipodi:type="arc" /> |
|||
<path |
|||
inkscape:connector-curvature="0" |
|||
id="path3081" |
|||
d="m 11,19 13,0" |
|||
style="fill:none;stroke:#800000;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> |
|||
</svg> |
@ -0,0 +1,563 @@ |
|||
#include "dialog_lib_edit_pin_table.h"
|
|||
|
|||
#include "lib_pin.h"
|
|||
|
|||
#include <boost/algorithm/string/join.hpp>
|
|||
#include <queue>
|
|||
|
|||
/* Avoid wxWidgets bug #16906 -- http://trac.wxwidgets.org/ticket/16906
|
|||
* |
|||
* If multiple elements live in the root of a wxDataViewCtrl, using |
|||
* ItemsAdded() can run into an assertion failure. To avoid this, we avoid |
|||
* notifying the widget of changes, but rather reinitialize it. |
|||
* |
|||
* When a fix for this exists in wxWidgets, this is the place to turn it |
|||
* off. |
|||
*/ |
|||
#define REASSOCIATE_HACK
|
|||
|
|||
class DIALOG_LIB_EDIT_PIN_TABLE::DataViewModel : |
|||
public wxDataViewModel |
|||
{ |
|||
public: |
|||
DataViewModel( LIB_PART& aPart ); |
|||
|
|||
// wxDataViewModel
|
|||
virtual unsigned int GetColumnCount() const; |
|||
virtual wxString GetColumnType( unsigned int col ) const; |
|||
virtual void GetValue( wxVariant&, const wxDataViewItem&, unsigned int ) const; |
|||
virtual bool SetValue( const wxVariant&, const wxDataViewItem&, unsigned int ); |
|||
virtual wxDataViewItem GetParent( const wxDataViewItem& ) const; |
|||
virtual bool IsContainer( const wxDataViewItem& ) const; |
|||
virtual bool HasContainerColumns( const wxDataViewItem& ) const; |
|||
virtual unsigned int GetChildren( const wxDataViewItem&, wxDataViewItemArray& ) const; |
|||
|
|||
virtual int Compare( const wxDataViewItem& lhs, |
|||
const wxDataViewItem& rhs, |
|||
unsigned int col, |
|||
bool ascending ) const; |
|||
|
|||
void SetGroupingColumn( int aCol ); |
|||
void CalculateGrouping(); |
|||
void Refresh(); |
|||
|
|||
#ifdef REASSOCIATE_HACK
|
|||
void SetWidget( wxDataViewCtrl* aWidget ) { m_Widget = aWidget; } |
|||
#endif
|
|||
|
|||
enum |
|||
{ |
|||
NONE = -1, |
|||
PIN_NUMBER = 0, |
|||
PIN_NAME = 1, |
|||
PIN_TYPE = 2 |
|||
}; |
|||
|
|||
private: |
|||
LIB_PART& m_Part; |
|||
LIB_PINS m_Backing; |
|||
int m_GroupingColumn; |
|||
int m_UnitCount; |
|||
|
|||
class Item; |
|||
class Group; |
|||
class Pin; |
|||
|
|||
mutable std::list<Pin> m_Pins; |
|||
mutable std::map<wxString, Group> m_Groups; |
|||
|
|||
#ifdef REASSOCIATE_HACK
|
|||
wxDataViewCtrl* m_Widget; |
|||
#endif
|
|||
}; |
|||
|
|||
class DIALOG_LIB_EDIT_PIN_TABLE::DataViewModel::Item |
|||
{ |
|||
public: |
|||
virtual void GetValue( wxVariant& aValue, unsigned int aCol ) const = 0; |
|||
virtual wxDataViewItem GetParent() const = 0; |
|||
virtual bool IsContainer() const = 0; |
|||
virtual unsigned int GetChildren( wxDataViewItemArray& ) const = 0; |
|||
}; |
|||
|
|||
class DIALOG_LIB_EDIT_PIN_TABLE::DataViewModel::Group : |
|||
public Item |
|||
{ |
|||
public: |
|||
Group( unsigned int aGroupingColumn ) : m_GroupingColumn( aGroupingColumn ) {} |
|||
|
|||
virtual void GetValue( wxVariant& aValue, unsigned int aCol ) const; |
|||
|
|||
virtual wxDataViewItem GetParent() const { return wxDataViewItem(); } |
|||
virtual bool IsContainer() const { return true; } |
|||
virtual unsigned int GetChildren( wxDataViewItemArray& aItems ) const |
|||
{ |
|||
/// @todo C++11
|
|||
for( std::list<Pin*>::const_iterator i = m_Members.begin(); i != m_Members.end(); ++i ) |
|||
aItems.push_back( wxDataViewItem( *i ) ); |
|||
|
|||
return aItems.size(); |
|||
} |
|||
|
|||
unsigned int GetCount() const { return m_Members.size(); } |
|||
void Add( Pin* aPin ); |
|||
|
|||
private: |
|||
std::list<Pin*> m_Members; |
|||
unsigned int m_GroupingColumn; |
|||
}; |
|||
|
|||
class DIALOG_LIB_EDIT_PIN_TABLE::DataViewModel::Pin : |
|||
public Item |
|||
{ |
|||
public: |
|||
Pin( DataViewModel& aModel, |
|||
LIB_PIN* aBacking ) : m_Model( aModel ), m_Backing( aBacking ), m_Group( 0 ) {} |
|||
|
|||
virtual void GetValue( wxVariant& aValue, unsigned int aCol ) const; |
|||
|
|||
virtual wxDataViewItem GetParent() const { return wxDataViewItem( m_Group ); } |
|||
virtual bool IsContainer() const { return false; } |
|||
virtual unsigned int GetChildren( wxDataViewItemArray& ) const { return 0; } |
|||
|
|||
void SetGroup( Group* aGroup ) { m_Group = aGroup; } |
|||
|
|||
private: |
|||
DataViewModel& m_Model; |
|||
LIB_PIN* m_Backing; |
|||
Group* m_Group; |
|||
}; |
|||
|
|||
DIALOG_LIB_EDIT_PIN_TABLE::DIALOG_LIB_EDIT_PIN_TABLE( wxWindow* parent, |
|||
LIB_PART& aPart ) : |
|||
DIALOG_LIB_EDIT_PIN_TABLE_BASE( parent ), |
|||
m_Model( new DataViewModel( aPart ) ) |
|||
{ |
|||
#ifdef REASSOCIATE_HACK
|
|||
m_Model->SetWidget( m_Pins ); |
|||
#endif
|
|||
m_Pins->AssociateModel( m_Model.get() ); |
|||
|
|||
/// @todo wxFormBuilder bug #61 -- move to base once supported
|
|||
wxDataViewTextRenderer* rend0 = new wxDataViewTextRenderer( wxT( "string" ), wxDATAVIEW_CELL_INERT ); |
|||
wxDataViewColumn* col0 = new wxDataViewColumn( _( "Number" ), |
|||
rend0, |
|||
DataViewModel::PIN_NUMBER, |
|||
100, |
|||
wxAlignment( wxALIGN_LEFT | wxALIGN_TOP ), |
|||
wxDATAVIEW_COL_RESIZABLE | wxDATAVIEW_COL_SORTABLE ); |
|||
wxDataViewTextRenderer* rend1 = new wxDataViewTextRenderer( wxT( "string" ), wxDATAVIEW_CELL_INERT ); |
|||
wxDataViewColumn* col1 = new wxDataViewColumn( _( "Name" ), |
|||
rend1, |
|||
DataViewModel::PIN_NAME, |
|||
100, |
|||
wxAlignment( wxALIGN_LEFT | wxALIGN_TOP ), |
|||
wxDATAVIEW_COL_RESIZABLE | wxDATAVIEW_COL_SORTABLE ); |
|||
wxDataViewTextRenderer* rend2 = new wxDataViewTextRenderer( wxT( "string" ), wxDATAVIEW_CELL_INERT ); |
|||
wxDataViewColumn* col2 = new wxDataViewColumn( _( "Type" ), |
|||
rend2, |
|||
DataViewModel::PIN_TYPE, |
|||
100, |
|||
wxAlignment( wxALIGN_LEFT | wxALIGN_TOP ), |
|||
wxDATAVIEW_COL_RESIZABLE ); |
|||
m_Pins->AppendColumn( col0 ); |
|||
m_Pins->SetExpanderColumn( col0 ); |
|||
m_Pins->AppendColumn( col1 ); |
|||
m_Pins->AppendColumn( col2 ); |
|||
|
|||
GetSizer()->SetSizeHints(this); |
|||
Centre(); |
|||
} |
|||
|
|||
|
|||
DIALOG_LIB_EDIT_PIN_TABLE::~DIALOG_LIB_EDIT_PIN_TABLE() |
|||
{ |
|||
} |
|||
|
|||
|
|||
void DIALOG_LIB_EDIT_PIN_TABLE::OnColumnHeaderRightClicked( wxDataViewEvent& event ) |
|||
{ |
|||
m_Model->SetGroupingColumn( event.GetDataViewColumn()->GetModelColumn() ); |
|||
event.Skip(); |
|||
} |
|||
|
|||
|
|||
DIALOG_LIB_EDIT_PIN_TABLE::DataViewModel::DataViewModel( LIB_PART& aPart ) : |
|||
m_Part( aPart ), |
|||
m_GroupingColumn( 1 ), |
|||
m_UnitCount( m_Part.GetUnitCount() ) |
|||
{ |
|||
aPart.GetPins( m_Backing ); |
|||
/// @todo C++11
|
|||
for( LIB_PINS::const_iterator i = m_Backing.begin(); i != m_Backing.end(); ++i ) |
|||
m_Pins.push_back( Pin( *this, *i ) ); |
|||
|
|||
CalculateGrouping(); |
|||
} |
|||
|
|||
|
|||
unsigned int DIALOG_LIB_EDIT_PIN_TABLE::DataViewModel::GetColumnCount() const |
|||
{ |
|||
return 3; |
|||
} |
|||
|
|||
|
|||
wxString DIALOG_LIB_EDIT_PIN_TABLE::DataViewModel::GetColumnType( unsigned int aCol ) const |
|||
{ |
|||
return wxT( "string" ); |
|||
} |
|||
|
|||
|
|||
void DIALOG_LIB_EDIT_PIN_TABLE::DataViewModel::GetValue( wxVariant& aVal, |
|||
const wxDataViewItem& aItem, |
|||
unsigned int aCol ) const |
|||
{ |
|||
assert( aItem.IsOk() ); |
|||
|
|||
reinterpret_cast<Item const*>( aItem.GetID() )->GetValue( aVal, aCol ); |
|||
} |
|||
|
|||
|
|||
bool DIALOG_LIB_EDIT_PIN_TABLE::DataViewModel::SetValue( const wxVariant&, |
|||
const wxDataViewItem&, |
|||
unsigned int ) |
|||
{ |
|||
return false; |
|||
} |
|||
|
|||
|
|||
wxDataViewItem DIALOG_LIB_EDIT_PIN_TABLE::DataViewModel::GetParent( const wxDataViewItem& aItem ) |
|||
const |
|||
{ |
|||
assert( aItem.IsOk() ); |
|||
|
|||
return reinterpret_cast<Item const*>( aItem.GetID() )->GetParent(); |
|||
} |
|||
|
|||
|
|||
bool DIALOG_LIB_EDIT_PIN_TABLE::DataViewModel::IsContainer( const wxDataViewItem& aItem ) const |
|||
{ |
|||
if( aItem.IsOk() ) |
|||
return reinterpret_cast<Item const*>( aItem.GetID() )->IsContainer(); |
|||
else |
|||
return true; |
|||
} |
|||
|
|||
|
|||
bool DIALOG_LIB_EDIT_PIN_TABLE::DataViewModel::HasContainerColumns( const wxDataViewItem& ) const |
|||
{ |
|||
return true; |
|||
} |
|||
|
|||
|
|||
unsigned int DIALOG_LIB_EDIT_PIN_TABLE::DataViewModel::GetChildren( const wxDataViewItem& aItem, |
|||
wxDataViewItemArray& aItems ) const |
|||
{ |
|||
if( !aItem.IsOk() ) |
|||
{ |
|||
for( std::map<wxString, Group>::iterator i = m_Groups.begin(); i != m_Groups.end(); ++i ) |
|||
if( i->second.GetCount() > 1 ) |
|||
aItems.push_back( wxDataViewItem( &i->second ) ); |
|||
|
|||
for( std::list<Pin>::iterator i = m_Pins.begin(); i != m_Pins.end(); ++i ) |
|||
if( !i->GetParent().IsOk() ) |
|||
aItems.push_back( wxDataViewItem( &*i ) ); |
|||
|
|||
return aItems.size(); |
|||
} |
|||
else |
|||
return reinterpret_cast<Item const*>( aItem.GetID() )->GetChildren( aItems ); |
|||
} |
|||
|
|||
|
|||
namespace { |
|||
wxString GetNextComponent( const wxString& str, wxString::size_type& cursor ) |
|||
{ |
|||
if( str.size() <= cursor ) |
|||
return wxEmptyString; |
|||
|
|||
wxString::size_type begin = cursor; |
|||
|
|||
wxUniChar c = str[cursor]; |
|||
|
|||
if( isdigit( c ) || c == '+' || c == '-' ) |
|||
{ |
|||
// number, possibly with sign
|
|||
while( ++cursor < str.size() ) |
|||
{ |
|||
c = str[cursor]; |
|||
|
|||
if( isdigit( c ) || c == 'v' || c == 'V' ) |
|||
continue; |
|||
else |
|||
break; |
|||
} |
|||
} |
|||
else |
|||
{ |
|||
while( ++cursor < str.size() ) |
|||
{ |
|||
c = str[cursor]; |
|||
|
|||
if( isdigit( c ) ) |
|||
break; |
|||
else |
|||
continue; |
|||
} |
|||
} |
|||
|
|||
return str.substr( begin, cursor - begin ); |
|||
} |
|||
|
|||
|
|||
int ComparePinNames( const wxString& lhs, const wxString& rhs ) |
|||
{ |
|||
wxString::size_type cursor1 = 0; |
|||
wxString::size_type cursor2 = 0; |
|||
|
|||
wxString comp1, comp2; |
|||
|
|||
for( ; ; ) |
|||
{ |
|||
comp1 = GetNextComponent( lhs, cursor1 ); |
|||
comp2 = GetNextComponent( rhs, cursor2 ); |
|||
|
|||
if( comp1.empty() && comp2.empty() ) |
|||
return 0; |
|||
|
|||
if( comp1.empty() ) |
|||
return -1; |
|||
|
|||
if( comp2.empty() ) |
|||
return 1; |
|||
|
|||
wxUniChar c1 = comp1[0]; |
|||
wxUniChar c2 = comp2[0]; |
|||
|
|||
if( isdigit( c1 ) || c1 == '-' || c1 == '+' ) |
|||
{ |
|||
if( isdigit( c2 ) || c2 == '-' || c2 == '+' ) |
|||
{ |
|||
// numeric comparison
|
|||
wxString::size_type v1 = comp1.find_first_of( "vV" ); |
|||
|
|||
if( v1 != wxString::npos ) |
|||
comp1[v1] = '.'; |
|||
|
|||
wxString::size_type v2 = comp2.find_first_of( "vV" ); |
|||
|
|||
if( v2 != wxString::npos ) |
|||
comp2[v2] = '.'; |
|||
|
|||
double val1, val2; |
|||
|
|||
comp1.ToDouble( &val1 ); |
|||
comp2.ToDouble( &val2 ); |
|||
|
|||
if( val1 < val2 ) |
|||
return -1; |
|||
|
|||
if( val1 > val2 ) |
|||
return 1; |
|||
} |
|||
else |
|||
return -1; |
|||
} |
|||
else |
|||
{ |
|||
if( isdigit( c2 ) || c2 == '-' || c2 == '+' ) |
|||
return 1; |
|||
|
|||
int res = comp1.Cmp( comp2 ); |
|||
|
|||
if( res != 0 ) |
|||
return res; |
|||
} |
|||
} |
|||
} |
|||
|
|||
|
|||
class CompareLess |
|||
{ |
|||
public: |
|||
bool operator()( const wxString& lhs, const wxString& rhs ) |
|||
{ |
|||
return ComparePinNames( lhs, rhs ) == -1; |
|||
} |
|||
}; |
|||
} |
|||
|
|||
int DIALOG_LIB_EDIT_PIN_TABLE::DataViewModel::Compare( const wxDataViewItem& aItem1, |
|||
const wxDataViewItem& aItem2, |
|||
unsigned int aCol, |
|||
bool aAscending ) const |
|||
{ |
|||
wxVariant var1; |
|||
|
|||
GetValue( var1, aItem1, aCol ); |
|||
wxString str1 = var1.GetString(); |
|||
|
|||
wxVariant var2; |
|||
GetValue( var2, aItem2, aCol ); |
|||
wxString str2 = var2.GetString(); |
|||
|
|||
int res = ComparePinNames( str1, str2 ); |
|||
|
|||
if( res == 0 ) |
|||
res = ( aItem1.GetID() < aItem2.GetID() ) ? -1 : 1; |
|||
|
|||
return res * ( aAscending ? 1 : -1 ); |
|||
} |
|||
|
|||
|
|||
void DIALOG_LIB_EDIT_PIN_TABLE::DataViewModel::SetGroupingColumn( int aCol ) |
|||
{ |
|||
if( m_GroupingColumn == aCol ) |
|||
return; |
|||
|
|||
m_GroupingColumn = aCol; |
|||
|
|||
CalculateGrouping(); |
|||
Refresh(); |
|||
} |
|||
|
|||
|
|||
void DIALOG_LIB_EDIT_PIN_TABLE::DataViewModel::CalculateGrouping() |
|||
{ |
|||
m_Groups.clear(); |
|||
|
|||
if( m_GroupingColumn != -1 ) |
|||
{ |
|||
wxVariant value; |
|||
|
|||
for( std::list<Pin>::iterator i = m_Pins.begin(); i != m_Pins.end(); ++i ) |
|||
{ |
|||
i->GetValue( value, m_GroupingColumn ); |
|||
wxString str = value.GetString(); |
|||
std::map<wxString, Group>::iterator j = m_Groups.find( str ); |
|||
|
|||
if( j == m_Groups.end() ) |
|||
j = m_Groups.insert( std::make_pair( str, m_GroupingColumn ) ).first; |
|||
|
|||
j->second.Add( &*i ); |
|||
} |
|||
} |
|||
else |
|||
{ |
|||
for( std::list<Pin>::iterator i = m_Pins.begin(); i != m_Pins.end(); ++i ) |
|||
i->SetGroup( 0 ); |
|||
} |
|||
} |
|||
|
|||
|
|||
void DIALOG_LIB_EDIT_PIN_TABLE::DataViewModel::Refresh() |
|||
{ |
|||
#ifdef REASSOCIATE_HACK
|
|||
m_Widget->AssociateModel( this ); |
|||
#else
|
|||
Cleared(); |
|||
|
|||
std::queue<wxDataViewItem> todo; |
|||
todo.push( wxDataViewItem() ); |
|||
|
|||
while( !todo.empty() ) |
|||
{ |
|||
wxDataViewItem current = todo.front(); |
|||
wxDataViewItemArray items; |
|||
|
|||
GetChildren( current, items ); |
|||
ItemsAdded( current, items ); |
|||
|
|||
for( wxDataViewItemArray::const_iterator i = items.begin(); i != items.end(); ++i ) |
|||
{ |
|||
if( IsContainer( *i ) ) |
|||
todo.push( *i ); |
|||
} |
|||
|
|||
todo.pop(); |
|||
} |
|||
|
|||
#endif
|
|||
} |
|||
|
|||
|
|||
void DIALOG_LIB_EDIT_PIN_TABLE::DataViewModel::Group::GetValue( wxVariant& aValue, |
|||
unsigned int aCol ) const |
|||
{ |
|||
if( aCol == m_GroupingColumn ) |
|||
{ |
|||
// shortcut
|
|||
m_Members.front()->GetValue( aValue, aCol ); |
|||
} |
|||
else |
|||
{ |
|||
std::set<wxString, CompareLess> values; |
|||
|
|||
for( std::list<Pin*>::const_iterator i = m_Members.begin(); i != m_Members.end(); ++i ) |
|||
{ |
|||
wxVariant value; |
|||
(*i)->GetValue( value, aCol ); |
|||
values.insert( value.GetString() ); |
|||
} |
|||
|
|||
aValue = boost::algorithm::join( values, "," ); |
|||
} |
|||
} |
|||
|
|||
|
|||
void DIALOG_LIB_EDIT_PIN_TABLE::DataViewModel::Group::Add( Pin* aPin ) |
|||
{ |
|||
switch( GetCount() ) |
|||
{ |
|||
case 0: |
|||
aPin->SetGroup( 0 ); |
|||
break; |
|||
|
|||
case 1: |
|||
m_Members.front()->SetGroup( this ); |
|||
|
|||
default: |
|||
aPin->SetGroup( this ); |
|||
} |
|||
|
|||
m_Members.push_back( aPin ); |
|||
} |
|||
|
|||
|
|||
void DIALOG_LIB_EDIT_PIN_TABLE::DataViewModel::Pin::GetValue( wxVariant& aValue, |
|||
unsigned int aCol ) const |
|||
{ |
|||
switch( aCol ) |
|||
{ |
|||
case PIN_NUMBER: |
|||
aValue = m_Backing->GetNumberString(); |
|||
break; |
|||
|
|||
case PIN_NAME: |
|||
{ |
|||
if( m_Model.m_UnitCount > 1 ) |
|||
{ |
|||
wxString name; |
|||
int unit = m_Backing->GetPartNumber(); |
|||
|
|||
if( unit ) |
|||
name << unit; |
|||
else |
|||
name << "com"; |
|||
|
|||
name << ':'; |
|||
name << m_Backing->GetName(); |
|||
aValue = name; |
|||
} |
|||
else |
|||
{ |
|||
aValue = m_Backing->GetName(); |
|||
} |
|||
} |
|||
break; |
|||
|
|||
case PIN_TYPE: |
|||
aValue = m_Backing->GetTypeString(); |
|||
break; |
|||
} |
|||
} |
@ -0,0 +1,18 @@ |
|||
#include "dialog_lib_edit_pin_table_base.h" |
|||
|
|||
#include "class_library.h" |
|||
|
|||
class DIALOG_LIB_EDIT_PIN_TABLE : |
|||
public DIALOG_LIB_EDIT_PIN_TABLE_BASE |
|||
{ |
|||
public: |
|||
DIALOG_LIB_EDIT_PIN_TABLE( wxWindow* parent, LIB_PART& aPart ); |
|||
~DIALOG_LIB_EDIT_PIN_TABLE(); |
|||
|
|||
virtual void OnColumnHeaderRightClicked( wxDataViewEvent& aEvent ); |
|||
|
|||
private: |
|||
class DataViewModel; |
|||
|
|||
wxObjectDataPtr<DataViewModel> m_Model; |
|||
}; |
@ -0,0 +1,46 @@ |
|||
///////////////////////////////////////////////////////////////////////////
|
|||
// C++ code generated with wxFormBuilder (version Jun 5 2014)
|
|||
// http://www.wxformbuilder.org/
|
|||
//
|
|||
// PLEASE DO "NOT" EDIT THIS FILE!
|
|||
///////////////////////////////////////////////////////////////////////////
|
|||
|
|||
#include "dialog_lib_edit_pin_table_base.h"
|
|||
|
|||
///////////////////////////////////////////////////////////////////////////
|
|||
|
|||
DIALOG_LIB_EDIT_PIN_TABLE_BASE::DIALOG_LIB_EDIT_PIN_TABLE_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : DIALOG_SHIM( parent, id, title, pos, size, style ) |
|||
{ |
|||
this->SetSizeHints( wxDefaultSize, wxDefaultSize ); |
|||
|
|||
wxBoxSizer* top_sizer; |
|||
top_sizer = new wxBoxSizer( wxVERTICAL ); |
|||
|
|||
m_Pins = new wxDataViewCtrl( this, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxDV_HORIZ_RULES|wxDV_MULTIPLE|wxDV_ROW_LINES|wxDV_VERT_RULES|wxVSCROLL ); |
|||
m_Pins->SetMinSize( wxSize( 400,400 ) ); |
|||
|
|||
top_sizer->Add( m_Pins, 1, wxALL|wxEXPAND, 5 ); |
|||
|
|||
m_Buttons = new wxStdDialogButtonSizer(); |
|||
m_ButtonsOK = new wxButton( this, wxID_OK ); |
|||
m_Buttons->AddButton( m_ButtonsOK ); |
|||
m_Buttons->Realize(); |
|||
|
|||
top_sizer->Add( m_Buttons, 0, wxEXPAND|wxALL, 5 ); |
|||
|
|||
|
|||
this->SetSizer( top_sizer ); |
|||
this->Layout(); |
|||
|
|||
this->Centre( wxBOTH ); |
|||
|
|||
// Connect Events
|
|||
this->Connect( wxID_ANY, wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK, wxDataViewEventHandler( DIALOG_LIB_EDIT_PIN_TABLE_BASE::OnColumnHeaderRightClicked ) ); |
|||
} |
|||
|
|||
DIALOG_LIB_EDIT_PIN_TABLE_BASE::~DIALOG_LIB_EDIT_PIN_TABLE_BASE() |
|||
{ |
|||
// Disconnect Events
|
|||
this->Disconnect( wxID_ANY, wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK, wxDataViewEventHandler( DIALOG_LIB_EDIT_PIN_TABLE_BASE::OnColumnHeaderRightClicked ) ); |
|||
|
|||
} |
@ -0,0 +1,193 @@ |
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> |
|||
<wxFormBuilder_Project> |
|||
<FileVersion major="1" minor="13" /> |
|||
<object class="Project" expanded="1"> |
|||
<property name="class_decoration"></property> |
|||
<property name="code_generation">C++</property> |
|||
<property name="disconnect_events">1</property> |
|||
<property name="disconnect_mode">source_name</property> |
|||
<property name="disconnect_php_events">0</property> |
|||
<property name="disconnect_python_events">0</property> |
|||
<property name="embedded_files_path">res</property> |
|||
<property name="encoding">UTF-8</property> |
|||
<property name="event_generation">connect</property> |
|||
<property name="file">dialog_lib_edit_pin_table_base</property> |
|||
<property name="first_id">1000</property> |
|||
<property name="help_provider">none</property> |
|||
<property name="internationalize">1</property> |
|||
<property name="name">dialog_lib_edit_pin_table</property> |
|||
<property name="namespace"></property> |
|||
<property name="path">.</property> |
|||
<property name="precompiled_header"></property> |
|||
<property name="relative_path">1</property> |
|||
<property name="skip_lua_events">1</property> |
|||
<property name="skip_php_events">1</property> |
|||
<property name="skip_python_events">1</property> |
|||
<property name="ui_table">UI</property> |
|||
<property name="use_enum">0</property> |
|||
<property name="use_microsoft_bom">0</property> |
|||
<object class="Dialog" expanded="1"> |
|||
<property name="aui_managed">0</property> |
|||
<property name="aui_manager_style">wxAUI_MGR_DEFAULT</property> |
|||
<property name="bg"></property> |
|||
<property name="center">wxBOTH</property> |
|||
<property name="context_help"></property> |
|||
<property name="context_menu">1</property> |
|||
<property name="enabled">1</property> |
|||
<property name="event_handler">decl_pure_virtual</property> |
|||
<property name="extra_style"></property> |
|||
<property name="fg"></property> |
|||
<property name="font"></property> |
|||
<property name="hidden">0</property> |
|||
<property name="id">wxID_ANY</property> |
|||
<property name="maximum_size"></property> |
|||
<property name="minimum_size"></property> |
|||
<property name="name">DIALOG_LIB_EDIT_PIN_TABLE_BASE</property> |
|||
<property name="pos"></property> |
|||
<property name="size">431,304</property> |
|||
<property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property> |
|||
<property name="subclass">DIALOG_SHIM; dialog_shim.h</property> |
|||
<property name="title">Pin Table</property> |
|||
<property name="tooltip"></property> |
|||
<property name="window_extra_style"></property> |
|||
<property name="window_name"></property> |
|||
<property name="window_style"></property> |
|||
<event name="OnActivate"></event> |
|||
<event name="OnActivateApp"></event> |
|||
<event name="OnAuiFindManager"></event> |
|||
<event name="OnAuiPaneButton"></event> |
|||
<event name="OnAuiPaneClose"></event> |
|||
<event name="OnAuiPaneMaximize"></event> |
|||
<event name="OnAuiPaneRestore"></event> |
|||
<event name="OnAuiRender"></event> |
|||
<event name="OnChar"></event> |
|||
<event name="OnClose"></event> |
|||
<event name="OnEnterWindow"></event> |
|||
<event name="OnEraseBackground"></event> |
|||
<event name="OnHibernate"></event> |
|||
<event name="OnIconize"></event> |
|||
<event name="OnIdle"></event> |
|||
<event name="OnInitDialog"></event> |
|||
<event name="OnKeyDown"></event> |
|||
<event name="OnKeyUp"></event> |
|||
<event name="OnKillFocus"></event> |
|||
<event name="OnLeaveWindow"></event> |
|||
<event name="OnLeftDClick"></event> |
|||
<event name="OnLeftDown"></event> |
|||
<event name="OnLeftUp"></event> |
|||
<event name="OnMiddleDClick"></event> |
|||
<event name="OnMiddleDown"></event> |
|||
<event name="OnMiddleUp"></event> |
|||
<event name="OnMotion"></event> |
|||
<event name="OnMouseEvents"></event> |
|||
<event name="OnMouseWheel"></event> |
|||
<event name="OnPaint"></event> |
|||
<event name="OnRightDClick"></event> |
|||
<event name="OnRightDown"></event> |
|||
<event name="OnRightUp"></event> |
|||
<event name="OnSetFocus"></event> |
|||
<event name="OnSize"></event> |
|||
<event name="OnUpdateUI"></event> |
|||
<object class="wxBoxSizer" expanded="1"> |
|||
<property name="minimum_size"></property> |
|||
<property name="name">top_sizer</property> |
|||
<property name="orient">wxVERTICAL</property> |
|||
<property name="permission">none</property> |
|||
<object class="sizeritem" expanded="1"> |
|||
<property name="border">5</property> |
|||
<property name="flag">wxALL|wxEXPAND</property> |
|||
<property name="proportion">1</property> |
|||
<object class="wxDataViewCtrl" expanded="1"> |
|||
<property name="bg"></property> |
|||
<property name="context_help"></property> |
|||
<property name="context_menu">1</property> |
|||
<property name="enabled">1</property> |
|||
<property name="fg"></property> |
|||
<property name="font"></property> |
|||
<property name="hidden">0</property> |
|||
<property name="id">wxID_ANY</property> |
|||
<property name="maximum_size"></property> |
|||
<property name="minimum_size">400,400</property> |
|||
<property name="name">m_Pins</property> |
|||
<property name="permission">protected</property> |
|||
<property name="pos"></property> |
|||
<property name="size">-1,-1</property> |
|||
<property name="style">wxDV_HORIZ_RULES|wxDV_MULTIPLE|wxDV_ROW_LINES|wxDV_VERT_RULES</property> |
|||
<property name="subclass"></property> |
|||
<property name="tooltip"></property> |
|||
<property name="window_extra_style"></property> |
|||
<property name="window_name"></property> |
|||
<property name="window_style">wxVSCROLL</property> |
|||
<event name="OnChar"></event> |
|||
<event name="OnDataViewCtrlColumnHeaderClick"></event> |
|||
<event name="OnDataViewCtrlColumnHeaderRightClick">OnColumnHeaderRightClicked</event> |
|||
<event name="OnDataViewCtrlColumnReordered"></event> |
|||
<event name="OnDataViewCtrlColumnSorted"></event> |
|||
<event name="OnDataViewCtrlItemActivated"></event> |
|||
<event name="OnDataViewCtrlItemBeginDrag"></event> |
|||
<event name="OnDataViewCtrlItemCollapsed"></event> |
|||
<event name="OnDataViewCtrlItemCollapsing"></event> |
|||
<event name="OnDataViewCtrlItemContextMenu"></event> |
|||
<event name="OnDataViewCtrlItemDrop"></event> |
|||
<event name="OnDataViewCtrlItemDropPossible"></event> |
|||
<event name="OnDataViewCtrlItemEditingDone"></event> |
|||
<event name="OnDataViewCtrlItemEditingStarted"></event> |
|||
<event name="OnDataViewCtrlItemExpanded"></event> |
|||
<event name="OnDataViewCtrlItemExpanding"></event> |
|||
<event name="OnDataViewCtrlItemStartEditing"></event> |
|||
<event name="OnDataViewCtrlItemValueChanged"></event> |
|||
<event name="OnDataViewCtrlSelectionChanged"></event> |
|||
<event name="OnEnterWindow"></event> |
|||
<event name="OnEraseBackground"></event> |
|||
<event name="OnKeyDown"></event> |
|||
<event name="OnKeyUp"></event> |
|||
<event name="OnKillFocus"></event> |
|||
<event name="OnLeaveWindow"></event> |
|||
<event name="OnLeftDClick"></event> |
|||
<event name="OnLeftDown"></event> |
|||
<event name="OnLeftUp"></event> |
|||
<event name="OnMiddleDClick"></event> |
|||
<event name="OnMiddleDown"></event> |
|||
<event name="OnMiddleUp"></event> |
|||
<event name="OnMotion"></event> |
|||
<event name="OnMouseEvents"></event> |
|||
<event name="OnMouseWheel"></event> |
|||
<event name="OnPaint"></event> |
|||
<event name="OnRightDClick"></event> |
|||
<event name="OnRightDown"></event> |
|||
<event name="OnRightUp"></event> |
|||
<event name="OnSetFocus"></event> |
|||
<event name="OnSize"></event> |
|||
<event name="OnUpdateUI"></event> |
|||
</object> |
|||
</object> |
|||
<object class="sizeritem" expanded="1"> |
|||
<property name="border">5</property> |
|||
<property name="flag">wxEXPAND|wxALL</property> |
|||
<property name="proportion">0</property> |
|||
<object class="wxStdDialogButtonSizer" expanded="1"> |
|||
<property name="Apply">0</property> |
|||
<property name="Cancel">0</property> |
|||
<property name="ContextHelp">0</property> |
|||
<property name="Help">0</property> |
|||
<property name="No">0</property> |
|||
<property name="OK">1</property> |
|||
<property name="Save">0</property> |
|||
<property name="Yes">0</property> |
|||
<property name="minimum_size"></property> |
|||
<property name="name">m_Buttons</property> |
|||
<property name="permission">protected</property> |
|||
<event name="OnApplyButtonClick"></event> |
|||
<event name="OnCancelButtonClick"></event> |
|||
<event name="OnContextHelpButtonClick"></event> |
|||
<event name="OnHelpButtonClick"></event> |
|||
<event name="OnNoButtonClick"></event> |
|||
<event name="OnOKButtonClick"></event> |
|||
<event name="OnSaveButtonClick"></event> |
|||
<event name="OnYesButtonClick"></event> |
|||
</object> |
|||
</object> |
|||
</object> |
|||
</object> |
|||
</object> |
|||
</wxFormBuilder_Project> |
@ -0,0 +1,53 @@ |
|||
/////////////////////////////////////////////////////////////////////////// |
|||
// C++ code generated with wxFormBuilder (version Jun 5 2014) |
|||
// http://www.wxformbuilder.org/ |
|||
// |
|||
// PLEASE DO "NOT" EDIT THIS FILE! |
|||
/////////////////////////////////////////////////////////////////////////// |
|||
|
|||
#ifndef __DIALOG_LIB_EDIT_PIN_TABLE_BASE_H__ |
|||
#define __DIALOG_LIB_EDIT_PIN_TABLE_BASE_H__ |
|||
|
|||
#include <wx/artprov.h> |
|||
#include <wx/xrc/xmlres.h> |
|||
#include <wx/intl.h> |
|||
class DIALOG_SHIM; |
|||
|
|||
#include "dialog_shim.h" |
|||
#include <wx/dataview.h> |
|||
#include <wx/gdicmn.h> |
|||
#include <wx/font.h> |
|||
#include <wx/colour.h> |
|||
#include <wx/settings.h> |
|||
#include <wx/string.h> |
|||
#include <wx/sizer.h> |
|||
#include <wx/button.h> |
|||
#include <wx/dialog.h> |
|||
|
|||
/////////////////////////////////////////////////////////////////////////// |
|||
|
|||
|
|||
/////////////////////////////////////////////////////////////////////////////// |
|||
/// Class DIALOG_LIB_EDIT_PIN_TABLE_BASE |
|||
/////////////////////////////////////////////////////////////////////////////// |
|||
class DIALOG_LIB_EDIT_PIN_TABLE_BASE : public DIALOG_SHIM |
|||
{ |
|||
private: |
|||
|
|||
protected: |
|||
wxDataViewCtrl* m_Pins; |
|||
wxStdDialogButtonSizer* m_Buttons; |
|||
wxButton* m_ButtonsOK; |
|||
|
|||
// Virtual event handlers, overide them in your derived class |
|||
virtual void OnColumnHeaderRightClicked( wxDataViewEvent& event ) = 0; |
|||
|
|||
|
|||
public: |
|||
|
|||
DIALOG_LIB_EDIT_PIN_TABLE_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Pin Table"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 431,304 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); |
|||
~DIALOG_LIB_EDIT_PIN_TABLE_BASE(); |
|||
|
|||
}; |
|||
|
|||
#endif //__DIALOG_LIB_EDIT_PIN_TABLE_BASE_H__ |
Write
Preview
Loading…
Cancel
Save
Reference in new issue