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
ae9eacb2
Commit
ae9eacb2
authored
Feb 07, 2015
by
Tomasz Włostowski
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'bzr/master'
parents
b03d4218
07db7c8d
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
262 additions
and
91 deletions
+262
-91
searchhelpfilefullpath.cpp
common/searchhelpfilefullpath.cpp
+27
-10
context_menu.cpp
common/tool/context_menu.cpp
+1
-1
dialog_graphic_item_properties.cpp
pcbnew/dialogs/dialog_graphic_item_properties.cpp
+124
-48
dialog_graphic_item_properties_for_Modedit.cpp
...ew/dialogs/dialog_graphic_item_properties_for_Modedit.cpp
+110
-32
No files found.
common/searchhelpfilefullpath.cpp
View file @
ae9eacb2
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2014 CERN
* Copyright (C) 2014 KiCad Developers, see CHANGELOG.TXT for contributors.
* Copyright (C) 2014
-2015
CERN
* Copyright (C) 2014
-2015
KiCad Developers, see CHANGELOG.TXT for contributors.
* @author Maciej Suminski <maciej.suminski@cern.ch>
*
* This program is free software; you can redistribute it and/or
...
...
@@ -31,7 +31,7 @@
* Function FindFileInSearchPaths
* looks in "this" for \a aFilename, but first modifies every search
* path by appending a list of path fragments from aSubdirs. That modification
* is not re
nt
ative.
* is not re
l
ative.
*/
wxString
FindFileInSearchPaths
(
const
SEARCH_STACK
&
aStack
,
const
wxString
&
aFilename
,
const
wxArrayString
*
aSubdirs
)
...
...
@@ -73,7 +73,12 @@ wxString SearchHelpFileFullPath( const SEARCH_STACK& aSStack, const wxString& aB
// If there's a KICAD environment variable set, use that guy's path also
ss
.
AddPaths
(
Pgm
().
GetKicadEnvVariable
(),
0
);
#if 1 // && defined(__linux__)
#if defined(__WXMAC__)
ss
.
AddPaths
(
GetOSXKicadMachineDataDir
()
);
ss
.
AddPaths
(
Pgm
().
GetExecutablePath
(),
0
);
#endif
#if ! defined(__WXMAC__) // && defined(__linux__)
// Based on kicad-doc.bzr/CMakeLists.txt, line 20, the help files are
// installed into "<CMAKE_INSTALL_PREFIX>/share/doc/kicad/help" for linux.
// This is ${KICAD_HELP} var in that CMakeLists.txt file.
...
...
@@ -84,7 +89,7 @@ wxString SearchHelpFileFullPath( const SEARCH_STACK& aSStack, const wxString& aB
subdirs
.
Add
(
wxT
(
"help"
)
);
#endif
#if
1
// && defined(__WINDOWS__)
#if
! defined(__WXMAC__)
// && defined(__WINDOWS__)
// Based on kicad-doc.bzr/CMakeLists.txt, line 35, the help files are
// installed into "<CMAKE_INSTALL_PREFIX>/doc/help" for Windows.
// This is ${KICAD_HELP} var in that CMakeLists.txt file.
...
...
@@ -93,6 +98,18 @@ wxString SearchHelpFileFullPath( const SEARCH_STACK& aSStack, const wxString& aB
altsubdirs
.
Add
(
wxT
(
"help"
)
);
#endif
#if defined (__WXMAC__)
// OS X packages can have the help files in
// /Library/Application\ Support/kicad/help,
// and in Contents/SharedSupport/help inside the
// bundle.
// Below we account for an international subdirectory.
subdirs
.
Add
(
wxT
(
"help"
)
);
altsubdirs
.
Add
(
wxT
(
"Contents"
)
);
altsubdirs
.
Add
(
wxT
(
"SharedSupport"
)
);
altsubdirs
.
Add
(
wxT
(
"help"
)
);
#endif
/* Search for a help file.
* we *must* find a help file.
* so help is searched in directories in this order:
...
...
@@ -110,7 +127,7 @@ wxString SearchHelpFileFullPath( const SEARCH_STACK& aSStack, const wxString& aB
locale_name_dirs
.
Add
(
i18n
->
GetCanonicalName
()
);
// canonical name like fr_FR
// wxLocale::GetName() does not return always the short name
locale_name_dirs
.
Add
(
i18n
->
GetName
().
BeforeLast
(
'_'
)
);
// short canonical name like fr
locale_name_dirs
.
Add
(
wxT
(
"en"
)
);
// default (en)
locale_name_dirs
.
Add
(
wxT
(
"en"
)
);
// default (en)
#if defined(DEBUG) && 0
ss
.
Show
(
__func__
);
...
...
@@ -127,22 +144,22 @@ wxString SearchHelpFileFullPath( const SEARCH_STACK& aSStack, const wxString& aB
subdirs
.
Add
(
locale_name_dirs
[
ii
]
);
altsubdirs
.
Add
(
locale_name_dirs
[
ii
]
);
fn
=
FindFileInSearchPaths
(
ss
,
aBaseName
+
wxT
(
".html"
),
&
altsubdirs
);
fn
=
FindFileInSearchPaths
(
ss
,
aBaseName
+
wxT
(
".html"
),
&
altsubdirs
);
if
(
!
fn
.
IsEmpty
()
)
break
;
fn
=
FindFileInSearchPaths
(
ss
,
aBaseName
+
wxT
(
".pdf"
),
&
altsubdirs
);
fn
=
FindFileInSearchPaths
(
ss
,
aBaseName
+
wxT
(
".pdf"
),
&
altsubdirs
);
if
(
!
fn
.
IsEmpty
()
)
break
;
fn
=
FindFileInSearchPaths
(
ss
,
aBaseName
+
wxT
(
".html"
),
&
subdirs
);
fn
=
FindFileInSearchPaths
(
ss
,
aBaseName
+
wxT
(
".html"
),
&
subdirs
);
if
(
!
fn
.
IsEmpty
()
)
break
;
fn
=
FindFileInSearchPaths
(
ss
,
aBaseName
+
wxT
(
".pdf"
),
&
subdirs
);
fn
=
FindFileInSearchPaths
(
ss
,
aBaseName
+
wxT
(
".pdf"
),
&
subdirs
);
if
(
!
fn
.
IsEmpty
()
)
break
;
...
...
common/tool/context_menu.cpp
View file @
ae9eacb2
...
...
@@ -132,7 +132,7 @@ void CONTEXT_MENU::SetTitle( const wxString& aTitle )
else
{
InsertSeparator
(
0
);
Insert
(
0
,
new
wxMenuItem
(
this
,
-
1
,
aTitle
,
wxEmptyString
,
wxITEM_NORMAL
)
);
Insert
(
0
,
new
wxMenuItem
(
this
,
wxID_NONE
,
aTitle
,
wxEmptyString
,
wxITEM_NORMAL
)
);
m_titleSet
=
true
;
}
}
...
...
pcbnew/dialogs/dialog_graphic_item_properties.cpp
View file @
ae9eacb2
...
...
@@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2010 Jean-Pierre Charras <jp.charras@wanadoo.fr>
* Copyright (C) 1992-201
1
KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 1992-201
5
KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
...
...
@@ -49,34 +49,36 @@
#include <dialog_graphic_item_properties_base.h>
#include <class_pcb_layer_box_selector.h>
#include <html_messagebox.h>
class
DIALOG_GRAPHIC_ITEM_PROPERTIES
:
public
DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE
class
DIALOG_GRAPHIC_ITEM_PROPERTIES
:
public
DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE
{
private
:
PCB_EDIT_FRAME
*
m_parent
;
wxDC
*
m_DC
;
DRAWSEGMENT
*
m_I
tem
;
BOARD_DESIGN_SETTINGS
m_brdSettings
;
PCB_EDIT_FRAME
*
m_parent
;
wxDC
*
m_DC
;
DRAWSEGMENT
*
m_i
tem
;
BOARD_DESIGN_SETTINGS
m_brdSettings
;
public
:
DIALOG_GRAPHIC_ITEM_PROPERTIES
(
PCB_EDIT_FRAME
*
aParent
,
DRAWSEGMENT
*
aItem
,
wxDC
*
aDC
);
DIALOG_GRAPHIC_ITEM_PROPERTIES
(
PCB_EDIT_FRAME
*
aParent
,
DRAWSEGMENT
*
aItem
,
wxDC
*
aDC
);
~
DIALOG_GRAPHIC_ITEM_PROPERTIES
()
{};
private
:
void
initDlg
(
);
void
initDlg
();
void
OnOkClick
(
wxCommandEvent
&
event
);
void
OnCancelClick
(
wxCommandEvent
&
event
)
{
event
.
Skip
();
}
void
OnLayerChoice
(
wxCommandEvent
&
event
);
bool
itemValuesOK
();
};
DIALOG_GRAPHIC_ITEM_PROPERTIES
::
DIALOG_GRAPHIC_ITEM_PROPERTIES
(
PCB_EDIT_FRAME
*
aParent
,
DRAWSEGMENT
*
aItem
,
wxDC
*
aDC
)
:
DRAWSEGMENT
*
aItem
,
wxDC
*
aDC
)
:
DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE
(
aParent
)
{
m_parent
=
aParent
;
m_DC
=
aDC
;
m_
I
tem
=
aItem
;
m_
i
tem
=
aItem
;
m_brdSettings
=
m_parent
->
GetDesignSettings
();
initDlg
();
Layout
();
...
...
@@ -87,11 +89,7 @@ DIALOG_GRAPHIC_ITEM_PROPERTIES::DIALOG_GRAPHIC_ITEM_PROPERTIES( PCB_EDIT_FRAME*
void
PCB_EDIT_FRAME
::
InstallGraphicItemPropertiesDialog
(
DRAWSEGMENT
*
aItem
,
wxDC
*
aDC
)
{
if
(
aItem
==
NULL
)
{
DisplayError
(
this
,
wxT
(
"InstallGraphicItemPropertiesDialog() error: NULL item"
)
);
return
;
}
wxCHECK_RET
(
aItem
!=
NULL
,
wxT
(
"InstallGraphicItemPropertiesDialog() error: NULL item"
)
);
m_canvas
->
SetIgnoreMouseEvents
(
true
);
DIALOG_GRAPHIC_ITEM_PROPERTIES
dlg
(
this
,
aItem
,
aDC
);
...
...
@@ -101,12 +99,12 @@ void PCB_EDIT_FRAME::InstallGraphicItemPropertiesDialog( DRAWSEGMENT* aItem, wxD
}
void
DIALOG_GRAPHIC_ITEM_PROPERTIES
::
initDlg
(
)
void
DIALOG_GRAPHIC_ITEM_PROPERTIES
::
initDlg
()
{
m_StandardButtonsSizerOK
->
SetDefault
();
// Set unit symbol
wxStaticText
*
texts_unit
[]
=
wxStaticText
*
texts_unit
[]
=
{
m_StartPointXUnit
,
m_StartPointYUnit
,
...
...
@@ -128,9 +126,10 @@ void DIALOG_GRAPHIC_ITEM_PROPERTIES::initDlg( )
wxString
msg
;
// Change texts according to the segment shape:
switch
(
m_I
tem
->
GetShape
()
)
switch
(
m_i
tem
->
GetShape
()
)
{
case
S_CIRCLE
:
SetTitle
(
_
(
"Circle Properties"
)
);
m_StartPointXLabel
->
SetLabel
(
_
(
"Center X"
)
);
m_StartPointYLabel
->
SetLabel
(
_
(
"Center Y"
)
);
m_EndPointXLabel
->
SetLabel
(
_
(
"Point X"
)
);
...
...
@@ -141,16 +140,21 @@ void DIALOG_GRAPHIC_ITEM_PROPERTIES::initDlg( )
break
;
case
S_ARC
:
SetTitle
(
_
(
"Arc Properties"
)
);
m_StartPointXLabel
->
SetLabel
(
_
(
"Center X"
)
);
m_StartPointYLabel
->
SetLabel
(
_
(
"Center Y"
)
);
m_EndPointXLabel
->
SetLabel
(
_
(
"Start Point X"
)
);
m_EndPointYLabel
->
SetLabel
(
_
(
"Start Point Y"
)
);
// Here the angle is a double, but the UI is still working with integers.
msg
<<
int
(
m_
I
tem
->
GetAngle
()
);
msg
<<
int
(
m_
i
tem
->
GetAngle
()
);
m_Angle_Ctrl
->
SetValue
(
msg
);
break
;
case
S_SEGMENT
:
SetTitle
(
_
(
"Line Segment Properties"
)
);
// Fall through.
default
:
m_Angle_Text
->
Show
(
false
);
m_Angle_Ctrl
->
Show
(
false
);
...
...
@@ -158,22 +162,22 @@ void DIALOG_GRAPHIC_ITEM_PROPERTIES::initDlg( )
break
;
}
PutValueInLocalUnits
(
*
m_Center_StartXCtrl
,
m_
I
tem
->
GetStart
().
x
);
PutValueInLocalUnits
(
*
m_Center_StartXCtrl
,
m_
i
tem
->
GetStart
().
x
);
PutValueInLocalUnits
(
*
m_Center_StartYCtrl
,
m_
I
tem
->
GetStart
().
y
);
PutValueInLocalUnits
(
*
m_Center_StartYCtrl
,
m_
i
tem
->
GetStart
().
y
);
PutValueInLocalUnits
(
*
m_EndX_Radius_Ctrl
,
m_
I
tem
->
GetEnd
().
x
);
PutValueInLocalUnits
(
*
m_EndX_Radius_Ctrl
,
m_
i
tem
->
GetEnd
().
x
);
PutValueInLocalUnits
(
*
m_EndY_Ctrl
,
m_
I
tem
->
GetEnd
().
y
);
PutValueInLocalUnits
(
*
m_EndY_Ctrl
,
m_
i
tem
->
GetEnd
().
y
);
PutValueInLocalUnits
(
*
m_ThicknessCtrl
,
m_
I
tem
->
GetWidth
()
);
PutValueInLocalUnits
(
*
m_ThicknessCtrl
,
m_
i
tem
->
GetWidth
()
);
int
thickness
;
if
(
m_
I
tem
->
GetLayer
()
==
Edge_Cuts
)
thickness
=
m_brdSettings
.
m_EdgeSegmentWidth
;
if
(
m_
i
tem
->
GetLayer
()
==
Edge_Cuts
)
thickness
=
m_brdSettings
.
m_EdgeSegmentWidth
;
else
thickness
=
m_brdSettings
.
m_DrawSegmentWidth
;
thickness
=
m_brdSettings
.
m_DrawSegmentWidth
;
PutValueInLocalUnits
(
*
m_DefaultThicknessCtrl
,
thickness
);
...
...
@@ -183,10 +187,10 @@ void DIALOG_GRAPHIC_ITEM_PROPERTIES::initDlg( )
m_LayerSelectionCtrl
->
SetBoardFrame
(
m_parent
);
m_LayerSelectionCtrl
->
Resync
();
if
(
m_LayerSelectionCtrl
->
SetLayerSelection
(
m_
I
tem
->
GetLayer
()
)
<
0
)
if
(
m_LayerSelectionCtrl
->
SetLayerSelection
(
m_
i
tem
->
GetLayer
()
)
<
0
)
{
wxMessageBox
(
_
(
"This item
has an illegal layer id
.
\n
"
"
Now, forced on the drawings layer. Please, fix it
"
)
);
wxMessageBox
(
_
(
"This item
was on an unknown layer
.
\n
"
"
It has been moved to the drawings layer. Please fix it.
"
)
);
m_LayerSelectionCtrl
->
SetLayerSelection
(
Dwgs_User
);
}
}
...
...
@@ -197,9 +201,9 @@ void DIALOG_GRAPHIC_ITEM_PROPERTIES::OnLayerChoice( wxCommandEvent& event )
int
thickness
;
if
(
m_LayerSelectionCtrl
->
GetLayerSelection
()
==
Edge_Cuts
)
thickness
=
m_brdSettings
.
m_EdgeSegmentWidth
;
thickness
=
m_brdSettings
.
m_EdgeSegmentWidth
;
else
thickness
=
m_brdSettings
.
m_DrawSegmentWidth
;
thickness
=
m_brdSettings
.
m_DrawSegmentWidth
;
PutValueInLocalUnits
(
*
m_DefaultThicknessCtrl
,
thickness
);
}
...
...
@@ -207,54 +211,126 @@ void DIALOG_GRAPHIC_ITEM_PROPERTIES::OnLayerChoice( wxCommandEvent& event )
void
DIALOG_GRAPHIC_ITEM_PROPERTIES
::
OnOkClick
(
wxCommandEvent
&
event
)
{
m_parent
->
SaveCopyInUndoList
(
m_Item
,
UR_CHANGED
);
if
(
!
itemValuesOK
()
)
return
;
m_parent
->
SaveCopyInUndoList
(
m_item
,
UR_CHANGED
);
wxString
msg
;
if
(
m_DC
)
m_
I
tem
->
Draw
(
m_parent
->
GetCanvas
(),
m_DC
,
GR_XOR
);
m_
i
tem
->
Draw
(
m_parent
->
GetCanvas
(),
m_DC
,
GR_XOR
);
msg
=
m_Center_StartXCtrl
->
GetValue
();
m_
I
tem
->
SetStartX
(
ValueFromString
(
g_UserUnit
,
msg
)
);
m_
i
tem
->
SetStartX
(
ValueFromString
(
g_UserUnit
,
msg
)
);
msg
=
m_Center_StartYCtrl
->
GetValue
();
m_
I
tem
->
SetStartY
(
ValueFromString
(
g_UserUnit
,
msg
)
);
m_
i
tem
->
SetStartY
(
ValueFromString
(
g_UserUnit
,
msg
)
);
msg
=
m_EndX_Radius_Ctrl
->
GetValue
();
m_
I
tem
->
SetEndX
(
ValueFromString
(
g_UserUnit
,
msg
)
);
m_
i
tem
->
SetEndX
(
ValueFromString
(
g_UserUnit
,
msg
)
);
msg
=
m_EndY_Ctrl
->
GetValue
();
m_
I
tem
->
SetEndY
(
ValueFromString
(
g_UserUnit
,
msg
)
);
m_
i
tem
->
SetEndY
(
ValueFromString
(
g_UserUnit
,
msg
)
);
msg
=
m_ThicknessCtrl
->
GetValue
();
m_
I
tem
->
SetWidth
(
ValueFromString
(
g_UserUnit
,
msg
)
);
m_
i
tem
->
SetWidth
(
ValueFromString
(
g_UserUnit
,
msg
)
);
msg
=
m_DefaultThicknessCtrl
->
GetValue
();
int
thickness
=
ValueFromString
(
g_UserUnit
,
msg
);
m_
I
tem
->
SetLayer
(
ToLAYER_ID
(
m_LayerSelectionCtrl
->
GetLayerSelection
()
)
);
m_
i
tem
->
SetLayer
(
ToLAYER_ID
(
m_LayerSelectionCtrl
->
GetLayerSelection
()
)
);
if
(
m_
I
tem
->
GetLayer
()
==
Edge_Cuts
)
m_brdSettings
.
m_EdgeSegmentWidth
=
thickness
;
if
(
m_
i
tem
->
GetLayer
()
==
Edge_Cuts
)
m_brdSettings
.
m_EdgeSegmentWidth
=
thickness
;
else
m_brdSettings
.
m_DrawSegmentWidth
=
thickness
;
m_brdSettings
.
m_DrawSegmentWidth
=
thickness
;
if
(
m_
I
tem
->
GetShape
()
==
S_ARC
)
if
(
m_
i
tem
->
GetShape
()
==
S_ARC
)
{
double
angle
;
m_Angle_Ctrl
->
GetValue
().
ToDouble
(
&
angle
);
NORMALIZE_ANGLE_360
(
angle
);
m_
I
tem
->
SetAngle
(
angle
);
NORMALIZE_ANGLE_360
(
angle
);
m_
i
tem
->
SetAngle
(
angle
);
}
m_parent
->
OnModify
();
if
(
m_DC
)
m_
I
tem
->
Draw
(
m_parent
->
GetCanvas
(),
m_DC
,
GR_OR
);
m_
i
tem
->
Draw
(
m_parent
->
GetCanvas
(),
m_DC
,
GR_OR
);
m_parent
->
SetMsgPanel
(
m_
I
tem
);
m_parent
->
SetMsgPanel
(
m_
i
tem
);
m_parent
->
SetDesignSettings
(
m_brdSettings
);
Close
(
true
);
}
bool
DIALOG_GRAPHIC_ITEM_PROPERTIES
::
itemValuesOK
()
{
wxArrayString
error_msgs
;
// Load the start and end points -- all types use these in the checks.
int
startx
=
ValueFromString
(
g_UserUnit
,
m_Center_StartXCtrl
->
GetValue
()
);
int
starty
=
ValueFromString
(
g_UserUnit
,
m_Center_StartYCtrl
->
GetValue
()
);
int
endx
=
ValueFromString
(
g_UserUnit
,
m_EndX_Radius_Ctrl
->
GetValue
()
);
int
endy
=
ValueFromString
(
g_UserUnit
,
m_EndY_Ctrl
->
GetValue
()
);
// Type specific checks.
switch
(
m_item
->
GetShape
()
)
{
case
S_ARC
:
// Check angle of arc.
double
angle
;
m_Angle_Ctrl
->
GetValue
().
ToDouble
(
&
angle
);
NORMALIZE_ANGLE_360
(
angle
);
if
(
angle
==
0
)
{
error_msgs
.
Add
(
_
(
"The arc angle must be greater than zero."
)
);
}
// Fall through.
case
S_CIRCLE
:
// Check radius.
if
(
(
startx
==
endx
)
&&
(
starty
==
endy
)
)
{
error_msgs
.
Add
(
_
(
"The radius must be greater than zero."
)
);
}
break
;
default
:
// Check start and end are not the same.
if
(
(
startx
==
endx
)
&&
(
starty
==
endy
)
)
{
error_msgs
.
Add
(
_
(
"The start and end points cannot be the same."
)
);
}
break
;
}
// Check the item thickness.
int
thickness
=
ValueFromString
(
g_UserUnit
,
m_ThicknessCtrl
->
GetValue
()
);
if
(
thickness
<=
0
)
error_msgs
.
Add
(
_
(
"The item thickness must be greater than zero."
)
);
// And the default thickness.
thickness
=
ValueFromString
(
g_UserUnit
,
m_DefaultThicknessCtrl
->
GetValue
()
);
if
(
thickness
<=
0
)
error_msgs
.
Add
(
_
(
"The default thickness must be greater than zero."
)
);
if
(
error_msgs
.
GetCount
()
)
{
HTML_MESSAGE_BOX
dlg
(
this
,
_
(
"Error list"
)
);
dlg
.
ListSet
(
error_msgs
);
dlg
.
ShowModal
();
}
return
error_msgs
.
GetCount
()
==
0
;
}
pcbnew/dialogs/dialog_graphic_item_properties_for_Modedit.cpp
View file @
ae9eacb2
...
...
@@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2012-2014 Jean-Pierre Charras, jean-pierre.charras at wanadoo.fr
* Copyright (C) 1992-201
4
KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 1992-201
5
KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
...
...
@@ -23,7 +23,7 @@
*/
/**
@file dialog_graphic_item_properties_for_Modedit.cpp
*
@file dialog_graphic_item_properties_for_Modedit.cpp
*/
/* Edit parameters values of graphic items in a footprint body:
...
...
@@ -49,25 +49,27 @@
#include <dialog_graphic_item_properties_base.h>
#include <class_pcb_layer_box_selector.h>
#include <html_messagebox.h>
class
DIALOG_MODEDIT_FP_BODY_ITEM_PROPERTIES
:
public
DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE
class
DIALOG_MODEDIT_FP_BODY_ITEM_PROPERTIES
:
public
DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE
{
private
:
FOOTPRINT_EDIT_FRAME
*
m_parent
;
EDGE_MODULE
*
m_item
;
FOOTPRINT_EDIT_FRAME
*
m_parent
;
EDGE_MODULE
*
m_item
;
BOARD_DESIGN_SETTINGS
m_brdSettings
;
MODULE
*
m_module
;
MODULE
*
m_module
;
public
:
DIALOG_MODEDIT_FP_BODY_ITEM_PROPERTIES
(
FOOTPRINT_EDIT_FRAME
*
aParent
,
EDGE_MODULE
*
aItem
);
EDGE_MODULE
*
aItem
);
~
DIALOG_MODEDIT_FP_BODY_ITEM_PROPERTIES
()
{};
private
:
void
initDlg
(
);
void
initDlg
();
void
OnOkClick
(
wxCommandEvent
&
event
);
void
OnCancelClick
(
wxCommandEvent
&
event
){
event
.
Skip
();
}
void
OnLayerChoice
(
wxCommandEvent
&
event
);
bool
itemValuesOK
();
};
DIALOG_MODEDIT_FP_BODY_ITEM_PROPERTIES
::
DIALOG_MODEDIT_FP_BODY_ITEM_PROPERTIES
(
...
...
@@ -85,14 +87,15 @@ DIALOG_MODEDIT_FP_BODY_ITEM_PROPERTIES::DIALOG_MODEDIT_FP_BODY_ITEM_PROPERTIES(
Centre
();
}
/*
* Dialog to edit a graphic item of a footprint body.
*/
void
FOOTPRINT_EDIT_FRAME
::
InstallFootprintBodyItemPropertiesDlg
(
EDGE_MODULE
*
aItem
)
void
FOOTPRINT_EDIT_FRAME
::
InstallFootprintBodyItemPropertiesDlg
(
EDGE_MODULE
*
aItem
)
{
if
(
aItem
==
NULL
)
if
(
aItem
==
NULL
)
{
wxMessageBox
(
wxT
(
"InstallGraphicItemPropertiesDialog() error: NULL item"
)
);
wxMessageBox
(
wxT
(
"InstallGraphicItemPropertiesDialog() error: NULL item"
)
);
return
;
}
...
...
@@ -112,7 +115,7 @@ void DIALOG_MODEDIT_FP_BODY_ITEM_PROPERTIES::initDlg()
m_StandardButtonsSizerOK
->
SetDefault
();
// Set unit symbol
wxStaticText
*
texts_unit
[]
=
wxStaticText
*
texts_unit
[]
=
{
m_StartPointXUnit
,
m_StartPointYUnit
,
...
...
@@ -134,34 +137,40 @@ void DIALOG_MODEDIT_FP_BODY_ITEM_PROPERTIES::initDlg()
wxString
msg
;
// Change texts according to the segment shape:
switch
(
m_item
->
GetShape
()
)
switch
(
m_item
->
GetShape
()
)
{
case
S_CIRCLE
:
m_StartPointXLabel
->
SetLabel
(
_
(
"Center X"
));
m_StartPointYLabel
->
SetLabel
(
_
(
"Center Y"
));
m_EndPointXLabel
->
SetLabel
(
_
(
"Point X"
));
m_EndPointYLabel
->
SetLabel
(
_
(
"Point Y"
));
m_Angle_Text
->
Show
(
false
);
m_Angle_Ctrl
->
Show
(
false
);
m_AngleUnit
->
Show
(
false
);
SetTitle
(
_
(
"Circle Properties"
)
);
m_StartPointXLabel
->
SetLabel
(
_
(
"Center X"
)
);
m_StartPointYLabel
->
SetLabel
(
_
(
"Center Y"
)
);
m_EndPointXLabel
->
SetLabel
(
_
(
"Point X"
)
);
m_EndPointYLabel
->
SetLabel
(
_
(
"Point Y"
)
);
m_Angle_Text
->
Show
(
false
);
m_Angle_Ctrl
->
Show
(
false
);
m_AngleUnit
->
Show
(
false
);
break
;
case
S_ARC
:
m_StartPointXLabel
->
SetLabel
(
_
(
"Center X"
));
m_StartPointYLabel
->
SetLabel
(
_
(
"Center Y"
));
m_EndPointXLabel
->
SetLabel
(
_
(
"Start Point X"
));
m_EndPointYLabel
->
SetLabel
(
_
(
"Start Point Y"
));
SetTitle
(
_
(
"Arc Properties"
)
);
m_StartPointXLabel
->
SetLabel
(
_
(
"Center X"
)
);
m_StartPointYLabel
->
SetLabel
(
_
(
"Center Y"
)
);
m_EndPointXLabel
->
SetLabel
(
_
(
"Start Point X"
)
);
m_EndPointYLabel
->
SetLabel
(
_
(
"Start Point Y"
)
);
// Here the angle is a double, but the UI is still working
// with integers
msg
<<
int
(
m_item
->
GetAngle
()
);
m_Angle_Ctrl
->
SetValue
(
msg
);
m_Angle_Ctrl
->
SetValue
(
msg
);
break
;
case
S_SEGMENT
:
SetTitle
(
_
(
"Line Segment Properties"
)
);
// Fall through.
default
:
m_Angle_Text
->
Show
(
false
);
m_Angle_Ctrl
->
Show
(
false
);
m_AngleUnit
->
Show
(
false
);
m_Angle_Text
->
Show
(
false
);
m_Angle_Ctrl
->
Show
(
false
);
m_AngleUnit
->
Show
(
false
);
break
;
}
...
...
@@ -185,8 +194,8 @@ void DIALOG_MODEDIT_FP_BODY_ITEM_PROPERTIES::initDlg()
if
(
m_LayerSelectionCtrl
->
SetLayerSelection
(
m_item
->
GetLayer
()
)
<
0
)
{
wxMessageBox
(
_
(
"This item
has an illegal layer id
.
\n
"
"Now, forced on the front silk screen layer. Please, fix it
"
)
);
wxMessageBox
(
_
(
"This item
was on an unknown layer
.
\n
"
"It has been moved to the front silk screen layer. Please fix it.
"
)
);
m_LayerSelectionCtrl
->
SetLayerSelection
(
F_SilkS
);
}
}
...
...
@@ -198,12 +207,16 @@ void DIALOG_MODEDIT_FP_BODY_ITEM_PROPERTIES::OnLayerChoice( wxCommandEvent& even
{
}
/*******************************************************************/
void
DIALOG_MODEDIT_FP_BODY_ITEM_PROPERTIES
::
OnOkClick
(
wxCommandEvent
&
event
)
/*******************************************************************/
/* Copy values in text control to the item parameters
*/
*/
{
if
(
!
itemValuesOK
()
)
return
;
LAYER_NUM
layer
=
m_LayerSelectionCtrl
->
GetLayerSelection
();
if
(
IsCopperLayer
(
layer
)
)
...
...
@@ -250,7 +263,7 @@ void DIALOG_MODEDIT_FP_BODY_ITEM_PROPERTIES::OnOkClick( wxCommandEvent& event )
{
double
angle
;
m_Angle_Ctrl
->
GetValue
().
ToDouble
(
&
angle
);
NORMALIZE_ANGLE_360
(
angle
);
NORMALIZE_ANGLE_360
(
angle
);
m_item
->
SetAngle
(
angle
);
}
...
...
@@ -259,3 +272,68 @@ void DIALOG_MODEDIT_FP_BODY_ITEM_PROPERTIES::OnOkClick( wxCommandEvent& event )
Close
(
true
);
}
bool
DIALOG_MODEDIT_FP_BODY_ITEM_PROPERTIES
::
itemValuesOK
()
{
wxArrayString
error_msgs
;
// Load the start and end points -- all types use these in the checks.
int
startx
=
ValueFromString
(
g_UserUnit
,
m_Center_StartXCtrl
->
GetValue
()
);
int
starty
=
ValueFromString
(
g_UserUnit
,
m_Center_StartYCtrl
->
GetValue
()
);
int
endx
=
ValueFromString
(
g_UserUnit
,
m_EndX_Radius_Ctrl
->
GetValue
()
);
int
endy
=
ValueFromString
(
g_UserUnit
,
m_EndY_Ctrl
->
GetValue
()
);
// Type specific checks.
switch
(
m_item
->
GetShape
()
)
{
case
S_ARC
:
// Check angle of arc.
double
angle
;
m_Angle_Ctrl
->
GetValue
().
ToDouble
(
&
angle
);
NORMALIZE_ANGLE_360
(
angle
);
if
(
angle
==
0
)
{
error_msgs
.
Add
(
_
(
"The arc angle must be greater than zero."
)
);
}
// Fall through.
case
S_CIRCLE
:
// Check radius.
if
(
(
startx
==
endx
)
&&
(
starty
==
endy
)
)
error_msgs
.
Add
(
_
(
"The radius must be greater than zero."
)
);
break
;
default
:
// Check start and end are not the same.
if
(
(
startx
==
endx
)
&&
(
starty
==
endy
)
)
error_msgs
.
Add
(
_
(
"The start and end points cannot be the same."
)
);
break
;
}
// Check the item thickness.
int
thickness
=
ValueFromString
(
g_UserUnit
,
m_ThicknessCtrl
->
GetValue
()
);
if
(
thickness
<=
0
)
error_msgs
.
Add
(
_
(
"The item thickness must be greater than zero."
)
);
// And the default thickness.
thickness
=
ValueFromString
(
g_UserUnit
,
m_DefaultThicknessCtrl
->
GetValue
()
);
if
(
thickness
<=
0
)
error_msgs
.
Add
(
_
(
"The default thickness must be greater than zero."
)
);
if
(
error_msgs
.
GetCount
()
)
{
HTML_MESSAGE_BOX
dlg
(
this
,
_
(
"Error list"
)
);
dlg
.
ListSet
(
error_msgs
);
dlg
.
ShowModal
();
}
return
error_msgs
.
GetCount
()
==
0
;
}
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