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
230b60e6
Commit
230b60e6
authored
Sep 28, 2014
by
Brian Sidebotham
Browse files
Options
Browse Files
Download
Plain Diff
* Merge changes from trunk
parents
a71823b4
24ed7f50
Changes
42
Hide whitespace changes
Inline
Side-by-side
Showing
42 changed files
with
1611 additions
and
878 deletions
+1611
-878
CMakeLists.txt
CMakeLists.txt
+50
-61
CMakeParseArguments.cmake
CMakeModules/CMakeParseArguments.cmake
+160
-0
FindPackageHandleStandardArgs.cmake
CMakeModules/FindPackageHandleStandardArgs.cmake
+272
-181
FindPackageMessage.cmake
CMakeModules/FindPackageMessage.cmake
+57
-0
FindwxWidgets.cmake
CMakeModules/FindwxWidgets.cmake
+476
-436
draw_frame.cpp
common/draw_frame.cpp
+2
-2
class_DisplayFootprintsFrame.cpp
cvpcb/class_DisplayFootprintsFrame.cpp
+2
-2
block_libedit.cpp
eeschema/block_libedit.cpp
+1
-1
dialog_choose_component.cpp
eeschema/dialogs/dialog_choose_component.cpp
+4
-2
dialog_choose_component.h
eeschema/dialogs/dialog_choose_component.h
+9
-7
dialog_color_config.cpp
eeschema/dialogs/dialog_color_config.cpp
+18
-13
eeschema.cpp
eeschema/eeschema.cpp
+12
-9
eeschema_config.cpp
eeschema/eeschema_config.cpp
+27
-13
general.h
eeschema/general.h
+12
-8
sch_base_frame.cpp
eeschema/sch_base_frame.cpp
+12
-1
sch_screen.cpp
eeschema/sch_screen.cpp
+1
-1
viewlib_frame.cpp
eeschema/viewlib_frame.cpp
+5
-6
draw_frame.h
include/draw_frame.h
+16
-8
sch_base_frame.h
include/sch_base_frame.h
+5
-0
sch_item_struct.h
include/sch_item_struct.h
+5
-5
wxPcbStruct.h
include/wxPcbStruct.h
+13
-0
CMakeLists.txt
pcbnew/CMakeLists.txt
+1
-0
append_board_to_current.cpp
pcbnew/append_board_to_current.cpp
+221
-0
block.cpp
pcbnew/block.cpp
+11
-2
block_module_editor.cpp
pcbnew/block_module_editor.cpp
+59
-14
class_edge_mod.cpp
pcbnew/class_edge_mod.cpp
+44
-6
class_edge_mod.h
pcbnew/class_edge_mod.h
+3
-0
class_module.cpp
pcbnew/class_module.cpp
+1
-25
class_text_mod.cpp
pcbnew/class_text_mod.cpp
+23
-11
class_text_mod.h
pcbnew/class_text_mod.h
+9
-5
dialog_copper_zones.cpp
pcbnew/dialogs/dialog_copper_zones.cpp
+3
-3
dialog_non_copper_zones_properties.cpp
pcbnew/dialogs/dialog_non_copper_zones_properties.cpp
+19
-3
editrack.cpp
pcbnew/editrack.cpp
+1
-1
files.cpp
pcbnew/files.cpp
+14
-25
hotkeys_board_editor.cpp
pcbnew/hotkeys_board_editor.cpp
+4
-0
menubar_pcbframe.cpp
pcbnew/menubar_pcbframe.cpp
+7
-2
modedit.cpp
pcbnew/modedit.cpp
+0
-12
onleftclick.cpp
pcbnew/onleftclick.cpp
+1
-3
onrightclick.cpp
pcbnew/onrightclick.cpp
+2
-9
pcbframe.cpp
pcbnew/pcbframe.cpp
+14
-0
router_tool.cpp
pcbnew/router/router_tool.cpp
+6
-0
tracepcb.cpp
pcbnew/tracepcb.cpp
+9
-1
No files found.
CMakeLists.txt
View file @
230b60e6
...
...
@@ -35,36 +35,39 @@ set( USE_KIWAY_DLLS true ) # this is now mandatory, the code is the same anyway
# have this option turned OFF, the xml export's referential integrity is broken
# on library part name. Hence the default is ON now, as of 29-Jan-2014.
option
(
KICAD_KEEPCASE
"
ON= case specific string matching on component names, OFF= match names as if they were spelt using uppercase
."
"
Use case sensitive string matching for component names (default ON)
."
ON
)
option
(
USE_WX_GRAPHICS_CONTEXT
"Use wxGraphicsContext for rendering (
default OFF).
Warning, this is experimental"
)
"Use wxGraphicsContext for rendering (
default OFF).
Warning, this is experimental"
)
option
(
USE_WX_OVERLAY
"Use wxOverlay: Always ON for MAC (
default OFF).
Warning, this is experimental"
)
"Use wxOverlay: Always ON for MAC (
default OFF).
Warning, this is experimental"
)
option
(
KICAD_SCRIPTING
"
set this option ON to build the scripting support inside kicad binaries
"
"
Build the Python scripting support inside KiCad binaries (default OFF).
"
)
option
(
KICAD_SCRIPTING_MODULES
"
set this option ON to build kicad modules that can be used from scripting languages
"
"
Build KiCad Python modules that can be used from scripting languages (default OFF).
"
)
option
(
KICAD_SCRIPTING_WXPYTHON
"
set this option ON to build wxpython implementation for wx interface building in python and py.shell
"
"
Build wxPython implementation for wx interface building in Python and py.shell (default OFF).
"
)
option
(
KICAD_BUILD_STATIC
"Build
s Kicad and all libraries static
"
"Build
dependencies as static libraries. OSX only. (default OFF).
"
)
option
(
KICAD_BUILD_DYNAMIC
"Build
s Kicad and all libraries dynamic (required for wxPython)
"
"Build
dependencies as shared libraries. Required for wxPython support. OXS only. (default OFF).
"
)
option
(
USE_OSX_DEPS_BUILDER
"Build dependencies from source instead of dependencies installed on system. OSX only. (default OFF)."
)
# WARNING: KiCad developers strongly advise you to build Boost with supplied patches,
# as it is known to work with KiCad. Other versions may contain bugs that may result
...
...
@@ -269,7 +272,6 @@ if( USE_WX_GRAPHICS_CONTEXT )
endif
()
# Allow user to override the default settings for adding images to menu items. By default
# images in menu items are enabled on all platforms except OSX. This can be over ridden by
# defining -DUSE_IMAGES_IN_MENUS=ON/OFF to force the preferred behavior.
...
...
@@ -353,9 +355,30 @@ include( ExternalProject )
#================================================
include
(
CheckFindPackageResult
)
##########################
# Find wxWidgets library #
##########################
# Here you can define what libraries of wxWidgets you need for your
# application. You can figure out what libraries you need here;
# http://www.wxwidgets.org/manuals/2.8/wx_librarieslist.html
# Turn on wxWidgets compatibility mode for some classes
add_definitions
(
-DWX_COMPATIBILITY
)
# See line 41 of CMakeModules/FindwxWidgets.cmake
set
(
wxWidgets_CONFIG_OPTIONS --static=no
)
# On Apple only wxwidgets 2.9 or higher doesn't need to find aui part of base
# Seems no longer needed on wx-3
if
(
APPLE
AND
(
KICAD_SCRIPTING OR KICAD_SCRIPTING_MODULES OR KICAD_SCRIPTING_WXPYTHON
)
)
find_package
(
wxWidgets 3.0.0 COMPONENTS gl adv html core net base xml REQUIRED
)
else
()
find_package
(
wxWidgets 3.0.0 COMPONENTS gl aui adv html core net base xml REQUIRED
)
endif
()
# Include wxWidgets macros.
include
(
${
wxWidgets_USE_FILE
}
)
#######################
# Find OpenGL library #
#######################
...
...
@@ -372,7 +395,10 @@ check_find_package_result( OPENGL_FOUND "OpenGL" )
# Always defined, empty if no libraries are to be built
add_custom_target
(
lib-dependencies
)
if
(
KICAD_BUILD_STATIC OR KICAD_BUILD_DYNAMIC
)
# Only download and build all dependencies from source on OSX if the user specifically requests
# it. Otherwise, respect the developers wishes to use the dependencies already installed on
# their systme.
if
(
APPLE AND USE_OSX_DEPS_BUILDER
)
# This should be built in all cases, if swig exec is not avaiable
# will be impossible also enable SCRIPTING being for PCBNEW required immediately
...
...
@@ -417,31 +443,24 @@ if( KICAD_BUILD_STATIC OR KICAD_BUILD_DYNAMIC )
set
(
PYTHON_DEST
${
LIBWXPYTHON_ROOT
}
/wxPython/lib/python2.6/site-packages
)
set
(
wxWidgets_BIN_DIR
${
LIBWXPYTHON_ROOT
}
/bin/wxrc
)
set
(
wxWidgets_CONFIG_EXECUTABLE
${
LIBWXPYTHON_ROOT
}
/bin/wx-config
)
set
(
wxWidgets_INCLUDE_DIRS
${
LIBWXPYTHON_ROOT
}
/include/wx-3.0
)
set
(
wxWidgets_LIBRARY_DIRS
${
LIBWXPYTHON_ROOT
}
/lib
)
add_dependencies
(
lib-dependencies libwxpython
)
add_dependencies
(
lib-dependencies swig
)
else
()
include
(
download_wxwidgets
)
add_dependencies
(
lib-dependencies libwx
)
endif
()
include
(
download_libpng
)
include
(
download_pkgconfig
)
set
(
PKG_CONFIG_EXECUTABLE
"
${
PKGCONFIG_ROOT
}
/bin/pkg-config"
)
set
(
PKG_CONFIG_EXECUTABLE
"
${
PKGCONFIG_ROOT
}
/bin/pkg-config"
)
include
(
download_glew
)
set
(
GLEW_GLEW_LIBRARY
"
${
GLEW_ROOT
}
/lib/libGLEW.a"
)
set
(
GLEW_INCLUDE_DIR
"
${
GLEW_ROOT
}
/include"
)
set
(
GLEW_GLEW_LIBRARY
"
${
GLEW_ROOT
}
/lib/libGLEW.a"
)
set
(
GLEW_INCLUDE_DIR
"
${
GLEW_ROOT
}
/include"
)
include
(
download_pixman
)
set
(
PIXMAN_LIBRARY
"
${
PIXMAN_ROOT
}
/lib/libpixman-1.a"
)
set
(
PIXMAN_LIBRARY
"
${
PIXMAN_ROOT
}
/lib/libpixman-1.a"
)
include
(
download_cairo
)
set
(
CAIRO_INCLUDE_DIR
"
${
CAIRO_ROOT
}
/include/cairo"
)
set
(
CAIRO_LIBRARY
"
${
CAIRO_ROOT
}
/lib/libcairo.a"
)
set
(
CAIRO_INCLUDE_DIR
"
${
CAIRO_ROOT
}
/include/cairo"
)
set
(
CAIRO_LIBRARY
"
${
CAIRO_ROOT
}
/lib/libcairo.a"
)
add_dependencies
(
lib-dependencies boost
)
add_dependencies
(
lib-dependencies cairo
)
...
...
@@ -450,11 +469,13 @@ if( KICAD_BUILD_STATIC OR KICAD_BUILD_DYNAMIC )
add_dependencies
(
lib-dependencies pkgconfig
)
if
(
KICAD_BUILD_DYNAMIC AND APPLE
)
add_custom_target
(
osx_fix_bundles ALL DEPENDS cvpcb eeschema gerbview kicad pcbnew bitmap2component pcb_calculator pl_editor
)
add_custom_command
(
TARGET osx_fix_bundles POST_BUILD COMMAND
${
PROJECT_SOURCE_DIR
}
/scripts/osx_fixbundle.sh
${
PROJECT_SOURCE_DIR
}
COMMENT
"Migrating dylibs to bundles"
)
add_custom_target
(
osx_fix_bundles ALL DEPENDS
cvpcb eeschema gerbview kicad pcbnew bitmap2component pcb_calculator pl_editor
)
add_custom_command
(
TARGET osx_fix_bundles
POST_BUILD COMMAND
${
PROJECT_SOURCE_DIR
}
/scripts/osx_fixbundle.sh
${
PROJECT_SOURCE_DIR
}
COMMENT
"Migrating dylibs to bundles"
)
endif
()
endif
(
KICAD_BUILD_STATIC OR KICAD_BUILD_DYNAMIC
)
endif
()
#####################
# Find GLEW library #
...
...
@@ -492,31 +513,6 @@ else()
include
(
download_boost
)
endif
()
##########################
# Find wxWidgets library #
##########################
# Here you can define what libraries of wxWidgets you need for your
# application. You can figure out what libraries you need here;
# http://www.wxwidgets.org/manuals/2.8/wx_librarieslist.html
# See line 41 of CMakeModules/FindwxWidgets.cmake
set
(
wxWidgets_CONFIG_OPTIONS --static=no
)
# On Apple only wxwidgets 2.9 or higher doesn't need to find aui part of base
# Seems no more needed on wx-3
if
(
APPLE
AND
(
KICAD_SCRIPTING OR KICAD_SCRIPTING_MODULES OR KICAD_SCRIPTING_WXPYTHON
)
)
find_package
(
wxWidgets COMPONENTS gl adv html core net base xml QUIET
)
else
()
find_package
(
wxWidgets COMPONENTS gl aui adv html core net base xml QUIET
)
endif
()
if
(
NOT
(
KICAD_BUILD_STATIC OR KICAD_BUILD_DYNAMIC
)
)
check_find_package_result
(
wxWidgets_FOUND
"wxWidgets"
)
endif
()
# Include wxWidgets macros.
include
(
${
wxWidgets_USE_FILE
}
)
# Include MinGW resource compiler.
include
(
MinGWResourceCompiler
)
...
...
@@ -553,16 +549,8 @@ set( INC_AFTER
# Find Python and other scripting resources
if
(
KICAD_SCRIPTING OR KICAD_SCRIPTING_MODULES
)
if
(
APPLE
)
set
(
PYTHON_LIBRARY /System/Library/Frameworks/Python.framework/Versions/2.6/Python
)
set
(
PYTHON_INCLUDE_DIR /System/Library/Frameworks/Python.framework/Versions//2.6/include/python2.6
)
set
(
PythonInterp_FIND_VERSION 2.6
)
set
(
PythonLibs_FIND_VERSION 2.6
)
endif
()
# force a python version < 3.0
set
(
PythonInterp_FIND_VERSION 2.6
)
set
(
PythonInterp_FIND_VERSION 2.6
)
set
(
PythonLibs_FIND_VERSION 2.6
)
find_package
(
PythonInterp
)
...
...
@@ -572,6 +560,7 @@ if( KICAD_SCRIPTING OR KICAD_SCRIPTING_MODULES )
if
(
NOT PYTHON_VERSION_MAJOR EQUAL 2
)
message
(
FATAL_ERROR
"Python 2.x is required."
)
endif
()
# Get the correct Python site package install path from the Python interpreter found by
# FindPythonInterp unless the user specifically defined a custom path.
if
(
NOT PYTHON_SITE_PACKAGE_PATH
)
...
...
CMakeModules/CMakeParseArguments.cmake
0 → 100644
View file @
230b60e6
#.rst:
# CMakeParseArguments
# -------------------
#
#
#
# CMAKE_PARSE_ARGUMENTS(<prefix> <options> <one_value_keywords>
# <multi_value_keywords> args...)
#
# CMAKE_PARSE_ARGUMENTS() is intended to be used in macros or functions
# for parsing the arguments given to that macro or function. It
# processes the arguments and defines a set of variables which hold the
# values of the respective options.
#
# The <options> argument contains all options for the respective macro,
# i.e. keywords which can be used when calling the macro without any
# value following, like e.g. the OPTIONAL keyword of the install()
# command.
#
# The <one_value_keywords> argument contains all keywords for this macro
# which are followed by one value, like e.g. DESTINATION keyword of the
# install() command.
#
# The <multi_value_keywords> argument contains all keywords for this
# macro which can be followed by more than one value, like e.g. the
# TARGETS or FILES keywords of the install() command.
#
# When done, CMAKE_PARSE_ARGUMENTS() will have defined for each of the
# keywords listed in <options>, <one_value_keywords> and
# <multi_value_keywords> a variable composed of the given <prefix>
# followed by "_" and the name of the respective keyword. These
# variables will then hold the respective value from the argument list.
# For the <options> keywords this will be TRUE or FALSE.
#
# All remaining arguments are collected in a variable
# <prefix>_UNPARSED_ARGUMENTS, this can be checked afterwards to see
# whether your macro was called with unrecognized parameters.
#
# As an example here a my_install() macro, which takes similar arguments
# as the real install() command:
#
# ::
#
# function(MY_INSTALL)
# set(options OPTIONAL FAST)
# set(oneValueArgs DESTINATION RENAME)
# set(multiValueArgs TARGETS CONFIGURATIONS)
# cmake_parse_arguments(MY_INSTALL "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
# ...
#
#
#
# Assume my_install() has been called like this:
#
# ::
#
# my_install(TARGETS foo bar DESTINATION bin OPTIONAL blub)
#
#
#
# After the cmake_parse_arguments() call the macro will have set the
# following variables:
#
# ::
#
# MY_INSTALL_OPTIONAL = TRUE
# MY_INSTALL_FAST = FALSE (this option was not used when calling my_install()
# MY_INSTALL_DESTINATION = "bin"
# MY_INSTALL_RENAME = "" (was not used)
# MY_INSTALL_TARGETS = "foo;bar"
# MY_INSTALL_CONFIGURATIONS = "" (was not used)
# MY_INSTALL_UNPARSED_ARGUMENTS = "blub" (no value expected after "OPTIONAL"
#
#
#
# You can then continue and process these variables.
#
# Keywords terminate lists of values, e.g. if directly after a
# one_value_keyword another recognized keyword follows, this is
# interpreted as the beginning of the new option. E.g.
# my_install(TARGETS foo DESTINATION OPTIONAL) would result in
# MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION
# would be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor.
#=============================================================================
# Copyright 2010 Alexander Neundorf <neundorf@kde.org>
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
# (To distribute this file outside of CMake, substitute the full
# License text for the above reference.)
if
(
__CMAKE_PARSE_ARGUMENTS_INCLUDED
)
return
()
endif
()
set
(
__CMAKE_PARSE_ARGUMENTS_INCLUDED TRUE
)
function
(
CMAKE_PARSE_ARGUMENTS prefix _optionNames _singleArgNames _multiArgNames
)
# first set all result variables to empty/FALSE
foreach
(
arg_name
${
_singleArgNames
}
${
_multiArgNames
}
)
set
(
${
prefix
}
_
${
arg_name
}
)
endforeach
()
foreach
(
option
${
_optionNames
}
)
set
(
${
prefix
}
_
${
option
}
FALSE
)
endforeach
()
set
(
${
prefix
}
_UNPARSED_ARGUMENTS
)
set
(
insideValues FALSE
)
set
(
currentArgName
)
# now iterate over all arguments and fill the result variables
foreach
(
currentArg
${
ARGN
}
)
list
(
FIND _optionNames
"
${
currentArg
}
"
optionIndex
)
# ... then this marks the end of the arguments belonging to this keyword
list
(
FIND _singleArgNames
"
${
currentArg
}
"
singleArgIndex
)
# ... then this marks the end of the arguments belonging to this keyword
list
(
FIND _multiArgNames
"
${
currentArg
}
"
multiArgIndex
)
# ... then this marks the end of the arguments belonging to this keyword
if
(
${
optionIndex
}
EQUAL -1 AND
${
singleArgIndex
}
EQUAL -1 AND
${
multiArgIndex
}
EQUAL -1
)
if
(
insideValues
)
if
(
"
${
insideValues
}
"
STREQUAL
"SINGLE"
)
set
(
${
prefix
}
_
${
currentArgName
}
${
currentArg
}
)
set
(
insideValues FALSE
)
elseif
(
"
${
insideValues
}
"
STREQUAL
"MULTI"
)
list
(
APPEND
${
prefix
}
_
${
currentArgName
}
${
currentArg
}
)
endif
()
else
()
list
(
APPEND
${
prefix
}
_UNPARSED_ARGUMENTS
${
currentArg
}
)
endif
()
else
()
if
(
NOT
${
optionIndex
}
EQUAL -1
)
set
(
${
prefix
}
_
${
currentArg
}
TRUE
)
set
(
insideValues FALSE
)
elseif
(
NOT
${
singleArgIndex
}
EQUAL -1
)
set
(
currentArgName
${
currentArg
}
)
set
(
${
prefix
}
_
${
currentArgName
}
)
set
(
insideValues
"SINGLE"
)
elseif
(
NOT
${
multiArgIndex
}
EQUAL -1
)
set
(
currentArgName
${
currentArg
}
)
set
(
${
prefix
}
_
${
currentArgName
}
)
set
(
insideValues
"MULTI"
)
endif
()
endif
()
endforeach
()
# propagate the result variables to the caller:
foreach
(
arg_name
${
_singleArgNames
}
${
_multiArgNames
}
${
_optionNames
}
)
set
(
${
prefix
}
_
${
arg_name
}
${${
prefix
}
_
${
arg_name
}}
PARENT_SCOPE
)
endforeach
()
set
(
${
prefix
}
_UNPARSED_ARGUMENTS
${${
prefix
}
_UNPARSED_ARGUMENTS
}
PARENT_SCOPE
)
endfunction
()
CMakeModules/FindPackageHandleStandardArgs.cmake
View file @
230b60e6
# FIND_PACKAGE_HANDLE_STANDARD_ARGS(<name> ... )
#.rst:
# FindPackageHandleStandardArgs
# -----------------------------
#
#
#
# FIND_PACKAGE_HANDLE_STANDARD_ARGS(<name> ... )
#
# This function is intended to be used in FindXXX.cmake modules files.
# It handles the REQUIRED, QUIET and version-related arguments to
FIND_PACKAGE().
#
It also sets the <UPPERCASED_NAME>_FOUND variable.
#
The package is considered found if all variables <var1>...
listed contain
# valid results, e.g. valid filepaths.
# It handles the REQUIRED, QUIET and version-related arguments to
#
find_package(). It also sets the <packagename>_FOUND variable. The
#
package is considered found if all variables <var1>...
listed contain
# valid results, e.g.
valid filepaths.
#
# There are two modes of this function. The first argument in both modes is
# the name of the Find-module where it is called (in original casing).
# There are two modes of this function. The first argument in both
# modes is the name of the Find-module where it is called (in original
# casing).
#
# The first simple mode looks like this:
# FIND_PACKAGE_HANDLE_STANDARD_ARGS(<name> (DEFAULT_MSG|"Custom failure message") <var1>...<varN> )
# If the variables <var1> to <varN> are all valid, then <UPPERCASED_NAME>_FOUND
# will be set to TRUE.
# If DEFAULT_MSG is given as second argument, then the function will generate
# itself useful success and error messages. You can also supply a custom error message
# for the failure case. This is not recommended.
#
# ::
#
# FIND_PACKAGE_HANDLE_STANDARD_ARGS(<name> (DEFAULT_MSG|"Custom failure message") <var1>...<varN> )
#
# If the variables <var1> to <varN> are all valid, then
# <UPPERCASED_NAME>_FOUND will be set to TRUE. If DEFAULT_MSG is given
# as second argument, then the function will generate itself useful
# success and error messages. You can also supply a custom error
# message for the failure case. This is not recommended.
#
# The second mode is more powerful and also supports version checking:
# FIND_PACKAGE_HANDLE_STANDARD_ARGS(NAME [REQUIRED_VARS <var1>...<varN>]
# [VERSION_VAR <versionvar>
# [CONFIG_MODE]
# [FAIL_MESSAGE "Custom failure message"] )
#
# As above, if <var1> through <varN> are all valid, <UPPERCASED_NAME>_FOUND
# will be set to TRUE.
# After REQUIRED_VARS the variables which are required for this package are listed.
# Following VERSION_VAR the name of the variable can be specified which holds
# the version of the package which has been found. If this is done, this version
# will be checked against the (potentially) specified required version used
# in the find_package() call. The EXACT keyword is also handled. The default
# messages include information about the required version and the version
# which has been actually found, both if the version is ok or not.
# Use the option CONFIG_MODE if your FindXXX.cmake module is a wrapper for
# a find_package(... NO_MODULE) call, in this case all the information
# provided by the config-mode of find_package() will be evaluated
# automatically.
# Via FAIL_MESSAGE a custom failure message can be specified, if this is not
# used, the default message will be displayed.
#
# ::
#
# FIND_PACKAGE_HANDLE_STANDARD_ARGS(NAME [FOUND_VAR <resultVar>]
# [REQUIRED_VARS <var1>...<varN>]
# [VERSION_VAR <versionvar>]
# [HANDLE_COMPONENTS]
# [CONFIG_MODE]
# [FAIL_MESSAGE "Custom failure message"] )
#
#
#
# In this mode, the name of the result-variable can be set either to
# either <UPPERCASED_NAME>_FOUND or <OriginalCase_Name>_FOUND using the
# FOUND_VAR option. Other names for the result-variable are not
# allowed. So for a Find-module named FindFooBar.cmake, the two
# possible names are FooBar_FOUND and FOOBAR_FOUND. It is recommended
# to use the original case version. If the FOUND_VAR option is not
# used, the default is <UPPERCASED_NAME>_FOUND.
#
# As in the simple mode, if <var1> through <varN> are all valid,
# <packagename>_FOUND will be set to TRUE. After REQUIRED_VARS the
# variables which are required for this package are listed. Following
# VERSION_VAR the name of the variable can be specified which holds the
# version of the package which has been found. If this is done, this
# version will be checked against the (potentially) specified required
# version used in the find_package() call. The EXACT keyword is also
# handled. The default messages include information about the required
# version and the version which has been actually found, both if the
# version is ok or not. If the package supports components, use the
# HANDLE_COMPONENTS option to enable handling them. In this case,
# find_package_handle_standard_args() will report which components have
# been found and which are missing, and the <packagename>_FOUND variable
# will be set to FALSE if any of the required components (i.e. not the
# ones listed after OPTIONAL_COMPONENTS) are missing. Use the option
# CONFIG_MODE if your FindXXX.cmake module is a wrapper for a
# find_package(... NO_MODULE) call. In this case VERSION_VAR will be
# set to <NAME>_VERSION and the macro will automatically check whether
# the Config module was found. Via FAIL_MESSAGE a custom failure
# message can be specified, if this is not used, the default message
# will be displayed.
#
# Example for mode 1:
#
# FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibXml2 DEFAULT_MSG LIBXML2_LIBRARY LIBXML2_INCLUDE_DIR)
# ::
#
# find_package_handle_standard_args(LibXml2 DEFAULT_MSG LIBXML2_LIBRARY LIBXML2_INCLUDE_DIR)
#
#
#
# LibXml2 is considered to be found, if both LIBXML2_LIBRARY and
# LIBXML2_INCLUDE_DIR are valid.
Then also LIBXML2_FOUND is set to TRUE.
#
If it is not found and REQUIRED was used, it fails with FATAL_ERROR,
#
independent whether QUIET was used or not.
#
If it is found, success will be reported, including the content of <var1>.
#
On
repeated Cmake runs, the same message won't be printed again.
# LIBXML2_INCLUDE_DIR are valid.
Then also LIBXML2_FOUND is set to
#
TRUE. If it is not found and REQUIRED was used, it fails with
#
FATAL_ERROR, independent whether QUIET was used or not. If it is
#
found, success will be reported, including the content of <var1>. On
# repeated Cmake runs, the same message won't be printed again.
#
# Example for mode 2:
#
# FIND_PACKAGE_HANDLE_STANDARD_ARGS(BISON REQUIRED_VARS BISON_EXECUTABLE
# VERSION_VAR BISON_VERSION)
# In this case, BISON is considered to be found if the variable(s) listed
# after REQUIRED_VAR are all valid, i.e. BISON_EXECUTABLE in this case.
# Also the version of BISON will be checked by using the version contained
# in BISON_VERSION.
# Since no FAIL_MESSAGE is given, the default messages will be printed.
# ::
#
# find_package_handle_standard_args(LibXslt FOUND_VAR LibXslt_FOUND
# REQUIRED_VARS LibXslt_LIBRARIES LibXslt_INCLUDE_DIRS
# VERSION_VAR LibXslt_VERSION_STRING)
#
# In this case, LibXslt is considered to be found if the variable(s)
# listed after REQUIRED_VAR are all valid, i.e. LibXslt_LIBRARIES and
# LibXslt_INCLUDE_DIRS in this case. The result will then be stored in
# LibXslt_FOUND . Also the version of LibXslt will be checked by using
# the version contained in LibXslt_VERSION_STRING. Since no
# FAIL_MESSAGE is given, the default messages will be printed.
#
# Another example for mode 2:
#
# FIND_PACKAGE(Automoc4 QUIET NO_MODULE HINTS /opt/automoc4)
# FIND_PACKAGE_HANDLE_STANDARD_ARGS(Automoc4 CONFIG_MODE)
# In this case, FindAutmoc4.cmake wraps a call to FIND_PACKAGE(Automoc4 NO_MODULE)
# and adds an additional search directory for automoc4.
# The following FIND_PACKAGE_HANDLE_STANDARD_ARGS() call produces a proper
# ::
#
# find_package(Automoc4 QUIET NO_MODULE HINTS /opt/automoc4)
# find_package_handle_standard_args(Automoc4 CONFIG_MODE)
#
# In this case, FindAutmoc4.cmake wraps a call to find_package(Automoc4
# NO_MODULE) and adds an additional search directory for automoc4. Here
# the result will be stored in AUTOMOC4_FOUND. The following
# FIND_PACKAGE_HANDLE_STANDARD_ARGS() call produces a proper
# success/error message.
#=============================================================================
...
...
@@ -82,179 +127,225 @@
# (To distribute this file outside of CMake, substitute the full
# License text for the above reference.)
INCLUDE
(
FindPackageMessage
)
INCLUDE
(
CMakeParseArguments
)
include
(
FindPackageMessage
)
include
(
CMakeParseArguments
)
# internal helper macro
MACRO
(
_FPHSA_FAILURE_MESSAGE _msg
)
IF
(
${
_NAME
}
_FIND_REQUIRED
)
MESSAGE
(
FATAL_ERROR
"
${
_msg
}
"
)
ELSE
(
${
_NAME
}
_FIND_REQUIRED
)
IF
(
NOT
${
_NAME
}
_FIND_QUIETLY
)
MESSAGE
(
STATUS
"
${
_msg
}
"
)
ENDIF
(
NOT
${
_NAME
}
_FIND_QUIETLY
)
ENDIF
(
${
_NAME
}
_FIND_REQUIRED
)
ENDMACRO
(
_FPHSA_FAILURE_MESSAGE _msg
)
macro
(
_FPHSA_FAILURE_MESSAGE _msg
)
if
(
${
_NAME
}
_FIND_REQUIRED
)
message
(
FATAL_ERROR
"
${
_msg
}
"
)
else
(
)
if
(
NOT
${
_NAME
}
_FIND_QUIETLY
)
message
(
STATUS
"
${
_msg
}
"
)
endif
(
)
endif
(
)
endmacro
(
)
# internal helper macro to generate the failure message when used in CONFIG_MODE:
MACRO
(
_FPHSA_HANDLE_FAILURE_CONFIG_MODE
)
macro
(
_FPHSA_HANDLE_FAILURE_CONFIG_MODE
)
# <name>_CONFIG is set, but FOUND is false, this means that some other of the REQUIRED_VARS was not found:
IF
(
${
_NAME
}
_CONFIG
)
if
(
${
_NAME
}
_CONFIG
)
_FPHSA_FAILURE_MESSAGE
(
"
${
FPHSA_FAIL_MESSAGE
}
: missing:
${
MISSING_VARS
}
(found
${${
_NAME
}
_CONFIG
}
${
VERSION_MSG
}
)"
)
ELSE
(
${
_NAME
}
_CONFIG
)
else
(
)
# If _CONSIDERED_CONFIGS is set, the config-file has been found, but no suitable version.
# List them all in the error message:
IF
(
${
_NAME
}
_CONSIDERED_CONFIGS
)
SET
(
configsText
""
)
LIST
(
LENGTH
${
_NAME
}
_CONSIDERED_CONFIGS configsCount
)
MATH
(
EXPR configsCount
"
${
configsCount
}
- 1"
)
FOREACH
(
currentConfigIndex RANGE
${
configsCount
}
)
LIST
(
GET
${
_NAME
}
_CONSIDERED_CONFIGS
${
currentConfigIndex
}
filename
)
LIST
(
GET
${
_NAME
}
_CONSIDERED_VERSIONS
${
currentConfigIndex
}
version
)
SET
(
configsText
"
${
configsText
}
${
filename
}
(version
${
version
}
)
\n
"
)
ENDFOREACH
(
currentConfigIndex
)
if
(
${
_NAME
}
_CONSIDERED_CONFIGS
)
set
(
configsText
""
)
list
(
LENGTH
${
_NAME
}
_CONSIDERED_CONFIGS configsCount
)
math
(
EXPR configsCount
"
${
configsCount
}
- 1"
)
foreach
(
currentConfigIndex RANGE
${
configsCount
}
)
list
(
GET
${
_NAME
}
_CONSIDERED_CONFIGS
${
currentConfigIndex
}
filename
)
list
(
GET
${
_NAME
}
_CONSIDERED_VERSIONS
${
currentConfigIndex
}
version
)
set
(
configsText
"
${
configsText
}
${
filename
}
(version
${
version
}
)
\n
"
)
endforeach
()
if
(
${
_NAME
}
_NOT_FOUND_MESSAGE
)
set
(
configsText
"
${
configsText
}
Reason given by package:
${${
_NAME
}
_NOT_FOUND_MESSAGE
}
\n
"
)
endif
()
_FPHSA_FAILURE_MESSAGE
(
"
${
FPHSA_FAIL_MESSAGE
}
${
VERSION_MSG
}
, checked the following files:
\n
${
configsText
}
"
)
ELSE
(
${
_NAME
}
_CONSIDERED_CONFIGS
)
else
(
)
# Simple case: No Config-file was found at all:
_FPHSA_FAILURE_MESSAGE
(
"
${
FPHSA_FAIL_MESSAGE
}
: found neither
${
_NAME
}
Config.cmake nor
${
_NAME_LOWER
}
-config.cmake
${
VERSION_MSG
}
"
)
ENDIF
(
${
_NAME
}
_CONSIDERED_CONFIGS
)
ENDIF
(
${
_NAME
}
_CONFIG
)
ENDMACRO
(
_FPHSA_HANDLE_FAILURE_CONFIG_MODE
)
endif
(
)
endif
(
)
endmacro
(
)
FUNCTION
(
FIND_PACKAGE_HANDLE_STANDARD_ARGS _NAME _FIRST_ARG
)
function
(
FIND_PACKAGE_HANDLE_STANDARD_ARGS _NAME _FIRST_ARG
)
# set up the arguments for CMAKE_PARSE_ARGUMENTS and check whether we are in
# new extended or in the "old" mode:
SET
(
options CONFIG_MODE
)
SET
(
oneValueArgs FAIL_MESSAGE VERSION
_VAR
)
SET
(
multiValueArgs REQUIRED_VARS
)
SET
(
_KEYWORDS_FOR_EXTENDED_MODE
${
options
}
${
oneValueArgs
}
${
multiValueArgs
}
)
LIST
(
FIND _KEYWORDS_FOR_EXTENDED_MODE
"
${
_FIRST_ARG
}
"
INDEX
)
IF
(
${
INDEX
}
EQUAL -1
)
SET
(
FPHSA_FAIL_MESSAGE
${
_FIRST_ARG
}
)
SET
(
FPHSA_REQUIRED_VARS
${
ARGN
}
)
SET
(
FPHSA_VERSION_VAR
)
ELSE
(
${
INDEX
}
EQUAL -1
)
set
(
options CONFIG_MODE HANDLE_COMPONENTS
)
set
(
oneValueArgs FAIL_MESSAGE VERSION_VAR FOUND
_VAR
)
set
(
multiValueArgs REQUIRED_VARS
)
set
(
_KEYWORDS_FOR_EXTENDED_MODE
${
options
}
${
oneValueArgs
}
${
multiValueArgs
}
)
list
(
FIND _KEYWORDS_FOR_EXTENDED_MODE
"
${
_FIRST_ARG
}
"
INDEX
)
if
(
${
INDEX
}
EQUAL -1
)
set
(
FPHSA_FAIL_MESSAGE
${
_FIRST_ARG
}
)
set
(
FPHSA_REQUIRED_VARS
${
ARGN
}
)
set
(
FPHSA_VERSION_VAR
)
else
(
)
CMAKE_PARSE_ARGUMENTS
(
FPHSA
"
${
options
}
"
"
${
oneValueArgs
}
"
"
${
multiValueArgs
}
"
${
_FIRST_ARG
}
${
ARGN
}
)
IF
(
FPHSA_UNPARSED_ARGUMENTS
)
MESSAGE
(
FATAL_ERROR
"Unknown keywords given to FIND_PACKAGE_HANDLE_STANDARD_ARGS():
\"
${
FPHSA_UNPARSED_ARGUMENTS
}
\"
"
)
ENDIF
(
FPHSA_UNPARSED_ARGUMENTS
)
if
(
FPHSA_UNPARSED_ARGUMENTS
)
message
(
FATAL_ERROR
"Unknown keywords given to FIND_PACKAGE_HANDLE_STANDARD_ARGS():
\"
${
FPHSA_UNPARSED_ARGUMENTS
}
\"
"
)
endif
(
)
IF
(
NOT FPHSA_FAIL_MESSAGE
)
SET
(
FPHSA_FAIL_MESSAGE
"DEFAULT_MSG"
)
ENDIF
(
NOT FPHSA_FAIL_MESSAGE
)
ENDIF
(
${
INDEX
}
EQUAL -1
)
if
(
NOT FPHSA_FAIL_MESSAGE
)
set
(
FPHSA_FAIL_MESSAGE
"DEFAULT_MSG"
)
endif
(
)
endif
(
)
# now that we collected all arguments, process them
IF
(
"
${
FPHSA_FAIL_MESSAGE
}
"
STREQUAL
"DEFAULT_MSG"
)
SET
(
FPHSA_FAIL_MESSAGE
"Could NOT find
${
_NAME
}
"
)
ENDIF
(
"
${
FPHSA_FAIL_MESSAGE
}
"
STREQUAL
"DEFAULT_MSG"
)
if
(
"
${
FPHSA_FAIL_MESSAGE
}
"
STREQUAL
"DEFAULT_MSG"
)
set
(
FPHSA_FAIL_MESSAGE
"Could NOT find
${
_NAME
}
"
)
endif
(
)
# In config-mode, we rely on the variable <package>_CONFIG, which is set by find_package()
# when it successfully found the config-file, including version checking:
IF
(
FPHSA_CONFIG_MODE
)
LIST
(
INSERT FPHSA_REQUIRED_VARS 0
${
_NAME
}
_CONFIG
)
LIST
(
REMOVE_DUPLICATES FPHSA_REQUIRED_VARS
)
SET
(
FPHSA_VERSION_VAR
${
_NAME
}
_VERSION
)
ENDIF
(
FPHSA_CONFIG_MODE
)
IF
(
NOT FPHSA_REQUIRED_VARS
)
MESSAGE
(
FATAL_ERROR
"No REQUIRED_VARS specified for FIND_PACKAGE_HANDLE_STANDARD_ARGS()"
)
ENDIF
(
NOT FPHSA_REQUIRED_VARS
)
LIST
(
GET FPHSA_REQUIRED_VARS 0 _FIRST_REQUIRED_VAR
)
STRING
(
TOUPPER
${
_NAME
}
_NAME_UPPER
)
STRING
(
TOLOWER
${
_NAME
}
_NAME_LOWER
)
if
(
FPHSA_CONFIG_MODE
)
list
(
INSERT FPHSA_REQUIRED_VARS 0
${
_NAME
}
_CONFIG
)
list
(
REMOVE_DUPLICATES FPHSA_REQUIRED_VARS
)
set
(
FPHSA_VERSION_VAR
${
_NAME
}
_VERSION
)
endif
()
if
(
NOT FPHSA_REQUIRED_VARS
)
message
(
FATAL_ERROR
"No REQUIRED_VARS specified for FIND_PACKAGE_HANDLE_STANDARD_ARGS()"
)
endif
()
list
(
GET FPHSA_REQUIRED_VARS 0 _FIRST_REQUIRED_VAR
)
string
(
TOUPPER
${
_NAME
}
_NAME_UPPER
)
string
(
TOLOWER
${
_NAME
}
_NAME_LOWER
)
if
(
FPHSA_FOUND_VAR
)
if
(
FPHSA_FOUND_VAR MATCHES
"^
${
_NAME
}
_FOUND$"
OR FPHSA_FOUND_VAR MATCHES
"^
${
_NAME_UPPER
}
_FOUND$"
)
set
(
_FOUND_VAR
${
FPHSA_FOUND_VAR
}
)
else
()
message
(
FATAL_ERROR
"The argument for FOUND_VAR is
\"
${
FPHSA_FOUND_VAR
}
\"
, but only
\"
${
_NAME
}
_FOUND
\"
and
\"
${
_NAME_UPPER
}
_FOUND
\"
are valid names."
)
endif
()
else
()
set
(
_FOUND_VAR
${
_NAME_UPPER
}
_FOUND
)
endif
()
# collect all variables which were not found, so they can be printed, so the
# user knows better what went wrong (#6375)
SET
(
MISSING_VARS
""
)
SET
(
DETAILS
""
)
SET
(
${
_NAME_UPPER
}
_FOUND TRUE
)
set
(
MISSING_VARS
""
)
set
(
DETAILS
""
)
# check if all passed variables are valid
FOREACH
(
_CURRENT_VAR
${
FPHSA_REQUIRED_VARS
}
)
IF
(
NOT
${
_CURRENT_VAR
}
)
SET
(
${
_NAME_UPPER
}
_FOUND FALSE
)
SET
(
MISSING_VARS
"
${
MISSING_VARS
}
${
_CURRENT_VAR
}
"
)
ELSE
(
NOT
${
_CURRENT_VAR
}
)
SET
(
DETAILS
"
${
DETAILS
}
[
${${
_CURRENT_VAR
}}
]"
)
ENDIF
(
NOT
${
_CURRENT_VAR
}
)
ENDFOREACH
(
_CURRENT_VAR
)
unset
(
${
_FOUND_VAR
}
)
foreach
(
_CURRENT_VAR
${
FPHSA_REQUIRED_VARS
}
)
if
(
NOT
${
_CURRENT_VAR
}
)
set
(
${
_FOUND_VAR
}
FALSE
)
set
(
MISSING_VARS
"
${
MISSING_VARS
}
${
_CURRENT_VAR
}
"
)
else
()
set
(
DETAILS
"
${
DETAILS
}
[
${${
_CURRENT_VAR
}}
]"
)
endif
()
endforeach
()
if
(
NOT
"
${${
_FOUND_VAR
}}
"
STREQUAL
"FALSE"
)
set
(
${
_FOUND_VAR
}
TRUE
)
endif
()
# component handling
unset
(
FOUND_COMPONENTS_MSG
)
unset
(
MISSING_COMPONENTS_MSG
)
if
(
FPHSA_HANDLE_COMPONENTS
)
foreach
(
comp
${${
_NAME
}
_FIND_COMPONENTS
}
)
if
(
${
_NAME
}
_
${
comp
}
_FOUND
)
if
(
NOT DEFINED FOUND_COMPONENTS_MSG
)
set
(
FOUND_COMPONENTS_MSG
"found components: "
)
endif
()
set
(
FOUND_COMPONENTS_MSG
"
${
FOUND_COMPONENTS_MSG
}
${
comp
}
"
)
else
()
if
(
NOT DEFINED MISSING_COMPONENTS_MSG
)
set
(
MISSING_COMPONENTS_MSG
"missing components: "
)
endif
()
set
(
MISSING_COMPONENTS_MSG
"
${
MISSING_COMPONENTS_MSG
}
${
comp
}
"
)
if
(
${
_NAME
}
_FIND_REQUIRED_
${
comp
}
)
set
(
${
_FOUND_VAR
}
FALSE
)
set
(
MISSING_VARS
"
${
MISSING_VARS
}
${
comp
}
"
)
endif
()
endif
()
endforeach
()
set
(
COMPONENT_MSG
"
${
FOUND_COMPONENTS_MSG
}
${
MISSING_COMPONENTS_MSG
}
"
)
set
(
DETAILS
"
${
DETAILS
}
[c
${
COMPONENT_MSG
}
]"
)
endif
()
# version handling:
SET
(
VERSION_MSG
""
)
SET
(
VERSION_OK TRUE
)
SET
(
VERSION
${${
FPHSA_VERSION_VAR
}}
)
IF
(
${
_NAME
}
_FIND_VERSION
)
IF
(
VERSION
)
IF
(
${
_NAME
}
_FIND_VERSION_EXACT
)
# exact version required
IF
(
NOT
"
${${
_NAME
}
_FIND_VERSION
}
"
VERSION_EQUAL
"
${
VERSION
}
"
)
SET
(
VERSION_MSG
"Found unsuitable version
\"
${
VERSION
}
\"
, but required is exact version
\"
${${
_NAME
}
_FIND_VERSION
}
\"
"
)
SET
(
VERSION_OK FALSE
)
ELSE
(
NOT
"
${${
_NAME
}
_FIND_VERSION
}
"
VERSION_EQUAL
"
${
VERSION
}
"
)
SET
(
VERSION_MSG
"(found suitable exact version
\"
${
VERSION
}
\"
)"
)
ENDIF
(
NOT
"
${${
_NAME
}
_FIND_VERSION
}
"
VERSION_EQUAL
"
${
VERSION
}
"
)
ELSE
(
${
_NAME
}
_FIND_VERSION_EXACT
)
# minimum version specified:
IF
(
"
${${
_NAME
}
_FIND_VERSION
}
"
VERSION_GREATER
"
${
VERSION
}
"
)
SET
(
VERSION_MSG
"Found unsuitable version
\"
${
VERSION
}
\"
, but required is at least
\"
${${
_NAME
}
_FIND_VERSION
}
\"
"
)
SET
(
VERSION_OK FALSE
)
ELSE
(
"
${${
_NAME
}
_FIND_VERSION
}
"
VERSION_GREATER
"
${
VERSION
}
"
)
SET
(
VERSION_MSG
"(found suitable version
\"
${
VERSION
}
\"
,
required is
\"
${${
_NAME
}
_FIND_VERSION
}
\"
)"
)
ENDIF
(
"
${${
_NAME
}
_FIND_VERSION
}
"
VERSION_GREATER
"
${
VERSION
}
"
)
ENDIF
(
${
_NAME
}
_FIND_VERSION_EXACT
)
ELSE
(
VERSION
)
set
(
VERSION_MSG
""
)
set
(
VERSION_OK TRUE
)
set
(
VERSION
${${
FPHSA_VERSION_VAR
}}
)
if
(
${
_NAME
}
_FIND_VERSION
)
if
(
VERSION
)
if
(
${
_NAME
}
_FIND_VERSION_EXACT
)
# exact version required
if
(
NOT
"
${${
_NAME
}
_FIND_VERSION
}
"
VERSION_EQUAL
"
${
VERSION
}
"
)
set
(
VERSION_MSG
"Found unsuitable version
\"
${
VERSION
}
\"
, but required is exact version
\"
${${
_NAME
}
_FIND_VERSION
}
\"
"
)
set
(
VERSION_OK FALSE
)
else
(
)
set
(
VERSION_MSG
"(found suitable exact version
\"
${
VERSION
}
\"
)"
)
endif
(
)
else
(
)
# minimum version specified:
if
(
"
${${
_NAME
}
_FIND_VERSION
}
"
VERSION_GREATER
"
${
VERSION
}
"
)
set
(
VERSION_MSG
"Found unsuitable version
\"
${
VERSION
}
\"
, but required is at least
\"
${${
_NAME
}
_FIND_VERSION
}
\"
"
)
set
(
VERSION_OK FALSE
)
else
(
)
set
(
VERSION_MSG
"(found suitable version
\"
${
VERSION
}
\"
, minimum
required is
\"
${${
_NAME
}
_FIND_VERSION
}
\"
)"
)
endif
(
)
endif
(
)
else
(
)
# if the package was not found, but a version was given, add that to the output:
IF
(
${
_NAME
}
_FIND_VERSION_EXACT
)
SET
(
VERSION_MSG
"(Required is exact version
\"
${${
_NAME
}
_FIND_VERSION
}
\"
)"
)
ELSE
(
${
_NAME
}
_FIND_VERSION_EXACT
)
SET
(
VERSION_MSG
"(Required is at least version
\"
${${
_NAME
}
_FIND_VERSION
}
\"
)"
)
ENDIF
(
${
_NAME
}
_FIND_VERSION_EXACT
)
ENDIF
(
VERSION
)
ELSE
(
${
_NAME
}
_FIND_VERSION
)
IF
(
VERSION
)
SET
(
VERSION_MSG
"(found version
\"
${
VERSION
}
\"
)"
)
ENDIF
(
VERSION
)
ENDIF
(
${
_NAME
}
_FIND_VERSION
)
IF
(
VERSION_OK
)
SET
(
DETAILS
"
${
DETAILS
}
[v
${
VERSION
}
(
${${
_NAME
}
_FIND_VERSION
}
)]"
)
ELSE
(
VERSION_OK
)
SET
(
${
_NAME_UPPER
}
_FOUND
FALSE
)
ENDIF
(
VERSION_OK
)
if
(
${
_NAME
}
_FIND_VERSION_EXACT
)
set
(
VERSION_MSG
"(Required is exact version
\"
${${
_NAME
}
_FIND_VERSION
}
\"
)"
)
else
(
)
set
(
VERSION_MSG
"(Required is at least version
\"
${${
_NAME
}
_FIND_VERSION
}
\"
)"
)
endif
(
)
endif
(
)
else
(
)
if
(
VERSION
)
set
(
VERSION_MSG
"(found version
\"
${
VERSION
}
\"
)"
)
endif
(
)
endif
(
)
if
(
VERSION_OK
)
set
(
DETAILS
"
${
DETAILS
}
[v
${
VERSION
}
(
${${
_NAME
}
_FIND_VERSION
}
)]"
)
else
(
)
set
(
${
_FOUND_VAR
}
FALSE
)
endif
(
)
# print the result:
IF
(
${
_NAME_UPPER
}
_FOUND
)
FIND_PACKAGE_MESSAGE
(
${
_NAME
}
"Found
${
_NAME
}
:
${${
_FIRST_REQUIRED_VAR
}}
${
VERSION_MSG
}
"
"
${
DETAILS
}
"
)
ELSE
(
${
_NAME_UPPER
}
_FOUND
)
if
(
${
_FOUND_VAR
}
)
FIND_PACKAGE_MESSAGE
(
${
_NAME
}
"Found
${
_NAME
}
:
${${
_FIRST_REQUIRED_VAR
}}
${
VERSION_MSG
}
${
COMPONENT_MSG
}
"
"
${
DETAILS
}
"
)
else
(
)
IF
(
FPHSA_CONFIG_MODE
)
if
(
FPHSA_CONFIG_MODE
)
_FPHSA_HANDLE_FAILURE_CONFIG_MODE
()
ELSE
(
FPHSA_CONFIG_MODE
)
IF
(
NOT VERSION_OK
)
else
(
)
if
(
NOT VERSION_OK
)
_FPHSA_FAILURE_MESSAGE
(
"
${
FPHSA_FAIL_MESSAGE
}
:
${
VERSION_MSG
}
(found
${${
_FIRST_REQUIRED_VAR
}}
)"
)
ELSE
(
NOT VERSION_OK
)
else
(
)
_FPHSA_FAILURE_MESSAGE
(
"
${
FPHSA_FAIL_MESSAGE
}
(missing:
${
MISSING_VARS
}
)
${
VERSION_MSG
}
"
)
ENDIF
(
NOT VERSION_OK
)
ENDIF
(
FPHSA_CONFIG_MODE
)
endif
(
)
endif
(
)
ENDIF
(
${
_NAME_UPPER
}
_FOUND
)
endif
(
)
SET
(
${
_NAME_UPPER
}
_FOUND
${${
_NAME_UPPER
}
_FOUND
}
PARENT_SCOPE
)
set
(
${
_FOUND_VAR
}
${${
_FOUND_VAR
}
}
PARENT_SCOPE
)
ENDFUNCTION
(
FIND_PACKAGE_HANDLE_STANDARD_ARGS _FIRST_ARG
)
endfunction
(
)
CMakeModules/FindPackageMessage.cmake
0 → 100644
View file @
230b60e6
#.rst:
# FindPackageMessage
# ------------------
#
#
#
# FIND_PACKAGE_MESSAGE(<name> "message for user" "find result details")
#
# This macro is intended to be used in FindXXX.cmake modules files. It
# will print a message once for each unique find result. This is useful
# for telling the user where a package was found. The first argument
# specifies the name (XXX) of the package. The second argument
# specifies the message to display. The third argument lists details
# about the find result so that if they change the message will be
# displayed again. The macro also obeys the QUIET argument to the
# find_package command.
#
# Example:
#
# ::
#
# if(X11_FOUND)
# FIND_PACKAGE_MESSAGE(X11 "Found X11: ${X11_X11_LIB}"
# "[${X11_X11_LIB}][${X11_INCLUDE_DIR}]")
# else()
# ...
# endif()
#=============================================================================
# Copyright 2008-2009 Kitware, Inc.
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
# (To distribute this file outside of CMake, substitute the full
# License text for the above reference.)
function
(
FIND_PACKAGE_MESSAGE pkg msg details
)
# Avoid printing a message repeatedly for the same find result.
if
(
NOT
${
pkg
}
_FIND_QUIETLY
)
string
(
REGEX REPLACE
"[
\n
]"
""
details
"
${
details
}
"
)
set
(
DETAILS_VAR FIND_PACKAGE_MESSAGE_DETAILS_
${
pkg
}
)
if
(
NOT
"
${
details
}
"
STREQUAL
"
${${
DETAILS_VAR
}}
"
)
# The message has not yet been printed.
message
(
STATUS
"
${
msg
}
"
)
# Save the find details in the cache to avoid printing the same
# message again.
set
(
"
${
DETAILS_VAR
}
"
"
${
details
}
"
CACHE INTERNAL
"Details about finding
${
pkg
}
"
)
endif
()
endif
()
endfunction
()
CMakeModules/FindwxWidgets.cmake
View file @
230b60e6
...
...
@@ -4,7 +4,7 @@
# modules that you will use, you need to name them as components to
# the package:
#
#
FIND_PACKAGE
(wxWidgets COMPONENTS core base ...)
#
find_package
(wxWidgets COMPONENTS core base ...)
#
# There are two search branches: a windows style and a unix style. For
# windows, the following variables are searched for and set to
...
...
@@ -38,7 +38,7 @@
# example, to use the base toolkit found in the /usr/local path, set
# the variable (before calling the FIND_PACKAGE command) as such:
#
#
SET
(wxWidgets_CONFIG_OPTIONS --toolkit=base --prefix=/usr)
#
set
(wxWidgets_CONFIG_OPTIONS --toolkit=base --prefix=/usr)
#
# The following are set after the configuration is done for both
# windows and unix style:
...
...
@@ -62,19 +62,25 @@
#
# Sample usage:
# # Note that for MinGW users the order of libs is important!
#
FIND_PACKAGE
(wxWidgets COMPONENTS net gl core base)
#
IF
(wxWidgets_FOUND)
#
INCLUDE
(${wxWidgets_USE_FILE})
#
find_package
(wxWidgets COMPONENTS net gl core base)
#
if
(wxWidgets_FOUND)
#
include
(${wxWidgets_USE_FILE})
# # and for each of your dependent executable/library targets:
#
TARGET_LINK_LIBRARIES
(<YourTarget> ${wxWidgets_LIBRARIES})
#
ENDIF
(wxWidgets_FOUND)
#
target_link_libraries
(<YourTarget> ${wxWidgets_LIBRARIES})
#
endif
(wxWidgets_FOUND)
#
# If wxWidgets is required (i.e., not an optional part):
#
FIND_PACKAGE
(wxWidgets REQUIRED net gl core base)
#
INCLUDE
(${wxWidgets_USE_FILE})
#
find_package
(wxWidgets REQUIRED net gl core base)
#
include
(${wxWidgets_USE_FILE})
# # and for each of your dependent executable/library targets:
# TARGET_LINK_LIBRARIES(<YourTarget> ${wxWidgets_LIBRARIES})
# target_link_libraries(<YourTarget> ${wxWidgets_LIBRARIES})
#
# If a wxWidgets version or greater is required:
# find_package(wxWidgets 2.8.12 COMPONENTS net gl core base REQUIRED)
#
# If specific wxWidgets version is required:
# find_package(wxWidgets 2.8.12 EXACT COMPONENTS net gl core base REQUIRED)
#
#=============================================================================
# Copyright 2004-2009 Kitware, Inc.
# Copyright 2007-2009 Miguel A. Figueroa-Villanueva <miguelf at ieee dot org>
...
...
@@ -94,7 +100,7 @@
# Remember to connect back to the upper text.
# Sample usage with monolithic wx build:
#
#
FIND_PACKAGE
(wxWidgets COMPONENTS mono)
#
find_package
(wxWidgets COMPONENTS mono)
# ...
# NOTES
...
...
@@ -138,24 +144,24 @@
# checking whether a minimal set was found.
# FIXME: This and all the
DBG_MSG
calls should be removed after the
# FIXME: This and all the
dbg_msg
calls should be removed after the
# module stabilizes.
#
# Helper macro to control the debugging output globally. There are
# two versions for controlling how verbose your output should be.
MACRO
(
DBG_MSG
_MSG
)
#
MESSAGE(WARNING
"${_MSG}")
ENDMACRO
(
DBG_MSG
)
MACRO
(
DBG_MSG_V
_MSG
)
#
MESSAGE(WARNING
"${_MSG}")
ENDMACRO
(
DBG_MSG_V
)
macro
(
dbg_msg
_MSG
)
#
message(STATUS
"${_MSG}")
endmacro
(
dbg_msg
)
macro
(
dbg_msg_v
_MSG
)
#
message(STATUS
"${_MSG}")
endmacro
(
dbg_msg_v
)
# Clear return values in case the module is loaded more than once.
SET
(
wxWidgets_FOUND FALSE
)
SET
(
wxWidgets_INCLUDE_DIRS
""
)
SET
(
wxWidgets_LIBRARIES
""
)
SET
(
wxWidgets_LIBRARY_DIRS
""
)
SET
(
wxWidgets_CXX_FLAGS
""
)
set
(
wxWidgets_FOUND FALSE
)
set
(
wxWidgets_INCLUDE_DIRS
""
)
set
(
wxWidgets_LIBRARIES
""
)
set
(
wxWidgets_LIBRARY_DIRS
""
)
set
(
wxWidgets_CXX_FLAGS
""
)
# Using SYSTEM with INCLUDE_DIRECTORIES in conjunction with wxWidgets on
# the Mac produces compiler errors. Set wxWidgets_INCLUDE_DIRS_NO_SYSTEM
...
...
@@ -165,9 +171,9 @@ SET(wxWidgets_CXX_FLAGS "")
# http://www.cmake.org/pipermail/cmake/2008-April/021115.html
# http://www.cmake.org/pipermail/cmake/2008-April/021146.html
#
IF
(
APPLE
)
SET
(
wxWidgets_INCLUDE_DIRS_NO_SYSTEM 1
)
ENDIF
(
APPLE
)
if
(
APPLE
)
set
(
wxWidgets_INCLUDE_DIRS_NO_SYSTEM 1
)
endif
(
APPLE
)
# DEPRECATED: This is a patch to support the DEPRECATED use of
# wxWidgets_USE_LIBS.
...
...
@@ -175,66 +181,66 @@ ENDIF(APPLE)
# If wxWidgets_USE_LIBS is set:
# - if using <components>, then override wxWidgets_USE_LIBS
# - else set wxWidgets_FIND_COMPONENTS to wxWidgets_USE_LIBS
IF
(
wxWidgets_USE_LIBS AND NOT wxWidgets_FIND_COMPONENTS
)
SET
(
wxWidgets_FIND_COMPONENTS
${
wxWidgets_USE_LIBS
}
)
ENDIF
(
wxWidgets_USE_LIBS AND NOT wxWidgets_FIND_COMPONENTS
)
DBG_MSG
(
"wxWidgets_FIND_COMPONENTS :
${
wxWidgets_FIND_COMPONENTS
}
"
)
if
(
wxWidgets_USE_LIBS AND NOT wxWidgets_FIND_COMPONENTS
)
set
(
wxWidgets_FIND_COMPONENTS
${
wxWidgets_USE_LIBS
}
)
endif
(
wxWidgets_USE_LIBS AND NOT wxWidgets_FIND_COMPONENTS
)
dbg_msg
(
"wxWidgets_FIND_COMPONENTS :
${
wxWidgets_FIND_COMPONENTS
}
"
)
# Add the convenience use file if available.
#
# Get dir of this file which may reside in:
# - CMAKE_MAKE_ROOT/Modules on CMake installation
# - CMAKE_MODULE_PATH if user prefers his own specialized version
SET
(
wxWidgets_USE_FILE
""
)
GET_FILENAME_COMPONENT
(
set
(
wxWidgets_USE_FILE
""
)
get_filename_component
(
wxWidgets_CURRENT_LIST_DIR
${
CMAKE_CURRENT_LIST_FILE
}
PATH
)
# Prefer an existing customized version, but the user might override
# the FindwxWidgets module and not the UsewxWidgets one.
IF
(
EXISTS
"
${
wxWidgets_CURRENT_LIST_DIR
}
/UsewxWidgets.cmake"
)
SET
(
wxWidgets_USE_FILE
if
(
EXISTS
"
${
wxWidgets_CURRENT_LIST_DIR
}
/UsewxWidgets.cmake"
)
set
(
wxWidgets_USE_FILE
"
${
wxWidgets_CURRENT_LIST_DIR
}
/UsewxWidgets.cmake"
)
ELSE
(
EXISTS
"
${
wxWidgets_CURRENT_LIST_DIR
}
/UsewxWidgets.cmake"
)
SET
(
wxWidgets_USE_FILE UsewxWidgets
)
ENDIF
(
EXISTS
"
${
wxWidgets_CURRENT_LIST_DIR
}
/UsewxWidgets.cmake"
)
else
(
EXISTS
"
${
wxWidgets_CURRENT_LIST_DIR
}
/UsewxWidgets.cmake"
)
set
(
wxWidgets_USE_FILE UsewxWidgets
)
endif
(
EXISTS
"
${
wxWidgets_CURRENT_LIST_DIR
}
/UsewxWidgets.cmake"
)
#=====================================================================
#=====================================================================
IF
(
WIN32 AND NOT CYGWIN AND NOT MSYS AND NOT CMAKE_HOST_UNIX
)
DBG_MSG
(
"setting win32 style"
)
SET
(
wxWidgets_FIND_STYLE
"win32"
)
ELSE
()
IF
(
CMAKE_HOST_UNIX OR MSYS
)
DBG_MSG
(
"unix style"
)
SET
(
wxWidgets_FIND_STYLE
"unix"
)
ENDIF
()
ENDIF
()
if
(
WIN32 AND NOT CYGWIN AND NOT MSYS AND NOT CMAKE_HOST_UNIX
)
dbg_msg
(
"setting win32 style"
)
set
(
wxWidgets_FIND_STYLE
"win32"
)
else
()
if
(
CMAKE_HOST_UNIX OR MSYS
)
dbg_msg
(
"unix style"
)
set
(
wxWidgets_FIND_STYLE
"unix"
)
endif
()
endif
()
#=====================================================================
# WIN32_FIND_STYLE
#=====================================================================
IF
(
wxWidgets_FIND_STYLE STREQUAL
"win32"
)
DBG_MSG
(
"Using win32 path"
)
if
(
wxWidgets_FIND_STYLE STREQUAL
"win32"
)
dbg_msg
(
"Using win32 path"
)
# Useful common wx libs needed by almost all components.
SET
(
wxWidgets_COMMON_LIBRARIES png tiff jpeg zlib regex expat
)
set
(
wxWidgets_COMMON_LIBRARIES png tiff jpeg zlib regex expat
)
# DEPRECATED: Use
FIND_PACKAGE
(wxWidgets COMPONENTS mono) instead.
IF
(
NOT wxWidgets_FIND_COMPONENTS
)
IF
(
wxWidgets_USE_MONOLITHIC
)
SET
(
wxWidgets_FIND_COMPONENTS mono
)
ELSE
(
wxWidgets_USE_MONOLITHIC
)
SET
(
wxWidgets_FIND_COMPONENTS core base
)
# this is default
ENDIF
(
wxWidgets_USE_MONOLITHIC
)
ENDIF
(
NOT wxWidgets_FIND_COMPONENTS
)
# DEPRECATED: Use
find_package
(wxWidgets COMPONENTS mono) instead.
if
(
NOT wxWidgets_FIND_COMPONENTS
)
if
(
wxWidgets_USE_MONOLITHIC
)
set
(
wxWidgets_FIND_COMPONENTS mono
)
else
(
wxWidgets_USE_MONOLITHIC
)
set
(
wxWidgets_FIND_COMPONENTS core base
)
# this is default
endif
(
wxWidgets_USE_MONOLITHIC
)
endif
(
NOT wxWidgets_FIND_COMPONENTS
)
# Add the common (usually required libs) unless
# wxWidgets_EXCLUDE_COMMON_LIBRARIES has been set.
IF
(
NOT wxWidgets_EXCLUDE_COMMON_LIBRARIES
)
LIST
(
APPEND wxWidgets_FIND_COMPONENTS
if
(
NOT wxWidgets_EXCLUDE_COMMON_LIBRARIES
)
list
(
APPEND wxWidgets_FIND_COMPONENTS
${
wxWidgets_COMMON_LIBRARIES
}
)
ENDIF
(
NOT wxWidgets_EXCLUDE_COMMON_LIBRARIES
)
endif
(
NOT wxWidgets_EXCLUDE_COMMON_LIBRARIES
)
#-------------------------------------------------------------------
# WIN32: Helper MACROS
...
...
@@ -244,41 +250,41 @@ IF(wxWidgets_FIND_STYLE STREQUAL "win32")
# if _CONFIGURATION = mswunivud, then _UNV=univ, _UCD=u _DBG=d
# if _CONFIGURATION = mswu, then _UNV="", _UCD=u _DBG=""
#
MACRO
(
WX_GET_NAME_COMPONENTS
_CONFIGURATION _UNV _UCD _DBG
)
STRING
(
REGEX MATCH
"univ"
${
_UNV
}
"
${
_CONFIGURATION
}
"
)
STRING
(
REGEX REPLACE
"msw.*(u)[d]*$"
"u"
${
_UCD
}
"
${
_CONFIGURATION
}
"
)
IF
(
${
_UCD
}
STREQUAL
${
_CONFIGURATION
}
)
SET
(
${
_UCD
}
""
)
ENDIF
(
${
_UCD
}
STREQUAL
${
_CONFIGURATION
}
)
STRING
(
REGEX MATCH
"d$"
${
_DBG
}
"
${
_CONFIGURATION
}
"
)
ENDMACRO
(
WX_GET_NAME_COMPONENTS
)
macro
(
wx_get_name_components
_CONFIGURATION _UNV _UCD _DBG
)
string
(
REGEX MATCH
"univ"
${
_UNV
}
"
${
_CONFIGURATION
}
"
)
string
(
REGEX REPLACE
"msw.*(u)[d]*$"
"u"
${
_UCD
}
"
${
_CONFIGURATION
}
"
)
if
(
${
_UCD
}
STREQUAL
${
_CONFIGURATION
}
)
set
(
${
_UCD
}
""
)
endif
(
${
_UCD
}
STREQUAL
${
_CONFIGURATION
}
)
string
(
REGEX MATCH
"d$"
${
_DBG
}
"
${
_CONFIGURATION
}
"
)
endmacro
(
wx_get_name_components
)
#
# Find libraries associated to a configuration.
#
MACRO
(
WX_FIND_LIBS
_UNV _UCD _DBG
)
DBG_MSG_V
(
"m_unv =
${
_UNV
}
"
)
DBG_MSG_V
(
"m_ucd =
${
_UCD
}
"
)
DBG_MSG_V
(
"m_dbg =
${
_DBG
}
"
)
macro
(
wx_find_libs
_UNV _UCD _DBG
)
dbg_msg_v
(
"m_unv =
${
_UNV
}
"
)
dbg_msg_v
(
"m_ucd =
${
_UCD
}
"
)
dbg_msg_v
(
"m_dbg =
${
_DBG
}
"
)
# FIXME: What if both regex libs are available. regex should be
# found outside the loop and only wx${LIB}${_UCD}${_DBG}.
# Find wxWidgets common libraries.
FOREACH
(
LIB
${
wxWidgets_COMMON_LIBRARIES
}
scintilla
)
FIND_LIBRARY
(
WX_
${
LIB
}${
_DBG
}
foreach
(
LIB
${
wxWidgets_COMMON_LIBRARIES
}
scintilla
)
find_library
(
WX_
${
LIB
}${
_DBG
}
NAMES
wx
${
LIB
}${
_UCD
}${
_DBG
}
# for regex
wx
${
LIB
}${
_DBG
}
PATHS
${
WX_LIB_DIR
}
NO_DEFAULT_PATH
)
MARK_AS_ADVANCED
(
WX_
${
LIB
}${
_DBG
}
)
ENDFOREACH
(
LIB
)
mark_as_advanced
(
WX_
${
LIB
}${
_DBG
}
)
endforeach
(
LIB
)
DBG_MSG
(
"WX_LIB_DIR:
${
WX_LIB_DIR
}
"
)
dbg_msg
(
"WX_LIB_DIR:
${
WX_LIB_DIR
}
"
)
# Find wxWidgets multilib base libraries.
FIND_LIBRARY
(
WX_base
${
_DBG
}
find_library
(
WX_base
${
_DBG
}
NAMES
wxbase31
${
_UCD
}${
_DBG
}
wxbase30
${
_UCD
}${
_DBG
}
...
...
@@ -290,9 +296,9 @@ IF(wxWidgets_FIND_STYLE STREQUAL "win32")
PATHS
${
WX_LIB_DIR
}
NO_DEFAULT_PATH
)
MARK_AS_ADVANCED
(
WX_base
${
_DBG
}
)
FOREACH
(
LIB net odbc xml
)
FIND_LIBRARY
(
WX_
${
LIB
}${
_DBG
}
mark_as_advanced
(
WX_base
${
_DBG
}
)
foreach
(
LIB net odbc xml
)
find_library
(
WX_
${
LIB
}${
_DBG
}
NAMES
wxbase31
${
_UCD
}${
_DBG
}
_
${
LIB
}
wxbase30
${
_UCD
}${
_DBG
}
_
${
LIB
}
...
...
@@ -304,11 +310,11 @@ IF(wxWidgets_FIND_STYLE STREQUAL "win32")
PATHS
${
WX_LIB_DIR
}
NO_DEFAULT_PATH
)
MARK_AS_ADVANCED
(
WX_
${
LIB
}${
_DBG
}
)
ENDFOREACH
(
LIB
)
mark_as_advanced
(
WX_
${
LIB
}${
_DBG
}
)
endforeach
(
LIB
)
# Find wxWidgets monolithic library.
FIND_LIBRARY
(
WX_mono
${
_DBG
}
find_library
(
WX_mono
${
_DBG
}
NAMES
wxmsw
${
_UNV
}
31
${
_UCD
}${
_DBG
}
wxmsw
${
_UNV
}
30
${
_UCD
}${
_DBG
}
...
...
@@ -320,12 +326,12 @@ IF(wxWidgets_FIND_STYLE STREQUAL "win32")
PATHS
${
WX_LIB_DIR
}
NO_DEFAULT_PATH
)
MARK_AS_ADVANCED
(
WX_mono
${
_DBG
}
)
mark_as_advanced
(
WX_mono
${
_DBG
}
)
# Find wxWidgets multilib libraries.
FOREACH
(
LIB core adv aui html media xrc dbgrid gl qa richtext
foreach
(
LIB core adv aui html media xrc dbgrid gl qa richtext
stc ribbon propgrid
)
FIND_LIBRARY
(
WX_
${
LIB
}${
_DBG
}
find_library
(
WX_
${
LIB
}${
_DBG
}
NAMES
wxmsw
${
_UNV
}
31
${
_UCD
}${
_DBG
}
_
${
LIB
}
wxmsw
${
_UNV
}
30
${
_UCD
}${
_DBG
}
_
${
LIB
}
...
...
@@ -337,102 +343,102 @@ IF(wxWidgets_FIND_STYLE STREQUAL "win32")
PATHS
${
WX_LIB_DIR
}
NO_DEFAULT_PATH
)
MARK_AS_ADVANCED
(
WX_
${
LIB
}${
_DBG
}
)
ENDFOREACH
(
LIB
)
ENDMACRO
(
WX_FIND_LIBS
)
mark_as_advanced
(
WX_
${
LIB
}${
_DBG
}
)
endforeach
(
LIB
)
endmacro
(
wx_find_libs
)
#
# Clear all library paths, so that FIND_LIBRARY refinds them.
#
# Clear a lib, reset its found flag, and mark as advanced.
MACRO
(
WX_CLEAR_LIB
_LIB
)
SET
(
${
_LIB
}
"
${
_LIB
}
-NOTFOUND"
CACHE FILEPATH
"Cleared."
FORCE
)
SET
(
${
_LIB
}
_FOUND FALSE
)
MARK_AS_ADVANCED
(
${
_LIB
}
)
ENDMACRO
(
WX_CLEAR_LIB
)
macro
(
wx_clear_lib
_LIB
)
set
(
${
_LIB
}
"
${
_LIB
}
-NOTFOUND"
CACHE FILEPATH
"Cleared."
FORCE
)
set
(
${
_LIB
}
_FOUND FALSE
)
mark_as_advanced
(
${
_LIB
}
)
endmacro
(
wx_clear_lib
)
# Clear all debug or release library paths (arguments are "d" or "").
MACRO
(
WX_CLEAR_ALL_LIBS
_DBG
)
macro
(
wx_clear_all_libs
_DBG
)
# Clear wxWidgets common libraries.
FOREACH
(
LIB
${
wxWidgets_COMMON_LIBRARIES
}
scintilla
)
WX_CLEAR_LIB
(
WX_
${
LIB
}${
_DBG
}
)
ENDFOREACH
(
LIB
)
foreach
(
LIB
${
wxWidgets_COMMON_LIBRARIES
}
scintilla
)
wx_clear_lib
(
WX_
${
LIB
}${
_DBG
}
)
endforeach
(
LIB
)
# Clear wxWidgets multilib base libraries.
WX_CLEAR_LIB
(
WX_base
${
_DBG
}
)
FOREACH
(
LIB net odbc xml
)
WX_CLEAR_LIB
(
WX_
${
LIB
}${
_DBG
}
)
ENDFOREACH
(
LIB
)
wx_clear_lib
(
WX_base
${
_DBG
}
)
foreach
(
LIB net odbc xml
)
wx_clear_lib
(
WX_
${
LIB
}${
_DBG
}
)
endforeach
(
LIB
)
# Clear wxWidgets monolithic library.
WX_CLEAR_LIB
(
WX_mono
${
_DBG
}
)
wx_clear_lib
(
WX_mono
${
_DBG
}
)
# Clear wxWidgets multilib libraries.
FOREACH
(
LIB core adv aui html media xrc dbgrid gl qa richtext
foreach
(
LIB core adv aui html media xrc dbgrid gl qa richtext
stc ribbon propgrid
)
WX_CLEAR_LIB
(
WX_
${
LIB
}${
_DBG
}
)
ENDFOREACH
(
LIB
)
ENDMACRO
(
WX_CLEAR_ALL_LIBS
)
wx_clear_lib
(
WX_
${
LIB
}${
_DBG
}
)
endforeach
(
LIB
)
endmacro
(
wx_clear_all_libs
)
# Clear all wxWidgets debug libraries.
MACRO
(
WX_CLEAR_ALL_DBG_LIBS
)
WX_CLEAR_ALL_LIBS
(
"d"
)
ENDMACRO
(
WX_CLEAR_ALL_DBG_LIBS
)
macro
(
wx_clear_all_dbg_libs
)
wx_clear_all_libs
(
"d"
)
endmacro
(
wx_clear_all_dbg_libs
)
# Clear all wxWidgets release libraries.
MACRO
(
WX_CLEAR_ALL_REL_LIBS
)
WX_CLEAR_ALL_LIBS
(
""
)
ENDMACRO
(
WX_CLEAR_ALL_REL_LIBS
)
macro
(
wx_clear_all_rel_libs
)
wx_clear_all_libs
(
""
)
endmacro
(
wx_clear_all_rel_libs
)
#
# Set the wxWidgets_LIBRARIES variable.
# Also, Sets output variable wxWidgets_FOUND to FALSE if it fails.
#
MACRO
(
WX_SET_LIBRARIES
_LIBS _DBG
)
DBG_MSG_V
(
"Looking for
${${
_LIBS
}}
"
)
IF
(
WX_USE_REL_AND_DBG
)
FOREACH
(
LIB
${${
_LIBS
}}
)
DBG_MSG_V
(
"Searching for
${
LIB
}
and
${
LIB
}
d"
)
DBG_MSG_V
(
"WX_
${
LIB
}
:
${
WX_
${
LIB
}}
"
)
DBG_MSG_V
(
"WX_
${
LIB
}
d :
${
WX_
${
LIB
}
d
}
"
)
IF
(
WX_
${
LIB
}
AND WX_
${
LIB
}
d
)
DBG_MSG_V
(
"Found
${
LIB
}
and
${
LIB
}
d"
)
LIST
(
APPEND wxWidgets_LIBRARIES
macro
(
wx_set_libraries
_LIBS _DBG
)
dbg_msg_v
(
"Looking for
${${
_LIBS
}}
"
)
if
(
WX_USE_REL_AND_DBG
)
foreach
(
LIB
${${
_LIBS
}}
)
dbg_msg_v
(
"Searching for
${
LIB
}
and
${
LIB
}
d"
)
dbg_msg_v
(
"WX_
${
LIB
}
:
${
WX_
${
LIB
}}
"
)
dbg_msg_v
(
"WX_
${
LIB
}
d :
${
WX_
${
LIB
}
d
}
"
)
if
(
WX_
${
LIB
}
AND WX_
${
LIB
}
d
)
dbg_msg_v
(
"Found
${
LIB
}
and
${
LIB
}
d"
)
list
(
APPEND wxWidgets_LIBRARIES
debug
${
WX_
${
LIB
}
d
}
optimized
${
WX_
${
LIB
}}
)
ELSE
(
WX_
${
LIB
}
AND WX_
${
LIB
}
d
)
DBG_MSG_V
(
"- not found due to missing WX_
${
LIB
}
=
${
WX_
${
LIB
}}
or WX_
${
LIB
}
d=
${
WX_
${
LIB
}
d
}
"
)
SET
(
wxWidgets_FOUND FALSE
)
ENDIF
(
WX_
${
LIB
}
AND WX_
${
LIB
}
d
)
ENDFOREACH
(
LIB
)
ELSE
(
WX_USE_REL_AND_DBG
)
FOREACH
(
LIB
${${
_LIBS
}}
)
DBG_MSG_V
(
"Searching for
${
LIB
}${
_DBG
}
"
)
DBG_MSG_V
(
"WX_
${
LIB
}${
_DBG
}
:
${
WX_
${
LIB
}${
_DBG
}}
"
)
IF
(
WX_
${
LIB
}${
_DBG
}
)
DBG_MSG_V
(
"Found
${
LIB
}${
_DBG
}
"
)
LIST
(
APPEND wxWidgets_LIBRARIES
${
WX_
${
LIB
}${
_DBG
}}
)
ELSE
(
WX_
${
LIB
}${
_DBG
}
)
DBG_MSG_V
(
else
(
WX_
${
LIB
}
AND WX_
${
LIB
}
d
)
dbg_msg_v
(
"- not found due to missing WX_
${
LIB
}
=
${
WX_
${
LIB
}}
or WX_
${
LIB
}
d=
${
WX_
${
LIB
}
d
}
"
)
set
(
wxWidgets_FOUND FALSE
)
endif
(
WX_
${
LIB
}
AND WX_
${
LIB
}
d
)
endforeach
(
LIB
)
else
(
WX_USE_REL_AND_DBG
)
foreach
(
LIB
${${
_LIBS
}}
)
dbg_msg_v
(
"Searching for
${
LIB
}${
_DBG
}
"
)
dbg_msg_v
(
"WX_
${
LIB
}${
_DBG
}
:
${
WX_
${
LIB
}${
_DBG
}}
"
)
if
(
WX_
${
LIB
}${
_DBG
}
)
dbg_msg_v
(
"Found
${
LIB
}${
_DBG
}
"
)
list
(
APPEND wxWidgets_LIBRARIES
${
WX_
${
LIB
}${
_DBG
}}
)
else
(
WX_
${
LIB
}${
_DBG
}
)
dbg_msg_v
(
"- not found due to missing WX_
${
LIB
}${
_DBG
}
=
${
WX_
${
LIB
}${
_DBG
}}
"
)
SET
(
wxWidgets_FOUND FALSE
)
ENDIF
(
WX_
${
LIB
}${
_DBG
}
)
ENDFOREACH
(
LIB
)
ENDIF
(
WX_USE_REL_AND_DBG
)
set
(
wxWidgets_FOUND FALSE
)
endif
(
WX_
${
LIB
}${
_DBG
}
)
endforeach
(
LIB
)
endif
(
WX_USE_REL_AND_DBG
)
DBG_MSG_V
(
"OpenGL"
)
LIST
(
FIND
${
_LIBS
}
gl WX_USE_GL
)
IF
(
NOT WX_USE_GL EQUAL -1
)
DBG_MSG_V
(
"- is required."
)
LIST
(
APPEND wxWidgets_LIBRARIES opengl32 glu32
)
ENDIF
(
NOT WX_USE_GL EQUAL -1
)
dbg_msg_v
(
"OpenGL"
)
list
(
FIND
${
_LIBS
}
gl WX_USE_GL
)
if
(
NOT WX_USE_GL EQUAL -1
)
dbg_msg_v
(
"- is required."
)
list
(
APPEND wxWidgets_LIBRARIES opengl32 glu32
)
endif
(
NOT WX_USE_GL EQUAL -1
)
LIST
(
APPEND wxWidgets_LIBRARIES winmm comctl32 rpcrt4 wsock32
)
ENDMACRO
(
WX_SET_LIBRARIES
)
list
(
APPEND wxWidgets_LIBRARIES winmm comctl32 rpcrt4 wsock32
)
endmacro
(
wx_set_libraries
)
#-------------------------------------------------------------------
# WIN32: Start actual work.
#-------------------------------------------------------------------
# Look for an installation tree.
FIND_PATH
(
wxWidgets_ROOT_DIR
find_path
(
wxWidgets_ROOT_DIR
NAMES include/wx/wx.h
PATHS
$ENV{wxWidgets_ROOT_DIR}
...
...
@@ -442,7 +448,7 @@ IF(wxWidgets_FIND_STYLE STREQUAL "win32")
D:/
$ENV{ProgramFiles}
PATH_SUFFIXES
wxWidgets-3.
1.0
wxWidgets-3.
0.1
wxWidgets-3.0.0
wxWidgets-2.9.5
wxWidgets-2.9.4
...
...
@@ -479,30 +485,30 @@ IF(wxWidgets_FIND_STYLE STREQUAL "win32")
)
# If wxWidgets_ROOT_DIR changed, clear lib dir.
IF
(
NOT WX_ROOT_DIR STREQUAL wxWidgets_ROOT_DIR
)
DBG_MSG
(
"WX_ROOT_DIR != wxWidgets_ROOT_DIR"
)
if
(
NOT WX_ROOT_DIR STREQUAL wxWidgets_ROOT_DIR
)
dbg_msg
(
"WX_ROOT_DIR != wxWidgets_ROOT_DIR"
)
SET
(
WX_ROOT_DIR
${
wxWidgets_ROOT_DIR
}
set
(
WX_ROOT_DIR
${
wxWidgets_ROOT_DIR
}
CACHE INTERNAL
"wxWidgets_ROOT_DIR"
)
SET
(
wxWidgets_LIB_DIR
"wxWidgets_LIB_DIR-NOTFOUND"
set
(
wxWidgets_LIB_DIR
"wxWidgets_LIB_DIR-NOTFOUND"
CACHE PATH
"Cleared."
FORCE
)
ENDIF
(
NOT WX_ROOT_DIR STREQUAL wxWidgets_ROOT_DIR
)
endif
(
NOT WX_ROOT_DIR STREQUAL wxWidgets_ROOT_DIR
)
IF
(
WX_ROOT_DIR
)
DBG_MSG
(
"WX_ROOT_DIR == wxWidgets_ROOT_DIR"
)
if
(
WX_ROOT_DIR
)
dbg_msg
(
"WX_ROOT_DIR == wxWidgets_ROOT_DIR"
)
# Select one default tree inside the already determined wx tree.
# Prefer static/shared order usually consistent with build
# settings.
IF
(
MINGW
)
DBG_MSG
(
"MINGW"
)
SET
(
WX_LIB_DIR_PREFIX gcc
)
ELSE
(
MINGW
)
SET
(
WX_LIB_DIR_PREFIX vc
)
ENDIF
(
MINGW
)
IF
(
BUILD_SHARED_LIBS
)
DBG_MSG
(
"BUILD_SHARED_LIBS"
)
FIND_PATH
(
wxWidgets_LIB_DIR
if
(
MINGW
)
dbg_msg
(
"MINGW"
)
set
(
WX_LIB_DIR_PREFIX gcc
)
else
(
MINGW
)
set
(
WX_LIB_DIR_PREFIX vc
)
endif
(
MINGW
)
if
(
BUILD_SHARED_LIBS
)
dbg_msg
(
"BUILD_SHARED_LIBS"
)
find_path
(
wxWidgets_LIB_DIR
NAMES
msw/wx/setup.h
mswd/wx/setup.h
...
...
@@ -518,9 +524,9 @@ IF(wxWidgets_FIND_STYLE STREQUAL "win32")
DOC
"Path to wxWidgets libraries?"
NO_DEFAULT_PATH
)
ELSE
(
BUILD_SHARED_LIBS
)
DBG_MSG
(
"!BUILD_SHARED_LIBS WX_LIB_DIR:
${
WX_LIB_DIR
}
"
)
FIND_PATH
(
wxWidgets_LIB_DIR
else
(
BUILD_SHARED_LIBS
)
dbg_msg
(
"!BUILD_SHARED_LIBS WX_LIB_DIR:
${
WX_LIB_DIR
}
"
)
find_path
(
wxWidgets_LIB_DIR
NAMES
msw/wx/setup.h
mswd/wx/setup.h
...
...
@@ -536,111 +542,111 @@ IF(wxWidgets_FIND_STYLE STREQUAL "win32")
DOC
"Path to wxWidgets libraries?"
NO_DEFAULT_PATH
)
ENDIF
(
BUILD_SHARED_LIBS
)
endif
(
BUILD_SHARED_LIBS
)
# If wxWidgets_LIB_DIR changed, clear all libraries.
IF
(
NOT WX_LIB_DIR STREQUAL wxWidgets_LIB_DIR
)
SET
(
WX_LIB_DIR
${
wxWidgets_LIB_DIR
}
CACHE INTERNAL
"wxWidgets_LIB_DIR"
)
WX_CLEAR_ALL_DBG_LIBS
()
WX_CLEAR_ALL_REL_LIBS
()
ENDIF
(
NOT WX_LIB_DIR STREQUAL wxWidgets_LIB_DIR
)
if
(
NOT WX_LIB_DIR STREQUAL wxWidgets_LIB_DIR
)
set
(
WX_LIB_DIR
${
wxWidgets_LIB_DIR
}
CACHE INTERNAL
"wxWidgets_LIB_DIR"
)
wx_clear_all_dbg_libs
()
wx_clear_all_rel_libs
()
endif
(
NOT WX_LIB_DIR STREQUAL wxWidgets_LIB_DIR
)
IF
(
WX_LIB_DIR
)
if
(
WX_LIB_DIR
)
# If building shared libs, define WXUSINGDLL to use dllimport.
IF
(
WX_LIB_DIR MATCHES
".*[dD][lL][lL].*"
)
SET
(
wxWidgets_DEFINITIONS WXUSINGDLL
)
DBG_MSG_V
(
"detected SHARED/DLL tree WX_LIB_DIR=
${
WX_LIB_DIR
}
"
)
ENDIF
(
WX_LIB_DIR MATCHES
".*[dD][lL][lL].*"
)
if
(
WX_LIB_DIR MATCHES
".*[dD][lL][lL].*"
)
set
(
wxWidgets_DEFINITIONS WXUSINGDLL
)
dbg_msg_v
(
"detected SHARED/DLL tree WX_LIB_DIR=
${
WX_LIB_DIR
}
"
)
endif
(
WX_LIB_DIR MATCHES
".*[dD][lL][lL].*"
)
# Search for available configuration types.
FOREACH
(
CFG mswunivud mswunivd mswud mswd mswunivu mswuniv mswu msw
)
SET
(
WX_
${
CFG
}
_FOUND FALSE
)
IF
(
EXISTS
${
WX_LIB_DIR
}
/
${
CFG
}
)
LIST
(
APPEND WX_CONFIGURATION_LIST
${
CFG
}
)
SET
(
WX_
${
CFG
}
_FOUND TRUE
)
SET
(
WX_CONFIGURATION
${
CFG
}
)
ENDIF
(
EXISTS
${
WX_LIB_DIR
}
/
${
CFG
}
)
ENDFOREACH
(
CFG
)
DBG_MSG_V
(
"WX_CONFIGURATION_LIST=
${
WX_CONFIGURATION_LIST
}
"
)
IF
(
WX_CONFIGURATION
)
SET
(
wxWidgets_FOUND TRUE
)
foreach
(
CFG mswunivud mswunivd mswud mswd mswunivu mswuniv mswu msw
)
set
(
WX_
${
CFG
}
_FOUND FALSE
)
if
(
EXISTS
${
WX_LIB_DIR
}
/
${
CFG
}
)
list
(
APPEND WX_CONFIGURATION_LIST
${
CFG
}
)
set
(
WX_
${
CFG
}
_FOUND TRUE
)
set
(
WX_CONFIGURATION
${
CFG
}
)
endif
(
EXISTS
${
WX_LIB_DIR
}
/
${
CFG
}
)
endforeach
(
CFG
)
dbg_msg_v
(
"WX_CONFIGURATION_LIST=
${
WX_CONFIGURATION_LIST
}
"
)
if
(
WX_CONFIGURATION
)
set
(
wxWidgets_FOUND TRUE
)
# If the selected configuration wasn't found force the default
# one. Otherwise, use it but still force a refresh for
# updating the doc string with the current list of available
# configurations.
IF
(
NOT WX_
${
wxWidgets_CONFIGURATION
}
_FOUND
)
SET
(
wxWidgets_CONFIGURATION
${
WX_CONFIGURATION
}
CACHE STRING
if
(
NOT WX_
${
wxWidgets_CONFIGURATION
}
_FOUND
)
set
(
wxWidgets_CONFIGURATION
${
WX_CONFIGURATION
}
CACHE STRING
"Set wxWidgets configuration (
${
WX_CONFIGURATION_LIST
}
)"
FORCE
)
ELSE
(
NOT WX_
${
wxWidgets_CONFIGURATION
}
_FOUND
)
SET
(
wxWidgets_CONFIGURATION
${
wxWidgets_CONFIGURATION
}
CACHE STRING
else
(
NOT WX_
${
wxWidgets_CONFIGURATION
}
_FOUND
)
set
(
wxWidgets_CONFIGURATION
${
wxWidgets_CONFIGURATION
}
CACHE STRING
"Set wxWidgets configuration (
${
WX_CONFIGURATION_LIST
}
)"
FORCE
)
ENDIF
(
NOT WX_
${
wxWidgets_CONFIGURATION
}
_FOUND
)
endif
(
NOT WX_
${
wxWidgets_CONFIGURATION
}
_FOUND
)
# If release config selected, and both release/debug exist.
IF
(
WX_
${
wxWidgets_CONFIGURATION
}
d_FOUND
)
if
(
WX_
${
wxWidgets_CONFIGURATION
}
d_FOUND
)
OPTION
(
wxWidgets_USE_REL_AND_DBG
"Use release and debug configurations?"
TRUE
)
SET
(
WX_USE_REL_AND_DBG
${
wxWidgets_USE_REL_AND_DBG
}
)
ELSE
(
WX_
${
wxWidgets_CONFIGURATION
}
d_FOUND
)
set
(
WX_USE_REL_AND_DBG
${
wxWidgets_USE_REL_AND_DBG
}
)
else
(
WX_
${
wxWidgets_CONFIGURATION
}
d_FOUND
)
# If the option exists (already in cache), force it false.
IF
(
wxWidgets_USE_REL_AND_DBG
)
SET
(
wxWidgets_USE_REL_AND_DBG FALSE CACHE BOOL
if
(
wxWidgets_USE_REL_AND_DBG
)
set
(
wxWidgets_USE_REL_AND_DBG FALSE CACHE BOOL
"No
${
wxWidgets_CONFIGURATION
}
d found."
FORCE
)
ENDIF
(
wxWidgets_USE_REL_AND_DBG
)
SET
(
WX_USE_REL_AND_DBG FALSE
)
ENDIF
(
WX_
${
wxWidgets_CONFIGURATION
}
d_FOUND
)
endif
(
wxWidgets_USE_REL_AND_DBG
)
set
(
WX_USE_REL_AND_DBG FALSE
)
endif
(
WX_
${
wxWidgets_CONFIGURATION
}
d_FOUND
)
# Get configuration parameters from the name.
WX_GET_NAME_COMPONENTS
(
${
wxWidgets_CONFIGURATION
}
UNV UCD DBG
)
wx_get_name_components
(
${
wxWidgets_CONFIGURATION
}
UNV UCD DBG
)
# Set wxWidgets lib setup include directory.
IF
(
EXISTS
${
WX_LIB_DIR
}
/
${
wxWidgets_CONFIGURATION
}
/wx/setup.h
)
SET
(
wxWidgets_INCLUDE_DIRS
if
(
EXISTS
${
WX_LIB_DIR
}
/
${
wxWidgets_CONFIGURATION
}
/wx/setup.h
)
set
(
wxWidgets_INCLUDE_DIRS
${
WX_LIB_DIR
}
/
${
wxWidgets_CONFIGURATION
}
)
ELSE
(
EXISTS
${
WX_LIB_DIR
}
/
${
wxWidgets_CONFIGURATION
}
/wx/setup.h
)
DBG_MSG
(
"wxWidgets_FOUND FALSE because
${
WX_LIB_DIR
}
/
${
wxWidgets_CONFIGURATION
}
/wx/setup.h does not exists."
)
SET
(
wxWidgets_FOUND FALSE
)
ENDIF
(
EXISTS
${
WX_LIB_DIR
}
/
${
wxWidgets_CONFIGURATION
}
/wx/setup.h
)
else
(
EXISTS
${
WX_LIB_DIR
}
/
${
wxWidgets_CONFIGURATION
}
/wx/setup.h
)
dbg_msg
(
"wxWidgets_FOUND FALSE because
${
WX_LIB_DIR
}
/
${
wxWidgets_CONFIGURATION
}
/wx/setup.h does not exists."
)
set
(
wxWidgets_FOUND FALSE
)
endif
(
EXISTS
${
WX_LIB_DIR
}
/
${
wxWidgets_CONFIGURATION
}
/wx/setup.h
)
# Set wxWidgets main include directory.
IF
(
EXISTS
${
WX_ROOT_DIR
}
/include/wx/wx.h
)
LIST
(
APPEND wxWidgets_INCLUDE_DIRS
${
WX_ROOT_DIR
}
/include
)
ELSE
(
EXISTS
${
WX_ROOT_DIR
}
/include/wx/wx.h
)
DBG_MSG
(
"wxWidgets_FOUND FALSE because WX_ROOT_DIR=
${
WX_ROOT_DIR
}
has no
${
WX_ROOT_DIR
}
/include/wx/wx.h"
)
SET
(
wxWidgets_FOUND FALSE
)
ENDIF
(
EXISTS
${
WX_ROOT_DIR
}
/include/wx/wx.h
)
if
(
EXISTS
${
WX_ROOT_DIR
}
/include/wx/wx.h
)
list
(
APPEND wxWidgets_INCLUDE_DIRS
${
WX_ROOT_DIR
}
/include
)
else
(
EXISTS
${
WX_ROOT_DIR
}
/include/wx/wx.h
)
dbg_msg
(
"wxWidgets_FOUND FALSE because WX_ROOT_DIR=
${
WX_ROOT_DIR
}
has no
${
WX_ROOT_DIR
}
/include/wx/wx.h"
)
set
(
wxWidgets_FOUND FALSE
)
endif
(
EXISTS
${
WX_ROOT_DIR
}
/include/wx/wx.h
)
# Find wxWidgets libraries.
WX_FIND_LIBS
(
"
${
UNV
}
"
"
${
UCD
}
"
"
${
DBG
}
"
)
IF
(
WX_USE_REL_AND_DBG
)
WX_FIND_LIBS
(
"
${
UNV
}
"
"
${
UCD
}
"
"d"
)
ENDIF
(
WX_USE_REL_AND_DBG
)
wx_find_libs
(
"
${
UNV
}
"
"
${
UCD
}
"
"
${
DBG
}
"
)
if
(
WX_USE_REL_AND_DBG
)
wx_find_libs
(
"
${
UNV
}
"
"
${
UCD
}
"
"d"
)
endif
(
WX_USE_REL_AND_DBG
)
# Settings for requested libs (i.e., include dir, libraries, etc.).
WX_SET_LIBRARIES
(
wxWidgets_FIND_COMPONENTS
"
${
DBG
}
"
)
wx_set_libraries
(
wxWidgets_FIND_COMPONENTS
"
${
DBG
}
"
)
# Add necessary definitions for unicode builds
IF
(
"
${
UCD
}
"
STREQUAL
"u"
)
LIST
(
APPEND wxWidgets_DEFINITIONS UNICODE _UNICODE
)
ENDIF
(
"
${
UCD
}
"
STREQUAL
"u"
)
if
(
"
${
UCD
}
"
STREQUAL
"u"
)
list
(
APPEND wxWidgets_DEFINITIONS UNICODE _UNICODE
)
endif
(
"
${
UCD
}
"
STREQUAL
"u"
)
# Add necessary definitions for debug builds
SET
(
wxWidgets_DEFINITIONS_DEBUG _DEBUG __WXDEBUG__
)
set
(
wxWidgets_DEFINITIONS_DEBUG _DEBUG __WXDEBUG__
)
ENDIF
(
WX_CONFIGURATION
)
ENDIF
(
WX_LIB_DIR
)
ENDIF
(
WX_ROOT_DIR
)
endif
(
WX_CONFIGURATION
)
endif
(
WX_LIB_DIR
)
endif
(
WX_ROOT_DIR
)
#=====================================================================
# UNIX_FIND_STYLE
#=====================================================================
ELSE
(
wxWidgets_FIND_STYLE STREQUAL
"win32"
)
DBG_MSG
(
"NOT win32 path"
)
else
(
wxWidgets_FIND_STYLE STREQUAL
"win32"
)
dbg_msg
(
"NOT win32 path"
)
IF
(
wxWidgets_FIND_STYLE STREQUAL
"unix"
)
DBG_MSG
(
"unix find style"
)
if
(
wxWidgets_FIND_STYLE STREQUAL
"unix"
)
dbg_msg
(
"unix find style"
)
#-----------------------------------------------------------------
# UNIX: Helper MACROS
...
...
@@ -648,221 +654,255 @@ ELSE(wxWidgets_FIND_STYLE STREQUAL "win32")
#
# Set the default values based on "wx-config --selected-config".
#
MACRO
(
WX_CONFIG_SELECT_GET_DEFAULT
)
EXECUTE_PROCESS
(
macro
(
wx_config_select_get_default
)
execute_process
(
COMMAND sh
"
${
wxWidgets_CONFIG_EXECUTABLE
}
"
${
wxWidgets_CONFIG_OPTIONS
}
--selected-config
OUTPUT_VARIABLE _wx_selected_config
RESULT_VARIABLE _wx_result
ERROR_QUIET
)
IF
(
_wx_result EQUAL 0
)
FOREACH
(
_opt_name debug static unicode universal
)
STRING
(
TOUPPER
${
_opt_name
}
_upper_opt_name
)
IF
(
_wx_selected_config MATCHES
".*
${
_opt_name
}
.*"
)
SET
(
wxWidgets_DEFAULT_
${
_upper_opt_name
}
ON
)
ELSE
(
_wx_selected_config MATCHES
".*
${
_opt_name
}
.*"
)
SET
(
wxWidgets_DEFAULT_
${
_upper_opt_name
}
OFF
)
ENDIF
(
_wx_selected_config MATCHES
".*
${
_opt_name
}
.*"
)
ENDFOREACH
(
_opt_name
)
ELSE
(
_wx_result EQUAL 0
)
FOREACH
(
_upper_opt_name DEBUG STATIC UNICODE UNIVERSAL
)
SET
(
wxWidgets_DEFAULT_
${
_upper_opt_name
}
OFF
)
ENDFOREACH
(
_upper_opt_name
)
ENDIF
(
_wx_result EQUAL 0
)
ENDMACRO
(
WX_CONFIG_SELECT_GET_DEFAULT
)
if
(
_wx_result EQUAL 0
)
foreach
(
_opt_name debug static unicode universal
)
string
(
TOUPPER
${
_opt_name
}
_upper_opt_name
)
if
(
_wx_selected_config MATCHES
".*
${
_opt_name
}
.*"
)
set
(
wxWidgets_DEFAULT_
${
_upper_opt_name
}
ON
)
else
(
_wx_selected_config MATCHES
".*
${
_opt_name
}
.*"
)
set
(
wxWidgets_DEFAULT_
${
_upper_opt_name
}
OFF
)
endif
(
_wx_selected_config MATCHES
".*
${
_opt_name
}
.*"
)
endforeach
(
_opt_name
)
else
(
_wx_result EQUAL 0
)
foreach
(
_upper_opt_name DEBUG STATIC UNICODE UNIVERSAL
)
set
(
wxWidgets_DEFAULT_
${
_upper_opt_name
}
OFF
)
endforeach
(
_upper_opt_name
)
endif
(
_wx_result EQUAL 0
)
endmacro
(
wx_config_select_get_default
)
#
# Query a boolean configuration option to determine if the system
# has both builds available. If so, provide the selection option
# to the user.
#
MACRO
(
WX_CONFIG_SELECT_QUERY_BOOL
_OPT_NAME _OPT_HELP
)
EXECUTE_PROCESS
(
macro
(
wx_config_select_query_bool
_OPT_NAME _OPT_HELP
)
execute_process
(
COMMAND sh
"
${
wxWidgets_CONFIG_EXECUTABLE
}
"
${
wxWidgets_CONFIG_OPTIONS
}
--
${
_OPT_NAME
}
=yes
RESULT_VARIABLE _wx_result_yes
OUTPUT_QUIET
ERROR_QUIET
)
EXECUTE_PROCESS
(
execute_process
(
COMMAND sh
"
${
wxWidgets_CONFIG_EXECUTABLE
}
"
${
wxWidgets_CONFIG_OPTIONS
}
--
${
_OPT_NAME
}
=no
RESULT_VARIABLE _wx_result_no
OUTPUT_QUIET
ERROR_QUIET
)
STRING
(
TOUPPER
${
_OPT_NAME
}
_UPPER_OPT_NAME
)
IF
(
_wx_result_yes EQUAL 0 AND _wx_result_no EQUAL 0
)
string
(
TOUPPER
${
_OPT_NAME
}
_UPPER_OPT_NAME
)
if
(
_wx_result_yes EQUAL 0 AND _wx_result_no EQUAL 0
)
OPTION
(
wxWidgets_USE_
${
_UPPER_OPT_NAME
}
${
_OPT_HELP
}
${
wxWidgets_DEFAULT_
${
_UPPER_OPT_NAME
}}
)
ELSE
(
_wx_result_yes EQUAL 0 AND _wx_result_no EQUAL 0
)
else
(
_wx_result_yes EQUAL 0 AND _wx_result_no EQUAL 0
)
# If option exists (already in cache), force to available one.
IF
(
DEFINED wxWidgets_USE_
${
_UPPER_OPT_NAME
}
)
IF
(
_wx_result_yes EQUAL 0
)
SET
(
wxWidgets_USE_
${
_UPPER_OPT_NAME
}
ON CACHE BOOL
${
_OPT_HELP
}
FORCE
)
ELSE
(
_wx_result_yes EQUAL 0
)
SET
(
wxWidgets_USE_
${
_UPPER_OPT_NAME
}
OFF CACHE BOOL
${
_OPT_HELP
}
FORCE
)
ENDIF
(
_wx_result_yes EQUAL 0
)
ENDIF
(
DEFINED wxWidgets_USE_
${
_UPPER_OPT_NAME
}
)
ENDIF
(
_wx_result_yes EQUAL 0 AND _wx_result_no EQUAL 0
)
ENDMACRO
(
WX_CONFIG_SELECT_QUERY_BOOL
)
if
(
DEFINED wxWidgets_USE_
${
_UPPER_OPT_NAME
}
)
if
(
_wx_result_yes EQUAL 0
)
set
(
wxWidgets_USE_
${
_UPPER_OPT_NAME
}
ON CACHE BOOL
${
_OPT_HELP
}
FORCE
)
else
(
_wx_result_yes EQUAL 0
)
set
(
wxWidgets_USE_
${
_UPPER_OPT_NAME
}
OFF CACHE BOOL
${
_OPT_HELP
}
FORCE
)
endif
(
_wx_result_yes EQUAL 0
)
endif
(
DEFINED wxWidgets_USE_
${
_UPPER_OPT_NAME
}
)
endif
(
_wx_result_yes EQUAL 0 AND _wx_result_no EQUAL 0
)
endmacro
(
wx_config_select_query_bool
)
#
# Set wxWidgets_SELECT_OPTIONS to wx-config options for selecting
# among multiple builds.
#
MACRO
(
WX_CONFIG_SELECT_SET_OPTIONS
)
SET
(
wxWidgets_SELECT_OPTIONS
${
wxWidgets_CONFIG_OPTIONS
}
)
FOREACH
(
_opt_name debug static unicode universal
)
STRING
(
TOUPPER
${
_opt_name
}
_upper_opt_name
)
IF
(
DEFINED wxWidgets_USE_
${
_upper_opt_name
}
)
IF
(
wxWidgets_USE_
${
_upper_opt_name
}
)
LIST
(
APPEND wxWidgets_SELECT_OPTIONS --
${
_opt_name
}
=yes
)
ELSE
(
wxWidgets_USE_
${
_upper_opt_name
}
)
LIST
(
APPEND wxWidgets_SELECT_OPTIONS --
${
_opt_name
}
=no
)
ENDIF
(
wxWidgets_USE_
${
_upper_opt_name
}
)
ENDIF
(
DEFINED wxWidgets_USE_
${
_upper_opt_name
}
)
ENDFOREACH
(
_opt_name
)
ENDMACRO
(
WX_CONFIG_SELECT_SET_OPTIONS
)
macro
(
wx_config_select_set_options
)
set
(
wxWidgets_SELECT_OPTIONS
${
wxWidgets_CONFIG_OPTIONS
}
)
foreach
(
_opt_name debug static unicode universal
)
string
(
TOUPPER
${
_opt_name
}
_upper_opt_name
)
if
(
DEFINED wxWidgets_USE_
${
_upper_opt_name
}
)
if
(
wxWidgets_USE_
${
_upper_opt_name
}
)
list
(
APPEND wxWidgets_SELECT_OPTIONS --
${
_opt_name
}
=yes
)
else
(
wxWidgets_USE_
${
_upper_opt_name
}
)
list
(
APPEND wxWidgets_SELECT_OPTIONS --
${
_opt_name
}
=no
)
endif
(
wxWidgets_USE_
${
_upper_opt_name
}
)
endif
(
DEFINED wxWidgets_USE_
${
_upper_opt_name
}
)
endforeach
(
_opt_name
)
endmacro
(
wx_config_select_set_options
)
#-----------------------------------------------------------------
# UNIX: Start actual work.
#-----------------------------------------------------------------
# Support cross-compiling, only search in the target platform.
FIND_PROGRAM
(
wxWidgets_CONFIG_EXECUTABLE wx-config
find_program
(
wxWidgets_CONFIG_EXECUTABLE wx-config
ONLY_CMAKE_FIND_ROOT_PATH
)
IF
(
wxWidgets_CONFIG_EXECUTABLE
)
SET
(
wxWidgets_FOUND TRUE
)
if
(
wxWidgets_CONFIG_EXECUTABLE
)
set
(
wxWidgets_FOUND TRUE
)
# get defaults based on "wx-config --selected-config"
WX_CONFIG_SELECT_GET_DEFAULT
()
wx_config_select_get_default
()
# for each option: if both builds are available, provide option
WX_CONFIG_SELECT_QUERY_BOOL
(
debug
"Use debug build?"
)
WX_CONFIG_SELECT_QUERY_BOOL
(
unicode
"Use unicode build?"
)
WX_CONFIG_SELECT_QUERY_BOOL
(
universal
"Use universal build?"
)
WX_CONFIG_SELECT_QUERY_BOOL
(
static
"Link libraries statically?"
)
wx_config_select_query_bool
(
debug
"Use debug build?"
)
wx_config_select_query_bool
(
unicode
"Use unicode build?"
)
wx_config_select_query_bool
(
universal
"Use universal build?"
)
wx_config_select_query_bool
(
static
"Link libraries statically?"
)
# process selection to set wxWidgets_SELECT_OPTIONS
WX_CONFIG_SELECT_SET_OPTIONS
()
DBG_MSG
(
"wxWidgets_SELECT_OPTIONS=
${
wxWidgets_SELECT_OPTIONS
}
"
)
wx_config_select_set_options
()
dbg_msg
(
"wxWidgets_SELECT_OPTIONS=
${
wxWidgets_SELECT_OPTIONS
}
"
)
# run the wx-config program to get cxxflags
EXECUTE_PROCESS
(
execute_process
(
COMMAND sh
"
${
wxWidgets_CONFIG_EXECUTABLE
}
"
${
wxWidgets_SELECT_OPTIONS
}
--cxxflags
OUTPUT_VARIABLE wxWidgets_CXX_FLAGS
RESULT_VARIABLE RET
ERROR_QUIET
)
IF
(
RET EQUAL 0
)
STRING
(
STRIP
"
${
wxWidgets_CXX_FLAGS
}
"
wxWidgets_CXX_FLAGS
)
SEPARATE_ARGUMENTS
(
wxWidgets_CXX_FLAGS
)
if
(
RET EQUAL 0
)
string
(
STRIP
"
${
wxWidgets_CXX_FLAGS
}
"
wxWidgets_CXX_FLAGS
)
separate_arguments
(
wxWidgets_CXX_FLAGS
)
DBG_MSG_V
(
"wxWidgets_CXX_FLAGS=
${
wxWidgets_CXX_FLAGS
}
"
)
dbg_msg_v
(
"wxWidgets_CXX_FLAGS=
${
wxWidgets_CXX_FLAGS
}
"
)
# parse definitions from cxxflags;
# drop -D* from CXXFLAGS and the -D prefix
STRING
(
REGEX MATCHALL
"-D[^;]+"
string
(
REGEX MATCHALL
"-D[^;]+"
wxWidgets_DEFINITIONS
"
${
wxWidgets_CXX_FLAGS
}
"
)
STRING
(
REGEX REPLACE
"-D[^;]+(;|$)"
""
string
(
REGEX REPLACE
"-D[^;]+(;|$)"
""
wxWidgets_CXX_FLAGS
"
${
wxWidgets_CXX_FLAGS
}
"
)
STRING
(
REGEX REPLACE
";$"
""
string
(
REGEX REPLACE
";$"
""
wxWidgets_CXX_FLAGS
"
${
wxWidgets_CXX_FLAGS
}
"
)
STRING
(
REPLACE
"-D"
""
string
(
REPLACE
"-D"
""
wxWidgets_DEFINITIONS
"
${
wxWidgets_DEFINITIONS
}
"
)
# parse include dirs from cxxflags; drop -I prefix
STRING
(
REGEX MATCHALL
"-I[^;]+"
string
(
REGEX MATCHALL
"-I[^;]+"
wxWidgets_INCLUDE_DIRS
"
${
wxWidgets_CXX_FLAGS
}
"
)
STRING
(
REGEX REPLACE
"-I[^;]+;"
""
string
(
REGEX REPLACE
"-I[^;]+;"
""
wxWidgets_CXX_FLAGS
"
${
wxWidgets_CXX_FLAGS
}
"
)
STRING
(
REPLACE
"-I"
""
string
(
REPLACE
"-I"
""
wxWidgets_INCLUDE_DIRS
"
${
wxWidgets_INCLUDE_DIRS
}
"
)
# Flags are a string, not a list, fix it here
string
(
REPLACE
";"
" "
wxWidgets_CXX_FLAGS
"
${
wxWidgets_CXX_FLAGS
}
"
)
DBG_MSG_V
(
"wxWidgets_DEFINITIONS=
${
wxWidgets_DEFINITIONS
}
"
)
DBG_MSG_V
(
"wxWidgets_INCLUDE_DIRS=
${
wxWidgets_INCLUDE_DIRS
}
"
)
DBG_MSG_V
(
"wxWidgets_CXX_FLAGS=
${
wxWidgets_CXX_FLAGS
}
"
)
dbg_msg_v
(
"wxWidgets_DEFINITIONS=
${
wxWidgets_DEFINITIONS
}
"
)
dbg_msg_v
(
"wxWidgets_INCLUDE_DIRS=
${
wxWidgets_INCLUDE_DIRS
}
"
)
dbg_msg_v
(
"wxWidgets_CXX_FLAGS=
${
wxWidgets_CXX_FLAGS
}
"
)
ELSE
(
RET EQUAL 0
)
SET
(
wxWidgets_FOUND FALSE
)
DBG_MSG_V
(
"
${
wxWidgets_CONFIG_EXECUTABLE
}
--cxxflags FAILED with RET=
${
RET
}
"
)
ENDIF
(
RET EQUAL 0
)
else
(
RET EQUAL 0
)
set
(
wxWidgets_FOUND FALSE
)
dbg_msg_v
(
"
${
wxWidgets_CONFIG_EXECUTABLE
}
--cxxflags FAILED with RET=
${
RET
}
"
)
endif
(
RET EQUAL 0
)
# run the wx-config program to get the libs
# - NOTE: wx-config doesn't verify that the libs requested exist
# it just produces the names. Maybe a TRY_COMPILE would
# be useful here...
STRING
(
REPLACE
";"
","
string
(
REPLACE
";"
","
wxWidgets_FIND_COMPONENTS
"
${
wxWidgets_FIND_COMPONENTS
}
"
)
EXECUTE_PROCESS
(
execute_process
(
COMMAND sh
"
${
wxWidgets_CONFIG_EXECUTABLE
}
"
${
wxWidgets_SELECT_OPTIONS
}
--libs
${
wxWidgets_FIND_COMPONENTS
}
OUTPUT_VARIABLE wxWidgets_LIBRARIES
RESULT_VARIABLE RET
ERROR_QUIET
)
IF
(
RET EQUAL 0
)
STRING
(
STRIP
"
${
wxWidgets_LIBRARIES
}
"
wxWidgets_LIBRARIES
)
SEPARATE_ARGUMENTS
(
wxWidgets_LIBRARIES
)
STRING
(
REPLACE
"-framework;"
"-framework "
if
(
RET EQUAL 0
)
string
(
STRIP
"
${
wxWidgets_LIBRARIES
}
"
wxWidgets_LIBRARIES
)
separate_arguments
(
wxWidgets_LIBRARIES
)
string
(
REPLACE
"-framework;"
"-framework "
wxWidgets_LIBRARIES
"
${
wxWidgets_LIBRARIES
}
"
)
STRING
(
REPLACE
"-arch;"
"-arch "
string
(
REPLACE
"-arch;"
"-arch "
wxWidgets_LIBRARIES
"
${
wxWidgets_LIBRARIES
}
"
)
STRING
(
REPLACE
"-isysroot;"
"-isysroot "
string
(
REPLACE
"-isysroot;"
"-isysroot "
wxWidgets_LIBRARIES
"
${
wxWidgets_LIBRARIES
}
"
)
# extract linkdirs (-L) for rpath (i.e., LINK_DIRECTORIES)
STRING
(
REGEX MATCHALL
"-L[^;]+"
string
(
REGEX MATCHALL
"-L[^;]+"
wxWidgets_LIBRARY_DIRS
"
${
wxWidgets_LIBRARIES
}
"
)
STRING
(
REPLACE
"-L"
""
string
(
REPLACE
"-L"
""
wxWidgets_LIBRARY_DIRS
"
${
wxWidgets_LIBRARY_DIRS
}
"
)
DBG_MSG_V
(
"wxWidgets_LIBRARIES=
${
wxWidgets_LIBRARIES
}
"
)
DBG_MSG_V
(
"wxWidgets_LIBRARY_DIRS=
${
wxWidgets_LIBRARY_DIRS
}
"
)
dbg_msg_v
(
"wxWidgets_LIBRARIES=
${
wxWidgets_LIBRARIES
}
"
)
dbg_msg_v
(
"wxWidgets_LIBRARY_DIRS=
${
wxWidgets_LIBRARY_DIRS
}
"
)
ELSE
(
RET EQUAL 0
)
SET
(
wxWidgets_FOUND FALSE
)
DBG_MSG
(
"
${
wxWidgets_CONFIG_EXECUTABLE
}
--libs
${
wxWidgets_FIND_COMPONENTS
}
FAILED with RET=
${
RET
}
"
)
ENDIF
(
RET EQUAL 0
)
ENDIF
(
wxWidgets_CONFIG_EXECUTABLE
)
else
(
RET EQUAL 0
)
set
(
wxWidgets_FOUND FALSE
)
dbg_msg
(
"
${
wxWidgets_CONFIG_EXECUTABLE
}
--libs
${
wxWidgets_FIND_COMPONENTS
}
FAILED with RET=
${
RET
}
"
)
endif
(
RET EQUAL 0
)
endif
(
wxWidgets_CONFIG_EXECUTABLE
)
#=====================================================================
# Neither UNIX_FIND_STYLE, nor WIN32_FIND_STYLE
#=====================================================================
ELSE
(
wxWidgets_FIND_STYLE STREQUAL
"unix"
)
IF
(
NOT wxWidgets_FIND_QUIETLY
)
MESSAGE
(
STATUS
else
(
wxWidgets_FIND_STYLE STREQUAL
"unix"
)
if
(
NOT wxWidgets_FIND_QUIETLY
)
message
(
STATUS
"
${
CMAKE_CURRENT_LIST_FILE
}
(
${
CMAKE_CURRENT_LIST_LINE
}
):
\n
"
" Platform unknown/unsupported. It's neither WIN32 nor UNIX "
"find style."
)
ENDIF
(
NOT wxWidgets_FIND_QUIETLY
)
ENDIF
(
wxWidgets_FIND_STYLE STREQUAL
"unix"
)
ENDIF
(
wxWidgets_FIND_STYLE STREQUAL
"win32"
)
endif
(
NOT wxWidgets_FIND_QUIETLY
)
endif
(
wxWidgets_FIND_STYLE STREQUAL
"unix"
)
endif
(
wxWidgets_FIND_STYLE STREQUAL
"win32"
)
# Check if a specfic version was requested by find_package().
if
(
wxWidgets_FOUND AND wxWidgets_FIND_VERSION
)
find_file
(
_filename wx/version.h PATHS
${
wxWidgets_INCLUDE_DIRS
}
)
dbg_msg
(
"_filename:
${
_filename
}
"
)
if
(
NOT _filename
)
message
(
FATAL_ERROR
"wxWidgets wx/version.h file not found in
${
wxWidgets_INCLUDE_DIRS
}
."
)
endif
()
file
(
READ
${
_filename
}
_wx_version_h
)
string
(
REGEX REPLACE
"^(.*
\n
)?#define wxMAJOR_VERSION[ ]+([0-9]+).*"
"
\\
2"
wxWidgets_VERSION_MAJOR
"
${
_wx_version_h
}
"
)
string
(
REGEX REPLACE
"^(.*
\n
)?#define wxMINOR_VERSION[ ]+([0-9]+).*"
"
\\
2"
wxWidgets_VERSION_MINOR
"
${
_wx_version_h
}
"
)
string
(
REGEX REPLACE
"^(.*
\n
)?#define wxRELEASE_NUMBER[ ]+([0-9]+).*"
"
\\
2"
wxWidgets_VERSION_PATCH
"
${
_wx_version_h
}
"
)
set
(
wxWidgets_VERSION_STRING
"
${
wxWidgets_VERSION_MAJOR
}
.
${
wxWidgets_VERSION_MINOR
}
.
${
wxWidgets_VERSION_PATCH
}
"
)
dbg_msg
(
"wxWidgets_VERSION_STRING:
${
wxWidgets_VERSION_STRING
}
"
)
endif
()
# Debug output:
DBG_MSG
(
"wxWidgets_FOUND :
${
wxWidgets_FOUND
}
"
)
DBG_MSG
(
"wxWidgets_INCLUDE_DIRS :
${
wxWidgets_INCLUDE_DIRS
}
"
)
DBG_MSG
(
"wxWidgets_LIBRARY_DIRS :
${
wxWidgets_LIBRARY_DIRS
}
"
)
DBG_MSG
(
"wxWidgets_LIBRARIES :
${
wxWidgets_LIBRARIES
}
"
)
DBG_MSG
(
"wxWidgets_CXX_FLAGS :
${
wxWidgets_CXX_FLAGS
}
"
)
DBG_MSG
(
"wxWidgets_USE_FILE :
${
wxWidgets_USE_FILE
}
"
)
dbg_msg
(
"wxWidgets_FOUND :
${
wxWidgets_FOUND
}
"
)
dbg_msg
(
"wxWidgets_INCLUDE_DIRS :
${
wxWidgets_INCLUDE_DIRS
}
"
)
dbg_msg
(
"wxWidgets_LIBRARY_DIRS :
${
wxWidgets_LIBRARY_DIRS
}
"
)
dbg_msg
(
"wxWidgets_LIBRARIES :
${
wxWidgets_LIBRARIES
}
"
)
dbg_msg
(
"wxWidgets_CXX_FLAGS :
${
wxWidgets_CXX_FLAGS
}
"
)
dbg_msg
(
"wxWidgets_USE_FILE :
${
wxWidgets_USE_FILE
}
"
)
dbg_msg
(
"wxWidgets_FIND_VERSION :
${
wxWidgets_FIND_VERSION
}
"
)
dbg_msg
(
"wxWidgets_VERSION_MAJOR :
${
wxWidgets_VERSION_MAJOR
}
"
)
dbg_msg
(
"wxWidgets_VERSION_MINOR :
${
wxWidgets_VERSION_MINOR
}
"
)
dbg_msg
(
"wxWidgets_VERSION_PATCH :
${
wxWidgets_VERSION_PATCH
}
"
)
#=====================================================================
#=====================================================================
INCLUDE
(
FindPackageHandleStandardArgs
)
FIND_PACKAGE_HANDLE_STANDARD_ARGS
(
wxWidgets DEFAULT_MSG wxWidgets_FOUND
)
# Maintain consistency with all other variables.
SET
(
wxWidgets_FOUND
${
WXWIDGETS_FOUND
}
)
dbg_msg
(
"wxWidgets_FOUND :
${
wxWidgets_FOUND
}
"
)
set
(
WXWIDGETS_FOUND
${
wxWidgetsS_FOUND
}
)
include
(
FindPackageHandleStandardArgs
)
find_package_handle_standard_args
(
wxWidgets
FOUND_VAR wxWidgets_FOUND
REQUIRED_VARS wxWidgets_LIBRARIES
VERSION_VAR wxWidgets_VERSION_STRING
)
#=====================================================================
# Macros for use in wxWidgets apps.
...
...
@@ -873,23 +913,23 @@ SET(wxWidgets_FOUND ${WXWIDGETS_FOUND})
#=====================================================================
# Resource file compiler.
FIND_PROGRAM
(
wxWidgets_wxrc_EXECUTABLE wxrc
find_program
(
wxWidgets_wxrc_EXECUTABLE wxrc
${
wxWidgets_ROOT_DIR
}
/utils/wxrc/vc_msw
)
#
#
WX_SPLIT_ARGUMENTS_ON
(<keyword> <left> <right> <arg1> <arg2> ...)
#
wx_split_arguments_on
(<keyword> <left> <right> <arg1> <arg2> ...)
#
# Sets <left> and <right> to contain arguments to the left and right,
# respectively, of <keyword>.
#
# Example usage:
#
FUNCTION(WXWIDGETS_ADD_RESOURCES
outfiles)
#
WX_SPLIT_ARGUMENTS_ON
(OPTIONS wxrc_files wxrc_options ${ARGN})
#
function(wxwidgets_add_resources
outfiles)
#
wx_split_arguments_on
(OPTIONS wxrc_files wxrc_options ${ARGN})
# ...
#
ENDFUNCTION(WXWIDGETS_ADD_RESOURCES
)
#
endfunction(wxwidgets_add_resources
)
#
#
WXWIDGETS_ADD_RESOURCES
(sources ${xrc_files} OPTIONS -e -o file.C)
#
wxwidgets_add_resources
(sources ${xrc_files} OPTIONS -e -o file.C)
#
# NOTE: This is a generic piece of code that should be renamed to
# SPLIT_ARGUMENTS_ON and put in a file serving the same purpose as
...
...
@@ -898,32 +938,32 @@ FIND_PROGRAM(wxWidgets_wxrc_EXECUTABLE wxrc
# here a bit more generalized. So, there are already two find modules
# using this approach.
#
FUNCTION
(
WX_SPLIT_ARGUMENTS_ON
_keyword _leftvar _rightvar
)
function
(
wx_split_arguments_on
_keyword _leftvar _rightvar
)
# FIXME: Document that the input variables will be cleared.
#
LIST
(APPEND ${_leftvar} "")
#
LIST
(APPEND ${_rightvar} "")
SET
(
${
_leftvar
}
""
)
SET
(
${
_rightvar
}
""
)
SET
(
_doing_right FALSE
)
FOREACH
(
element
${
ARGN
}
)
IF
(
"
${
element
}
"
STREQUAL
"
${
_keyword
}
"
)
SET
(
_doing_right TRUE
)
ELSE
(
"
${
element
}
"
STREQUAL
"
${
_keyword
}
"
)
IF
(
_doing_right
)
LIST
(
APPEND
${
_rightvar
}
"
${
element
}
"
)
ELSE
(
_doing_right
)
LIST
(
APPEND
${
_leftvar
}
"
${
element
}
"
)
ENDIF
(
_doing_right
)
ENDIF
(
"
${
element
}
"
STREQUAL
"
${
_keyword
}
"
)
ENDFOREACH
(
element
)
SET
(
${
_leftvar
}
${${
_leftvar
}}
PARENT_SCOPE
)
SET
(
${
_rightvar
}
${${
_rightvar
}}
PARENT_SCOPE
)
ENDFUNCTION
(
WX_SPLIT_ARGUMENTS_ON
)
#
list
(APPEND ${_leftvar} "")
#
list
(APPEND ${_rightvar} "")
set
(
${
_leftvar
}
""
)
set
(
${
_rightvar
}
""
)
set
(
_doing_right FALSE
)
foreach
(
element
${
ARGN
}
)
if
(
"
${
element
}
"
STREQUAL
"
${
_keyword
}
"
)
set
(
_doing_right TRUE
)
else
(
"
${
element
}
"
STREQUAL
"
${
_keyword
}
"
)
if
(
_doing_right
)
list
(
APPEND
${
_rightvar
}
"
${
element
}
"
)
else
(
_doing_right
)
list
(
APPEND
${
_leftvar
}
"
${
element
}
"
)
endif
(
_doing_right
)
endif
(
"
${
element
}
"
STREQUAL
"
${
_keyword
}
"
)
endforeach
(
element
)
set
(
${
_leftvar
}
${${
_leftvar
}}
PARENT_SCOPE
)
set
(
${
_rightvar
}
${${
_rightvar
}}
PARENT_SCOPE
)
endfunction
(
wx_split_arguments_on
)
#
#
WX_GET_DEPENDENCIES_FROM_XML
(
#
wx_get_dependencies_from_xml
(
# <depends>
# <match_pattern>
# <clean_pattern>
...
...
@@ -933,7 +973,7 @@ ENDFUNCTION(WX_SPLIT_ARGUMENTS_ON)
#
# FIXME: Add documentation here...
#
FUNCTION
(
WX_GET_DEPENDENCIES_FROM_XML
function
(
wx_get_dependencies_from_xml
_depends
_match_patt
_clean_patt
...
...
@@ -941,55 +981,55 @@ FUNCTION(WX_GET_DEPENDENCIES_FROM_XML
_depends_path
)
STRING
(
REGEX MATCHALL
string
(
REGEX MATCHALL
${
_match_patt
}
dep_file_list
"
${${
_xml_contents
}}
"
)
FOREACH
(
dep_file
${
dep_file_list
}
)
STRING
(
REGEX REPLACE
${
_clean_patt
}
""
dep_file
"
${
dep_file
}
"
)
foreach
(
dep_file
${
dep_file_list
}
)
string
(
REGEX REPLACE
${
_clean_patt
}
""
dep_file
"
${
dep_file
}
"
)
# make the file have an absolute path
IF
(
NOT IS_ABSOLUTE
"
${
dep_file
}
"
)
SET
(
dep_file
"
${${
_depends_path
}}
/
${
dep_file
}
"
)
ENDIF
(
NOT IS_ABSOLUTE
"
${
dep_file
}
"
)
if
(
NOT IS_ABSOLUTE
"
${
dep_file
}
"
)
set
(
dep_file
"
${${
_depends_path
}}
/
${
dep_file
}
"
)
endif
(
NOT IS_ABSOLUTE
"
${
dep_file
}
"
)
# append file to dependency list
LIST
(
APPEND
${
_depends
}
"
${
dep_file
}
"
)
ENDFOREACH
(
dep_file
)
list
(
APPEND
${
_depends
}
"
${
dep_file
}
"
)
endforeach
(
dep_file
)
SET
(
${
_depends
}
${${
_depends
}}
PARENT_SCOPE
)
ENDFUNCTION
(
WX_GET_DEPENDENCIES_FROM_XML
)
set
(
${
_depends
}
${${
_depends
}}
PARENT_SCOPE
)
endfunction
(
wx_get_dependencies_from_xml
)
#
#
WXWIDGETS_ADD_RESOURCES
(<sources> <xrc_files>
#
wxwidgets_add_resources
(<sources> <xrc_files>
# OPTIONS <options> [NO_CPP_CODE])
#
# Adds a custom command for resource file compilation of the
# <xrc_files> and appends the output files to <sources>.
#
# Example usages:
#
WXWIDGETS_ADD_RESOURCES
(sources xrc/main_frame.xrc)
#
WXWIDGETS_ADD_RESOURCES
(sources ${xrc_files} OPTIONS -e -o altname.cxx)
#
wxwidgets_add_resources
(sources xrc/main_frame.xrc)
#
wxwidgets_add_resources
(sources ${xrc_files} OPTIONS -e -o altname.cxx)
#
FUNCTION
(
WXWIDGETS_ADD_RESOURCES
_outfiles
)
WX_SPLIT_ARGUMENTS_ON
(
OPTIONS rc_file_list rc_options
${
ARGN
}
)
function
(
wxwidgets_add_resources
_outfiles
)
wx_split_arguments_on
(
OPTIONS rc_file_list rc_options
${
ARGN
}
)
# Parse files for dependencies.
SET
(
rc_file_list_abs
""
)
SET
(
rc_depends
""
)
FOREACH
(
rc_file
${
rc_file_list
}
)
GET_FILENAME_COMPONENT
(
depends_path
${
rc_file
}
PATH
)
set
(
rc_file_list_abs
""
)
set
(
rc_depends
""
)
foreach
(
rc_file
${
rc_file_list
}
)
get_filename_component
(
depends_path
${
rc_file
}
PATH
)
GET_FILENAME_COMPONENT
(
rc_file_abs
${
rc_file
}
ABSOLUTE
)
LIST
(
APPEND rc_file_list_abs
"
${
rc_file_abs
}
"
)
get_filename_component
(
rc_file_abs
${
rc_file
}
ABSOLUTE
)
list
(
APPEND rc_file_list_abs
"
${
rc_file_abs
}
"
)
# All files have absolute paths or paths relative to the location
# of the rc file.
FILE
(
READ
"
${
rc_file_abs
}
"
rc_file_contents
)
file
(
READ
"
${
rc_file_abs
}
"
rc_file_contents
)
# get bitmap/bitmap2 files
WX_GET_DEPENDENCIES_FROM_XML
(
wx_get_dependencies_from_xml
(
rc_depends
"<bitmap[^<]+"
"^<bitmap[^>]*>"
...
...
@@ -998,7 +1038,7 @@ FUNCTION(WXWIDGETS_ADD_RESOURCES _outfiles)
)
# get url files
WX_GET_DEPENDENCIES_FROM_XML
(
wx_get_dependencies_from_xml
(
rc_depends
"<url[^<]+"
"^<url[^>]*>"
...
...
@@ -1007,70 +1047,70 @@ FUNCTION(WXWIDGETS_ADD_RESOURCES _outfiles)
)
# get wxIcon files
WX_GET_DEPENDENCIES_FROM_XML
(
wx_get_dependencies_from_xml
(
rc_depends
"<object[^>]*class=
\"
wxIcon
\"
[^<]+"
"^<object[^>]*>"
rc_file_contents
depends_path
)
ENDFOREACH
(
rc_file
)
endforeach
(
rc_file
)
#
# Parse options.
#
# If NO_CPP_CODE option specified, then produce .xrs file rather
# than a .cpp file (i.e., don't add the default --cpp-code option).
LIST
(
FIND rc_options NO_CPP_CODE index
)
IF
(
index EQUAL -1
)
LIST
(
APPEND rc_options --cpp-code
)
list
(
FIND rc_options NO_CPP_CODE index
)
if
(
index EQUAL -1
)
list
(
APPEND rc_options --cpp-code
)
# wxrc's default output filename for cpp code.
SET
(
outfile resource.cpp
)
ELSE
(
index EQUAL -1
)
LIST
(
REMOVE_AT rc_options
${
index
}
)
set
(
outfile resource.cpp
)
else
(
index EQUAL -1
)
list
(
REMOVE_AT rc_options
${
index
}
)
# wxrc's default output filename for xrs file.
SET
(
outfile resource.xrs
)
ENDIF
(
index EQUAL -1
)
set
(
outfile resource.xrs
)
endif
(
index EQUAL -1
)
# Get output name for use in
ADD_CUSTOM_COMMAND
.
# Get output name for use in
add_custom_command
.
# - short option scanning
LIST
(
FIND rc_options -o index
)
IF
(
NOT index EQUAL -1
)
list
(
FIND rc_options -o index
)
if
(
NOT index EQUAL -1
)
MATH
(
EXPR filename_index
"
${
index
}
+ 1"
)
LIST
(
GET rc_options
${
filename_index
}
outfile
)
#
LIST
(REMOVE_AT rc_options ${index} ${filename_index})
ENDIF
(
NOT index EQUAL -1
)
list
(
GET rc_options
${
filename_index
}
outfile
)
#
list
(REMOVE_AT rc_options ${index} ${filename_index})
endif
(
NOT index EQUAL -1
)
# - long option scanning
STRING
(
REGEX MATCH
"--output=[^;]*"
outfile_opt
"
${
rc_options
}
"
)
IF
(
outfile_opt
)
STRING
(
REPLACE
"--output="
""
outfile
"
${
outfile_opt
}
"
)
ENDIF
(
outfile_opt
)
#
STRING
(REGEX REPLACE "--output=[^;]*;?" "" rc_options "${rc_options}")
#
STRING
(REGEX REPLACE ";$" "" rc_options "${rc_options}")
IF
(
NOT IS_ABSOLUTE
"
${
outfile
}
"
)
SET
(
outfile
"
${
CMAKE_CURRENT_BINARY_DIR
}
/
${
outfile
}
"
)
ENDIF
(
NOT IS_ABSOLUTE
"
${
outfile
}
"
)
ADD_CUSTOM_COMMAND
(
string
(
REGEX MATCH
"--output=[^;]*"
outfile_opt
"
${
rc_options
}
"
)
if
(
outfile_opt
)
string
(
REPLACE
"--output="
""
outfile
"
${
outfile_opt
}
"
)
endif
(
outfile_opt
)
#
string
(REGEX REPLACE "--output=[^;]*;?" "" rc_options "${rc_options}")
#
string
(REGEX REPLACE ";$" "" rc_options "${rc_options}")
if
(
NOT IS_ABSOLUTE
"
${
outfile
}
"
)
set
(
outfile
"
${
CMAKE_CURRENT_BINARY_DIR
}
/
${
outfile
}
"
)
endif
(
NOT IS_ABSOLUTE
"
${
outfile
}
"
)
add_custom_command
(
OUTPUT
"
${
outfile
}
"
COMMAND
${
wxWidgets_wxrc_EXECUTABLE
}
${
rc_options
}
${
rc_file_list_abs
}
DEPENDS
${
rc_file_list_abs
}
${
rc_depends
}
)
# Add generated header to output file list.
LIST
(
FIND rc_options -e short_index
)
LIST
(
FIND rc_options --extra-cpp-code long_index
)
IF
(
NOT short_index EQUAL -1 OR NOT long_index EQUAL -1
)
GET_FILENAME_COMPONENT
(
outfile_ext
${
outfile
}
EXT
)
STRING
(
REPLACE
"
${
outfile_ext
}
"
".h"
outfile_header
"
${
outfile
}
"
)
LIST
(
APPEND
${
_outfiles
}
"
${
outfile_header
}
"
)
SET_SOURCE_FILES_PROPERTIES
(
list
(
FIND rc_options -e short_index
)
list
(
FIND rc_options --extra-cpp-code long_index
)
if
(
NOT short_index EQUAL -1 OR NOT long_index EQUAL -1
)
get_filename_component
(
outfile_ext
${
outfile
}
EXT
)
string
(
REPLACE
"
${
outfile_ext
}
"
".h"
outfile_header
"
${
outfile
}
"
)
list
(
APPEND
${
_outfiles
}
"
${
outfile_header
}
"
)
set_source_files_properties
(
"
${
outfile_header
}
"
PROPERTIES GENERATED TRUE
)
ENDIF
(
NOT short_index EQUAL -1 OR NOT long_index EQUAL -1
)
endif
(
NOT short_index EQUAL -1 OR NOT long_index EQUAL -1
)
# Add generated file to output file list.
LIST
(
APPEND
${
_outfiles
}
"
${
outfile
}
"
)
list
(
APPEND
${
_outfiles
}
"
${
outfile
}
"
)
SET
(
${
_outfiles
}
${${
_outfiles
}}
PARENT_SCOPE
)
ENDFUNCTION
(
WXWIDGETS_ADD_RESOURCES
)
set
(
${
_outfiles
}
${${
_outfiles
}}
PARENT_SCOPE
)
endfunction
(
wxwidgets_add_resources
)
common/draw_frame.cpp
View file @
230b60e6
...
...
@@ -119,8 +119,8 @@ EDA_DRAW_FRAME::EDA_DRAW_FRAME( KIWAY* aKiway, wxWindow* aParent,
m_showOriginAxis
=
false
;
// true to draw the grid origin
m_cursorShape
=
0
;
m_LastGridSizeId
=
0
;
m_
D
rawGrid
=
true
;
// hide/Show grid. default = show
m_
GridColor
=
DARKGRAY
;
// G
rid color
m_
d
rawGrid
=
true
;
// hide/Show grid. default = show
m_
gridColor
=
DARKGRAY
;
// Default g
rid color
m_showPageLimits
=
false
;
m_drawBgColor
=
BLACK
;
// the background color of the draw canvas:
// BLACK for Pcbnew, BLACK or WHITE for eeschema
...
...
cvpcb/class_DisplayFootprintsFrame.cpp
View file @
230b60e6
...
...
@@ -425,13 +425,13 @@ void PCB_SCREEN::ClearUndoORRedoList( UNDO_REDO_CONTAINER&, int )
bool
DISPLAY_FOOTPRINTS_FRAME
::
IsGridVisible
()
const
{
return
m_
D
rawGrid
;
return
m_
d
rawGrid
;
}
void
DISPLAY_FOOTPRINTS_FRAME
::
SetGridVisibility
(
bool
aVisible
)
{
m_
D
rawGrid
=
aVisible
;
m_
d
rawGrid
=
aVisible
;
}
...
...
eeschema/block_libedit.cpp
View file @
230b60e6
...
...
@@ -48,7 +48,7 @@ int LIB_EDIT_FRAME::BlockCommand( int key )
switch
(
key
)
{
default
:
cmd
=
key
&
0x
255
;
cmd
=
key
&
0x
FF
;
break
;
case
-
1
:
...
...
eeschema/dialogs/dialog_choose_component.cpp
View file @
230b60e6
...
...
@@ -35,7 +35,7 @@
static
wxTreeItemId
GetPrevItem
(
const
wxTreeCtrl
&
tree
,
const
wxTreeItemId
&
item
);
static
wxTreeItemId
GetNextItem
(
const
wxTreeCtrl
&
tree
,
const
wxTreeItemId
&
item
);
DIALOG_CHOOSE_COMPONENT
::
DIALOG_CHOOSE_COMPONENT
(
wxWindow
*
aParent
,
const
wxString
&
aTitle
,
DIALOG_CHOOSE_COMPONENT
::
DIALOG_CHOOSE_COMPONENT
(
SCH_BASE_FRAME
*
aParent
,
const
wxString
&
aTitle
,
COMPONENT_TREE_SEARCH_CONTAINER
*
aContainer
,
int
aDeMorganConvert
)
:
DIALOG_CHOOSE_COMPONENT_BASE
(
aParent
,
wxID_ANY
,
aTitle
),
...
...
@@ -44,6 +44,7 @@ DIALOG_CHOOSE_COMPONENT::DIALOG_CHOOSE_COMPONENT( wxWindow* aParent, const wxStr
m_external_browser_requested
(
false
),
m_received_doubleclick_in_tree
(
false
)
{
m_parent
=
aParent
;
m_search_container
->
SetTree
(
m_libraryComponentTree
);
m_searchBox
->
SetFocus
();
m_componentDetails
->
SetEditable
(
false
);
...
...
@@ -260,7 +261,8 @@ void DIALOG_CHOOSE_COMPONENT::OnHandlePreviewRepaint( wxPaintEvent& aRepaintEven
void
DIALOG_CHOOSE_COMPONENT
::
renderPreview
(
LIB_PART
*
aComponent
,
int
aUnit
)
{
wxPaintDC
dc
(
m_componentView
);
dc
.
SetBackground
(
*
wxWHITE_BRUSH
);
EDA_COLOR_T
bgcolor
=
m_parent
->
GetDrawBgColor
();
dc
.
SetBackground
(
bgcolor
==
BLACK
?
*
wxBLACK_BRUSH
:
*
wxWHITE_BRUSH
);
dc
.
Clear
();
if
(
aComponent
==
NULL
)
...
...
eeschema/dialogs/dialog_choose_component.h
View file @
230b60e6
...
...
@@ -30,20 +30,27 @@ class COMPONENT_TREE_SEARCH_CONTAINER;
class
LIB_ALIAS
;
class
LIB_PART
;
class
wxTreeItemId
;
class
SCH_BASE_FRAME
;
class
DIALOG_CHOOSE_COMPONENT
:
public
DIALOG_CHOOSE_COMPONENT_BASE
{
SCH_BASE_FRAME
*
m_parent
;
COMPONENT_TREE_SEARCH_CONTAINER
*
const
m_search_container
;
const
int
m_deMorganConvert
;
bool
m_external_browser_requested
;
bool
m_received_doubleclick_in_tree
;
public
:
/**
* Create dialog to choose component.
*
* @param aParent
P
arent window.
* @param aParent
a SCH_BASE_FRAME p
arent window.
* @param aTitle Dialog title.
* @param aSearchContainer The tree selection search container. Needs to be pre-populated
* This dialog does not take over ownership of this object.
* @param aDeMorganConvert preferred deMorgan conversion (TODO: should happen in dialog)
*/
DIALOG_CHOOSE_COMPONENT
(
wxWindow
*
aParent
,
const
wxString
&
aTitle
,
DIALOG_CHOOSE_COMPONENT
(
SCH_BASE_FRAME
*
aParent
,
const
wxString
&
aTitle
,
COMPONENT_TREE_SEARCH_CONTAINER
*
aSearchContainer
,
int
aDeMorganConvert
);
virtual
~
DIALOG_CHOOSE_COMPONENT
();
...
...
@@ -80,11 +87,6 @@ private:
bool
updateSelection
();
void
selectIfValid
(
const
wxTreeItemId
&
aTreeId
);
void
renderPreview
(
LIB_PART
*
aComponent
,
int
aUnit
);
COMPONENT_TREE_SEARCH_CONTAINER
*
const
m_search_container
;
const
int
m_deMorganConvert
;
bool
m_external_browser_requested
;
bool
m_received_doubleclick_in_tree
;
};
#endif
/* DIALOG_CHOOSE_COMPONENT_H */
eeschema/dialogs/dialog_color_config.cpp
View file @
230b60e6
...
...
@@ -3,14 +3,12 @@
*/
#include <fctsys.h>
#include <gr_basic.h>
#include <draw_frame.h>
#include <class_drawpanel.h>
#include <general.h>
#include <dialog_color_config.h>
#include <layers_id_colors_and_visibility.h>
#define ID_COLOR_SETUP 1800
...
...
@@ -86,7 +84,7 @@ static BUTTONINDEX buttonGroups[] = {
};
static
EDA_COLOR_T
currentColors
[
NB_SCH_LAYERS
];
static
EDA_COLOR_T
currentColors
[
LAYERSCH_ID_COUNT
];
IMPLEMENT_DYNAMIC_CLASS
(
DIALOG_COLOR_CONFIG
,
wxDialog
)
...
...
@@ -188,7 +186,7 @@ void DIALOG_COLOR_CONFIG::CreateControls()
iconDC
.
SelectObject
(
bitmap
);
EDA_COLOR_T
color
=
GetLayerColor
(
L
ayerNumber
(
buttons
->
m_Layer
)
);
EDA_COLOR_T
color
=
GetLayerColor
(
L
AYERSCH_ID
(
buttons
->
m_Layer
)
);
currentColors
[
buttons
->
m_Layer
]
=
color
;
iconDC
.
SetPen
(
*
wxBLACK_PEN
);
...
...
@@ -235,6 +233,9 @@ void DIALOG_COLOR_CONFIG::CreateControls()
m_SelBgColor
->
SetSelection
(
(
m_parent
->
GetDrawBgColor
()
==
BLACK
)
?
1
:
0
);
m_columnBoxSizer
->
Add
(
m_SelBgColor
,
1
,
wxGROW
|
wxRIGHT
|
wxTOP
|
wxBOTTOM
,
5
);
currentColors
[
LAYER_BACKGROUND
]
=
m_parent
->
GetDrawBgColor
();
// Provide a line to separate all of the controls added so far from the
// "OK", "Cancel", and "Apply" buttons (which will be added after that
// line).
...
...
@@ -317,24 +318,27 @@ void DIALOG_COLOR_CONFIG::SetColor( wxCommandEvent& event )
bool
DIALOG_COLOR_CONFIG
::
UpdateColorsSettings
()
{
// Update color of background
if
(
m_SelBgColor
->
GetSelection
()
==
0
)
m_parent
->
SetDrawBgColor
(
WHITE
);
else
m_parent
->
SetDrawBgColor
(
BLACK
);
EDA_COLOR_T
bgcolor
=
WHITE
;
if
(
m_SelBgColor
->
GetSelection
()
>
0
)
bgcolor
=
BLACK
;
m_parent
->
SetDrawBgColor
(
bgcolor
);
currentColors
[
LAYER_BACKGROUND
]
=
bgcolor
;
bool
warning
=
false
;
for
(
L
ayerNumber
ii
=
LAYER_WIRE
;
ii
<
NB_SCH_LAYERS
;
++
ii
)
for
(
L
AYERSCH_ID
clyr
=
LAYER_WIRE
;
clyr
<
LAYERSCH_ID_COUNT
;
++
clyr
)
{
SetLayerColor
(
currentColors
[
ii
],
ii
);
SetLayerColor
(
currentColors
[
clyr
],
clyr
);
if
(
m_parent
->
GetDrawBgColor
()
==
GetLayerColor
(
ii
)
)
if
(
bgcolor
==
GetLayerColor
(
clyr
)
&&
clyr
!=
LAYER_BACKGROUND
)
warning
=
true
;
}
m_parent
->
SetGridColor
(
GetLayerColor
(
LAYER_GRID
)
);
if
(
m_parent
->
GetDrawBgColor
()
==
GetLayerColor
(
LAYER_GRID
)
)
if
(
bgcolor
==
GetLayerColor
(
LAYER_GRID
)
)
warning
=
true
;
return
warning
;
...
...
@@ -348,7 +352,8 @@ void DIALOG_COLOR_CONFIG::OnOkClick( wxCommandEvent& event )
// Prompt the user if an item has the same color as the background
// because this item cannot be seen:
if
(
warning
)
wxMessageBox
(
_
(
"Warning:
\n
Some items have the same color as the background
\n
and they will not be seen on screen"
)
);
wxMessageBox
(
_
(
"Warning:
\n
Some items have the same color as the background
\n
"
"and they will not be seen on screen"
)
);
m_parent
->
GetCanvas
()
->
Refresh
();
...
...
eeschema/eeschema.cpp
View file @
230b60e6
...
...
@@ -70,7 +70,7 @@ static struct IFACE : public KIFACE_I
bool
OnKifaceStart
(
PGM_BASE
*
aProgram
,
int
aCtlBits
);
void
OnKifaceEnd
(
PGM_BASE
*
aProgram
);
void
OnKifaceEnd
();
wxWindow
*
CreateWindow
(
wxWindow
*
aParent
,
int
aClassId
,
KIWAY
*
aKiway
,
int
aCtlBits
=
0
)
{
...
...
@@ -154,15 +154,15 @@ PGM_BASE& Pgm()
}
static
EDA_COLOR_T
s_layerColor
[
NB_SCH_LAYERS
];
static
EDA_COLOR_T
s_layerColor
[
LAYERSCH_ID_COUNT
];
EDA_COLOR_T
GetLayerColor
(
L
ayerNumber
aLayer
)
EDA_COLOR_T
GetLayerColor
(
L
AYERSCH_ID
aLayer
)
{
wxASSERT
(
unsigned
(
aLayer
)
<
DIM
(
s_layerColor
)
);
return
s_layerColor
[
aLayer
];
}
void
SetLayerColor
(
EDA_COLOR_T
aColor
,
int
aLayer
)
void
SetLayerColor
(
EDA_COLOR_T
aColor
,
LAYERSCH_ID
aLayer
)
{
wxASSERT
(
unsigned
(
aLayer
)
<
DIM
(
s_layerColor
)
);
s_layerColor
[
aLayer
]
=
aColor
;
...
...
@@ -178,7 +178,8 @@ static PARAM_CFG_ARRAY& cfg_params()
// These are KIFACE specific, they need to be loaded once when the
// eeschema KIFACE comes in.
#define CLR(x, y, z) ca.push_back( new PARAM_CFG_SETCOLOR( true, wxT( x ), &s_layerColor[y], z ));
#define CLR(x, y, z)\
ca.push_back( new PARAM_CFG_SETCOLOR( true, wxT( x ), &s_layerColor[y], z ) );
CLR
(
"ColorWireEx"
,
LAYER_WIRE
,
GREEN
)
CLR
(
"ColorBusEx"
,
LAYER_BUS
,
BLUE
)
...
...
@@ -204,6 +205,7 @@ static PARAM_CFG_ARRAY& cfg_params()
CLR
(
"ColorErcWEx"
,
LAYER_ERC_WARN
,
GREEN
)
CLR
(
"ColorErcEEx"
,
LAYER_ERC_ERR
,
RED
)
CLR
(
"ColorGridEx"
,
LAYER_GRID
,
DARKGRAY
)
CLR
(
"ColorBgCanvasEx"
,
LAYER_BACKGROUND
,
WHITE
)
}
return
ca
;
...
...
@@ -220,23 +222,24 @@ bool IFACE::OnKifaceStart( PGM_BASE* aProgram, int aCtlBits )
// Give a default colour for all layers
// (actual color will be initialized by config)
for
(
int
ii
=
0
;
ii
<
NB_SCH_LAYERS
;
ii
++
)
for
(
LAYERSCH_ID
ii
=
LAYER_FIRST
;
ii
<
LAYERSCH_ID_COUNT
;
++
ii
)
SetLayerColor
(
DARKGRAY
,
ii
);
SetLayerColor
(
WHITE
,
LAYER_BACKGROUND
);
// Must be called before creating the main frame in order to
// display the real hotkeys in menus or tool tips
ReadHotkeyConfig
(
wxT
(
"SchematicFrame"
),
s_Eeschema_Hokeys_Descr
);
wxConfigLoadSetups
(
KifaceSettings
(),
cfg_params
()
);
wxConfigLoadSetups
(
KifaceSettings
(),
cfg_params
()
);
return
true
;
}
void
IFACE
::
OnKifaceEnd
(
PGM_BASE
*
aProgram
)
void
IFACE
::
OnKifaceEnd
()
{
wxConfigSaveSetups
(
KifaceSettings
(),
cfg_params
()
);
end_common
();
}
eeschema/eeschema_config.cpp
View file @
230b60e6
...
...
@@ -307,6 +307,7 @@ void SCH_EDIT_FRAME::OnPreferencesOptions( wxCommandEvent& event )
{
wxArrayString
units
;
GRIDS
grid_list
=
GetScreen
()
->
GetGrids
();
bool
saveProjectConfig
=
false
;
DIALOG_EESCHEMA_OPTIONS
dlg
(
this
);
...
...
@@ -357,19 +358,33 @@ void SCH_EDIT_FRAME::OnPreferencesOptions( wxCommandEvent& event )
int
sep
,
firstId
;
dlg
.
GetRefIdSeparator
(
sep
,
firstId
);
if
(
sep
!=
(
int
)
LIB_PART
::
GetSubpartIdSeparator
()
||
firstId
!=
(
int
)
LIB_PART
::
GetSubpartFirstId
()
)
{
LIB_PART
::
SetSubpartIdNotation
(
sep
,
firstId
);
SaveProjectSettings
(
true
)
;
saveProjectConfig
=
true
;
}
SetDefaultBusThickness
(
dlg
.
GetBusWidth
()
);
SetDefaultLineThickness
(
dlg
.
GetLineWidth
()
);
SetDefaultTextSize
(
dlg
.
GetTextSize
()
);
g_RepeatStep
.
x
=
dlg
.
GetRepeatHorizontal
();
g_RepeatStep
.
y
=
dlg
.
GetRepeatVertical
();
g_RepeatDeltaLabel
=
dlg
.
GetRepeatLabel
();
if
(
dlg
.
GetTextSize
()
!=
GetDefaultTextSize
()
)
{
SetDefaultTextSize
(
dlg
.
GetTextSize
()
);
saveProjectConfig
=
true
;
}
if
(
g_RepeatStep
.
x
!=
dlg
.
GetRepeatHorizontal
()
||
g_RepeatStep
.
y
!=
dlg
.
GetRepeatVertical
()
||
g_RepeatDeltaLabel
!=
dlg
.
GetRepeatLabel
()
)
{
g_RepeatStep
.
x
=
dlg
.
GetRepeatHorizontal
();
g_RepeatStep
.
y
=
dlg
.
GetRepeatVertical
();
g_RepeatDeltaLabel
=
dlg
.
GetRepeatLabel
();
saveProjectConfig
=
true
;
}
SetAutoSaveInterval
(
dlg
.
GetAutoSaveInterval
()
*
60
);
SetGridVisibility
(
dlg
.
GetShowGrid
()
);
m_showAllPins
=
dlg
.
GetShowHiddenPins
();
...
...
@@ -414,6 +429,9 @@ void SCH_EDIT_FRAME::OnPreferencesOptions( wxCommandEvent& event )
SaveSettings
(
config
()
);
// save values shared by eeschema applications.
if
(
saveProjectConfig
)
SaveProjectSettings
(
true
);
m_canvas
->
Refresh
(
true
);
}
...
...
@@ -546,7 +564,6 @@ static const wxChar SimulatorCommandEntry[] = wxT( "SimCmdLine" );
// Library editor wxConfig entry names.
static
const
wxChar
lastLibExportPathEntry
[]
=
wxT
(
"LastLibraryExportPath"
);
static
const
wxChar
lastLibImportPathEntry
[]
=
wxT
(
"LastLibraryImportPath"
);
static
const
wxChar
libeditdrawBgColorEntry
[]
=
wxT
(
"LibeditBgColor"
);
static
const
wxChar
defaultPinNumSizeEntry
[]
=
wxT
(
"LibeditPinNumSize"
);
static
const
wxChar
defaultPinNameSizeEntry
[]
=
wxT
(
"LibeditPinNameSize"
);
static
const
wxChar
DefaultPinLengthEntry
[]
=
wxT
(
"DefaultPinLength"
);
...
...
@@ -561,9 +578,6 @@ PARAM_CFG_ARRAY& SCH_EDIT_FRAME::GetConfigurationSettings()
&
m_showPageLimits
,
true
)
);
m_configSettings
.
push_back
(
new
PARAM_CFG_INT
(
true
,
wxT
(
"Units"
),
(
int
*
)
&
g_UserUnit
,
MILLIMETRES
)
);
m_configSettings
.
push_back
(
new
PARAM_CFG_SETCOLOR
(
true
,
wxT
(
"SchEditorBgColor"
),
&
m_drawBgColor
,
WHITE
)
);
m_configSettings
.
push_back
(
new
PARAM_CFG_BOOL
(
true
,
wxT
(
"PrintMonochrome"
),
&
m_printMonochrome
,
true
)
);
...
...
@@ -582,7 +596,8 @@ void SCH_EDIT_FRAME::LoadSettings( wxConfigBase* aCfg )
wxConfigLoadSetups
(
aCfg
,
GetConfigurationSettings
()
);
m_GridColor
=
GetLayerColor
(
LAYER_GRID
);
SetGridColor
(
GetLayerColor
(
LAYER_GRID
)
);
SetDrawBgColor
(
GetLayerColor
(
LAYER_BACKGROUND
)
);
SetDefaultBusThickness
(
aCfg
->
Read
(
DefaultBusWidthEntry
,
DEFAULTBUSTHICKNESS
)
);
SetDefaultLineThickness
(
aCfg
->
Read
(
DefaultDrawLineWidthEntry
,
DEFAULTDRAWLINETHICKNESS
)
);
...
...
@@ -744,8 +759,8 @@ void LIB_EDIT_FRAME::LoadSettings( wxConfigBase* aCfg )
wxConfigPathChanger
cpc
(
aCfg
,
m_configPath
);
EDA_COLOR_T
itmp
=
ColorByName
(
aCfg
->
Read
(
libeditdrawBgColorEntry
,
wxT
(
"WHITE"
)
)
);
SetDrawBgColor
(
itmp
);
SetGridColor
(
GetLayerColor
(
LAYER_GRID
)
);
SetDrawBgColor
(
GetLayerColor
(
LAYER_BACKGROUND
)
);
wxString
pro_dir
=
Prj
().
GetProjectFullName
();
...
...
@@ -765,7 +780,6 @@ void LIB_EDIT_FRAME::SaveSettings( wxConfigBase* aCfg )
wxConfigPathChanger
cpc
(
aCfg
,
m_configPath
);
aCfg
->
Write
(
libeditdrawBgColorEntry
,
ColorGetName
(
GetDrawBgColor
()
)
);
aCfg
->
Write
(
lastLibExportPathEntry
,
m_lastLibExportPath
);
aCfg
->
Write
(
lastLibImportPathEntry
,
m_lastLibImportPath
);
aCfg
->
Write
(
DefaultPinLengthEntry
,
(
long
)
GetDefaultPinLength
()
);
...
...
eeschema/general.h
View file @
230b60e6
...
...
@@ -36,8 +36,12 @@ class SCH_SHEET;
#define GR_DEFAULT_DRAWMODE GR_COPY
// this enum is for color management
// Using here "LAYER" in name is due to historical reasons.
// Eeschema does not actually use layers. It just uses "LAYER_XX" as identifier
// mainly for item color
typedef
enum
{
LAYER_WIRE
,
LAYER_FIRST
,
LAYER_WIRE
=
LAYER_FIRST
,
LAYER_BUS
,
LAYER_JUNCTION
,
LAYER_LOCLABEL
,
...
...
@@ -61,12 +65,13 @@ typedef enum {
LAYER_ERC_ERR
,
LAYER_DEVICE_BACKGROUND
,
LAYER_GRID
,
NB_SCH_LAYERS
}
LayerNumber
;
LAYER_BACKGROUND
,
LAYERSCH_ID_COUNT
}
LAYERSCH_ID
;
inline
L
ayerNumber
operator
++
(
LayerNumber
&
a
)
inline
L
AYERSCH_ID
operator
++
(
LAYERSCH_ID
&
a
)
{
a
=
L
ayerNumber
(
int
(
a
)
+
1
);
a
=
L
AYERSCH_ID
(
int
(
a
)
+
1
);
return
a
;
}
...
...
@@ -104,7 +109,8 @@ void SetDefaultTextSize( int aSize );
int
GetDefaultBusThickness
();
void
SetDefaultBusThickness
(
int
aThickness
);
EDA_COLOR_T
GetLayerColor
(
LayerNumber
aLayer
);
EDA_COLOR_T
GetLayerColor
(
LAYERSCH_ID
aLayer
);
void
SetLayerColor
(
EDA_COLOR_T
aColor
,
LAYERSCH_ID
aLayer
);
// Color to draw selected items
EDA_COLOR_T
GetItemSelectedColor
();
...
...
@@ -112,6 +118,4 @@ EDA_COLOR_T GetItemSelectedColor();
// Color to draw items flagged invisible, in libedit (they are invisible in Eeschema
EDA_COLOR_T
GetInvisibleItemColor
();
void
SetLayerColor
(
EDA_COLOR_T
aColor
,
int
aLayer
);
#endif // _GENERAL_H_
eeschema/sch_base_frame.cpp
View file @
230b60e6
...
...
@@ -35,7 +35,6 @@ SCH_BASE_FRAME::SCH_BASE_FRAME( KIWAY* aKiway, wxWindow* aParent,
EDA_DRAW_FRAME
(
aKiway
,
aParent
,
aWindowType
,
aTitle
,
aPosition
,
aSize
,
aStyle
,
aFrameName
)
{
SetDrawBgColor
(
WHITE
);
// the background color of the draw canvas, BLACK or WHITE
}
...
...
@@ -47,6 +46,18 @@ void SCH_BASE_FRAME::OnOpenLibraryViewer( wxCommandEvent& event )
viewlibFrame
->
Raise
();
}
// Virtual from EDA_DRAW_FRAME
EDA_COLOR_T
SCH_BASE_FRAME
::
GetDrawBgColor
()
const
{
return
GetLayerColor
(
LAYER_BACKGROUND
);
}
void
SCH_BASE_FRAME
::
SetDrawBgColor
(
EDA_COLOR_T
aColor
)
{
m_drawBgColor
=
aColor
;
SetLayerColor
(
aColor
,
LAYER_BACKGROUND
);
}
SCH_SCREEN
*
SCH_BASE_FRAME
::
GetScreen
()
const
{
...
...
eeschema/sch_screen.cpp
View file @
230b60e6
...
...
@@ -504,7 +504,7 @@ bool SCH_SCREEN::Save( FILE* aFile ) const
}
// This section is not used, but written for file compatibility
if
(
fprintf
(
aFile
,
"EELAYER %d %d
\n
"
,
NB_SCH_LAYERS
,
0
)
<
0
if
(
fprintf
(
aFile
,
"EELAYER %d %d
\n
"
,
LAYERSCH_ID_COUNT
,
0
)
<
0
||
fprintf
(
aFile
,
"EELAYER END
\n
"
)
<
0
)
return
false
;
...
...
eeschema/viewlib_frame.cpp
View file @
230b60e6
...
...
@@ -507,13 +507,13 @@ void LIB_VIEW_FRAME::LoadSettings( wxConfigBase* aCfg )
{
EDA_DRAW_FRAME
::
LoadSettings
(
aCfg
);
wxConfigPathChanger
cpc
(
aCfg
,
m_configPath
);
SetGridColor
(
GetLayerColor
(
LAYER_GRID
)
);
SetDrawBgColor
(
GetLayerColor
(
LAYER_BACKGROUND
)
);
EDA_COLOR_T
itmp
=
ColorByName
(
aCfg
->
Read
(
LIBVIEW_BGCOLOR
,
wxT
(
"WHITE"
)
)
);
SetDrawBgColor
(
itmp
);
wxConfigPathChanger
cpc
(
aCfg
,
m_configPath
);
aCfg
->
Read
(
LIBLIST_WIDTH_KEY
,
&
m_libListWidth
,
1
0
0
);
aCfg
->
Read
(
CMPLIST_WIDTH_KEY
,
&
m_cmpListWidth
,
1
0
0
);
aCfg
->
Read
(
LIBLIST_WIDTH_KEY
,
&
m_libListWidth
,
1
5
0
);
aCfg
->
Read
(
CMPLIST_WIDTH_KEY
,
&
m_cmpListWidth
,
1
5
0
);
// Set parameters to a reasonable value.
if
(
m_libListWidth
>
m_FrameSize
.
x
/
2
)
...
...
@@ -538,7 +538,6 @@ void LIB_VIEW_FRAME::SaveSettings( wxConfigBase* aCfg )
m_cmpListWidth
=
m_cmpList
->
GetSize
().
x
;
aCfg
->
Write
(
CMPLIST_WIDTH_KEY
,
m_cmpListWidth
);
aCfg
->
Write
(
LIBVIEW_BGCOLOR
,
ColorGetName
(
GetDrawBgColor
()
)
);
}
...
...
include/draw_frame.h
View file @
230b60e6
...
...
@@ -60,9 +60,9 @@ protected:
int
m_LastGridSizeId
;
// the command id offset (>= 0) of the last selected grid
// 0 is for the grid corresponding to
// a wxCommand ID = ID_POPUP_GRID_LEVEL_1000.
bool
m_
D
rawGrid
;
// hide/Show grid
bool
m_
d
rawGrid
;
// hide/Show grid
bool
m_showPageLimits
;
///< true to display the page limits
EDA_COLOR_T
m_
G
ridColor
;
// Grid color
EDA_COLOR_T
m_
g
ridColor
;
// Grid color
EDA_COLOR_T
m_drawBgColor
;
///< the background color of the draw canvas
///< BLACK for Pcbnew, BLACK or WHITE for eeschema
...
...
@@ -258,8 +258,16 @@ public:
virtual
void
SetTitleBlock
(
const
TITLE_BLOCK
&
aTitleBlock
)
=
0
;
// the background color of the draw canvas:
EDA_COLOR_T
GetDrawBgColor
()
const
{
return
m_drawBgColor
;
}
void
SetDrawBgColor
(
EDA_COLOR_T
aColor
)
{
m_drawBgColor
=
aColor
;
}
// Virtual because some frames can have a specific way to get/set the bg color
/**
* @return the EDA_COLOR_T for the canvas background
*/
virtual
EDA_COLOR_T
GetDrawBgColor
()
const
{
return
m_drawBgColor
;
}
/**
* @param aColor: the EDA_COLOR_T for the canvas background
*/
virtual
void
SetDrawBgColor
(
EDA_COLOR_T
aColor
)
{
m_drawBgColor
=
aColor
;
}
int
GetCursorShape
()
const
{
return
m_cursorShape
;
}
...
...
@@ -355,7 +363,7 @@ public:
*/
virtual
bool
IsGridVisible
()
const
{
return
m_
D
rawGrid
;
return
m_
d
rawGrid
;
}
/**
...
...
@@ -365,7 +373,7 @@ public:
*/
virtual
void
SetGridVisibility
(
bool
aVisible
)
{
m_
D
rawGrid
=
aVisible
;
m_
d
rawGrid
=
aVisible
;
}
/**
...
...
@@ -374,7 +382,7 @@ public:
*/
virtual
EDA_COLOR_T
GetGridColor
()
const
{
return
m_
G
ridColor
;
return
m_
g
ridColor
;
}
/**
...
...
@@ -383,7 +391,7 @@ public:
*/
virtual
void
SetGridColor
(
EDA_COLOR_T
aColor
)
{
m_
G
ridColor
=
aColor
;
m_
g
ridColor
=
aColor
;
}
/**
...
...
include/sch_base_frame.h
View file @
230b60e6
...
...
@@ -68,6 +68,11 @@ public:
}
void
SetGridOrigin
(
const
wxPoint
&
aPoint
)
{}
// overload EDA_DRAW_FRAME
// Virtual from EDA_DRAW_FRAME
// the background color of the draw canvas:
EDA_COLOR_T
GetDrawBgColor
()
const
;
void
SetDrawBgColor
(
EDA_COLOR_T
aColor
);
const
TITLE_BLOCK
&
GetTitleBlock
()
const
;
// overload EDA_DRAW_FRAME
void
SetTitleBlock
(
const
TITLE_BLOCK
&
aTitleBlock
);
// overload EDA_DRAW_FRAME
...
...
include/sch_item_struct.h
View file @
230b60e6
...
...
@@ -35,7 +35,7 @@
#include <general.h>
#include <boost/ptr_container/ptr_vector.hpp>
class
SCH_ITEM
;
class
SCH_SHEET_PATH
;
class
LINE_READER
;
...
...
@@ -115,7 +115,7 @@ public:
class
SCH_ITEM
:
public
EDA_ITEM
{
protected
:
L
ayerNumber
m_Layer
;
L
AYERSCH_ID
m_Layer
;
EDA_ITEMS
m_connections
;
///< List of items connected to this item.
public
:
...
...
@@ -145,14 +145,14 @@ public:
* Function GetLayer
* returns the layer this item is on.
*/
L
ayerNumber
GetLayer
()
const
{
return
m_Layer
;
}
L
AYERSCH_ID
GetLayer
()
const
{
return
m_Layer
;
}
/**
* Function SetLayer
* sets the layer this item is on.
* @param aLayer The layer number.
*/
void
SetLayer
(
L
ayerNumber
aLayer
)
{
m_Layer
=
aLayer
;
}
void
SetLayer
(
L
AYERSCH_ID
aLayer
)
{
m_Layer
=
aLayer
;
}
/**
* Function GetPenSize virtual pure
...
...
@@ -293,7 +293,7 @@ public:
bool
IsConnected
(
const
wxPoint
&
aPoint
)
const
;
/** @copydoc EDA_ITEM::HitTest(const wxPoint&) */
virtual
bool
HitTest
(
const
wxPoint
&
aPosition
)
const
virtual
bool
HitTest
(
const
wxPoint
&
aPosition
)
const
{
return
HitTest
(
aPosition
,
0
);
}
...
...
include/wxPcbStruct.h
View file @
230b60e6
...
...
@@ -514,6 +514,19 @@ public:
*/
void
ReCreateLayerBox
(
bool
aForceResizeToolbar
=
true
);
/**
* Function SetCurrentNetClass
* Must be called after a netclass selection (or after a netclass parameter change
* calls BOARD_DESIGN_SETTINGS::SetCurrentNetClass() and update trace width and via size
* combo boxes on main toolbar
* Initialize vias and tracks values displayed in comb boxes of the auxiliary toolbar
* and some others parameters (netclass name ....)
* @param aNetClassName = the new netclass name
* @return true if lists of tracks and vias sizes are modified
*/
bool
SetCurrentNetClass
(
const
wxString
&
aNetClassName
);
/**
* Function OnModify
* must be called after a board change to set the modified flag.
...
...
pcbnew/CMakeLists.txt
View file @
230b60e6
...
...
@@ -166,6 +166,7 @@ set( PCBNEW_CLASS_SRCS
modview_frame.cpp
pcbframe.cpp
pcb_base_edit_frame.cpp
append_board_to_current.cpp
attribut.cpp
board_items_to_polygon_shape_transform.cpp
board_undo_redo.cpp
...
...
pcbnew/append_board_to_current.cpp
0 → 100644
View file @
230b60e6
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2004-2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
* Copyright (C) 2014 KiCad Developers, see change_log.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
/**
* @file append_board_to_current.cpp
* @brief append a board to the currently edited board.
*/
#include <fctsys.h>
#include <confirm.h>
#include <wxPcbStruct.h>
#include <pcbnew.h>
#include <io_mgr.h>
#include <class_module.h>
#include <class_zone.h>
#include <class_board.h>
#include <pcb_draw_panel_gal.h>
// Defined in files.cpp:
extern
IO_MGR
::
PCB_FILE_T
plugin_type
(
const
wxString
&
aFileName
,
int
aCtl
);
bool
PCB_EDIT_FRAME
::
AppendBoardFile
(
const
wxString
&
aFullFileName
,
int
aCtl
)
{
IO_MGR
::
PCB_FILE_T
pluginType
=
plugin_type
(
aFullFileName
,
aCtl
);
PLUGIN
::
RELEASER
pi
(
IO_MGR
::
PluginFind
(
pluginType
)
);
// keep trace of existing items, in order to know what are the new items
// (for undo command for instance)
// Tracks are inserted, not append, so mark existing tracks to know what are
// the new tracks
for
(
TRACK
*
track
=
GetBoard
()
->
m_Track
;
track
;
track
=
track
->
Next
()
)
track
->
SetFlags
(
FLAG0
);
// Other items are append to the item list, so keep trace to the
// last existing item is enough
MODULE
*
module
=
GetBoard
()
->
m_Modules
.
GetLast
();
BOARD_ITEM
*
drawing
=
GetBoard
()
->
m_Drawings
.
GetLast
();
int
zonescount
=
GetBoard
()
->
GetAreaCount
();
// Keep also the count of copper layers, because we can happen boards
// with different copper layers counts,
// and the enabled layers
int
initialCopperLayerCount
=
GetBoard
()
->
GetCopperLayerCount
();
LSET
initialEnabledLayers
=
GetBoard
()
->
GetEnabledLayers
();
try
{
PROPERTIES
props
;
char
xbuf
[
30
];
char
ybuf
[
30
];
// EAGLE_PLUGIN can use this info to center the BOARD, but it does not yet.
sprintf
(
xbuf
,
"%d"
,
GetPageSizeIU
().
x
);
sprintf
(
ybuf
,
"%d"
,
GetPageSizeIU
().
y
);
props
[
"page_width"
]
=
xbuf
;
props
[
"page_height"
]
=
ybuf
;
GetDesignSettings
().
m_NetClasses
.
Clear
();
pi
->
Load
(
aFullFileName
,
GetBoard
(),
&
props
);
}
catch
(
const
IO_ERROR
&
ioe
)
{
for
(
TRACK
*
track
=
GetBoard
()
->
m_Track
;
track
;
track
=
track
->
Next
()
)
track
->
ClearFlags
(
FLAG0
);
wxString
msg
=
wxString
::
Format
(
_
(
"Error loading board.
\n
%s"
),
GetChars
(
ioe
.
errorText
)
);
DisplayError
(
this
,
msg
);
return
false
;
}
// Now prepare a block move command to place the new items, and
// prepare the undo command.
BLOCK_SELECTOR
&
blockmove
=
GetScreen
()
->
m_BlockLocate
;
HandleBlockBegin
(
NULL
,
BLOCK_PRESELECT_MOVE
,
wxPoint
(
0
,
0
)
);
PICKED_ITEMS_LIST
&
blockitemsList
=
blockmove
.
GetItems
();
PICKED_ITEMS_LIST
undoListPicker
;
ITEM_PICKER
picker
(
NULL
,
UR_NEW
);
EDA_RECT
bbox
;
// the new items bounding box, for block move
bool
bboxInit
=
true
;
// true until the bounding box is initialized
for
(
TRACK
*
track
=
GetBoard
()
->
m_Track
;
track
;
track
=
track
->
Next
()
)
{
if
(
track
->
GetFlags
()
&
FLAG0
)
{
track
->
ClearFlags
(
FLAG0
);
continue
;
}
track
->
SetFlags
(
IS_MOVED
);
picker
.
SetItem
(
track
);
undoListPicker
.
PushItem
(
picker
);
blockitemsList
.
PushItem
(
picker
);
if
(
bboxInit
)
bbox
=
track
->
GetBoundingBox
();
else
bboxInit
=
false
;
bbox
.
Merge
(
track
->
GetBoundingBox
()
);
}
if
(
module
)
module
=
module
->
Next
();
else
module
=
GetBoard
()
->
m_Modules
;
for
(
;
module
;
module
=
module
->
Next
()
)
{
module
->
SetFlags
(
IS_MOVED
);
picker
.
SetItem
(
module
);
undoListPicker
.
PushItem
(
picker
);
blockitemsList
.
PushItem
(
picker
);
if
(
bboxInit
)
bbox
=
module
->
GetBoundingBox
();
else
bbox
.
Merge
(
module
->
GetBoundingBox
()
);
bboxInit
=
false
;
}
if
(
drawing
)
drawing
=
drawing
->
Next
();
else
drawing
=
GetBoard
()
->
m_Drawings
;
for
(
;
drawing
;
drawing
=
drawing
->
Next
()
)
{
drawing
->
SetFlags
(
IS_MOVED
);
picker
.
SetItem
(
drawing
);
undoListPicker
.
PushItem
(
picker
);
blockitemsList
.
PushItem
(
picker
);
if
(
bboxInit
)
bbox
=
drawing
->
GetBoundingBox
();
else
bbox
.
Merge
(
drawing
->
GetBoundingBox
()
);
bboxInit
=
false
;
}
for
(
ZONE_CONTAINER
*
zone
=
GetBoard
()
->
GetArea
(
zonescount
);
zone
;
zone
=
GetBoard
()
->
GetArea
(
zonescount
)
)
{
zone
->
SetFlags
(
IS_MOVED
);
picker
.
SetItem
(
zone
);
undoListPicker
.
PushItem
(
picker
);
blockitemsList
.
PushItem
(
picker
);
zonescount
++
;
if
(
bboxInit
)
bbox
=
zone
->
GetBoundingBox
();
else
bbox
.
Merge
(
zone
->
GetBoundingBox
()
);
bboxInit
=
false
;
}
SaveCopyInUndoList
(
undoListPicker
,
UR_NEW
);
// we should not ask PLUGINs to do these items:
int
copperLayerCount
=
GetBoard
()
->
GetCopperLayerCount
();
if
(
copperLayerCount
>
initialCopperLayerCount
)
GetBoard
()
->
SetCopperLayerCount
(
copperLayerCount
);
// Enable all used layers, and make them visible:
LSET
enabledLayers
=
GetBoard
()
->
GetEnabledLayers
();
enabledLayers
|=
initialEnabledLayers
;
GetBoard
()
->
SetEnabledLayers
(
enabledLayers
);
GetBoard
()
->
SetVisibleLayers
(
enabledLayers
);
ReCreateLayerBox
();
ReFillLayerWidget
();
if
(
IsGalCanvasActive
()
)
static_cast
<
PCB_DRAW_PANEL_GAL
*>
(
GetGalCanvas
()
)
->
SyncLayersVisibility
(
GetBoard
()
);
GetBoard
()
->
BuildListOfNets
();
GetBoard
()
->
SynchronizeNetsAndNetClasses
();
SetStatusText
(
wxEmptyString
);
BestZoom
();
// Finish block move command:
wxPoint
cpos
=
GetNearestGridPosition
(
bbox
.
Centre
()
);
blockmove
.
SetOrigin
(
bbox
.
GetOrigin
()
);
blockmove
.
SetSize
(
bbox
.
GetSize
()
);
blockmove
.
SetLastCursorPosition
(
cpos
);
HandleBlockEnd
(
NULL
);
return
true
;
}
pcbnew/block.cpp
View file @
230b60e6
...
...
@@ -185,7 +185,7 @@ int PCB_EDIT_FRAME::BlockCommand( int aKey )
switch
(
aKey
)
{
default
:
cmd
=
aKey
&
0x
255
;
cmd
=
aKey
&
0x
FF
;
break
;
case
0
:
...
...
@@ -219,6 +219,8 @@ int PCB_EDIT_FRAME::BlockCommand( int aKey )
void
PCB_EDIT_FRAME
::
HandleBlockPlace
(
wxDC
*
DC
)
{
GetBoard
()
->
m_Status_Pcb
&=
~
DO_NOT_SHOW_GENERAL_RASTNEST
;
if
(
!
m_canvas
->
IsMouseCaptured
()
)
{
DisplayError
(
this
,
wxT
(
"Error in HandleBlockPLace : m_mouseCaptureCallback = NULL"
)
);
...
...
@@ -274,7 +276,6 @@ bool PCB_EDIT_FRAME::HandleBlockEnd( wxDC* DC )
{
bool
nextcmd
=
false
;
// Will be set to true if a block place is needed
bool
cancelCmd
=
false
;
// If coming here after cancel block, clean up and exit
if
(
GetScreen
()
->
m_BlockLocate
.
GetState
()
==
STATE_NO_BLOCK
)
{
...
...
@@ -369,6 +370,7 @@ bool PCB_EDIT_FRAME::HandleBlockEnd( wxDC* DC )
if
(
!
nextcmd
)
{
GetBoard
()
->
m_Status_Pcb
|=
DO_NOT_SHOW_GENERAL_RASTNEST
;
GetScreen
()
->
ClearBlockCommand
();
m_canvas
->
EndMouseCapture
(
GetToolId
(),
m_canvas
->
GetCurrentCursor
(),
wxEmptyString
,
false
);
...
...
@@ -562,6 +564,10 @@ static void drawMovingBlock( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& a
{
BASE_SCREEN
*
screen
=
aPanel
->
GetScreen
();
// do not show local module rastnest in block move, it is not usable.
bool
tmp
=
g_Show_Module_Ratsnest
;
g_Show_Module_Ratsnest
=
false
;
if
(
aErase
)
{
if
(
screen
->
m_BlockLocate
.
GetMoveVector
().
x
||
screen
->
m_BlockLocate
.
GetMoveVector
().
y
)
...
...
@@ -589,6 +595,8 @@ static void drawMovingBlock( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& a
if
(
blockDrawItems
)
drawPickedItems
(
aPanel
,
aDC
,
screen
->
m_BlockLocate
.
GetMoveVector
()
);
}
g_Show_Module_Ratsnest
=
tmp
;
}
...
...
@@ -795,6 +803,7 @@ void PCB_EDIT_FRAME::Block_Move()
BOARD_ITEM
*
item
=
(
BOARD_ITEM
*
)
itemsList
->
GetPickedItem
(
ii
);
itemsList
->
SetPickedItemStatus
(
UR_MOVED
,
ii
);
item
->
Move
(
MoveVector
);
item
->
ClearFlags
(
IS_MOVED
);
switch
(
item
->
Type
()
)
{
...
...
pcbnew/block_module_editor.cpp
View file @
230b60e6
...
...
@@ -80,7 +80,7 @@ int FOOTPRINT_EDIT_FRAME::BlockCommand( int key )
switch
(
key
)
{
default
:
cmd
=
key
&
0x
255
;
cmd
=
key
&
0x
FF
;
break
;
case
-
1
:
...
...
@@ -400,6 +400,11 @@ void CopyMarkedItems( MODULE* module, wxPoint offset )
if
(
module
==
NULL
)
return
;
// Reference and value cannot be copied, they are unique.
// Ensure they are not selected
module
->
Reference
().
ClearFlags
();
module
->
Value
().
ClearFlags
();
for
(
D_PAD
*
pad
=
module
->
Pads
();
pad
;
pad
=
pad
->
Next
()
)
{
if
(
!
pad
->
IsSelected
()
)
...
...
@@ -440,6 +445,12 @@ void MoveMarkedItems( MODULE* module, wxPoint offset )
if
(
module
==
NULL
)
return
;
if
(
module
->
Reference
().
IsSelected
()
)
module
->
Reference
().
MoveTransformWithModule
(
offset
);
if
(
module
->
Value
().
IsSelected
()
)
module
->
Value
().
MoveTransformWithModule
(
offset
);
D_PAD
*
pad
=
module
->
Pads
();
for
(
;
pad
!=
NULL
;
pad
=
pad
->
Next
()
)
...
...
@@ -461,7 +472,7 @@ void MoveMarkedItems( MODULE* module, wxPoint offset )
switch
(
item
->
Type
()
)
{
case
PCB_MODULE_TEXT_T
:
static_cast
<
TEXTE_MODULE
*>
(
item
)
->
Move
(
offset
);
static_cast
<
TEXTE_MODULE
*>
(
item
)
->
Move
TransformWithModule
(
offset
);
break
;
case
PCB_MODULE_EDGE_T
:
...
...
@@ -477,9 +488,9 @@ void MoveMarkedItems( MODULE* module, wxPoint offset )
default
:
;
}
item
->
ClearFlags
();
}
ClearMarkItems
(
module
);
}
...
...
@@ -518,6 +529,9 @@ void DeleteMarkedItems( MODULE* module )
item
->
DeleteStructure
();
}
// Ref and value can be flagged, but cannot be deleted
ClearMarkItems
(
module
);
}
...
...
@@ -534,6 +548,12 @@ void MirrorMarkedItems( MODULE* module, wxPoint offset, bool force_all )
if
(
module
==
NULL
)
return
;
if
(
module
->
Reference
().
IsSelected
()
||
force_all
)
module
->
Reference
().
MirrorTransformWithModule
(
offset
.
x
);
if
(
module
->
Value
().
IsSelected
()
||
force_all
)
module
->
Value
().
MirrorTransformWithModule
(
offset
.
x
);
for
(
D_PAD
*
pad
=
module
->
Pads
();
pad
;
pad
=
pad
->
Next
()
)
{
// Skip pads not selected, i.e. not inside the block to mirror:
...
...
@@ -584,15 +604,15 @@ void MirrorMarkedItems( MODULE* module, wxPoint offset, bool force_all )
break
;
case
PCB_MODULE_TEXT_T
:
static_cast
<
TEXTE_MODULE
*>
(
item
)
->
MirrorWithModule
(
offset
.
x
);
static_cast
<
TEXTE_MODULE
*>
(
item
)
->
Mirror
Transform
WithModule
(
offset
.
x
);
break
;
default
:
break
;
}
item
->
ClearFlags
();
}
ClearMarkItems
(
module
);
}
...
...
@@ -607,6 +627,12 @@ void RotateMarkedItems( MODULE* module, wxPoint offset, bool force_all )
if
(
module
==
NULL
)
return
;
if
(
module
->
Reference
().
IsSelected
()
||
force_all
)
module
->
Reference
().
RotateTransformWithModule
(
offset
,
900
);
if
(
module
->
Value
().
IsSelected
()
||
force_all
)
module
->
Value
().
RotateTransformWithModule
(
offset
,
900
);
for
(
D_PAD
*
pad
=
module
->
Pads
();
pad
;
pad
=
pad
->
Next
()
)
{
if
(
!
pad
->
IsSelected
()
&&
!
force_all
)
...
...
@@ -622,7 +648,7 @@ void RotateMarkedItems( MODULE* module, wxPoint offset, bool force_all )
for
(
EDA_ITEM
*
item
=
module
->
GraphicalItems
();
item
;
item
=
item
->
Next
()
)
{
if
(
!
item
->
IsSelected
()
&&
!
force_all
)
if
(
!
item
->
IsSelected
()
&&
!
force_all
)
continue
;
switch
(
item
->
Type
()
)
...
...
@@ -644,26 +670,27 @@ void RotateMarkedItems( MODULE* module, wxPoint offset, bool force_all )
break
;
case
PCB_MODULE_TEXT_T
:
static_cast
<
TEXTE_MODULE
*>
(
item
)
->
Rotate
WithModule
(
wxPoint
(
0
,
0
)
,
900
);
static_cast
<
TEXTE_MODULE
*>
(
item
)
->
Rotate
TransformWithModule
(
offset
,
900
);
break
;
default
:
break
;
}
item
->
ClearFlags
();
}
ClearMarkItems
(
module
);
}
void
ClearMarkItems
(
MODULE
*
module
)
{
EDA_ITEM
*
item
;
if
(
module
==
NULL
)
return
;
item
=
module
->
GraphicalItems
();
module
->
Reference
().
ClearFlags
();
module
->
Value
().
ClearFlags
();
EDA_ITEM
*
item
=
module
->
GraphicalItems
();
for
(
;
item
!=
NULL
;
item
=
item
->
Next
()
)
{
...
...
@@ -692,6 +719,24 @@ int MarkItemsInBloc( MODULE* module, EDA_RECT& Rect )
if
(
module
==
NULL
)
return
0
;
ClearMarkItems
(
module
);
// Just in case ...
pos
=
module
->
Reference
().
GetTextPosition
();
if
(
Rect
.
Contains
(
pos
)
)
{
module
->
Reference
().
SetFlags
(
SELECTED
);
ItemsCount
++
;
}
pos
=
module
->
Value
().
GetTextPosition
();
if
(
Rect
.
Contains
(
pos
)
)
{
module
->
Value
().
SetFlags
(
SELECTED
);
ItemsCount
++
;
}
pad
=
module
->
Pads
();
for
(
;
pad
!=
NULL
;
pad
=
pad
->
Next
()
)
...
...
pcbnew/class_edge_mod.cpp
View file @
230b60e6
...
...
@@ -130,7 +130,6 @@ void EDGE_MODULE::Draw( EDA_DRAW_PANEL* panel, wxDC* DC, GR_DRAWMODE draw_mode,
const
wxPoint
&
offset
)
{
int
ux0
,
uy0
,
dx
,
dy
,
radius
,
StAngle
,
EndAngle
;
int
type_trace
;
int
typeaff
;
LAYER_ID
curr_layer
=
(
(
PCB_SCREEN
*
)
panel
->
GetScreen
()
)
->
m_Active_Layer
;
...
...
@@ -154,8 +153,6 @@ void EDGE_MODULE::Draw( EDA_DRAW_PANEL* panel, wxDC* DC, GR_DRAWMODE draw_mode,
PCB_BASE_FRAME
*
frame
=
(
PCB_BASE_FRAME
*
)
panel
->
GetParent
();
type_trace
=
m_Shape
;
ux0
=
m_Start
.
x
-
offset
.
x
;
uy0
=
m_Start
.
y
-
offset
.
y
;
...
...
@@ -176,7 +173,7 @@ void EDGE_MODULE::Draw( EDA_DRAW_PANEL* panel, wxDC* DC, GR_DRAWMODE draw_mode,
if
(
DC
->
LogicalToDeviceXRel
(
m_Width
)
<=
MIN_DRAW_WIDTH
)
typeaff
=
LINE
;
switch
(
type_trac
e
)
switch
(
m_Shap
e
)
{
case
S_SEGMENT
:
if
(
typeaff
==
LINE
)
...
...
@@ -245,10 +242,9 @@ void EDGE_MODULE::Draw( EDA_DRAW_PANEL* panel, wxDC* DC, GR_DRAWMODE draw_mode,
break
;
case
S_POLYGON
:
{
// We must compute true coordinates from m_PolyPoints
// which are relative to module position, orientation 0
std
::
vector
<
wxPoint
>
points
=
m_PolyPoints
;
for
(
unsigned
ii
=
0
;
ii
<
points
.
size
();
ii
++
)
...
...
@@ -260,6 +256,10 @@ void EDGE_MODULE::Draw( EDA_DRAW_PANEL* panel, wxDC* DC, GR_DRAWMODE draw_mode,
}
GRPoly
(
panel
->
GetClipBox
(),
DC
,
points
.
size
(),
&
points
[
0
],
true
,
m_Width
,
color
,
color
);
}
break
;
default
:
break
;
}
}
...
...
@@ -312,3 +312,41 @@ EDA_ITEM* EDGE_MODULE::Clone() const
return
new
EDGE_MODULE
(
*
this
);
}
void
EDGE_MODULE
::
Flip
(
const
wxPoint
&
aCentre
)
{
wxPoint
pt
;
switch
(
GetShape
()
)
{
case
S_ARC
:
SetAngle
(
-
GetAngle
()
);
//Fall through
default
:
case
S_SEGMENT
:
pt
=
GetStart
();
pt
.
y
-=
aCentre
.
y
;
pt
.
y
=
-
pt
.
y
;
pt
.
y
+=
aCentre
.
y
;
SetStart
(
pt
);
pt
=
GetEnd
();
pt
.
y
-=
aCentre
.
y
;
pt
.
y
=
-
pt
.
y
;
pt
.
y
+=
aCentre
.
y
;
SetEnd
(
pt
);
NEGATE
(
m_Start0
.
y
);
NEGATE
(
m_End0
.
y
);
break
;
case
S_POLYGON
:
// polygon corners coordinates are always relative to the
// footprint position, orientation 0
for
(
unsigned
ii
=
0
;
ii
<
m_PolyPoints
.
size
();
ii
++
)
NEGATE
(
m_PolyPoints
[
ii
].
y
);
}
SetLayer
(
FlipLayer
(
GetLayer
()
)
);
}
pcbnew/class_edge_mod.h
View file @
230b60e6
...
...
@@ -68,6 +68,9 @@ public:
SetLocalCoord
();
}
/// Flip entity relative to aCentre
void
Flip
(
const
wxPoint
&
aCentre
);
void
SetStart0
(
const
wxPoint
&
aPoint
)
{
m_Start0
=
aPoint
;
}
const
wxPoint
&
GetStart0
()
const
{
return
m_Start0
;
}
...
...
pcbnew/class_module.cpp
View file @
230b60e6
...
...
@@ -947,31 +947,7 @@ void MODULE::Flip( const wxPoint& aCentre )
switch
(
item
->
Type
()
)
{
case
PCB_MODULE_EDGE_T
:
{
EDGE_MODULE
*
em
=
(
EDGE_MODULE
*
)
item
;
wxPoint
s
=
em
->
GetStart
();
s
.
y
-=
m_Pos
.
y
;
s
.
y
=
-
s
.
y
;
s
.
y
+=
m_Pos
.
y
;
em
->
SetStart
(
s
);
wxPoint
e
=
em
->
GetEnd
();
e
.
y
-=
m_Pos
.
y
;
e
.
y
=
-
e
.
y
;
e
.
y
+=
m_Pos
.
y
;
em
->
SetEnd
(
e
);
NEGATE
(
em
->
m_Start0
.
y
);
NEGATE
(
em
->
m_End0
.
y
);
if
(
em
->
GetShape
()
==
S_ARC
)
{
em
->
SetAngle
(
-
em
->
GetAngle
()
);
}
em
->
SetLayer
(
FlipLayer
(
em
->
GetLayer
()
)
);
}
(
(
EDGE_MODULE
*
)
item
)
->
Flip
(
m_Pos
);
break
;
case
PCB_MODULE_TEXT_T
:
...
...
pcbnew/class_text_mod.cpp
View file @
230b60e6
...
...
@@ -105,33 +105,45 @@ void TEXTE_MODULE::Flip(const wxPoint& aCentre )
void
TEXTE_MODULE
::
FlipWithModule
(
int
aOffset
)
{
// flipping the footprint is relative to the X axis
m_Pos
.
y
=
aOffset
-
(
m_Pos
.
y
-
aOffset
);
NEGATE_AND_NORMALIZE_ANGLE_POS
(
m_Orient
);
wxPoint
tmp
=
GetPos0
();
tmp
.
y
=
-
tmp
.
y
;
SetPos0
(
tmp
);
SetLayer
(
FlipLayer
(
GetLayer
()
)
);
m_Mirror
=
IsBackLayer
(
GetLayer
()
);
}
void
TEXTE_MODULE
::
MirrorWithModule
(
int
aOffset
)
void
TEXTE_MODULE
::
Mirror
Transform
WithModule
(
int
aOffset
)
{
wxPoint
tmp
=
GetTextPosition
();
tmp
.
x
=
aOffset
-
(
tmp
.
x
-
aOffset
);
SetTextPosition
(
tmp
);
tmp
.
y
=
GetPos0
().
y
;
SetPos0
(
tmp
);
// Used in modedit, to transform the footprint
// the mirror is relative to the Y axis
// the position is mirrored, but the text itself is not mirrored
// Note also in module editor, m_Pos0 = m_Pos
m_Pos
.
x
=
aOffset
-
(
m_Pos
.
x
-
aOffset
);
m_Pos0
=
m_Pos
;
NEGATE_AND_NORMALIZE_ANGLE_POS
(
m_Orient
);
}
void
TEXTE_MODULE
::
RotateWithModule
(
const
wxPoint
&
aOffset
,
double
aAngle
)
void
TEXTE_MODULE
::
Rotate
Transform
WithModule
(
const
wxPoint
&
aOffset
,
double
aAngle
)
{
wxPoint
pos
=
GetTextPosition
();
RotatePoint
(
&
pos
,
aOffset
,
aAngle
);
SetTextPosition
(
pos
);
SetPos0
(
GetTextPosition
()
)
;
// Used in modedit, to transform the footprint
// Note also in module editor, m_Pos0 = m_Pos
RotatePoint
(
&
m_Pos
,
aOffset
,
aAngle
);
m_Pos0
=
m_Pos
;
SetOrientation
(
GetOrientation
()
+
aAngle
);
}
void
TEXTE_MODULE
::
MoveTransformWithModule
(
const
wxPoint
&
aMoveVector
)
{
// Used in modedit, to transform the footprint
// Note also in module editor, m_Pos0 = m_Pos
m_Pos0
+=
aMoveVector
;
m_Pos
=
m_Pos0
;
}
void
TEXTE_MODULE
::
Copy
(
TEXTE_MODULE
*
source
)
{
...
...
pcbnew/class_text_mod.h
View file @
230b60e6
...
...
@@ -94,17 +94,21 @@ public:
void
Flip
(
const
wxPoint
&
aCentre
);
/// Rotate
entity during module rotation
void
RotateWithModule
(
const
wxPoint
&
aOffset
,
double
aAngle
);
/// Rotate
text during module rotation transform, in footprint editor
void
Rotate
Transform
WithModule
(
const
wxPoint
&
aOffset
,
double
aAngle
);
/// Flip entity during module flip
void
FlipWithModule
(
int
aOffset
);
/// Mirror entiry during module mirroring
void
MirrorWithModule
(
int
aOffset
);
/// Mirror text during module mirroring transform, in footprint editor
/// the text itself is not mirrored, only position.
void
MirrorTransformWithModule
(
int
aOffset
);
/// move text during module mirroring transform, in footprint editor
void
MoveTransformWithModule
(
const
wxPoint
&
aMoveVector
);
/// @deprecated it seems (but the type is used to 'protect'
//reference and value from deletion, and for identification)
//
reference and value from deletion, and for identification)
void
SetType
(
TEXT_TYPE
aType
)
{
m_Type
=
aType
;
}
TEXT_TYPE
GetType
()
const
{
return
m_Type
;
}
...
...
pcbnew/dialogs/dialog_copper_zones.cpp
View file @
230b60e6
...
...
@@ -284,11 +284,11 @@ void DIALOG_COPPER_ZONE::initDialog()
// unfortunately this option does not work well both on
// wxWidgets 2.8 ( column witdth too small), and
// wxWidgets 2.9 ( column witdth too large)
ctrlWidth
+=
LAYER_BITMAP_SIZE_X
+
16
;
// Add bitmap width + margin between bitmap and text
ctrlWidth
+=
LAYER_BITMAP_SIZE_X
+
25
;
// Add bitmap width + margin between bitmap and text
m_LayerSelectionCtrl
->
SetColumnWidth
(
0
,
ctrlWidth
);
ctrlWidth
+=
4
;
// add small margin between text and window borders
ctrlWidth
+=
25
;
// add small margin between text and window borders
// and room for vertical scroll bar
m_LayerSelectionCtrl
->
SetMinSize
(
wxSize
(
ctrlWidth
,
-
1
)
);
wxString
netNameDoNotShowFilter
=
wxT
(
"Net-*"
);
...
...
pcbnew/dialogs/dialog_non_copper_zones_properties.cpp
View file @
230b60e6
...
...
@@ -143,13 +143,15 @@ void DIALOG_NON_COPPER_ZONES_EDITOR::Init()
wxImageList
*
imageList
=
new
wxImageList
(
LAYER_BITMAP_SIZE_X
,
LAYER_BITMAP_SIZE_Y
);
m_LayerSelectionCtrl
->
AssignImageList
(
imageList
,
wxIMAGE_LIST_SMALL
);
int
ii
=
0
;
int
lyrSelect
=
(
(
PCB_SCREEN
*
)
m_parent
->
GetScreen
()
)
->
m_Active_Layer
;
if
(
m_zone
)
lyrSelect
=
m_zone
->
GetLayer
();
for
(
LSEQ
seq
=
LSET
::
AllNonCuMask
().
Seq
();
seq
;
++
seq
,
++
ii
)
int
ctrlWidth
=
0
;
// Min width for m_LayerSelectionCtrl to show the layers names
int
imgIdx
=
0
;
for
(
LSEQ
seq
=
LSET
::
AllNonCuMask
().
Seq
();
seq
;
++
seq
,
++
imgIdx
)
{
LAYER_ID
layer
=
*
seq
;
...
...
@@ -160,11 +162,25 @@ void DIALOG_NON_COPPER_ZONES_EDITOR::Init()
msg
.
Trim
();
int
itemIndex
=
m_LayerSelectionCtrl
->
InsertItem
(
m_LayerSelectionCtrl
->
GetItemCount
(),
msg
,
i
i
);
m_LayerSelectionCtrl
->
GetItemCount
(),
msg
,
i
mgIdx
);
if
(
lyrSelect
==
layer
)
m_LayerSelectionCtrl
->
Select
(
itemIndex
);
wxSize
tsize
(
GetTextSize
(
msg
,
m_LayerSelectionCtrl
)
);
ctrlWidth
=
std
::
max
(
ctrlWidth
,
tsize
.
x
);
}
// The most easy way to ensure the right size is to use wxLIST_AUTOSIZE
// unfortunately this option does not work well both on
// wxWidgets 2.8 ( column witdth too small), and
// wxWidgets 2.9 ( column witdth too large)
ctrlWidth
+=
LAYER_BITMAP_SIZE_X
+
25
;
// Add bitmap width + margin between bitmap and text
m_LayerSelectionCtrl
->
SetColumnWidth
(
0
,
ctrlWidth
);
ctrlWidth
+=
25
;
// add small margin between text and window borders
// and room for vertical scroll bar
m_LayerSelectionCtrl
->
SetMinSize
(
wxSize
(
ctrlWidth
,
-
1
)
);
}
...
...
pcbnew/editrack.cpp
View file @
230b60e6
...
...
@@ -167,7 +167,7 @@ TRACK* PCB_EDIT_FRAME::Begin_Route( TRACK* aTrack, wxDC* aDC )
// Display info about track Net class, and init track and vias sizes:
g_CurrentTrackSegment
->
SetNetCode
(
GetBoard
()
->
GetHighLightNetCode
()
);
GetDesignSettings
().
SetCurrentNetClass
(
g_CurrentTrackSegment
->
GetNetClassName
()
);
SetCurrentNetClass
(
g_CurrentTrackSegment
->
GetNetClassName
()
);
g_CurrentTrackSegment
->
SetLayer
(
GetScreen
()
->
m_Active_Layer
);
g_CurrentTrackSegment
->
SetWidth
(
GetDesignSettings
().
GetCurrentTrackWidth
()
);
...
...
pcbnew/files.cpp
View file @
230b60e6
...
...
@@ -69,10 +69,11 @@ static const wxChar autosavePrefix[] = wxT( "_autosave-" );
* @param aCtl is where to put the OpenProjectFiles() control bits.
*
* @param aFileName on entry is a probable choice, on return is the chosen filename.
* @param aKicadFilesOnly true to list kiacad pcb files plugins only, false to list all plugins.
*
* @return bool - true if chosen, else false if user aborted.
*/
bool
AskLoadBoardFileName
(
wxWindow
*
aParent
,
int
*
aCtl
,
wxString
*
aFileName
)
bool
AskLoadBoardFileName
(
wxWindow
*
aParent
,
int
*
aCtl
,
wxString
*
aFileName
,
bool
aKicadFilesOnly
=
false
)
{
// This is a subset of all PLUGINs which are trusted to be able to
// load a BOARD. User may occasionally use the wrong plugin to load a
...
...
@@ -93,7 +94,9 @@ bool AskLoadBoardFileName( wxWindow* aParent, int* aCtl, wxString* aFileName )
wxFileName
fileName
(
*
aFileName
);
wxString
fileFilters
;
for
(
unsigned
i
=
0
;
i
<
DIM
(
loaders
);
++
i
)
unsigned
pluginsCount
=
aKicadFilesOnly
?
2
:
DIM
(
loaders
);
for
(
unsigned
i
=
0
;
i
<
pluginsCount
;
++
i
)
{
if
(
i
>
0
)
fileFilters
+=
wxChar
(
'|'
);
...
...
@@ -291,10 +294,12 @@ void PCB_EDIT_FRAME::Files_io( wxCommandEvent& event )
int
open_ctl
;
wxString
fileName
;
if
(
!
AskLoadBoardFileName
(
this
,
&
open_ctl
,
&
fileName
)
)
if
(
!
AskLoadBoardFileName
(
this
,
&
open_ctl
,
&
fileName
,
true
)
)
break
;
AppendBoardFile
(
fileName
,
open_ctl
);
m_canvas
->
Refresh
();
}
break
;
...
...
@@ -343,7 +348,7 @@ void PCB_EDIT_FRAME::Files_io( wxCommandEvent& event )
// The KIWAY_PLAYER::OpenProjectFiles() API knows nothing about plugins, so
// determine how to load the BOARD here, with minor assistance from KICTL_EAGLE_BRD
// bit flag.
static
IO_MGR
::
PCB_FILE_T
plugin_type
(
const
wxString
&
aFileName
,
int
aCtl
)
IO_MGR
::
PCB_FILE_T
plugin_type
(
const
wxString
&
aFileName
,
int
aCtl
)
{
IO_MGR
::
PCB_FILE_T
pluginType
;
...
...
@@ -369,19 +374,6 @@ static IO_MGR::PCB_FILE_T plugin_type( const wxString& aFileName, int aCtl )
}
bool
PCB_EDIT_FRAME
::
AppendBoardFile
(
const
wxString
&
aFullFileName
,
int
aCtl
)
{
return
false
;
// I'll never use it, and it was mucking up OpenProjectFiles() with
// complicated cruft. If you must, put it here separate from that important
// function.
// Actually I think this serves too many masters. Just do panelization in
// a good gerber file manager.
}
bool
PCB_EDIT_FRAME
::
OpenProjectFiles
(
const
std
::
vector
<
wxString
>&
aFileSet
,
int
aCtl
)
{
// This is for python:
...
...
@@ -567,7 +559,7 @@ bool PCB_EDIT_FRAME::OpenProjectFiles( const std::vector<wxString>& aFileSet, in
GetBoard
()
->
m_Status_Pcb
=
0
;
// Update info shown by the horizontal toolbars
GetDesignSettings
().
SetCurrentNetClass
(
NETCLASS
::
Default
);
SetCurrentNetClass
(
NETCLASS
::
Default
);
ReFillLayerWidget
();
ReCreateLayerBox
();
...
...
@@ -581,9 +573,6 @@ bool PCB_EDIT_FRAME::OpenProjectFiles( const std::vector<wxString>& aFileSet, in
// See case RATSNEST_VISIBLE: in BOARD::SetElementVisibility()
GetBoard
()
->
SetVisibleElements
(
GetBoard
()
->
GetVisibleElements
()
);
updateTraceWidthSelectBox
();
updateViaSizeSelectBox
();
// Display the loaded board:
Zoom_Automatique
(
false
);
...
...
@@ -689,7 +678,7 @@ bool PCB_EDIT_FRAME::SavePcbFile( const wxString& aFileName, bool aCreateBackupF
// Select default Netclass before writing file.
// Useful to save default values in headers
GetDesignSettings
().
SetCurrentNetClass
(
NETCLASS
::
Default
);
SetCurrentNetClass
(
NETCLASS
::
Default
);
ClearMsgPanel
();
...
...
@@ -713,7 +702,7 @@ bool PCB_EDIT_FRAME::SavePcbFile( const wxString& aFileName, bool aCreateBackupF
);
DisplayError
(
this
,
msg
);
lowerTxt
=
_
(
"Failed to create "
)
+
pcbFileName
.
GetFullPath
(
);
lowerTxt
.
Printf
(
_
(
"Failed to create '%s'"
),
GetChars
(
pcbFileName
.
GetFullPath
()
)
);
AppendMsgPanel
(
upperTxt
,
lowerTxt
,
CYAN
);
...
...
@@ -739,9 +728,9 @@ bool PCB_EDIT_FRAME::SavePcbFile( const wxString& aFileName, bool aCreateBackupF
wxRemoveFile
(
autoSaveFileName
.
GetFullPath
()
);
if
(
!!
backupFileName
)
upperTxt
=
_
(
"Backup file: "
)
+
backupFileName
;
upperTxt
.
Printf
(
_
(
"Backup file: '%s'"
),
GetChars
(
backupFileName
)
)
;
lowerTxt
=
_
(
"Wrote board file: "
)
+
pcbFileName
.
GetFullPath
(
);
lowerTxt
.
Printf
(
_
(
"Wrote board file: '%s'"
),
GetChars
(
pcbFileName
.
GetFullPath
()
)
);
AppendMsgPanel
(
upperTxt
,
lowerTxt
,
CYAN
);
...
...
pcbnew/hotkeys_board_editor.cpp
View file @
230b60e6
...
...
@@ -668,7 +668,11 @@ bool PCB_EDIT_FRAME::OnHotkeyEditItem( int aIdCommand )
case
PCB_TRACE_T
:
case
PCB_VIA_T
:
if
(
aIdCommand
==
HK_EDIT_ITEM
)
{
// Be sure the corresponding netclass is selected before edit:
SetCurrentNetClass
(
(
(
BOARD_CONNECTED_ITEM
*
)
item
)
->
GetNetClassName
()
);
evt_type
=
ID_POPUP_PCB_EDIT_TRACKSEG
;
}
break
;
...
...
pcbnew/menubar_pcbframe.cpp
View file @
230b60e6
...
...
@@ -43,6 +43,7 @@ void PCB_EDIT_FRAME::ReCreateMenuBar()
{
wxString
text
;
wxMenuBar
*
menuBar
=
GetMenuBar
();
wxMenuItem
*
menutitem
;
wxFileHistory
&
fhist
=
Kiface
().
GetFileHistory
();
...
...
@@ -95,10 +96,14 @@ void PCB_EDIT_FRAME::ReCreateMenuBar()
KiBitmap
(
open_project_xpm
)
);
}
AddMenuItem
(
filesMenu
,
ID_APPEND_FILE
,
menutitem
=
AddMenuItem
(
filesMenu
,
ID_APPEND_FILE
,
_
(
"&Append Board"
),
_
(
"Append another Pcbnew board to the current loaded board"
),
_
(
"Append another Pcbnew board to the current loaded board
. Available only when Pcbnew runs in stand alone mode
"
),
KiBitmap
(
import_xpm
)
);
if
(
!
Kiface
().
IsSingle
()
)
// disable when under a project mgr
menutitem
->
Enable
(
false
);
filesMenu
->
AppendSeparator
();
text
=
AddHotkeyName
(
_
(
"&Save"
),
g_Board_Editor_Hokeys_Descr
,
HK_SAVE_BOARD
);
...
...
pcbnew/modedit.cpp
View file @
230b60e6
...
...
@@ -818,25 +818,13 @@ void FOOTPRINT_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
void
FOOTPRINT_EDIT_FRAME
::
Transform
(
MODULE
*
module
,
int
transform
)
{
wxPoint
pos
;
double
angle
=
900
;
// Necessary +- 900 (+- 90 degrees).
// Be prudent: because RotateMarkedItems is used to rotate some items
// used the same value as RotateMarkedItems
switch
(
transform
)
{
case
ID_MODEDIT_MODULE_ROTATE
:
module
->
Reference
().
RotateWithModule
(
wxPoint
(
0
,
0
),
angle
);
module
->
Value
().
RotateWithModule
(
wxPoint
(
0
,
0
),
angle
);
RotateMarkedItems
(
module
,
wxPoint
(
0
,
0
),
true
);
break
;
case
ID_MODEDIT_MODULE_MIRROR
:
module
->
Reference
().
MirrorWithModule
(
0
);
module
->
Value
().
MirrorWithModule
(
0
);
// Mirror pads and graphic items of the footprint:
MirrorMarkedItems
(
module
,
wxPoint
(
0
,
0
),
true
);
break
;
...
...
pcbnew/onleftclick.cpp
View file @
230b60e6
...
...
@@ -166,10 +166,8 @@ void PCB_EDIT_FRAME::OnLeftClick( wxDC* aDC, const wxPoint& aPosition )
case
PCB_TRACE_T
:
case
PCB_VIA_T
:
case
PCB_PAD_T
:
GetDesignSettings
().
SetCurrentNetClass
(
SetCurrentNetClass
(
((
BOARD_CONNECTED_ITEM
*
)
DrawStruct
)
->
GetNetClassName
()
);
updateTraceWidthSelectBox
();
updateViaSizeSelectBox
();
break
;
default
:
...
...
pcbnew/onrightclick.cpp
View file @
230b60e6
...
...
@@ -464,9 +464,7 @@ void PCB_EDIT_FRAME::createPopupMenuForTracks( TRACK* Track, wxMenu* PopMenu )
wxPoint
cursorPosition
=
GetCrossHairPosition
();
wxString
msg
;
GetDesignSettings
().
SetCurrentNetClass
(
Track
->
GetNetClassName
()
);
updateTraceWidthSelectBox
();
updateViaSizeSelectBox
();
SetCurrentNetClass
(
Track
->
GetNetClassName
()
);
int
flags
=
Track
->
GetFlags
();
...
...
@@ -834,12 +832,7 @@ void PCB_EDIT_FRAME::createPopUpMenuForFpPads( D_PAD* Pad, wxMenu* menu )
if
(
flags
)
// Currently in edit, no others commands possible
return
;
if
(
GetDesignSettings
().
GetCurrentNetClassName
()
!=
Pad
->
GetNetClassName
()
)
{
GetDesignSettings
().
SetCurrentNetClass
(
Pad
->
GetNetClassName
()
);
updateTraceWidthSelectBox
();
updateViaSizeSelectBox
();
}
SetCurrentNetClass
(
Pad
->
GetNetClassName
()
);
wxString
msg
=
Pad
->
GetSelectMenuText
();
...
...
pcbnew/pcbframe.cpp
View file @
230b60e6
...
...
@@ -1079,3 +1079,17 @@ void PCB_EDIT_FRAME::ToPlotter( wxCommandEvent& event )
dlg
.
ShowModal
();
}
bool
PCB_EDIT_FRAME
::
SetCurrentNetClass
(
const
wxString
&
aNetClassName
)
{
bool
change
=
GetDesignSettings
().
SetCurrentNetClass
(
aNetClassName
);
if
(
change
)
{
updateTraceWidthSelectBox
();
updateViaSizeSelectBox
();
}
return
change
;
}
pcbnew/router/router_tool.cpp
View file @
230b60e6
...
...
@@ -534,7 +534,13 @@ void ROUTER_TOOL::performRouting()
frame
->
SetActiveLayer
(
ToLAYER_ID
(
m_startLayer
)
);
if
(
m_startItem
&&
m_startItem
->
Net
()
>=
0
)
{
highlightNet
(
true
,
m_startItem
->
Net
()
);
// Update track width and via size shown in main toolbar comboboxes
frame
->
SetCurrentNetClass
(
m_startItem
->
Parent
()
->
GetNetClass
()
->
GetName
()
);
}
else
frame
->
SetCurrentNetClass
(
NETCLASS
::
Default
);
ctls
->
ForceCursorPosition
(
false
);
ctls
->
SetAutoPan
(
true
);
...
...
pcbnew/tracepcb.cpp
View file @
230b60e6
...
...
@@ -67,7 +67,7 @@ void FOOTPRINT_EDIT_FRAME::RedrawActiveWindow( wxDC* DC, bool EraseBg )
GRSetDrawMode
(
DC
,
GR_COPY
);
m_canvas
->
DrawBackGround
(
DC
);
DrawWorkSheet
(
DC
,
screen
,
0
,
IU_PER_MILS
,
wxEmptyString
);
DrawWorkSheet
(
DC
,
screen
,
0
,
IU_PER_MILS
,
wxEmptyString
);
// Redraw the footprints
for
(
MODULE
*
module
=
GetBoard
()
->
m_Modules
;
module
;
module
=
module
->
Next
()
)
...
...
@@ -153,11 +153,19 @@ void BOARD::Draw( EDA_DRAW_PANEL* aPanel, wxDC* DC, GR_DRAWMODE aDrawMode, const
*/
for
(
TRACK
*
track
=
m_Track
;
track
;
track
=
track
->
Next
()
)
{
if
(
track
->
IsMoving
()
)
continue
;
track
->
Draw
(
aPanel
,
DC
,
aDrawMode
);
}
// SEGZONE is outdated, only her for compatibility with
// very old designs
for
(
SEGZONE
*
zone
=
m_Zone
;
zone
;
zone
=
zone
->
Next
()
)
{
if
(
zone
->
IsMoving
()
)
continue
;
zone
->
Draw
(
aPanel
,
DC
,
aDrawMode
);
}
...
...
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