Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
K
kicad-source-mirror
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
Elphel
kicad-source-mirror
Commits
273244a1
Commit
273244a1
authored
Jan 21, 2013
by
Dick Hollenbeck
Browse files
Options
Browse Files
Download
Plain Diff
merge in branch fp-lib-table
parents
ac64da65
8fd0c322
Changes
13
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
647 additions
and
216 deletions
+647
-216
dsnlexer.cpp
common/dsnlexer.cpp
+4
-6
fp_lib_table.cpp
common/fp_lib_table.cpp
+102
-44
fp_lib_table.keywords
common/fp_lib_table.keywords
+3
-5
richio.cpp
common/richio.cpp
+41
-10
fp_lib_table.h
include/fp_lib_table.h
+61
-59
richio.h
include/richio.h
+2
-18
dialog_fp_lib_table.cpp
pcbnew/dialogs/dialog_fp_lib_table.cpp
+337
-36
dialog_fp_lib_table_base.cpp
pcbnew/dialogs/dialog_fp_lib_table_base.cpp
+21
-7
dialog_fp_lib_table_base.fbp
pcbnew/dialogs/dialog_fp_lib_table_base.fbp
+15
-15
dialog_fp_lib_table_base.h
pcbnew/dialogs/dialog_fp_lib_table_base.h
+6
-2
io_mgr.h
pcbnew/io_mgr.h
+1
-0
pcb_plot_params.h
pcbnew/pcb_plot_params.h
+3
-4
pcbnew_config.cpp
pcbnew/pcbnew_config.cpp
+51
-10
No files found.
common/dsnlexer.cpp
View file @
273244a1
...
@@ -304,9 +304,8 @@ void DSNLEXER::Unexpected( int aTok ) throw( IO_ERROR )
...
@@ -304,9 +304,8 @@ void DSNLEXER::Unexpected( int aTok ) throw( IO_ERROR )
void
DSNLEXER
::
Duplicate
(
int
aTok
)
throw
(
IO_ERROR
)
void
DSNLEXER
::
Duplicate
(
int
aTok
)
throw
(
IO_ERROR
)
{
{
wxString
errText
;
wxString
errText
=
wxString
::
Format
(
_
(
"%s is a duplicate"
),
GetTokenString
(
aTok
).
GetData
()
);
errText
.
Printf
(
_
(
"%s is a duplicate"
),
GetTokenString
(
aTok
).
GetData
()
);
THROW_PARSE_ERROR
(
errText
,
CurSource
(),
CurLine
(),
CurLineNumber
(),
CurOffset
()
);
THROW_PARSE_ERROR
(
errText
,
CurSource
(),
CurLine
(),
CurLineNumber
(),
CurOffset
()
);
}
}
...
@@ -358,9 +357,8 @@ int DSNLEXER::NeedNUMBER( const char* aExpectation ) throw( IO_ERROR )
...
@@ -358,9 +357,8 @@ int DSNLEXER::NeedNUMBER( const char* aExpectation ) throw( IO_ERROR )
int
tok
=
NextTok
();
int
tok
=
NextTok
();
if
(
tok
!=
DSN_NUMBER
)
if
(
tok
!=
DSN_NUMBER
)
{
{
wxString
errText
;
wxString
errText
=
wxString
::
Format
(
_
(
"need a NUMBER for '%s'"
),
wxString
::
FromUTF8
(
aExpectation
).
GetData
()
);
errText
.
Printf
(
_
(
"need a NUMBER for '%s'"
),
wxString
::
FromUTF8
(
aExpectation
).
GetData
()
);
THROW_PARSE_ERROR
(
errText
,
CurSource
(),
CurLine
(),
CurLineNumber
(),
CurOffset
()
);
THROW_PARSE_ERROR
(
errText
,
CurSource
(),
CurLine
(),
CurLineNumber
(),
CurOffset
()
);
}
}
return
tok
;
return
tok
;
...
...
common/fp_lib_table.cpp
View file @
273244a1
...
@@ -24,6 +24,8 @@
...
@@ -24,6 +24,8 @@
*/
*/
#include <wx/config.h> // wxExpandEnvVars()
#include <set>
#include <set>
#include <io_mgr.h>
#include <io_mgr.h>
...
@@ -45,11 +47,29 @@ FP_LIB_TABLE::FP_LIB_TABLE( FP_LIB_TABLE* aFallBackTable ) :
...
@@ -45,11 +47,29 @@ FP_LIB_TABLE::FP_LIB_TABLE( FP_LIB_TABLE* aFallBackTable ) :
void
FP_LIB_TABLE
::
Parse
(
FP_LIB_TABLE_LEXER
*
in
)
throw
(
IO_ERROR
,
PARSE_ERROR
)
void
FP_LIB_TABLE
::
Parse
(
FP_LIB_TABLE_LEXER
*
in
)
throw
(
IO_ERROR
,
PARSE_ERROR
)
{
{
/*
(fp_lib_table
(lib (name NICKNAME)(descr DESCRIPTION)(type TYPE)(full_uri FULL_URI)(options OPTIONS))
:
)
Elements after (name) are order independent.
*/
T
tok
;
T
tok
;
// This table may be nested within a larger s-expression, or not.
// Allow for parser of that optional containing s-epression to have looked ahead.
if
(
in
->
CurTok
()
!=
T_fp_lib_table
)
{
in
->
NeedLEFT
();
if
(
(
tok
=
in
->
NextTok
()
)
!=
T_fp_lib_table
)
in
->
Expecting
(
T_fp_lib_table
);
}
while
(
(
tok
=
in
->
NextTok
()
)
!=
T_RIGHT
)
while
(
(
tok
=
in
->
NextTok
()
)
!=
T_RIGHT
)
{
{
// (lib (name "LOGICAL")(type "TYPE")(full_uri "FULL_URI")(options "OPTIONS"))
ROW
row
;
// reconstructed for each row in input stream.
if
(
tok
==
T_EOF
)
if
(
tok
==
T_EOF
)
in
->
Expecting
(
T_RIGHT
);
in
->
Expecting
(
T_RIGHT
);
...
@@ -57,10 +77,14 @@ void FP_LIB_TABLE::Parse( FP_LIB_TABLE_LEXER* in ) throw( IO_ERROR, PARSE_ERROR
...
@@ -57,10 +77,14 @@ void FP_LIB_TABLE::Parse( FP_LIB_TABLE_LEXER* in ) throw( IO_ERROR, PARSE_ERROR
if
(
tok
!=
T_LEFT
)
if
(
tok
!=
T_LEFT
)
in
->
Expecting
(
T_LEFT
);
in
->
Expecting
(
T_LEFT
);
if
(
(
tok
=
in
->
NextTok
()
)
!=
T_fp_lib
)
// in case there is a "row integrity" error, tell where later.
in
->
Expecting
(
T_fp_lib
);
int
lineNum
=
in
->
CurLineNumber
();
int
offset
=
in
->
CurOffset
();
if
(
(
tok
=
in
->
NextTok
()
)
!=
T_lib
)
in
->
Expecting
(
T_lib
);
// (name
"LOGICAL_NAME"
)
// (name
NICKNAME
)
in
->
NeedLEFT
();
in
->
NeedLEFT
();
if
(
(
tok
=
in
->
NextTok
()
)
!=
T_name
)
if
(
(
tok
=
in
->
NextTok
()
)
!=
T_name
)
...
@@ -68,48 +92,74 @@ void FP_LIB_TABLE::Parse( FP_LIB_TABLE_LEXER* in ) throw( IO_ERROR, PARSE_ERROR
...
@@ -68,48 +92,74 @@ void FP_LIB_TABLE::Parse( FP_LIB_TABLE_LEXER* in ) throw( IO_ERROR, PARSE_ERROR
in
->
NeedSYMBOLorNUMBER
();
in
->
NeedSYMBOLorNUMBER
();
ROW
row
;
row
.
SetNickName
(
in
->
FromUTF8
()
);
row
.
SetNickName
(
in
->
FromUTF8
()
);
in
->
NeedRIGHT
();
in
->
NeedRIGHT
();
//
(uri "FULL_URI")
//
After (name), remaining (lib) elements are order independent, and in
in
->
NeedLEFT
();
// some cases optional.
if
(
(
tok
=
in
->
NextTok
()
)
!=
T_full_uri
)
bool
sawType
=
false
;
in
->
Expecting
(
T_full_uri
);
bool
sawOpts
=
false
;
bool
sawDesc
=
false
;
bool
sawUri
=
false
;
in
->
NeedSYMBOLorNUMBER
();
while
(
(
tok
=
in
->
NextTok
()
)
!=
T_RIGHT
)
{
row
.
SetFullURI
(
in
->
FromUTF8
()
);
if
(
tok
==
T_EOF
)
in
->
Unexpected
(
T_EOF
);
in
->
NeedRIGHT
();
// (type "TYPE"
)
if
(
tok
!=
T_LEFT
)
in
->
NeedLEFT
(
);
in
->
Expecting
(
T_LEFT
);
if
(
(
tok
=
in
->
NextTok
()
)
!=
T_type
)
tok
=
in
->
NeedSYMBOLorNUMBER
();
in
->
Expecting
(
T_type
);
switch
(
tok
)
{
case
T_uri
:
if
(
sawUri
)
in
->
Duplicate
(
tok
);
sawUri
=
true
;
in
->
NeedSYMBOLorNUMBER
();
in
->
NeedSYMBOLorNUMBER
();
row
.
SetFullURI
(
in
->
FromUTF8
()
);
break
;
case
T_type
:
if
(
sawType
)
in
->
Duplicate
(
tok
);
sawType
=
true
;
in
->
NeedSYMBOLorNUMBER
();
row
.
SetType
(
in
->
FromUTF8
()
);
row
.
SetType
(
in
->
FromUTF8
()
);
break
;
in
->
NeedRIGHT
();
case
T_options
:
if
(
sawOpts
)
// (options "OPTIONS")
in
->
Duplicate
(
tok
);
in
->
NeedLEFT
()
;
sawOpts
=
true
;
in
->
NeedSYMBOLorNUMBER
();
if
(
(
tok
=
in
->
NextTok
()
)
!=
T_options
)
row
.
SetOptions
(
in
->
FromUTF8
()
);
in
->
Expecting
(
T_options
)
;
break
;
case
T_descr
:
if
(
sawDesc
)
in
->
Duplicate
(
tok
);
sawDesc
=
true
;
in
->
NeedSYMBOLorNUMBER
();
in
->
NeedSYMBOLorNUMBER
();
row
.
SetDescr
(
in
->
FromUTF8
()
);
break
;
row
.
SetOptions
(
in
->
FromUTF8
()
);
default
:
in
->
Unexpected
(
tok
);
}
in
->
NeedRIGHT
();
in
->
NeedRIGHT
();
in
->
NeedRIGHT
();
// terminate the (lib..)
}
if
(
!
sawType
)
in
->
Expecting
(
T_type
);
if
(
!
sawUri
)
in
->
Expecting
(
T_uri
);
// all nickNames within this table fragment must be unique, so we do not
// all nickNames within this table fragment must be unique, so we do not
// use doReplace in InsertRow(). (However a fallBack table can have a
// use doReplace in InsertRow(). (However a fallBack table can have a
...
@@ -119,9 +169,8 @@ void FP_LIB_TABLE::Parse( FP_LIB_TABLE_LEXER* in ) throw( IO_ERROR, PARSE_ERROR
...
@@ -119,9 +169,8 @@ void FP_LIB_TABLE::Parse( FP_LIB_TABLE_LEXER* in ) throw( IO_ERROR, PARSE_ERROR
{
{
wxString
msg
=
wxString
::
Format
(
wxString
msg
=
wxString
::
Format
(
_
(
"'%s' is a duplicate footprint library nickName"
),
_
(
"'%s' is a duplicate footprint library nickName"
),
GetChars
(
row
.
nickName
)
GetChars
(
row
.
nickName
)
);
);
THROW_PARSE_ERROR
(
msg
,
in
->
CurSource
(),
in
->
CurLine
(),
lineNum
,
offset
);
THROW_IO_ERROR
(
msg
);
}
}
}
}
}
}
...
@@ -142,11 +191,12 @@ void FP_LIB_TABLE::Format( OUTPUTFORMATTER* out, int nestLevel ) const
...
@@ -142,11 +191,12 @@ void FP_LIB_TABLE::Format( OUTPUTFORMATTER* out, int nestLevel ) const
void
FP_LIB_TABLE
::
ROW
::
Format
(
OUTPUTFORMATTER
*
out
,
int
nestLevel
)
const
void
FP_LIB_TABLE
::
ROW
::
Format
(
OUTPUTFORMATTER
*
out
,
int
nestLevel
)
const
throw
(
IO_ERROR
)
throw
(
IO_ERROR
)
{
{
out
->
Print
(
nestLevel
,
"(lib (name %s)(
full_uri %s)(type %s)(options
%s))
\n
"
,
out
->
Print
(
nestLevel
,
"(lib (name %s)(
type %s)(uri %s)(options %s)(descr
%s))
\n
"
,
out
->
Quotew
(
GetNickName
()
).
c_str
(),
out
->
Quotew
(
GetNickName
()
).
c_str
(),
out
->
Quotew
(
GetFullURI
()
).
c_str
(),
out
->
Quotew
(
GetType
()
).
c_str
(),
out
->
Quotew
(
GetType
()
).
c_str
(),
out
->
Quotew
(
GetOptions
()
).
c_str
()
out
->
Quotew
(
GetFullURI
()
).
c_str
(),
out
->
Quotew
(
GetOptions
()
).
c_str
(),
out
->
Quotew
(
GetDescr
()
).
c_str
()
);
);
}
}
...
@@ -252,6 +302,14 @@ PLUGIN* FP_LIB_TABLE::PluginFind( const wxString& aLibraryNickName )
...
@@ -252,6 +302,14 @@ PLUGIN* FP_LIB_TABLE::PluginFind( const wxString& aLibraryNickName )
}
}
const
wxString
FP_LIB_TABLE
::
ExpandSubtitutions
(
const
wxString
aString
)
{
// We reserve the right to do this another way, by providing our own member
// function.
return
wxExpandEnvVars
(
aString
);
}
#if 0 // don't know that this is needed yet
#if 0 // don't know that this is needed yet
MODULE* FP_LIB_TABLE::LookupFootprint( const FP_LIB_ID& aFootprintId )
MODULE* FP_LIB_TABLE::LookupFootprint( const FP_LIB_ID& aFootprintId )
throw( IO_ERROR )
throw( IO_ERROR )
...
...
common/fp_lib_table.keywords
View file @
273244a1
fp_lib_table
fp_lib_table
lib
name
name
type
type
kicad
uri
legacy
eagle
full_uri
options
options
fp_lib
descr
common/richio.cpp
View file @
273244a1
...
@@ -39,15 +39,44 @@
...
@@ -39,15 +39,44 @@
// "richio" after its author, Richard Hollenbeck, aka Dick Hollenbeck.
// "richio" after its author, Richard Hollenbeck, aka Dick Hollenbeck.
void
IO_ERROR
::
init
(
const
char
*
aThrowersFile
,
const
char
*
aThrowersLoc
,
const
wxString
&
aMsg
)
{
errorText
.
Printf
(
IO_FORMAT
,
aMsg
.
GetData
(),
wxString
::
FromUTF8
(
aThrowersFile
).
GetData
(),
wxString
::
FromUTF8
(
aThrowersLoc
).
GetData
()
);
}
void
PARSE_ERROR
::
init
(
const
char
*
aThrowersFile
,
const
char
*
aThrowersLoc
,
const
wxString
&
aMsg
,
const
wxString
&
aSource
,
const
char
*
aInputLine
,
int
aLineNumber
,
int
aByteIndex
)
{
// save inpuLine, lineNumber, and offset for UI (.e.g. Sweet text editor)
inputLine
=
aInputLine
;
lineNumber
=
aLineNumber
;
byteIndex
=
aByteIndex
;
errorText
.
Printf
(
PARSE_FORMAT
,
aMsg
.
GetData
(),
aSource
.
GetData
(),
aLineNumber
,
aByteIndex
,
wxString
::
FromUTF8
(
aThrowersFile
).
GetData
(),
wxString
::
FromUTF8
(
aThrowersLoc
).
GetData
()
);
}
//-----<LINE_READER>------------------------------------------------------
//-----<LINE_READER>------------------------------------------------------
LINE_READER
::
LINE_READER
(
unsigned
aMaxLineLength
)
LINE_READER
::
LINE_READER
(
unsigned
aMaxLineLength
)
{
{
lineNum
=
0
;
lineNum
=
0
;
if
(
aMaxLineLength
==
0
)
// caller is goofed up.
if
(
aMaxLineLength
==
0
)
aMaxLineLength
=
LINE_READER_LINE_DEFAULT_MAX
;
{
line
=
0
;
}
else
{
maxLineLength
=
aMaxLineLength
;
maxLineLength
=
aMaxLineLength
;
// start at the INITIAL size, expand as needed up to the MAX size in maxLineLength
// start at the INITIAL size, expand as needed up to the MAX size in maxLineLength
...
@@ -60,6 +89,8 @@ LINE_READER::LINE_READER( unsigned aMaxLineLength )
...
@@ -60,6 +89,8 @@ LINE_READER::LINE_READER( unsigned aMaxLineLength )
line
=
new
char
[
capacity
];
line
=
new
char
[
capacity
];
line
[
0
]
=
'\0'
;
line
[
0
]
=
'\0'
;
}
length
=
0
;
length
=
0
;
}
}
...
...
include/fp_lib_table.h
View file @
273244a1
...
@@ -41,7 +41,7 @@ class FP_LIB_TABLE_LEXER;
...
@@ -41,7 +41,7 @@ class FP_LIB_TABLE_LEXER;
/**
/**
* Class FP_LIB_TABLE
* Class FP_LIB_TABLE
* holds FP_LIB_TABLE::ROW records
, and can be searched based on logical library n
ame.
* holds FP_LIB_TABLE::ROW records
(rows), and can be searched based on library nickN
ame.
* <p>
* <p>
* This class owns the <b>footprint library table</b>, which is like fstab in concept and maps
* This class owns the <b>footprint library table</b>, which is like fstab in concept and maps
* logical library name to the library URI, type, and options. It is heavily based on the SWEET
* logical library name to the library URI, type, and options. It is heavily based on the SWEET
...
@@ -104,10 +104,12 @@ public:
...
@@ -104,10 +104,12 @@ public:
{
{
}
}
ROW
(
const
wxString
&
aNick
,
const
wxString
&
aURI
,
const
wxString
&
aType
,
const
wxString
&
aOptions
)
:
ROW
(
const
wxString
&
aNick
,
const
wxString
&
aURI
,
const
wxString
&
aType
,
const
wxString
&
aOptions
,
const
wxString
&
aDescr
=
wxEmptyString
)
:
nickName
(
aNick
),
nickName
(
aNick
),
uri
(
aURI
),
uri
(
aURI
),
options
(
aOptions
)
options
(
aOptions
),
description
(
aDescr
)
{
{
SetType
(
aType
);
SetType
(
aType
);
}
}
...
@@ -119,90 +121,80 @@ public:
...
@@ -119,90 +121,80 @@ public:
bool
operator
!=
(
const
ROW
&
r
)
const
{
return
!
(
*
this
==
r
);
}
bool
operator
!=
(
const
ROW
&
r
)
const
{
return
!
(
*
this
==
r
);
}
//-----<accessors>------------------------------------------------------
/**
/**
* Function GetNickName
* Function GetNickName
* returns the short name of this library table row.
* returns the short name of this library table row.
*/
*/
const
wxString
&
GetNickName
()
const
const
wxString
&
GetNickName
()
const
{
return
nickName
;
}
{
return
nickName
;
/**
}
* Function SetNickName
* changes the logical name of this library, useful for an editor.
*/
void
SetNickName
(
const
wxString
&
aNickName
)
{
nickName
=
aNickName
;
}
/**
/**
* Function GetType
* Function GetType
* returns the type of LIB represented by this r
ecord
.
* returns the type of LIB represented by this r
ow
.
*/
*/
const
wxString
GetType
()
const
const
wxString
GetType
()
const
{
return
IO_MGR
::
ShowType
(
type
);
}
{
return
IO_MGR
::
ShowType
(
type
);
/**
}
* Function SetType
* changes the type represented by this row.
*/
void
SetType
(
const
wxString
&
aType
)
{
type
=
IO_MGR
::
EnumFromStr
(
aType
);
}
/**
/**
* Function GetFullURI
* Function GetFullURI
* returns the full location specifying URI for the LIB.
* returns the full location specifying URI for the LIB.
*/
*/
const
wxString
&
GetFullURI
()
const
const
wxString
&
GetFullURI
()
const
{
return
uri
;
}
{
return
uri
;
/**
}
* Function SetFullURI
* changes the full URI for the library.
*/
void
SetFullURI
(
const
wxString
&
aFullURI
)
{
uri
=
aFullURI
;
}
/**
/**
* Function GetOptions
* Function GetOptions
* returns the options string, which may hold a password or anything else needed to
* returns the options string, which may hold a password or anything else needed to
* instantiate the underlying LIB_SOURCE.
* instantiate the underlying LIB_SOURCE.
*/
*/
const
wxString
&
GetOptions
()
const
const
wxString
&
GetOptions
()
const
{
return
options
;
}
{
return
options
;
}
/**
/**
* Function Format
* Function SetOptions
* serializes this object as utf8 text to an OUTPUTFORMATTER, and tries to
* make it look good using multiple lines and indentation.
* @param out is an #OUTPUTFORMATTER
* @param nestLevel is the indentation level to base all lines of the output.
* Actual indentation will be 2 spaces for each nestLevel.
*/
*/
void
Format
(
OUTPUTFORMATTER
*
out
,
int
nestLevel
)
const
void
SetOptions
(
const
wxString
&
aOptions
)
{
options
=
aOptions
;
}
throw
(
IO_ERROR
);
/**
/**
* Function
SetNickName
* Function
GetDescr
*
changes the logical name of this library, useful for an editor
.
*
returns the description of the library referenced by this row
.
*/
*/
void
SetNickName
(
const
wxString
&
aNickName
)
const
wxString
&
GetDescr
()
const
{
return
description
;
}
{
nickName
=
aNickName
;
}
/**
/**
* Function Set
Type
* Function Set
Descr
* changes the
type represented by this record
.
* changes the
description of the library referenced by this row
.
*/
*/
void
SetType
(
const
wxString
&
aType
)
void
SetDescr
(
const
wxString
&
aDescr
)
{
description
=
aDescr
;
}
{
type
=
IO_MGR
::
EnumFromStr
(
aType
);
}
/**
//-----</accessors>-----------------------------------------------------
* Function SetFullURI
* changes the full URI for the library, useful from a library table editor.
*/
void
SetFullURI
(
const
wxString
&
aFullURI
)
{
uri
=
aFullURI
;
}
/**
/**
* Function SetOptions
* Function Format
* changes the options string for this record, and is useful from
* serializes this object as utf8 text to an OUTPUTFORMATTER, and tries to
* the library table editor.
* make it look good using multiple lines and indentation.
* @param out is an #OUTPUTFORMATTER
* @param nestLevel is the indentation level to base all lines of the output.
* Actual indentation will be 2 spaces for each nestLevel.
*/
*/
void
SetOptions
(
const
wxString
&
aOptions
)
void
Format
(
OUTPUTFORMATTER
*
out
,
int
nestLevel
)
const
{
throw
(
IO_ERROR
);
options
=
aOptions
;
}
private
:
private
:
...
@@ -210,6 +202,7 @@ public:
...
@@ -210,6 +202,7 @@ public:
wxString
uri
;
wxString
uri
;
LIB_T
type
;
LIB_T
type
;
wxString
options
;
wxString
options
;
wxString
description
;
};
};
...
@@ -219,7 +212,7 @@ public:
...
@@ -219,7 +212,7 @@ public:
* @a aFallBackTable. Loading of this table fragment is done by using Parse().
* @a aFallBackTable. Loading of this table fragment is done by using Parse().
*
*
* @param aFallBackTable is another FP_LIB_TABLE which is searched only when
* @param aFallBackTable is another FP_LIB_TABLE which is searched only when
* a r
ecord
is not found in this table. No ownership is
* a r
ow
is not found in this table. No ownership is
* taken of aFallBackTable.
* taken of aFallBackTable.
*/
*/
FP_LIB_TABLE
(
FP_LIB_TABLE
*
aFallBackTable
=
NULL
);
FP_LIB_TABLE
(
FP_LIB_TABLE
*
aFallBackTable
=
NULL
);
...
@@ -249,9 +242,9 @@ public:
...
@@ -249,9 +242,9 @@ public:
*
*
* <pre>
* <pre>
* (fp_lib_table
* (fp_lib_table
* (lib (name LOGICAL)(
type TYPE)(uri FULL_URI
)(options OPTIONS))
* (lib (name LOGICAL)(
descr DESCRIPTION)(uri FULL_URI)(type TYPE
)(options OPTIONS))
* (lib (name LOGICAL)(
type TYPE)(uri FULL_URI
)(options OPTIONS))
* (lib (name LOGICAL)(
descr DESCRIPTION)(uri FULL_URI)(type TYPE
)(options OPTIONS))
* (lib (name LOGICAL)(
type TYPE)(uri FULL_URI
)(options OPTIONS))
* (lib (name LOGICAL)(
descr DESCRIPTION)(uri FULL_URI)(type TYPE
)(options OPTIONS))
* )
* )
* </pre>
* </pre>
*
*
...
@@ -363,6 +356,15 @@ public:
...
@@ -363,6 +356,15 @@ public:
const
ROW
*
FindRow
(
const
wxString
&
aNickName
)
throw
(
IO_ERROR
);
const
ROW
*
FindRow
(
const
wxString
&
aNickName
)
throw
(
IO_ERROR
);
/**
* Function ExpandEnvSubsitutions
* replaces any environment variable references with their values and is
* here to fully embellish the ROW::uri in a platform independent way.
* This enables (fp_lib_table)s to have platform dependent environment
* variables in them, allowing for a uniform table across platforms.
*/
static
const
wxString
ExpandSubtitutions
(
const
wxString
aString
);
protected
:
protected
:
/**
/**
...
...
include/richio.h
View file @
273244a1
...
@@ -115,12 +115,7 @@ struct IO_ERROR // : std::exception
...
@@ -115,12 +115,7 @@ struct IO_ERROR // : std::exception
init
(
aThrowersFile
,
aThrowersLoc
,
wxString
(
aMsg
)
);
init
(
aThrowersFile
,
aThrowersLoc
,
wxString
(
aMsg
)
);
}
}
void
init
(
const
char
*
aThrowersFile
,
const
char
*
aThrowersLoc
,
const
wxString
&
aMsg
)
void
init
(
const
char
*
aThrowersFile
,
const
char
*
aThrowersLoc
,
const
wxString
&
aMsg
);
{
errorText
.
Printf
(
IO_FORMAT
,
aMsg
.
GetData
(),
wxString
::
FromUTF8
(
aThrowersFile
).
GetData
(),
wxString
::
FromUTF8
(
aThrowersLoc
).
GetData
()
);
}
IO_ERROR
()
{}
IO_ERROR
()
{}
...
@@ -165,18 +160,7 @@ struct PARSE_ERROR : public IO_ERROR
...
@@ -165,18 +160,7 @@ struct PARSE_ERROR : public IO_ERROR
void
init
(
const
char
*
aThrowersFile
,
const
char
*
aThrowersLoc
,
void
init
(
const
char
*
aThrowersFile
,
const
char
*
aThrowersLoc
,
const
wxString
&
aMsg
,
const
wxString
&
aSource
,
const
wxString
&
aMsg
,
const
wxString
&
aSource
,
const
char
*
aInputLine
,
const
char
*
aInputLine
,
int
aLineNumber
,
int
aByteIndex
)
int
aLineNumber
,
int
aByteIndex
);
{
// save inpuLine, lineNumber, and offset for UI (.e.g. Sweet text editor)
inputLine
=
aInputLine
;
lineNumber
=
aLineNumber
;
byteIndex
=
aByteIndex
;
errorText
.
Printf
(
PARSE_FORMAT
,
aMsg
.
GetData
(),
aSource
.
GetData
(),
aLineNumber
,
aByteIndex
,
wxString
::
FromUTF8
(
aThrowersFile
).
GetData
(),
wxString
::
FromUTF8
(
aThrowersLoc
).
GetData
()
);
}
~
PARSE_ERROR
()
throw
(
/*none*/
){}
~
PARSE_ERROR
()
throw
(
/*none*/
){}
};
};
...
...
pcbnew/dialogs/dialog_fp_lib_table.cpp
View file @
273244a1
...
@@ -24,11 +24,29 @@
...
@@ -24,11 +24,29 @@
*/
*/
/* TODO:
*) Check for duplicate nicknames per table
*) Grab text from any pending ChoiceEditor when OK button pressed.
*) Test wxRE_ADVANCED on Windows.
*) Do environment variable substitution on lookup
*/
#include <fctsys.h>
#include <fctsys.h>
#include <dialog_fp_lib_table_base.h>
#include <dialog_fp_lib_table_base.h>
#include <fp_lib_table.h>
#include <fp_lib_table.h>
#include <wx/grid.h>
#include <wx/grid.h>
#include <wx/clipbrd.h>
#include <wx/tokenzr.h>
#include <wx/arrstr.h>
#include <wx/regex.h>
#include <set>
/**
/**
* Class FP_TBL_MODEL
* Class FP_TBL_MODEL
...
@@ -39,6 +57,16 @@ class FP_TBL_MODEL : public wxGridTableBase, public FP_LIB_TABLE
...
@@ -39,6 +57,16 @@ class FP_TBL_MODEL : public wxGridTableBase, public FP_LIB_TABLE
{
{
public
:
public
:
enum
COL_ORDER
///< grid column order, established by this sequence
{
COL_NICKNAME
,
COL_URI
,
COL_TYPE
,
COL_OPTIONS
,
COL_DESCR
,
COL_COUNT
// keep as last
};
/**
/**
* Constructor FP_TBL_MODEL
* Constructor FP_TBL_MODEL
* is a copy constructor that builds a wxGridTableBase (table model) by wrapping
* is a copy constructor that builds a wxGridTableBase (table model) by wrapping
...
@@ -52,7 +80,7 @@ public:
...
@@ -52,7 +80,7 @@ public:
//-----<wxGridTableBase overloads>-------------------------------------------
//-----<wxGridTableBase overloads>-------------------------------------------
int
GetNumberRows
()
{
return
rows
.
size
();
}
int
GetNumberRows
()
{
return
rows
.
size
();
}
int
GetNumberCols
()
{
return
4
;
}
int
GetNumberCols
()
{
return
COL_COUNT
;
}
wxString
GetValue
(
int
aRow
,
int
aCol
)
wxString
GetValue
(
int
aRow
,
int
aCol
)
{
{
...
@@ -62,10 +90,11 @@ public:
...
@@ -62,10 +90,11 @@ public:
switch
(
aCol
)
switch
(
aCol
)
{
{
case
0
:
return
r
.
GetNickName
();
case
COL_NICKNAME
:
return
r
.
GetNickName
();
case
1
:
return
r
.
GetFullURI
();
case
COL_URI
:
return
r
.
GetFullURI
();
case
2
:
return
r
.
GetType
();
case
COL_TYPE
:
return
r
.
GetType
();
case
3
:
return
r
.
GetOptions
();
case
COL_OPTIONS
:
return
r
.
GetOptions
();
case
COL_DESCR
:
return
r
.
GetDescr
();
default
:
default
:
;
// fall thru to wxEmptyString
;
// fall thru to wxEmptyString
}
}
...
@@ -82,10 +111,11 @@ public:
...
@@ -82,10 +111,11 @@ public:
switch
(
aCol
)
switch
(
aCol
)
{
{
case
0
:
r
.
SetNickName
(
aValue
);
break
;
case
COL_NICKNAME
:
r
.
SetNickName
(
aValue
);
break
;
case
1
:
r
.
SetFullURI
(
aValue
);
break
;
case
COL_URI
:
r
.
SetFullURI
(
aValue
);
break
;
case
2
:
r
.
SetType
(
aValue
);
break
;
case
COL_TYPE
:
r
.
SetType
(
aValue
);
break
;
case
3
:
r
.
SetOptions
(
aValue
);
break
;
case
COL_OPTIONS
:
r
.
SetOptions
(
aValue
);
break
;
case
COL_DESCR
:
r
.
SetDescr
(
aValue
);
break
;
}
}
}
}
}
}
...
@@ -169,19 +199,38 @@ public:
...
@@ -169,19 +199,38 @@ public:
{
{
switch
(
aCol
)
switch
(
aCol
)
{
{
case
0
:
return
_
(
"Nickname"
);
case
COL_NICKNAME
:
return
_
(
"Nickname"
);
case
1
:
return
_
(
"Library Path"
);
case
COL_URI
:
return
_
(
"Library Path"
);
case
2
:
return
_
(
"Plugin"
);
case
3
:
return
_
(
"Options"
);
// keep this text fairly long so column is sized wide enough
case
COL_TYPE
:
return
_
(
"Plugin Type"
);
case
COL_OPTIONS
:
return
_
(
"Options"
);
case
COL_DESCR
:
return
_
(
"Description"
);
default
:
return
wxEmptyString
;
default
:
return
wxEmptyString
;
}
}
}
}
//-----</wxGridTableBase overloads>------------------------------------------
/*
wxGridCellAttr* GetAttr( int aRow, int aCol, wxGridCellAttr::wxAttrKind aKind ) const // overload
{
if( aCol != COL_TYPE )
return wxGridTableBase::GetAttr( aRow, aCol, aKind );
else
{
}
}
*/
//-----</wxGridTableBase overloads>------------------------------------------
};
};
// It works for table data on clipboard for an Excell spreadsheet,
// why not us too for now.
#define COL_SEP wxT( '\t' )
#define ROW_SEP wxT( '\n' )
/**
/**
* Class DIALOG_FP_LIB_TABLE
* Class DIALOG_FP_LIB_TABLE
...
@@ -192,19 +241,31 @@ class DIALOG_FP_LIB_TABLE : public DIALOG_FP_LIB_TABLE_BASE
...
@@ -192,19 +241,31 @@ class DIALOG_FP_LIB_TABLE : public DIALOG_FP_LIB_TABLE_BASE
{
{
typedef
FP_LIB_TABLE
::
ROW
ROW
;
typedef
FP_LIB_TABLE
::
ROW
ROW
;
/* row & col "selection" acquisition, not currently used but works.
enum
{
ID_CUT
,
// = wxID_HIGHEST + 1,
ID_COPY
,
ID_PASTE
,
};
// row & col "selection" acquisition
// selected area by cell coordinate and count
// selected area by cell coordinate and count
int
selRowStart
;
int
selRowStart
;
int
selColStart
;
int
selColStart
;
int
selRowCount
;
int
selRowCount
;
int
selColCount
;
int
selColCount
;
/// Gets the selected area into a sensible recta
b
le of sel{Row,Col}{Start,Count} above.
/// Gets the selected area into a sensible recta
ng
le of sel{Row,Col}{Start,Count} above.
void
getSelectedArea
()
void
getSelectedArea
()
{
{
wxGridCellCoordsArray
topLeft
=
m_cur_grid
->
GetSelectionBlockTopLeft
();
wxGridCellCoordsArray
topLeft
=
m_cur_grid
->
GetSelectionBlockTopLeft
();
wxGridCellCoordsArray
botRight
=
m_cur_grid
->
GetSelectionBlockBottomRight
();
wxGridCellCoordsArray
botRight
=
m_cur_grid
->
GetSelectionBlockBottomRight
();
wxArrayInt
cols
=
m_cur_grid
->
GetSelectedCols
();
wxArrayInt
rows
=
m_cur_grid
->
GetSelectedRows
();
D
(
printf
(
"topLeft.Count():%zd botRight:Count():%zd
\n
"
,
topLeft
.
Count
(),
botRight
.
Count
()
);)
if
(
topLeft
.
Count
()
&&
botRight
.
Count
()
)
if
(
topLeft
.
Count
()
&&
botRight
.
Count
()
)
{
{
selRowStart
=
topLeft
[
0
].
GetRow
();
selRowStart
=
topLeft
[
0
].
GetRow
();
...
@@ -213,6 +274,20 @@ class DIALOG_FP_LIB_TABLE : public DIALOG_FP_LIB_TABLE_BASE
...
@@ -213,6 +274,20 @@ class DIALOG_FP_LIB_TABLE : public DIALOG_FP_LIB_TABLE_BASE
selRowCount
=
botRight
[
0
].
GetRow
()
-
selRowStart
+
1
;
selRowCount
=
botRight
[
0
].
GetRow
()
-
selRowStart
+
1
;
selColCount
=
botRight
[
0
].
GetCol
()
-
selColStart
+
1
;
selColCount
=
botRight
[
0
].
GetCol
()
-
selColStart
+
1
;
}
}
else
if
(
cols
.
Count
()
)
{
selColStart
=
cols
[
0
];
selColCount
=
cols
.
Count
();
selRowStart
=
0
;
selRowCount
=
m_cur_grid
->
GetNumberRows
();
}
else
if
(
rows
.
Count
()
)
{
selColStart
=
0
;
selColCount
=
m_cur_grid
->
GetNumberCols
();
selRowStart
=
rows
[
0
];
selRowCount
=
rows
.
Count
();
}
else
else
{
{
selRowStart
=
-
1
;
selRowStart
=
-
1
;
...
@@ -221,19 +296,122 @@ class DIALOG_FP_LIB_TABLE : public DIALOG_FP_LIB_TABLE_BASE
...
@@ -221,19 +296,122 @@ class DIALOG_FP_LIB_TABLE : public DIALOG_FP_LIB_TABLE_BASE
selColCount
=
0
;
selColCount
=
0
;
}
}
D(printf("selRowStart:%d selColStart:%d selRowCount:%d selColCount:%d\n",
// D(printf("selRowStart:%d selColStart:%d selRowCount:%d selColCount:%d\n", selRowStart, selColStart, selRowCount, selColCount );)
selRowStart, selColStart, selRowCount, selColCount );)
}
void
rightClickCellPopupMenu
()
{
wxMenu
menu
;
menu
.
Append
(
ID_CUT
,
_
(
"Cut"
),
_
(
"Clear selected cells"
)
);
menu
.
Append
(
ID_COPY
,
_
(
"Copy"
),
_
(
"Copy selected cells to clipboard"
)
);
menu
.
Append
(
ID_PASTE
,
_
(
"Paste"
),
_
(
"Paste clipboard cells to matrix at current cell"
)
);
getSelectedArea
();
// if nothing is selected, diable cut and copy.
if
(
!
selRowCount
&&
!
selColCount
)
{
menu
.
Enable
(
ID_CUT
,
false
);
menu
.
Enable
(
ID_COPY
,
false
);
}
// if there is no current cell cursor, disable paste.
if
(
m_cur_row
==
-
1
||
m_cur_col
==
-
1
)
menu
.
Enable
(
ID_PASTE
,
false
);
PopupMenu
(
&
menu
);
// passOnFocus();
}
// the user clicked on a popup menu choice:
void
onPopupSelection
(
wxCommandEvent
&
event
)
{
int
menuId
=
event
.
GetId
();
// assume getSelectedArea() was called by rightClickPopupMenu() and there's
// no way to have gotten here without that having been called.
switch
(
menuId
)
{
case
ID_CUT
:
case
ID_COPY
:
// this format is compatible with most spreadsheets
if
(
wxTheClipboard
->
Open
()
)
{
wxGridTableBase
*
tbl
=
m_cur_grid
->
GetTable
();
wxString
txt
;
for
(
int
row
=
selRowStart
;
row
<
selRowStart
+
selRowCount
;
++
row
)
{
for
(
int
col
=
selColStart
;
col
<
selColStart
+
selColCount
;
++
col
)
{
txt
+=
tbl
->
GetValue
(
row
,
col
);
if
(
col
<
selColStart
+
selColCount
-
1
)
// that was not last column
txt
+=
COL_SEP
;
if
(
menuId
==
ID_CUT
)
tbl
->
SetValue
(
row
,
col
,
wxEmptyString
);
}
txt
+=
ROW_SEP
;
}
wxTheClipboard
->
SetData
(
new
wxTextDataObject
(
txt
)
);
wxTheClipboard
->
Close
();
m_cur_grid
->
ForceRefresh
();
}
break
;
case
ID_PASTE
:
D
(
printf
(
"paste
\n
"
);)
// assume format came from a spreadsheet or us.
if
(
wxTheClipboard
->
Open
()
)
{
if
(
wxTheClipboard
->
IsSupported
(
wxDF_TEXT
)
)
{
wxGridTableBase
*
tbl
=
m_cur_grid
->
GetTable
();
wxTextDataObject
data
;
wxTheClipboard
->
GetData
(
data
);
wxStringTokenizer
rows
(
data
.
GetText
(),
ROW_SEP
,
wxTOKEN_RET_EMPTY
);
// if clipboard rows would extend paste end of current table size...
if
(
int
(
rows
.
CountTokens
()
)
>
tbl
->
GetNumberRows
()
-
m_cur_row
)
{
int
newRowsNeeded
=
rows
.
CountTokens
()
-
(
tbl
->
GetNumberRows
()
-
m_cur_row
);
tbl
->
AppendRows
(
newRowsNeeded
);
}
for
(
int
row
=
m_cur_row
;
rows
.
HasMoreTokens
();
++
row
)
{
wxString
rowTxt
=
rows
.
GetNextToken
();
wxStringTokenizer
cols
(
rowTxt
,
COL_SEP
,
wxTOKEN_RET_EMPTY
);
for
(
int
col
=
m_cur_col
;
cols
.
HasMoreTokens
();
++
col
)
{
wxString
cellTxt
=
cols
.
GetNextToken
();
tbl
->
SetValue
(
row
,
col
,
cellTxt
);
}
}
}
wxTheClipboard
->
Close
();
m_cur_grid
->
ForceRefresh
();
}
break
;
}
}
}
*/
//-----<event handlers>----------------------------------
//-----<event handlers>----------------------------------
void
pageChangedHandler
(
wxAuiNotebookEvent
&
event
)
void
pageChangedHandler
(
wxAuiNotebookEvent
&
event
)
{
{
int
pageNdx
=
m_auinotebook
->
GetSelection
();
int
pageNdx
=
m_auinotebook
->
GetSelection
();
m_cur_grid
=
pageNdx
==
0
?
m_global_grid
:
m_project_grid
;
m_cur_grid
=
(
pageNdx
==
0
)
?
m_global_grid
:
m_project_grid
;
D
(
printf
(
"%s cur_grid is %s
\n
"
,
__func__
,
pageNdx
==
0
?
"global"
:
"project"
);)
}
}
void
appendRowHandler
(
wxMouseEvent
&
event
)
void
appendRowHandler
(
wxMouseEvent
&
event
)
...
@@ -336,8 +514,98 @@ class DIALOG_FP_LIB_TABLE : public DIALOG_FP_LIB_TABLE_BASE
...
@@ -336,8 +514,98 @@ class DIALOG_FP_LIB_TABLE : public DIALOG_FP_LIB_TABLE_BASE
EndModal
(
dialogRet
);
EndModal
(
dialogRet
);
}
}
//-----</event handlers>---------------------------------
void
onGridCellLeftClick
(
wxGridEvent
&
event
)
{
event
.
Skip
();
}
void
onGridCellLeftDClick
(
wxGridEvent
&
event
)
{
event
.
Skip
();
}
void
onGridCellRightClick
(
wxGridEvent
&
event
)
{
rightClickCellPopupMenu
();
}
void
onGridCmdSelectCell
(
wxGridEvent
&
event
)
{
m_cur_row
=
event
.
GetRow
();
m_cur_col
=
event
.
GetCol
();
D
(
printf
(
"change cursor(%d,%d)
\n
"
,
m_cur_row
,
m_cur_col
);)
// somebody else wants this
event
.
Skip
();
}
/// Populate the readonly environment variable table with names and values
/// by examining all the full_uri columns.
void
populateEnvironReadOnlyTable
()
{
wxRegEx
re
(
wxT
(
".*?
\\
$
\\
{(.+?)
\\
}.*?"
),
wxRE_ADVANCED
);
wxASSERT
(
re
.
IsValid
()
);
// wxRE_ADVANCED is required.
std
::
set
<
wxString
>
unique
;
typedef
std
::
set
<
wxString
>::
const_iterator
SET_CITER
;
m_path_subs_grid
->
DeleteRows
(
0
,
m_path_subs_grid
->
GetNumberRows
()
);
int
gblRowCount
=
m_global_model
.
GetNumberRows
();
int
prjRowCount
=
m_project_model
.
GetNumberRows
();
int
row
;
for
(
row
=
0
;
row
<
gblRowCount
;
++
row
)
{
wxString
uri
=
m_global_model
.
GetValue
(
row
,
FP_TBL_MODEL
::
COL_URI
);
while
(
re
.
Matches
(
uri
)
)
{
wxString
envvar
=
re
.
GetMatch
(
uri
,
1
);
// ignore duplicates
unique
.
insert
(
envvar
);
// delete the last match and search again
uri
.
Replace
(
re
.
GetMatch
(
uri
,
0
),
wxEmptyString
);
}
}
for
(
row
=
0
;
row
<
prjRowCount
;
++
row
)
{
wxString
uri
=
m_project_model
.
GetValue
(
row
,
FP_TBL_MODEL
::
COL_URI
);
while
(
re
.
Matches
(
uri
)
)
{
wxString
envvar
=
re
.
GetMatch
(
uri
,
1
);
// ignore duplicates
unique
.
insert
(
envvar
);
// delete the last match and search again
uri
.
Replace
(
re
.
GetMatch
(
uri
,
0
),
wxEmptyString
);
}
}
m_path_subs_grid
->
AppendRows
(
unique
.
size
()
);
row
=
0
;
for
(
SET_CITER
it
=
unique
.
begin
();
it
!=
unique
.
end
();
++
it
,
++
row
)
{
wxString
evName
=
*
it
;
wxString
evValue
;
m_path_subs_grid
->
SetCellValue
(
row
,
0
,
evName
);
if
(
wxGetEnv
(
evName
,
&
evValue
)
)
m_path_subs_grid
->
SetCellValue
(
row
,
1
,
evValue
);
}
m_path_subs_grid
->
AutoSizeColumns
();
}
//-----</event handlers>---------------------------------
// caller's tables are modified only on OK button.
// caller's tables are modified only on OK button.
FP_LIB_TABLE
*
m_global
;
FP_LIB_TABLE
*
m_global
;
...
@@ -349,6 +617,10 @@ class DIALOG_FP_LIB_TABLE : public DIALOG_FP_LIB_TABLE_BASE
...
@@ -349,6 +617,10 @@ class DIALOG_FP_LIB_TABLE : public DIALOG_FP_LIB_TABLE_BASE
wxGrid
*
m_cur_grid
;
///< changed based on tab choice
wxGrid
*
m_cur_grid
;
///< changed based on tab choice
// wxGrid makes it difficult to know if the cursor is yet visible,
// use this to solve that, initial values are -1
int
m_cur_row
;
///< cursor position
int
m_cur_col
;
public
:
public
:
DIALOG_FP_LIB_TABLE
(
wxFrame
*
aParent
,
FP_LIB_TABLE
*
aGlobal
,
FP_LIB_TABLE
*
aProject
)
:
DIALOG_FP_LIB_TABLE
(
wxFrame
*
aParent
,
FP_LIB_TABLE
*
aGlobal
,
FP_LIB_TABLE
*
aProject
)
:
...
@@ -356,16 +628,45 @@ public:
...
@@ -356,16 +628,45 @@ public:
m_global
(
aGlobal
),
m_global
(
aGlobal
),
m_project
(
aProject
),
m_project
(
aProject
),
m_global_model
(
*
aGlobal
),
m_global_model
(
*
aGlobal
),
m_project_model
(
*
aProject
)
m_project_model
(
*
aProject
),
m_cur_row
(
-
1
),
m_cur_col
(
-
1
)
{
{
m_global_grid
->
SetTable
(
(
wxGridTableBase
*
)
&
m_global_model
);
m_global_grid
->
SetTable
(
(
wxGridTableBase
*
)
&
m_global_model
);
m_project_grid
->
SetTable
(
(
wxGridTableBase
*
)
&
m_project_model
);
m_project_grid
->
SetTable
(
(
wxGridTableBase
*
)
&
m_project_model
);
m_global_grid
->
AutoSizeColumns
(
false
);
m_global_grid
->
AutoSizeColumns
(
false
);
m_project_grid
->
AutoSizeColumns
(
false
);
m_project_grid
->
AutoSizeColumns
(
false
);
m_path_subs_grid
->
AutoSizeColumns
(
false
);
wxArrayString
choices
;
choices
.
Add
(
IO_MGR
::
ShowType
(
IO_MGR
::
KICAD
)
);
choices
.
Add
(
IO_MGR
::
ShowType
(
IO_MGR
::
LEGACY
)
);
choices
.
Add
(
IO_MGR
::
ShowType
(
IO_MGR
::
EAGLE
)
);
choices
.
Add
(
IO_MGR
::
ShowType
(
IO_MGR
::
GEDA_PCB
)
);
wxGridCellAttr
*
attr
;
attr
=
new
wxGridCellAttr
;
attr
->
SetEditor
(
new
wxGridCellChoiceEditor
(
choices
)
);
m_project_grid
->
SetColAttr
(
FP_TBL_MODEL
::
COL_TYPE
,
attr
);
attr
=
new
wxGridCellAttr
;
attr
->
SetEditor
(
new
wxGridCellChoiceEditor
(
choices
)
);
m_global_grid
->
SetColAttr
(
FP_TBL_MODEL
::
COL_TYPE
,
attr
);
m_global_grid
->
AutoSizeColumns
();
m_project_grid
->
AutoSizeColumns
();
m_path_subs_grid
->
AutoSizeColumns
();
Connect
(
ID_CUT
,
ID_PASTE
,
wxEVT_COMMAND_MENU_SELECTED
,
wxCommandEventHandler
(
DIALOG_FP_LIB_TABLE
::
onPopupSelection
),
NULL
,
this
);
populateEnvironReadOnlyTable
();
/* This scrunches the dialog hideously
Fit();
*/
// fire pageChangedHandler() so m_cur_grid gets set
// fire pageChangedHandler() so m_cur_grid gets set
wxAuiNotebookEvent
uneventful
;
wxAuiNotebookEvent
uneventful
;
...
@@ -374,18 +675,18 @@ public:
...
@@ -374,18 +675,18 @@ public:
~
DIALOG_FP_LIB_TABLE
()
~
DIALOG_FP_LIB_TABLE
()
{
{
// Destroy the gui stuff first, with a goal of destroying the two wxGrids now,
Disconnect
(
ID_CUT
,
ID_PASTE
,
wxEVT_COMMAND_MENU_SELECTED
,
// since the ~wxGrid() wants the wxGridTableBase to still be non-destroyed.
wxCommandEventHandler
(
DIALOG_FP_LIB_TABLE
::
onPopupSelection
),
NULL
,
this
);
// Without this call, the wxGridTableBase objects are destroyed first
// (i.e. destructor called) and there is a segfault since wxGridTableBase's vtable
// ~wxGrid() examines its table, and the tables will have been destroyed before
// is then no longer valid. If ~wxGrid() would not examine a wxGridTableBase that
// the wxGrids are, so remove the tables from the wxGrids' awareness.
// it does not own, then this would not be a concern. But it is, since it does.
// Otherwise there is a segfault.
DestroyChildren
();
m_global_grid
->
SetTable
(
NULL
);
m_project_grid
->
SetTable
(
NULL
);
}
}
};
};
int
InvokePcbLibTableEditor
(
wxFrame
*
aParent
,
FP_LIB_TABLE
*
aGlobal
,
FP_LIB_TABLE
*
aProject
)
int
InvokePcbLibTableEditor
(
wxFrame
*
aParent
,
FP_LIB_TABLE
*
aGlobal
,
FP_LIB_TABLE
*
aProject
)
{
{
DIALOG_FP_LIB_TABLE
dlg
(
aParent
,
aGlobal
,
aProject
);
DIALOG_FP_LIB_TABLE
dlg
(
aParent
,
aGlobal
,
aProject
);
...
...
pcbnew/dialogs/dialog_fp_lib_table_base.cpp
View file @
273244a1
...
@@ -34,7 +34,7 @@ DIALOG_FP_LIB_TABLE_BASE::DIALOG_FP_LIB_TABLE_BASE( wxWindow* parent, wxWindowID
...
@@ -34,7 +34,7 @@ DIALOG_FP_LIB_TABLE_BASE::DIALOG_FP_LIB_TABLE_BASE( wxWindow* parent, wxWindowID
m_global_grid
=
new
wxGrid
(
m_global_panel
,
wxID_ANY
,
wxDefaultPosition
,
wxDefaultSize
,
0
);
m_global_grid
=
new
wxGrid
(
m_global_panel
,
wxID_ANY
,
wxDefaultPosition
,
wxDefaultSize
,
0
);
// Grid
// Grid
m_global_grid
->
CreateGrid
(
1
,
4
);
m_global_grid
->
CreateGrid
(
1
,
5
);
m_global_grid
->
EnableEditing
(
true
);
m_global_grid
->
EnableEditing
(
true
);
m_global_grid
->
EnableGridLines
(
true
);
m_global_grid
->
EnableGridLines
(
true
);
m_global_grid
->
EnableDragGridSize
(
true
);
m_global_grid
->
EnableDragGridSize
(
true
);
...
@@ -70,7 +70,7 @@ DIALOG_FP_LIB_TABLE_BASE::DIALOG_FP_LIB_TABLE_BASE( wxWindow* parent, wxWindowID
...
@@ -70,7 +70,7 @@ DIALOG_FP_LIB_TABLE_BASE::DIALOG_FP_LIB_TABLE_BASE( wxWindow* parent, wxWindowID
m_project_grid
=
new
wxGrid
(
m_project_panel
,
wxID_ANY
,
wxDefaultPosition
,
wxDefaultSize
,
0
);
m_project_grid
=
new
wxGrid
(
m_project_panel
,
wxID_ANY
,
wxDefaultPosition
,
wxDefaultSize
,
0
);
// Grid
// Grid
m_project_grid
->
CreateGrid
(
1
,
4
);
m_project_grid
->
CreateGrid
(
1
,
5
);
m_project_grid
->
EnableEditing
(
true
);
m_project_grid
->
EnableEditing
(
true
);
m_project_grid
->
EnableGridLines
(
true
);
m_project_grid
->
EnableGridLines
(
true
);
m_project_grid
->
EnableDragGridSize
(
true
);
m_project_grid
->
EnableDragGridSize
(
true
);
...
@@ -142,7 +142,7 @@ DIALOG_FP_LIB_TABLE_BASE::DIALOG_FP_LIB_TABLE_BASE( wxWindow* parent, wxWindowID
...
@@ -142,7 +142,7 @@ DIALOG_FP_LIB_TABLE_BASE::DIALOG_FP_LIB_TABLE_BASE( wxWindow* parent, wxWindowID
m_path_subs_grid
=
new
wxGrid
(
m_bottom
,
wxID_ANY
,
wxDefaultPosition
,
wxDefaultSize
,
0
);
m_path_subs_grid
=
new
wxGrid
(
m_bottom
,
wxID_ANY
,
wxDefaultPosition
,
wxDefaultSize
,
0
);
// Grid
// Grid
m_path_subs_grid
->
CreateGrid
(
2
,
2
);
m_path_subs_grid
->
CreateGrid
(
1
,
2
);
m_path_subs_grid
->
EnableEditing
(
true
);
m_path_subs_grid
->
EnableEditing
(
true
);
m_path_subs_grid
->
EnableGridLines
(
true
);
m_path_subs_grid
->
EnableGridLines
(
true
);
m_path_subs_grid
->
EnableDragGridSize
(
false
);
m_path_subs_grid
->
EnableDragGridSize
(
false
);
...
@@ -155,15 +155,13 @@ DIALOG_FP_LIB_TABLE_BASE::DIALOG_FP_LIB_TABLE_BASE( wxWindow* parent, wxWindowID
...
@@ -155,15 +155,13 @@ DIALOG_FP_LIB_TABLE_BASE::DIALOG_FP_LIB_TABLE_BASE( wxWindow* parent, wxWindowID
m_path_subs_grid
->
EnableDragColMove
(
false
);
m_path_subs_grid
->
EnableDragColMove
(
false
);
m_path_subs_grid
->
EnableDragColSize
(
true
);
m_path_subs_grid
->
EnableDragColSize
(
true
);
m_path_subs_grid
->
SetColLabelSize
(
30
);
m_path_subs_grid
->
SetColLabelSize
(
30
);
m_path_subs_grid
->
SetColLabelValue
(
0
,
_
(
"
Category
"
)
);
m_path_subs_grid
->
SetColLabelValue
(
0
,
_
(
"
Environment Variable
"
)
);
m_path_subs_grid
->
SetColLabelValue
(
1
,
_
(
"Path Segment"
)
);
m_path_subs_grid
->
SetColLabelValue
(
1
,
_
(
"Path Segment"
)
);
m_path_subs_grid
->
SetColLabelAlignment
(
wxALIGN_CENTRE
,
wxALIGN_CENTRE
);
m_path_subs_grid
->
SetColLabelAlignment
(
wxALIGN_CENTRE
,
wxALIGN_CENTRE
);
// Rows
// Rows
m_path_subs_grid
->
EnableDragRowSize
(
true
);
m_path_subs_grid
->
EnableDragRowSize
(
true
);
m_path_subs_grid
->
SetRowLabelSize
(
40
);
m_path_subs_grid
->
SetRowLabelSize
(
40
);
m_path_subs_grid
->
SetRowLabelValue
(
0
,
_
(
"%S"
)
);
m_path_subs_grid
->
SetRowLabelValue
(
1
,
_
(
"%P"
)
);
m_path_subs_grid
->
SetRowLabelAlignment
(
wxALIGN_CENTRE
,
wxALIGN_CENTRE
);
m_path_subs_grid
->
SetRowLabelAlignment
(
wxALIGN_CENTRE
,
wxALIGN_CENTRE
);
// Label Appearance
// Label Appearance
...
@@ -188,7 +186,7 @@ DIALOG_FP_LIB_TABLE_BASE::DIALOG_FP_LIB_TABLE_BASE( wxWindow* parent, wxWindowID
...
@@ -188,7 +186,7 @@ DIALOG_FP_LIB_TABLE_BASE::DIALOG_FP_LIB_TABLE_BASE( wxWindow* parent, wxWindowID
m_bottom
->
SetSizer
(
m_bottom_sizer
);
m_bottom
->
SetSizer
(
m_bottom_sizer
);
m_bottom
->
Layout
();
m_bottom
->
Layout
();
m_bottom_sizer
->
Fit
(
m_bottom
);
m_bottom_sizer
->
Fit
(
m_bottom
);
m_splitter
->
SplitHorizontally
(
m_top
,
m_bottom
,
3
43
);
m_splitter
->
SplitHorizontally
(
m_top
,
m_bottom
,
3
98
);
bSizer1
->
Add
(
m_splitter
,
2
,
wxEXPAND
,
5
);
bSizer1
->
Add
(
m_splitter
,
2
,
wxEXPAND
,
5
);
...
@@ -199,6 +197,14 @@ DIALOG_FP_LIB_TABLE_BASE::DIALOG_FP_LIB_TABLE_BASE( wxWindow* parent, wxWindowID
...
@@ -199,6 +197,14 @@ DIALOG_FP_LIB_TABLE_BASE::DIALOG_FP_LIB_TABLE_BASE( wxWindow* parent, wxWindowID
// Connect Events
// Connect Events
m_auinotebook
->
Connect
(
wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGED
,
wxAuiNotebookEventHandler
(
DIALOG_FP_LIB_TABLE_BASE
::
pageChangedHandler
),
NULL
,
this
);
m_auinotebook
->
Connect
(
wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGED
,
wxAuiNotebookEventHandler
(
DIALOG_FP_LIB_TABLE_BASE
::
pageChangedHandler
),
NULL
,
this
);
m_global_grid
->
Connect
(
wxEVT_GRID_CELL_LEFT_CLICK
,
wxGridEventHandler
(
DIALOG_FP_LIB_TABLE_BASE
::
onGridCellLeftClick
),
NULL
,
this
);
m_global_grid
->
Connect
(
wxEVT_GRID_CELL_LEFT_DCLICK
,
wxGridEventHandler
(
DIALOG_FP_LIB_TABLE_BASE
::
onGridCellLeftDClick
),
NULL
,
this
);
m_global_grid
->
Connect
(
wxEVT_GRID_CELL_RIGHT_CLICK
,
wxGridEventHandler
(
DIALOG_FP_LIB_TABLE_BASE
::
onGridCellRightClick
),
NULL
,
this
);
m_global_grid
->
Connect
(
wxEVT_GRID_SELECT_CELL
,
wxGridEventHandler
(
DIALOG_FP_LIB_TABLE_BASE
::
onGridCmdSelectCell
),
NULL
,
this
);
m_project_grid
->
Connect
(
wxEVT_GRID_CELL_LEFT_CLICK
,
wxGridEventHandler
(
DIALOG_FP_LIB_TABLE_BASE
::
onGridCellLeftClick
),
NULL
,
this
);
m_project_grid
->
Connect
(
wxEVT_GRID_CELL_LEFT_DCLICK
,
wxGridEventHandler
(
DIALOG_FP_LIB_TABLE_BASE
::
onGridCellLeftDClick
),
NULL
,
this
);
m_project_grid
->
Connect
(
wxEVT_GRID_CELL_RIGHT_CLICK
,
wxGridEventHandler
(
DIALOG_FP_LIB_TABLE_BASE
::
onGridCellRightClick
),
NULL
,
this
);
m_project_grid
->
Connect
(
wxEVT_GRID_SELECT_CELL
,
wxGridEventHandler
(
DIALOG_FP_LIB_TABLE_BASE
::
onGridCmdSelectCell
),
NULL
,
this
);
m_append_button
->
Connect
(
wxEVT_LEFT_DOWN
,
wxMouseEventHandler
(
DIALOG_FP_LIB_TABLE_BASE
::
appendRowHandler
),
NULL
,
this
);
m_append_button
->
Connect
(
wxEVT_LEFT_DOWN
,
wxMouseEventHandler
(
DIALOG_FP_LIB_TABLE_BASE
::
appendRowHandler
),
NULL
,
this
);
m_delete_button
->
Connect
(
wxEVT_LEFT_DOWN
,
wxMouseEventHandler
(
DIALOG_FP_LIB_TABLE_BASE
::
deleteRowHandler
),
NULL
,
this
);
m_delete_button
->
Connect
(
wxEVT_LEFT_DOWN
,
wxMouseEventHandler
(
DIALOG_FP_LIB_TABLE_BASE
::
deleteRowHandler
),
NULL
,
this
);
m_move_up_button
->
Connect
(
wxEVT_LEFT_DOWN
,
wxMouseEventHandler
(
DIALOG_FP_LIB_TABLE_BASE
::
moveUpHandler
),
NULL
,
this
);
m_move_up_button
->
Connect
(
wxEVT_LEFT_DOWN
,
wxMouseEventHandler
(
DIALOG_FP_LIB_TABLE_BASE
::
moveUpHandler
),
NULL
,
this
);
...
@@ -211,6 +217,14 @@ DIALOG_FP_LIB_TABLE_BASE::~DIALOG_FP_LIB_TABLE_BASE()
...
@@ -211,6 +217,14 @@ DIALOG_FP_LIB_TABLE_BASE::~DIALOG_FP_LIB_TABLE_BASE()
{
{
// Disconnect Events
// Disconnect Events
m_auinotebook
->
Disconnect
(
wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGED
,
wxAuiNotebookEventHandler
(
DIALOG_FP_LIB_TABLE_BASE
::
pageChangedHandler
),
NULL
,
this
);
m_auinotebook
->
Disconnect
(
wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGED
,
wxAuiNotebookEventHandler
(
DIALOG_FP_LIB_TABLE_BASE
::
pageChangedHandler
),
NULL
,
this
);
m_global_grid
->
Disconnect
(
wxEVT_GRID_CELL_LEFT_CLICK
,
wxGridEventHandler
(
DIALOG_FP_LIB_TABLE_BASE
::
onGridCellLeftClick
),
NULL
,
this
);
m_global_grid
->
Disconnect
(
wxEVT_GRID_CELL_LEFT_DCLICK
,
wxGridEventHandler
(
DIALOG_FP_LIB_TABLE_BASE
::
onGridCellLeftDClick
),
NULL
,
this
);
m_global_grid
->
Disconnect
(
wxEVT_GRID_CELL_RIGHT_CLICK
,
wxGridEventHandler
(
DIALOG_FP_LIB_TABLE_BASE
::
onGridCellRightClick
),
NULL
,
this
);
m_global_grid
->
Disconnect
(
wxEVT_GRID_SELECT_CELL
,
wxGridEventHandler
(
DIALOG_FP_LIB_TABLE_BASE
::
onGridCmdSelectCell
),
NULL
,
this
);
m_project_grid
->
Disconnect
(
wxEVT_GRID_CELL_LEFT_CLICK
,
wxGridEventHandler
(
DIALOG_FP_LIB_TABLE_BASE
::
onGridCellLeftClick
),
NULL
,
this
);
m_project_grid
->
Disconnect
(
wxEVT_GRID_CELL_LEFT_DCLICK
,
wxGridEventHandler
(
DIALOG_FP_LIB_TABLE_BASE
::
onGridCellLeftDClick
),
NULL
,
this
);
m_project_grid
->
Disconnect
(
wxEVT_GRID_CELL_RIGHT_CLICK
,
wxGridEventHandler
(
DIALOG_FP_LIB_TABLE_BASE
::
onGridCellRightClick
),
NULL
,
this
);
m_project_grid
->
Disconnect
(
wxEVT_GRID_SELECT_CELL
,
wxGridEventHandler
(
DIALOG_FP_LIB_TABLE_BASE
::
onGridCmdSelectCell
),
NULL
,
this
);
m_append_button
->
Disconnect
(
wxEVT_LEFT_DOWN
,
wxMouseEventHandler
(
DIALOG_FP_LIB_TABLE_BASE
::
appendRowHandler
),
NULL
,
this
);
m_append_button
->
Disconnect
(
wxEVT_LEFT_DOWN
,
wxMouseEventHandler
(
DIALOG_FP_LIB_TABLE_BASE
::
appendRowHandler
),
NULL
,
this
);
m_delete_button
->
Disconnect
(
wxEVT_LEFT_DOWN
,
wxMouseEventHandler
(
DIALOG_FP_LIB_TABLE_BASE
::
deleteRowHandler
),
NULL
,
this
);
m_delete_button
->
Disconnect
(
wxEVT_LEFT_DOWN
,
wxMouseEventHandler
(
DIALOG_FP_LIB_TABLE_BASE
::
deleteRowHandler
),
NULL
,
this
);
m_move_up_button
->
Disconnect
(
wxEVT_LEFT_DOWN
,
wxMouseEventHandler
(
DIALOG_FP_LIB_TABLE_BASE
::
moveUpHandler
),
NULL
,
this
);
m_move_up_button
->
Disconnect
(
wxEVT_LEFT_DOWN
,
wxMouseEventHandler
(
DIALOG_FP_LIB_TABLE_BASE
::
moveUpHandler
),
NULL
,
this
);
...
...
pcbnew/dialogs/dialog_fp_lib_table_base.fbp
View file @
273244a1
...
@@ -42,7 +42,7 @@
...
@@ -42,7 +42,7 @@
<property
name=
"minimum_size"
></property>
<property
name=
"minimum_size"
></property>
<property
name=
"name"
>
DIALOG_FP_LIB_TABLE_BASE
</property>
<property
name=
"name"
>
DIALOG_FP_LIB_TABLE_BASE
</property>
<property
name=
"pos"
></property>
<property
name=
"pos"
></property>
<property
name=
"size"
>
864
,652
</property>
<property
name=
"size"
>
996
,652
</property>
<property
name=
"style"
>
wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER
</property>
<property
name=
"style"
>
wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER
</property>
<property
name=
"subclass"
>
DIALOG_SHIM; dialog_shim.h
</property>
<property
name=
"subclass"
>
DIALOG_SHIM; dialog_shim.h
</property>
<property
name=
"title"
>
PCB Library Tables
</property>
<property
name=
"title"
>
PCB Library Tables
</property>
...
@@ -140,7 +140,7 @@
...
@@ -140,7 +140,7 @@
<property
name=
"pos"
></property>
<property
name=
"pos"
></property>
<property
name=
"resize"
>
Resizable
</property>
<property
name=
"resize"
>
Resizable
</property>
<property
name=
"sashgravity"
>
0.0
</property>
<property
name=
"sashgravity"
>
0.0
</property>
<property
name=
"sashpos"
>
3
43
</property>
<property
name=
"sashpos"
>
3
98
</property>
<property
name=
"sashsize"
>
-1
</property>
<property
name=
"sashsize"
>
-1
</property>
<property
name=
"show"
>
1
</property>
<property
name=
"show"
>
1
</property>
<property
name=
"size"
></property>
<property
name=
"size"
></property>
...
@@ -464,7 +464,7 @@
...
@@ -464,7 +464,7 @@
<property
name=
"col_label_size"
>
30
</property>
<property
name=
"col_label_size"
>
30
</property>
<property
name=
"col_label_values"
></property>
<property
name=
"col_label_values"
></property>
<property
name=
"col_label_vert_alignment"
>
wxALIGN_CENTRE
</property>
<property
name=
"col_label_vert_alignment"
>
wxALIGN_CENTRE
</property>
<property
name=
"cols"
>
4
</property>
<property
name=
"cols"
>
5
</property>
<property
name=
"column_sizes"
></property>
<property
name=
"column_sizes"
></property>
<property
name=
"context_help"
></property>
<property
name=
"context_help"
></property>
<property
name=
"context_menu"
>
1
</property>
<property
name=
"context_menu"
>
1
</property>
...
@@ -524,9 +524,9 @@
...
@@ -524,9 +524,9 @@
<event
name=
"OnEnterWindow"
></event>
<event
name=
"OnEnterWindow"
></event>
<event
name=
"OnEraseBackground"
></event>
<event
name=
"OnEraseBackground"
></event>
<event
name=
"OnGridCellChange"
></event>
<event
name=
"OnGridCellChange"
></event>
<event
name=
"OnGridCellLeftClick"
></event>
<event
name=
"OnGridCellLeftClick"
>
onGridCellLeftClick
</event>
<event
name=
"OnGridCellLeftDClick"
></event>
<event
name=
"OnGridCellLeftDClick"
>
onGridCellLeftDClick
</event>
<event
name=
"OnGridCellRightClick"
></event>
<event
name=
"OnGridCellRightClick"
>
onGridCellRightClick
</event>
<event
name=
"OnGridCellRightDClick"
></event>
<event
name=
"OnGridCellRightDClick"
></event>
<event
name=
"OnGridCmdCellChange"
></event>
<event
name=
"OnGridCmdCellChange"
></event>
<event
name=
"OnGridCmdCellLeftClick"
></event>
<event
name=
"OnGridCmdCellLeftClick"
></event>
...
@@ -543,7 +543,7 @@
...
@@ -543,7 +543,7 @@
<event
name=
"OnGridCmdLabelRightDClick"
></event>
<event
name=
"OnGridCmdLabelRightDClick"
></event>
<event
name=
"OnGridCmdRangeSelect"
></event>
<event
name=
"OnGridCmdRangeSelect"
></event>
<event
name=
"OnGridCmdRowSize"
></event>
<event
name=
"OnGridCmdRowSize"
></event>
<event
name=
"OnGridCmdSelectCell"
></event>
<event
name=
"OnGridCmdSelectCell"
>
onGridCmdSelectCell
</event>
<event
name=
"OnGridColSize"
></event>
<event
name=
"OnGridColSize"
></event>
<event
name=
"OnGridEditorCreated"
></event>
<event
name=
"OnGridEditorCreated"
></event>
<event
name=
"OnGridEditorHidden"
></event>
<event
name=
"OnGridEditorHidden"
></event>
...
@@ -693,7 +693,7 @@
...
@@ -693,7 +693,7 @@
<property
name=
"col_label_size"
>
30
</property>
<property
name=
"col_label_size"
>
30
</property>
<property
name=
"col_label_values"
></property>
<property
name=
"col_label_values"
></property>
<property
name=
"col_label_vert_alignment"
>
wxALIGN_CENTRE
</property>
<property
name=
"col_label_vert_alignment"
>
wxALIGN_CENTRE
</property>
<property
name=
"cols"
>
4
</property>
<property
name=
"cols"
>
5
</property>
<property
name=
"column_sizes"
></property>
<property
name=
"column_sizes"
></property>
<property
name=
"context_help"
></property>
<property
name=
"context_help"
></property>
<property
name=
"context_menu"
>
1
</property>
<property
name=
"context_menu"
>
1
</property>
...
@@ -753,9 +753,9 @@
...
@@ -753,9 +753,9 @@
<event
name=
"OnEnterWindow"
></event>
<event
name=
"OnEnterWindow"
></event>
<event
name=
"OnEraseBackground"
></event>
<event
name=
"OnEraseBackground"
></event>
<event
name=
"OnGridCellChange"
></event>
<event
name=
"OnGridCellChange"
></event>
<event
name=
"OnGridCellLeftClick"
></event>
<event
name=
"OnGridCellLeftClick"
>
onGridCellLeftClick
</event>
<event
name=
"OnGridCellLeftDClick"
></event>
<event
name=
"OnGridCellLeftDClick"
>
onGridCellLeftDClick
</event>
<event
name=
"OnGridCellRightClick"
></event>
<event
name=
"OnGridCellRightClick"
>
onGridCellRightClick
</event>
<event
name=
"OnGridCellRightDClick"
></event>
<event
name=
"OnGridCellRightDClick"
></event>
<event
name=
"OnGridCmdCellChange"
></event>
<event
name=
"OnGridCmdCellChange"
></event>
<event
name=
"OnGridCmdCellLeftClick"
></event>
<event
name=
"OnGridCmdCellLeftClick"
></event>
...
@@ -772,7 +772,7 @@
...
@@ -772,7 +772,7 @@
<event
name=
"OnGridCmdLabelRightDClick"
></event>
<event
name=
"OnGridCmdLabelRightDClick"
></event>
<event
name=
"OnGridCmdRangeSelect"
></event>
<event
name=
"OnGridCmdRangeSelect"
></event>
<event
name=
"OnGridCmdRowSize"
></event>
<event
name=
"OnGridCmdRowSize"
></event>
<event
name=
"OnGridCmdSelectCell"
></event>
<event
name=
"OnGridCmdSelectCell"
>
onGridCmdSelectCell
</event>
<event
name=
"OnGridColSize"
></event>
<event
name=
"OnGridColSize"
></event>
<event
name=
"OnGridEditorCreated"
></event>
<event
name=
"OnGridEditorCreated"
></event>
<event
name=
"OnGridEditorHidden"
></event>
<event
name=
"OnGridEditorHidden"
></event>
...
@@ -1297,7 +1297,7 @@
...
@@ -1297,7 +1297,7 @@
<property
name=
"close_button"
>
1
</property>
<property
name=
"close_button"
>
1
</property>
<property
name=
"col_label_horiz_alignment"
>
wxALIGN_CENTRE
</property>
<property
name=
"col_label_horiz_alignment"
>
wxALIGN_CENTRE
</property>
<property
name=
"col_label_size"
>
30
</property>
<property
name=
"col_label_size"
>
30
</property>
<property
name=
"col_label_values"
>
"
Category
"
"
Path Segment
"
</property>
<property
name=
"col_label_values"
>
"
Environment Variable
"
"
Path Segment
"
</property>
<property
name=
"col_label_vert_alignment"
>
wxALIGN_CENTRE
</property>
<property
name=
"col_label_vert_alignment"
>
wxALIGN_CENTRE
</property>
<property
name=
"cols"
>
2
</property>
<property
name=
"cols"
>
2
</property>
<property
name=
"column_sizes"
>
150,500
</property>
<property
name=
"column_sizes"
>
150,500
</property>
...
@@ -1343,10 +1343,10 @@
...
@@ -1343,10 +1343,10 @@
<property
name=
"resize"
>
Resizable
</property>
<property
name=
"resize"
>
Resizable
</property>
<property
name=
"row_label_horiz_alignment"
>
wxALIGN_CENTRE
</property>
<property
name=
"row_label_horiz_alignment"
>
wxALIGN_CENTRE
</property>
<property
name=
"row_label_size"
>
40
</property>
<property
name=
"row_label_size"
>
40
</property>
<property
name=
"row_label_values"
>
"
%S
"
"
%P
"
</property>
<property
name=
"row_label_values"
></property>
<property
name=
"row_label_vert_alignment"
>
wxALIGN_CENTRE
</property>
<property
name=
"row_label_vert_alignment"
>
wxALIGN_CENTRE
</property>
<property
name=
"row_sizes"
></property>
<property
name=
"row_sizes"
></property>
<property
name=
"rows"
>
2
</property>
<property
name=
"rows"
>
1
</property>
<property
name=
"show"
>
1
</property>
<property
name=
"show"
>
1
</property>
<property
name=
"size"
></property>
<property
name=
"size"
></property>
<property
name=
"subclass"
></property>
<property
name=
"subclass"
></property>
...
...
pcbnew/dialogs/dialog_fp_lib_table_base.h
View file @
273244a1
...
@@ -61,6 +61,10 @@ class DIALOG_FP_LIB_TABLE_BASE : public DIALOG_SHIM
...
@@ -61,6 +61,10 @@ class DIALOG_FP_LIB_TABLE_BASE : public DIALOG_SHIM
// Virtual event handlers, overide them in your derived class
// Virtual event handlers, overide them in your derived class
virtual
void
pageChangedHandler
(
wxAuiNotebookEvent
&
event
)
{
event
.
Skip
();
}
virtual
void
pageChangedHandler
(
wxAuiNotebookEvent
&
event
)
{
event
.
Skip
();
}
virtual
void
onGridCellLeftClick
(
wxGridEvent
&
event
)
{
event
.
Skip
();
}
virtual
void
onGridCellLeftDClick
(
wxGridEvent
&
event
)
{
event
.
Skip
();
}
virtual
void
onGridCellRightClick
(
wxGridEvent
&
event
)
{
event
.
Skip
();
}
virtual
void
onGridCmdSelectCell
(
wxGridEvent
&
event
)
{
event
.
Skip
();
}
virtual
void
appendRowHandler
(
wxMouseEvent
&
event
)
{
event
.
Skip
();
}
virtual
void
appendRowHandler
(
wxMouseEvent
&
event
)
{
event
.
Skip
();
}
virtual
void
deleteRowHandler
(
wxMouseEvent
&
event
)
{
event
.
Skip
();
}
virtual
void
deleteRowHandler
(
wxMouseEvent
&
event
)
{
event
.
Skip
();
}
virtual
void
moveUpHandler
(
wxMouseEvent
&
event
)
{
event
.
Skip
();
}
virtual
void
moveUpHandler
(
wxMouseEvent
&
event
)
{
event
.
Skip
();
}
...
@@ -71,12 +75,12 @@ class DIALOG_FP_LIB_TABLE_BASE : public DIALOG_SHIM
...
@@ -71,12 +75,12 @@ class DIALOG_FP_LIB_TABLE_BASE : public DIALOG_SHIM
public
:
public
:
DIALOG_FP_LIB_TABLE_BASE
(
wxWindow
*
parent
,
wxWindowID
id
=
wxID_ANY
,
const
wxString
&
title
=
_
(
"PCB Library Tables"
),
const
wxPoint
&
pos
=
wxDefaultPosition
,
const
wxSize
&
size
=
wxSize
(
864
,
652
),
long
style
=
wxDEFAULT_DIALOG_STYLE
|
wxRESIZE_BORDER
);
DIALOG_FP_LIB_TABLE_BASE
(
wxWindow
*
parent
,
wxWindowID
id
=
wxID_ANY
,
const
wxString
&
title
=
_
(
"PCB Library Tables"
),
const
wxPoint
&
pos
=
wxDefaultPosition
,
const
wxSize
&
size
=
wxSize
(
996
,
652
),
long
style
=
wxDEFAULT_DIALOG_STYLE
|
wxRESIZE_BORDER
);
~
DIALOG_FP_LIB_TABLE_BASE
();
~
DIALOG_FP_LIB_TABLE_BASE
();
void
m_splitterOnIdle
(
wxIdleEvent
&
)
void
m_splitterOnIdle
(
wxIdleEvent
&
)
{
{
m_splitter
->
SetSashPosition
(
3
43
);
m_splitter
->
SetSashPosition
(
3
98
);
m_splitter
->
Disconnect
(
wxEVT_IDLE
,
wxIdleEventHandler
(
DIALOG_FP_LIB_TABLE_BASE
::
m_splitterOnIdle
),
NULL
,
this
);
m_splitter
->
Disconnect
(
wxEVT_IDLE
,
wxIdleEventHandler
(
DIALOG_FP_LIB_TABLE_BASE
::
m_splitterOnIdle
),
NULL
,
this
);
}
}
...
...
pcbnew/io_mgr.h
View file @
273244a1
...
@@ -53,6 +53,7 @@ public:
...
@@ -53,6 +53,7 @@ public:
EAGLE
,
EAGLE
,
PCAD
,
PCAD
,
GEDA_PCB
,
//< Geda PCB file formats.
GEDA_PCB
,
//< Geda PCB file formats.
// add your type here.
// add your type here.
// ALTIUM,
// ALTIUM,
...
...
pcbnew/pcb_plot_params.h
View file @
273244a1
...
@@ -292,5 +292,4 @@ public:
...
@@ -292,5 +292,4 @@ public:
*/
*/
extern
int
g_DrawDefaultLineThickness
;
extern
int
g_DrawDefaultLineThickness
;
#endif // PCB_PLOT_PARAMS_H_
#endif // PCB_PLOT_PARAMS_H_
pcbnew/pcbnew_config.cpp
View file @
273244a1
...
@@ -45,6 +45,8 @@
...
@@ -45,6 +45,8 @@
#include <class_board.h>
#include <class_board.h>
#include <fp_lib_table.h>
#include <fp_lib_table.h>
#include <fp_lib_table_lexer.h>
#include <pcbplot.h>
#include <pcbplot.h>
#include <pcbnew.h>
#include <pcbnew.h>
#include <pcbnew_id.h>
#include <pcbnew_id.h>
...
@@ -88,27 +90,66 @@ void PCB_EDIT_FRAME::Process_Config( wxCommandEvent& event )
...
@@ -88,27 +90,66 @@ void PCB_EDIT_FRAME::Process_Config( wxCommandEvent& event )
FP_LIB_TABLE
gbl
;
FP_LIB_TABLE
gbl
;
FP_LIB_TABLE
prj
;
FP_LIB_TABLE
prj
;
gbl
.
InsertRow
(
FP_LIB_TABLE
::
ROW
(
FP_LIB_TABLE_LEXER
glex
(
wxT
(
"passives"
),
wxT
(
"%G/passives"
),
wxT
(
"KiCad"
),
wxT
(
"speed=fast,purpose=testing"
)
)
);
"(fp_lib_table
\n
"
" (lib (name passives)(descr
\"
R/C Lib
\"
)(type KiCad)(uri ${KISYSMODS}/passives.pretty))
\n
"
gbl
.
InsertRow
(
FP_LIB_TABLE
::
ROW
(
" (lib (name micros)(descr
\"
Small stuff
\"
)(type Legacy)(uri ${KISYSMODS}/passives.mod)(options
\"
op1=2
\"
))
\n
"
wxT
(
"micros"
),
wxT
(
"%P/micros"
),
wxT
(
"Legacy"
),
wxT
(
"speed=fast,purpose=testing"
)
)
);
" (lib (name chips)(descr
\"
Potatoe chips
\"
)(type Eagle)(uri /opt/eagle-6.2.0/lbr/con-amp-micromatch.lbr))
\n
"
")"
,
wxT
(
"gbl"
)
);
prj
.
InsertRow
(
FP_LIB_TABLE
::
ROW
(
wxT
(
"micros"
),
wxT
(
"%P/potato_chips"
),
wxT
(
"Eagle"
),
wxT
(
"speed=fast,purpose=testing"
)
)
);
FP_LIB_TABLE_LEXER
plex
(
"(fp_lib_table
\n
"
" (lib (name passives)(descr
\"
Demo Lib
\"
)(type KiCad)(uri ${KIUSRMODS}/passives.pretty))
\n
"
" (lib (name micros)(descr
\"
Small stuff
\"
)(type Legacy)(uri ${KIUSRMODS}/micros.mod)(options
\"
op1=2
\"
))
\n
"
" (lib (name chips)(descr
\"
Potatoe chips
\"
)(type Eagle)(uri /opt/eagle-6.2.0/lbr/con-amp-micromatch.lbr))
\n
"
")"
,
wxT
(
"prj"
)
);
try
{
gbl
.
Parse
(
&
glex
);
prj
.
Parse
(
&
plex
);
}
/* PARSE_ERROR is an IO_ERROR, handle them the same for now.
catch( PARSE_ERROR pe )
{
DisplayError( this, pe.errorText );
break;
}
*/
catch
(
IO_ERROR
ioe
)
{
DisplayError
(
this
,
ioe
.
errorText
);
break
;
}
int
r
=
InvokePcbLibTableEditor
(
this
,
&
gbl
,
&
prj
);
int
r
=
InvokePcbLibTableEditor
(
this
,
&
gbl
,
&
prj
);
if
(
r
&
1
)
if
(
r
&
1
)
{
{
#if defined(DEBUG)
printf
(
"changed global:
\n
"
);
STRING_FORMATTER
sf
;
gbl
.
Format
(
&
sf
,
0
);
printf
(
"%s
\n
"
,
sf
.
GetString
().
c_str
()
);
#endif
// save global table to disk and apply it
// save global table to disk and apply it
D
(
printf
(
"global has changed
\n
"
);)
}
}
if
(
r
&
2
)
if
(
r
&
2
)
{
{
#if defined(DEBUG)
printf
(
"changed project:
\n
"
);
STRING_FORMATTER
sf
;
prj
.
Format
(
&
sf
,
0
);
printf
(
"%s
\n
"
,
sf
.
GetString
().
c_str
()
);
#endif
// save project table to disk and apply it
// save project table to disk and apply it
D
(
printf
(
"project has changed
\n
"
);)
}
}
}
}
break
;
break
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment