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
d5d16186
Commit
d5d16186
authored
Oct 29, 2007
by
CHARRAS
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
listboxes.cpp problem solved (see change_log)
parent
7eff222c
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
343 additions
and
285 deletions
+343
-285
change_log.txt
change_log.txt
+8
-0
edaappl.cpp
common/edaappl.cpp
+26
-21
msgpanel.cpp
common/msgpanel.cpp
+1
-1
listboxes.cpp
cvpcb/listboxes.cpp
+307
-262
wxstruct.h
include/wxstruct.h
+1
-1
No files found.
change_log.txt
View file @
d5d16186
...
...
@@ -4,6 +4,14 @@ Started 2007-June-11
Please add newer entries at the top, list the date and your name with
email address.
2007-Oct-29 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
================================================================================
+cvpcb: listboxes.cpp problem solved: Workaround for a curious bug in wxWidgets:
if we switch from a long list of footprints to a short list (a filtered footprint list),
and if the selected item is near the end of the long list,
the new list is not displayed from the top of the list box
2007-Oct-27 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
================================================================================
+ all:
...
...
common/edaappl.cpp
View file @
d5d16186
...
...
@@ -54,21 +54,21 @@
* The real font size will be computed at run time */
/**************************
***
/
/*
Constructeur de WinEDA_App
*/
/**************************
***
/
/**************************/
/*
WinEDA_App Constructor
*/
/**************************/
WinEDA_App
::
WinEDA_App
()
{
m_Checker
=
NULL
;
m_MainFrame
=
NULL
;
m_PcbFrame
=
NULL
;
m_ModuleEditFrame
=
NULL
;
//
Edition des modules
m_SchematicFrame
=
NULL
;
//
Edition des Schemas
m_LibeditFrame
=
NULL
;
//
Edition des composants
m_ViewlibFrame
=
NULL
;
//
Visualisation des composant
s
m_ModuleEditFrame
=
NULL
;
//
Frame for footprint edition
m_SchematicFrame
=
NULL
;
//
Frame for schematic edition
m_LibeditFrame
=
NULL
;
//
Frame for component edition
m_ViewlibFrame
=
NULL
;
//
Frame for browsing component librarie
s
m_CvpcbFrame
=
NULL
;
m_GerberFrame
=
NULL
;
//
ecran de visualisation GERBER
m_GerberFrame
=
NULL
;
//
Frame for the gerber viewer GERBVIEW
m_LastProjectMaxCount
=
10
;
m_HtmlCtrl
=
NULL
;
...
...
@@ -83,15 +83,15 @@ WinEDA_App::WinEDA_App()
}
/*************************
****
/
/*
Destructeur de WinEDA_App
*/
/*************************
****
/
/*************************/
/*
WinEDA_App Destructor
*/
/*************************/
WinEDA_App
::~
WinEDA_App
()
{
SaveSettings
();
/* delete
data non directement geree par wxAppl
*/
/* delete
user datas
*/
delete
g_Prj_Config
;
delete
m_EDA_Config
;
delete
m_EDA_CommonConfig
;
...
...
@@ -116,10 +116,12 @@ void WinEDA_App::InitEDA_Appl( const wxString& name )
ident
=
name
+
wxT
(
"-"
)
+
wxGetUserId
();
m_Checker
=
new
wxSingleInstanceChecker
(
ident
);
/* Init environnement
* (KICAD definit le chemin de kicad ex: set KICAD=d:\kicad) */
/* Init kicad environment
* the environment variable KICAD (if exists) gives the kicad path:
* something like set KICAD=d:\kicad
*/
m_Env_Defined
=
wxGetEnv
(
wxT
(
"KICAD"
),
&
m_KicadEnv
);
if
(
m_Env_Defined
)
//
m_KicadEnv doit finir par "/" ou "\
"
if
(
m_Env_Defined
)
//
ensure m_KicadEnv ends by "/
"
{
m_KicadEnv
.
Replace
(
WIN_STRING_DIR_SEP
,
UNIX_STRING_DIR_SEP
);
if
(
m_KicadEnv
.
Last
()
!=
'/'
)
...
...
@@ -129,13 +131,13 @@ void WinEDA_App::InitEDA_Appl( const wxString& name )
/* Prepare On Line Help */
m_HelpFileName
=
name
+
wxT
(
".html"
);
// Init paramet
res pou
r configuration
// Init paramet
ers fo
r configuration
SetVendorName
(
wxT
(
"kicad"
)
);
SetAppName
(
name
);
m_EDA_Config
=
new
wxConfig
(
name
);
m_EDA_CommonConfig
=
new
wxConfig
(
wxT
(
"kicad_common"
)
);
/* Creat
ion des fontes util
es */
/* Creat
e the fontes used in dialogs and messag
es */
g_StdFontPointSize
=
FONT_DEFAULT_SIZE
;
g_MsgFontPointSize
=
FONT_DEFAULT_SIZE
;
g_DialogFontPointSize
=
FONT_DEFAULT_SIZE
;
...
...
@@ -155,12 +157,12 @@ void WinEDA_App::InitEDA_Appl( const wxString& name )
wxImage
::
AddHandler
(
new
wxJPEGHandler
);
wxFileSystem
::
AddHandler
(
new
wxZipFSHandler
);
// Analyse command line & init binary path
// Analyse
the
command line & init binary path
SetBinDir
();
ReadPdfBrowserInfos
();
// Internationalisation:
chargement du Dictionnaire de kicad
// Internationalisation:
loading the kicad suitable Dictionnary
m_EDA_CommonConfig
->
Read
(
wxT
(
"Language"
),
&
m_LanguageId
,
wxLANGUAGE_DEFAULT
);
bool
succes
=
SetLanguage
(
TRUE
);
...
...
@@ -262,7 +264,7 @@ bool WinEDA_App::SetBinDir()
void
WinEDA_App
::
GetSettings
()
/*********************************/
/*
Lit les infos utiles sauvees lors de la derniere utilisation du logiciel
/*
Get the last setup used (fontes, files opened...)
*/
{
wxString
Line
,
Ident
;
...
...
@@ -639,8 +641,11 @@ wxMenu* WinEDA_App::SetLanguageList( wxMenu* MasterMenu )
}
/**********************/
int
WinEDA_App
::
OnRun
()
/* Run init scripts */
/**********************/
/* Run init scripts
*/
{
#ifdef KICAD_PYTHON
PyHandler
::
GetInstance
()
->
RunScripts
();
...
...
common/msgpanel.cpp
View file @
d5d16186
...
...
@@ -141,7 +141,7 @@ void WinEDA_MsgPanel::Affiche_1_Parametre( int pos_X, const wxString& texte_H,
}
void
WinEDA_MsgPanel
::
showItem
(
wx
Window
DC
&
dc
,
const
MsgItem
&
aItem
)
void
WinEDA_MsgPanel
::
showItem
(
wxDC
&
dc
,
const
MsgItem
&
aItem
)
{
int
color
=
aItem
.
m_Color
;
...
...
cvpcb/listboxes.cpp
View file @
d5d16186
...
...
@@ -12,38 +12,40 @@
#include "protos.h"
/************************************************************************/
/* Class (from wxListView) for displaying component and footprint lists */
/************************************************************************/
ListBoxBase
::
ListBoxBase
(
WinEDA_CvpcbFrame
*
parent
,
wxWindowID
id
,
const
wxPoint
&
loc
,
const
wxSize
&
size
)
:
LIST_BOX_TYPE
(
parent
,
id
,
loc
,
size
,
/******************************************************************************/
/* Basic class (from wxListView) for displaying component and footprint lists */
/* Not directly used: the 2 list boxes actually used are derived from it */
/******************************************************************************/
ListBoxBase
::
ListBoxBase
(
WinEDA_CvpcbFrame
*
parent
,
wxWindowID
id
,
const
wxPoint
&
loc
,
const
wxSize
&
size
)
:
LIST_BOX_TYPE
(
parent
,
id
,
loc
,
size
,
wxSUNKEN_BORDER
|
wxLC_NO_HEADER
|
wxLC_SINGLE_SEL
|
wxLC_REPORT
|
wxLC_VIRTUAL
)
wxLC_SINGLE_SEL
|
wxLC_REPORT
|
wxLC_VIRTUAL
)
{
m_Parent
=
parent
;
InsertColumn
(
0
,
wxEmptyString
);
SetColumnWidth
(
0
,
wxLIST_AUTOSIZE
);
InsertColumn
(
0
,
wxEmptyString
);
SetColumnWidth
(
0
,
wxLIST_AUTOSIZE
);
}
ListBoxBase
::~
ListBoxBase
()
{
}
/************************************************/
void
ListBoxBase
::
OnSize
(
wxSizeEvent
&
event
)
void
ListBoxBase
::
OnSize
(
wxSizeEvent
&
event
)
/************************************************/
// Ajust the column width to the entire available window width
{
wxSize
size
=
GetClientSize
();
int
width
=
0
;
wxSize
size
=
GetClientSize
();
int
width
=
0
;
// SetColumnWidth(0, wxLIST_AUTOSIZE );
// width = GetColumnWidth(0);
SetColumnWidth
(
0
,
MAX
(
width
,
size
.
x
)
);
SetColumnWidth
(
0
,
MAX
(
width
,
size
.
x
)
);
event
.
Skip
();
}
...
...
@@ -52,26 +54,26 @@ int width = 0;
/*********************************/
int
ListBoxBase
::
GetSelection
()
/*********************************/
// Return an index for the selected item
{
return
GetFirstSelected
();
}
/***************************************
*********************
/
/* ListBox
derivee pour l'affichage de la liste des Modules
*/
/***************************************
*********************
/
/***************************************/
/* ListBox
handling the footprint list
*/
/***************************************/
FootprintListBox
::
FootprintListBox
(
WinEDA_CvpcbFrame
*
parent
,
FootprintListBox
::
FootprintListBox
(
WinEDA_CvpcbFrame
*
parent
,
wxWindowID
id
,
const
wxPoint
&
loc
,
const
wxSize
&
size
,
int
nbitems
,
wxString
choice
[])
:
ListBoxBase
(
parent
,
id
,
loc
,
size
)
int
nbitems
,
wxString
choice
[]
)
:
ListBoxBase
(
parent
,
id
,
loc
,
size
)
{
SetActiveFootprintList
(
TRUE
);
SetActiveFootprintList
(
TRUE
);
}
FootprintListBox
::~
FootprintListBox
()
{
}
...
...
@@ -80,6 +82,7 @@ FootprintListBox::~FootprintListBox()
/**********************************/
int
FootprintListBox
::
GetCount
()
/**********************************/
// Return number of items
{
return
m_ActiveFootprintList
->
Count
();
...
...
@@ -87,28 +90,32 @@ int FootprintListBox::GetCount()
/*****************************************************************************/
void
FootprintListBox
::
SetString
(
unsigned
linecount
,
const
wxString
&
text
)
void
FootprintListBox
::
SetString
(
unsigned
linecount
,
const
wxString
&
text
)
/*****************************************************************************/
// Change an item text
{
if
(
linecount
>=
m_ActiveFootprintList
->
Count
())
linecount
=
m_ActiveFootprintList
->
Count
()
-
1
;
if
(
linecount
>=
0
)
(
*
m_ActiveFootprintList
)[
linecount
]
=
text
;
if
(
linecount
>=
m_ActiveFootprintList
->
Count
()
)
linecount
=
m_ActiveFootprintList
->
Count
()
-
1
;
if
(
linecount
>=
0
)
(
*
m_ActiveFootprintList
)[
linecount
]
=
text
;
}
/***************************************************/
wxString
FootprintListBox
::
GetSelectedFootprint
()
/***************************************************/
// Return an index for the selected item
{
wxString
FootprintName
;
int
ii
=
GetFirstSelected
();
wxString
FootprintName
;
int
ii
=
GetFirstSelected
();
if
(
ii
>=
0
)
if
(
ii
>=
0
)
{
wxString
msg
=
(
*
m_ActiveFootprintList
)[
ii
];
msg
.
Trim
(
TRUE
);
msg
.
Trim
(
FALSE
);
FootprintName
=
msg
.
AfterFirst
(
wxChar
(
' '
)
);
msg
.
Trim
(
TRUE
);
msg
.
Trim
(
FALSE
);
FootprintName
=
msg
.
AfterFirst
(
wxChar
(
' '
)
);
}
return
FootprintName
;
...
...
@@ -116,199 +123,210 @@ int ii = GetFirstSelected();
/*********************************************************/
void
FootprintListBox
::
AppendLine
(
const
wxString
&
text
)
void
FootprintListBox
::
AppendLine
(
const
wxString
&
text
)
/*********************************************************/
// Add an item at end of list
{
m_ActiveFootprintList
->
Add
(
text
);
SetItemCount
(
m_ActiveFootprintList
->
Count
()
);
m_ActiveFootprintList
->
Add
(
text
);
SetItemCount
(
m_ActiveFootprintList
->
Count
()
);
}
/*********************************************************************/
wxString
FootprintListBox
::
OnGetItemText
(
long
item
,
long
column
)
const
wxString
FootprintListBox
::
OnGetItemText
(
long
item
,
long
column
)
const
/*********************************************************************/
/* Overlayed function: MUST be provided in wxLC_VIRTUAL mode
because real datas are not handled by ListBoxBase
*/
*
because real datas are not handled by ListBoxBase
*/
{
return
m_ActiveFootprintList
->
Item
(
item
);
return
m_ActiveFootprintList
->
Item
(
item
);
}
/*****************************************************************/
void
FootprintListBox
::
SetSelection
(
unsigned
index
,
bool
State
)
void
FootprintListBox
::
SetSelection
(
unsigned
index
,
bool
State
)
/*****************************************************************/
// Enable or disable an item
{
if
(
(
int
)
index
>=
GetCount
()
)
index
=
GetCount
()
-
1
;
if
(
(
int
)
index
>=
GetCount
()
)
index
=
GetCount
()
-
1
;
#ifndef __WXMAC__
Select
(
index
,
State
);
Select
(
index
,
State
);
#endif
EnsureVisible
(
index
);
EnsureVisible
(
index
);
#ifdef __WXMAC__
Refresh
();
#endif
}
/**************************************************
*************
/
/* ListBox
derivee pour l'affichage de la liste des Composants
*/
/**************************************************
*************
/
/**************************************************/
/* ListBox
handling the schematic components list
*/
/**************************************************/
ListBoxCmp
::
ListBoxCmp
(
WinEDA_CvpcbFrame
*
parent
,
wxWindowID
id
,
ListBoxCmp
::
ListBoxCmp
(
WinEDA_CvpcbFrame
*
parent
,
wxWindowID
id
,
const
wxPoint
&
loc
,
const
wxSize
&
size
,
int
nbitems
,
wxString
choice
[])
:
ListBoxBase
(
parent
,
id
,
loc
,
size
)
int
nbitems
,
wxString
choice
[]
)
:
ListBoxBase
(
parent
,
id
,
loc
,
size
)
{
}
ListBoxCmp
::~
ListBoxCmp
()
{
}
/* Build the events table for the schematic components list box
*/
/***********************************************************************/
/* Construction de la table des evenements pour la fenetre des composants */
/***********************************************************************/
BEGIN_EVENT_TABLE
(
ListBoxCmp
,
LIST_BOX_TYPE
)
EVT_SIZE
(
ListBoxBase
::
OnSize
)
BEGIN_EVENT_TABLE
(
ListBoxCmp
,
LIST_BOX_TYPE
)
EVT_SIZE
(
ListBoxBase
::
OnSize
)
END_EVENT_TABLE
()
/****************************/
void
ListBoxCmp
::
Clear
()
/****************************/
// Reset ALL datas
{
m_ComponentList
.
Clear
();
SetItemCount
(
0
);
SetItemCount
(
0
);
}
/******************************/
int
ListBoxCmp
::
GetCount
()
/******************************/
// Return number of items
{
return
m_ComponentList
.
Count
();
}
/********************************************************************/
void
ListBoxCmp
::
SetString
(
unsigned
linecount
,
const
wxString
&
text
)
void
ListBoxCmp
::
SetString
(
unsigned
linecount
,
const
wxString
&
text
)
/********************************************************************/
// Change an item text
{
if
(
linecount
>=
m_ComponentList
.
Count
())
linecount
=
m_ComponentList
.
Count
()
-
1
;
if
(
linecount
>=
0
)
m_ComponentList
[
linecount
]
=
text
;
if
(
linecount
>=
m_ComponentList
.
Count
()
)
linecount
=
m_ComponentList
.
Count
()
-
1
;
if
(
linecount
>=
0
)
m_ComponentList
[
linecount
]
=
text
;
}
/****************************************************/
void
ListBoxCmp
::
AppendLine
(
const
wxString
&
text
)
void
ListBoxCmp
::
AppendLine
(
const
wxString
&
text
)
/****************************************************/
// Add an item at end of list
{
m_ComponentList
.
Add
(
text
);
SetItemCount
(
m_ComponentList
.
Count
()
);
m_ComponentList
.
Add
(
text
);
SetItemCount
(
m_ComponentList
.
Count
()
);
}
/****************************************************************/
wxString
ListBoxCmp
::
OnGetItemText
(
long
item
,
long
column
)
const
wxString
ListBoxCmp
::
OnGetItemText
(
long
item
,
long
column
)
const
/****************************************************************/
/* Overlayed function: MUST be provided in wxLC_VIRTUAL mode
because real datas are not handled by ListBoxBase
*/
*
because real datas are not handled by ListBoxBase
*/
{
return
m_ComponentList
.
Item
(
item
);
return
m_ComponentList
.
Item
(
item
);
}
/********************************************************/
void
ListBoxCmp
::
SetSelection
(
unsigned
index
,
bool
State
)
void
ListBoxCmp
::
SetSelection
(
unsigned
index
,
bool
State
)
/*********************************************************/
// Enable or disable an item
{
if
(
(
int
)
index
>=
GetCount
()
)
index
=
GetCount
()
-
1
;
if
(
(
int
)
index
>=
GetCount
()
)
index
=
GetCount
()
-
1
;
#ifndef __WXMAC__
Select
(
index
,
State
);
Select
(
index
,
State
);
#endif
EnsureVisible
(
index
);
EnsureVisible
(
index
);
#ifdef __WXMAC__
Refresh
();
#endif
}
/********************************************/
void
WinEDA_CvpcbFrame
::
BuildCmpListBox
()
/********************************************/
/* Construit la fenetre d'affichage de la liste des composant.
dimx et dimy sont les dimensions de la surface totale d'affichage
et non les dims de la fenetre des Cmp
Si la fenetre d'affichage a deja ete creee, il y a seulement
mise a jour de la liste
*/
/* Create or update the schematic components list.
*/
{
int
ii
;
STORECMP
*
Composant
;
wxString
msg
;
wxSize
size
(
10
,
10
);
int
ii
;
STORECMP
*
Composant
;
wxString
msg
;
wxSize
size
(
10
,
10
);
if
(
m_ListCmp
==
NULL
)
{
m_ListCmp
=
new
ListBoxCmp
(
this
,
ID_CVPCB_COMPONENT_LIST
,
m_ListCmp
=
new
ListBoxCmp
(
this
,
ID_CVPCB_COMPONENT_LIST
,
wxDefaultPosition
,
size
,
0
,
NULL
);
m_ListCmp
->
SetBackgroundColour
(
wxColour
(
225
,
255
,
255
)
);
m_ListCmp
->
SetForegroundColour
(
wxColour
(
0
,
0
,
0
)
);
m_ListCmp
->
SetFont
(
*
g_FixedFont
);
0
,
NULL
);
m_ListCmp
->
SetBackgroundColour
(
wxColour
(
225
,
255
,
255
)
);
m_ListCmp
->
SetForegroundColour
(
wxColour
(
0
,
0
,
0
)
);
m_ListCmp
->
SetFont
(
*
g_FixedFont
);
}
m_ListCmp
->
m_ComponentList
.
Clear
();
Composant
=
g_BaseListeCmp
;
for
(
ii
=
1
;
Composant
!=
NULL
;
Composant
=
Composant
->
Pnext
,
ii
++
)
for
(
ii
=
1
;
Composant
!=
NULL
;
Composant
=
Composant
->
Pnext
,
ii
++
)
{
msg
.
Printf
(
CMP_FORMAT
,
ii
,
msg
.
Printf
(
CMP_FORMAT
,
ii
,
Composant
->
m_Reference
.
GetData
(),
Composant
->
m_Valeur
.
GetData
(),
Composant
->
m_Module
.
GetData
()
);
m_ListCmp
->
m_ComponentList
.
Add
(
msg
);
Composant
->
m_Module
.
GetData
()
);
m_ListCmp
->
m_ComponentList
.
Add
(
msg
);
}
m_ListCmp
->
SetItemCount
(
m_ListCmp
->
m_ComponentList
.
Count
()
);
m_ListCmp
->
SetSelection
(
0
,
TRUE
);
m_ListCmp
->
SetItemCount
(
m_ListCmp
->
m_ComponentList
.
Count
()
);
m_ListCmp
->
SetSelection
(
0
,
TRUE
);
}
/**********************************************
***************
/
/**********************************************/
void
WinEDA_CvpcbFrame
::
BuildFootprintListBox
()
/*************************************************************/
/* Construit la fenetre d'affichage de la liste des Modules.
dimx et dimy sont les dimensions de la surface totale d'affichage
et non les dims de la fenetre des Modules
Si la fenetre d'affichage a deja ete creee, il y a seulement
mise a jour de la liste
*/
/**********************************************/
/* Create or update the footprint list.
*/
{
wxString
msg
;
wxSize
size
(
10
,
10
);
wxString
msg
;
wxSize
size
(
10
,
10
);
if
(
m_FootprintList
==
NULL
)
{
m_FootprintList
=
new
FootprintListBox
(
this
,
ID_CVPCB_FOOTPRINT_LIST
,
m_FootprintList
=
new
FootprintListBox
(
this
,
ID_CVPCB_FOOTPRINT_LIST
,
wxDefaultPosition
,
size
,
0
,
NULL
);
m_FootprintList
->
SetBackgroundColour
(
wxColour
(
225
,
255
,
225
)
);
m_FootprintList
->
SetForegroundColour
(
wxColour
(
0
,
0
,
0
)
);
m_FootprintList
->
SetFont
(
*
g_FixedFont
);
0
,
NULL
);
m_FootprintList
->
SetBackgroundColour
(
wxColour
(
225
,
255
,
225
)
);
m_FootprintList
->
SetForegroundColour
(
wxColour
(
0
,
0
,
0
)
);
m_FootprintList
->
SetFont
(
*
g_FixedFont
);
}
m_FootprintList
->
SetFootprintFullList
();
msg
.
Printf
(
_
(
"Footprints: %d"
),
m_FootprintList
->
GetCount
()
);
SetStatusText
(
msg
,
2
);
msg
.
Printf
(
_
(
"Footprints: %d"
),
m_FootprintList
->
GetCount
()
);
SetStatusText
(
msg
,
2
);
}
...
...
@@ -316,157 +334,184 @@ wxSize size(10,10);
void
FootprintListBox
::
SetFootprintFullList
()
/************************************************/
{
STOREMOD
*
FootprintItem
;
wxString
msg
;
int
OldSelection
=
GetSelection
();
STOREMOD
*
FootprintItem
;
wxString
msg
;
int
OldSelection
=
GetSelection
();
m_FullFootprintList
.
Clear
();
FootprintItem
=
g_BaseListePkg
;
for
(
int
ii
=
1
;
FootprintItem
!=
NULL
;
FootprintItem
=
FootprintItem
->
Pnext
,
ii
++
)
for
(
int
ii
=
1
;
FootprintItem
!=
NULL
;
FootprintItem
=
FootprintItem
->
Pnext
,
ii
++
)
{
msg
.
Printf
(
wxT
(
"%3d %s"
),
ii
,
FootprintItem
->
m_Module
.
GetData
()
);
m_FullFootprintList
.
Add
(
msg
);
msg
.
Printf
(
wxT
(
"%3d %s"
),
ii
,
FootprintItem
->
m_Module
.
GetData
()
);
m_FullFootprintList
.
Add
(
msg
);
}
SetActiveFootprintList
(
TRUE
);
SetActiveFootprintList
(
TRUE
);
if
(
(
GetCount
()
==
0
)
||
(
OldSelection
<
0
)
||
(
OldSelection
>=
GetCount
()
)
)
SetSelection
(
0
,
TRUE
);
if
(
(
GetCount
()
==
0
)
||
(
OldSelection
<
0
)
||
(
OldSelection
>=
GetCount
()
)
)
SetSelection
(
0
,
TRUE
);
Refresh
();
}
/**********************************************************************/
void
FootprintListBox
::
SetFootprintFilteredList
(
STORECMP
*
Component
)
void
FootprintListBox
::
SetFootprintFilteredList
(
STORECMP
*
Component
)
/*********************************************************************/
{
STOREMOD
*
FootprintItem
;
wxString
msg
;
int
OldSelection
=
GetSelection
();
bool
HasItem
=
FALSE
;
STOREMOD
*
FootprintItem
;
wxString
msg
;
int
OldSelection
=
GetSelection
();
bool
HasItem
=
FALSE
;
m_FilteredFootprintList
.
Clear
();
FootprintItem
=
g_BaseListePkg
;
int
cmpnum
=
1
;
for
(
int
ii
=
0
;
FootprintItem
!=
NULL
;
FootprintItem
=
FootprintItem
->
Pnext
,
ii
++
)
for
(
int
ii
=
0
;
FootprintItem
!=
NULL
;
FootprintItem
=
FootprintItem
->
Pnext
,
ii
++
)
{
/* Search for matching footprints */
for
(
unsigned
jj
=
0
;
jj
<
Component
->
m_FootprintFilter
.
GetCount
();
jj
++
)
for
(
unsigned
jj
=
0
;
jj
<
Component
->
m_FootprintFilter
.
GetCount
();
jj
++
)
{
if
(
!
FootprintItem
->
m_Module
.
Matches
(
Component
->
m_FootprintFilter
[
jj
]
)
)
if
(
!
FootprintItem
->
m_Module
.
Matches
(
Component
->
m_FootprintFilter
[
jj
]
)
)
continue
;
msg
.
Printf
(
wxT
(
"%3d %s"
),
cmpnum
++
,
FootprintItem
->
m_Module
.
GetData
()
);
m_FilteredFootprintList
.
Add
(
msg
);
msg
.
Printf
(
wxT
(
"%3d %s"
),
cmpnum
++
,
FootprintItem
->
m_Module
.
GetData
()
);
m_FilteredFootprintList
.
Add
(
msg
);
HasItem
=
TRUE
;
}
}
if
(
HasItem
)
SetActiveFootprintList
(
FALSE
);
else
SetActiveFootprintList
(
TRUE
);
if
(
HasItem
)
SetActiveFootprintList
(
FALSE
);
else
SetActiveFootprintList
(
TRUE
);
if
(
(
GetCount
()
==
0
)
||
(
OldSelection
>=
GetCount
()
)
)
SetSelection
(
0
,
TRUE
);
if
(
(
GetCount
()
==
0
)
||
(
OldSelection
>=
GetCount
()
)
)
SetSelection
(
0
,
TRUE
);
Refresh
();
}
/**************************************************************************/
void
FootprintListBox
::
SetActiveFootprintList
(
bool
FullList
,
bool
Redraw
)
void
FootprintListBox
::
SetActiveFootprintList
(
bool
FullList
,
bool
Redraw
)
/**************************************************************************/
/** Set the footprint list. We can have 2 footprint list:
* The full footprint list
* The filtered footprint list (if the current selected component has a filter for footprints)
* @param FullList true = full footprint list, false = filtered footprint list
* @param Redraw = true to redraw the window
*/
{
bool
old_selection
=
m_UseFootprintFullList
;
bool
old_selection
=
m_UseFootprintFullList
;
/* Workaround for a curious bug in wxWidgets:
* if we switch from a long list of footprints to a short list (a filtered footprint list),
* and if the selected item is near the end of the long list,
* the new list is not displayed from the top of the list box
*/
if
(
m_ActiveFootprintList
)
{
bool
new_selection
;
if
(
FullList
)
new_selection
=
TRUE
;
else
new_selection
=
FALSE
;
if
(
new_selection
!=
old_selection
)
SetSelection
(
0
,
TRUE
);
}
if
(
FullList
)
if
(
FullList
)
{
m_UseFootprintFullList
=
TRUE
;
m_ActiveFootprintList
=
&
m_FullFootprintList
;
SetItemCount
(
m_FullFootprintList
.
GetCount
()
);
SetItemCount
(
m_FullFootprintList
.
GetCount
()
);
}
else
{
m_UseFootprintFullList
=
FALSE
;
m_ActiveFootprintList
=
&
m_FilteredFootprintList
;
SetItemCount
(
m_FilteredFootprintList
.
GetCount
()
);
SetItemCount
(
m_FilteredFootprintList
.
GetCount
()
);
}
if
(
Redraw
)
if
(
Redraw
)
{
if
(
!
m_UseFootprintFullList
||
(
m_UseFootprintFullList
!=
old_selection
)
)
if
(
!
m_UseFootprintFullList
||
(
m_UseFootprintFullList
!=
old_selection
)
)
{
Refresh
();
}
}
if
(
!
m_UseFootprintFullList
||
(
m_UseFootprintFullList
!=
old_selection
)
)
if
(
!
m_UseFootprintFullList
||
(
m_UseFootprintFullList
!=
old_selection
)
)
{
m_Parent
->
SetStatusText
(
wxEmptyString
,
0
);
m_Parent
->
SetStatusText
(
wxEmptyString
,
1
);
m_Parent
->
SetStatusText
(
wxEmptyString
,
0
);
m_Parent
->
SetStatusText
(
wxEmptyString
,
1
);
}
wxString
msg
;
if
(
FullList
)
msg
.
Printf
(
_
(
"Footprints (All): %d"
),
m_ActiveFootprintList
->
GetCount
()
);
if
(
FullList
)
msg
.
Printf
(
_
(
"Footprints (All): %d"
),
m_ActiveFootprintList
->
GetCount
()
);
else
msg
.
Printf
(
_
(
"Footprints (filtered): %d"
),
m_ActiveFootprintList
->
GetCount
()
);
m_Parent
->
SetStatusText
(
msg
,
2
);
msg
.
Printf
(
_
(
"Footprints (filtered): %d"
),
m_ActiveFootprintList
->
GetCount
()
);
m_Parent
->
SetStatusText
(
msg
,
2
);
}
/***********************************************************************/
/* Construction de la table des evenements pour la fenetre des modules */
/***********************************************************************/
BEGIN_EVENT_TABLE
(
FootprintListBox
,
LIST_BOX_TYPE
)
EVT_SIZE
(
ListBoxBase
::
OnSize
)
/**************************************/
/* Event table for the footprint list */
/**************************************/
BEGIN_EVENT_TABLE
(
FootprintListBox
,
LIST_BOX_TYPE
)
EVT_SIZE
(
ListBoxBase
::
OnSize
)
END_EVENT_TABLE
()
/********************************************************/
void
FootprintListBox
::
OnLeftClick
(
wxListEvent
&
event
)
void
FootprintListBox
::
OnLeftClick
(
wxListEvent
&
event
)
/********************************************************/
{
STOREMOD
*
Module
;
wxString
msg
;
wxString
FootprintName
=
GetSelectedFootprint
();
STOREMOD
*
Module
;
wxString
msg
;
wxString
FootprintName
=
GetSelectedFootprint
();
Module
=
GetModuleDescrByName
(
FootprintName
);
Module
=
GetModuleDescrByName
(
FootprintName
);
if
(
m_Parent
->
DrawFrame
)
{
m_Parent
->
CreateScreenCmp
();
/* refresh general */
}
if
(
Module
)
msg
=
Module
->
m_Doc
;
m_Parent
->
SetStatusText
(
msg
,
0
);
if
(
Module
)
msg
=
Module
->
m_Doc
;
m_Parent
->
SetStatusText
(
msg
,
0
);
msg
=
wxT
(
"KeyW: "
);
if
(
Module
)
msg
+=
Module
->
m_KeyWord
;
m_Parent
->
SetStatusText
(
msg
,
1
);
msg
=
wxT
(
"KeyW: "
);
if
(
Module
)
msg
+=
Module
->
m_KeyWord
;
m_Parent
->
SetStatusText
(
msg
,
1
);
}
/******************************************************/
void
FootprintListBox
::
OnLeftDClick
(
wxListEvent
&
event
)
void
FootprintListBox
::
OnLeftDClick
(
wxListEvent
&
event
)
/******************************************************/
{
wxString
FootprintName
=
GetSelectedFootprint
();
wxString
FootprintName
=
GetSelectedFootprint
();
m_Parent
->
SetNewPkg
(
FootprintName
);
m_Parent
->
SetNewPkg
(
FootprintName
);
}
/**************************************************************/
STOREMOD
*
GetModuleDescrByName
(
const
wxString
&
FootprintName
)
STOREMOD
*
GetModuleDescrByName
(
const
wxString
&
FootprintName
)
/**************************************************************/
{
STOREMOD
*
FootprintItem
=
g_BaseListePkg
;
STOREMOD
*
FootprintItem
=
g_BaseListePkg
;
for
(
;
FootprintItem
!=
NULL
;
FootprintItem
=
FootprintItem
->
Pnext
)
for
(
;
FootprintItem
!=
NULL
;
FootprintItem
=
FootprintItem
->
Pnext
)
{
if
(
FootprintItem
->
m_Module
==
FootprintName
)
if
(
FootprintItem
->
m_Module
==
FootprintName
)
break
;
// found !
}
return
FootprintItem
;
}
include/wxstruct.h
View file @
d5d16186
...
...
@@ -1409,7 +1409,7 @@ class WinEDA_MsgPanel : public wxPanel
protected
:
std
::
vector
<
MsgItem
>
m_Items
;
void
showItem
(
wx
Window
DC
&
dc
,
const
MsgItem
&
aItem
);
void
showItem
(
wxDC
&
dc
,
const
MsgItem
&
aItem
);
public
:
WinEDA_DrawFrame
*
m_Parent
;
...
...
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