wxString constructor will determine string length using strlen() when it
is not explicitly specified, but there is no termination byte added when
reading file contents to 'buffer' variable.
Commit 73c229714 was a bit of a sledgehammer for the associated problem
of degenerate points. This commit replaces that one by only performing
additional simplification of the zone polygons on those polygons that
fail our initial triangulation attempt.
Add Display Settings to Footprint Browser.
Make each of them OpenGL on OSX and Cairo on other platforms.
Allow auto-zoom to be turned off and save last zoom setting.
Make ordering of tools in htoolbar consistent.
Standardize grid and zoom drop-downs.
Fixes: lp:1791667
* https://bugs.launchpad.net/kicad/+bug/1791667
Modal yes/no questions should not be allowed to fall behind other
windows. They need to be answered before the program continues and
clicking outside of the dialog should not hide dialog itself.
Fixes: lp:1790640
* https://bugs.launchpad.net/kicad/+bug/1790640
It creates a lot of integer overflow in Pcbnew in Debug mode (Legacy mode), although it ha meaning onlt for the Page Layout Editor.
This function should be deprecated when the GAL canvas is used in Page Layout Editor.
Calls the simplify/fracture polygon code on any polygon prior to
tesselation. This avoids issues with degenerate polygons where the
degenerate points are not sequential.
Fixes: lp:1790534
* https://bugs.launchpad.net/kicad/+bug/1790534
Replaces Poly2Tri with updated code to process polygons faster and more
robustly. Notably, we can now handle overlapping holes in the polygons,
allowing us to cache the triangulation of complex boards
Using Title + Message wasn't working for all the dialogs which
did substitutions in the message (which was a lot of them).
Fixes: lp:1789348
* https://bugs.launchpad.net/kicad/+bug/1789348
Also fixes a bug where nets wouldn't get changed because the
pads weren't changed and so the pad nets would propagate and
wipe out the changed nets on the tracks.
Also includes warning dialogs that pad nets will be changed if the
track nets are.
Fixes: lp:1779854
* https://bugs.launchpad.net/kicad/+bug/1779854
Use standard Magnetize() to handle grid and magnetic pads.
Use the standard menu from PCB_TOOL. Delegating the menu to
the SELECTION_TOOL just caused grief.
Also brings clients (such as Position Relative To) into line,
and implements better Cancel behaviour.
Also improves visibility of modal status messages:
- moves Select Anchor message from status bar to popup
- moves Select Reference message from dialog to popup
Fixes: lp:1786727
* https://bugs.launchpad.net/kicad/+bug/1786727
Also updates the file menu IDs so that we can actually handle
more than 9 items in the file history.
Also adds configurable file history length to the other gerber
files (zip, drill and job).
Fixes: lp:1745729
* https://bugs.launchpad.net/kicad/+bug/1745729
Use the wxWidgets official accelerator key string for WXK_BACK (this is "Back") in menuitems instead of "BkSp"
Also when reading the hotkey config file, avoid to set a hotkey to unassigned when its name is not found in list.
The default value is used.
Unassigned hotkey use <unassigned> as key name (and 0 as key code) in file.
Primary change is to replace most control/window borders with
AUI pane borders. We implement our own AUI border drawing
routine which avoids the ugly one-pixel white frames around
dark canvasses.
Also increases the signal-to-noise ratio of all the pane
creation code in the various frames.
Don't process zoom both in Legacy code and Modern code; one of
them will decide the zoom has already changed and do odd things.
Make sure the view is updated after zooming, otherwise you have
to move the mouse over the canvas before seeing the new zoom.
On Linux (GTK?) the accelerator key BkSp, when used in menus must be coded as "\t\b" and not "\tBkSp".
However, On Windows, it must be "\tBkSp".
Joys of multi-platform development.
This reverts the previous work-around 7d62f14dd for the RTree splitting
degeneracy that was placed prior to v5. It appears not to have worked
for all systems. In its place, we use doubles instead of floats to
calculate the bounding box when filling the RTree. This keeps maximum
volume items from overlapping with the system boundary in test cases.
Be more intelligent about sorting lib tree items. (Footprint
entries, for instance, come out of an already-sorted list.)
Don't recreate menus twice when laoding Footprint Editor.
More pervasive use of WX_FILENAME to avoid expensive calls to
wxFileName::SplitPath() and string concatenation.
For POSIX kernels do all the work on the file-system side so we
don't have to keep converting back and forth between encodings.
Cache the footprint info on disk (in the project).
Move timestamp-generation (and checking) to the filesystem so the
above will be bullet-proof.
Rewrite some wxWidgets classes for performance (see common.h).
Drop all uses of wxRAISED_BORDER and wxSUNKEN_BORDER from dialogs and
panels used in main frame windows.
Drop use of wxSP_3DSASH options on all wxSplitterWindow definitions.
Minor dialog alignment and spacing fixes.
This also fixes a bunch of bugs where an error during save would
still close the window (rather than cancelling the close action).
Fixes: lp:1785034
* https://bugs.launchpad.net/kicad/+bug/1785034
Put the buttons in platform-compliant order.
Get rid of SaveMultiOptions in favour of repeated standard save
dialogs with a "Apply to all" checkbox.
Fixes: lp:1783444
* https://bugs.launchpad.net/kicad/+bug/1783444
Eagle allows for variants of components to be listed in the schematic.
This patch copies the variant data into the imported schematic item,
prefixing the alternate variant names with "VARIANT_" and keeping the
alternate values.
There's no point in having both Save Symbol and Save Library when
only one can be selected at a time.
Also cleans up a bunch of extraneous icons, and fixes a few
copy/paste errors in menus and toolbars.
* in DIALOG_EDIT_LIBRARY_TABLES::TransferDataFromWindow(), m_contentPanel->TransferDataFromWindow
* is explicitly called to update library tables.
* Before wxWidgets 3.1.x, m_contentPanel->TransferDataFromWindow is not called by wxDialog::TransferDataFromWindow()
* and explicit call is needed.
* Since wxWidgets 3.1.x, m_contentPanel->TransferDataFromWindow is called by wxDialog::TransferDataFromWindow()
* thus creating two successive calls, not supported by m_contentPanel->TransferDataFromWindow.
* The call to wxDialog::TransferDataFromWindow() was just removed, as it is useless in this dialog
This removes the existing constructors so that all parsing must
be explicit and callers are made aware that they need to think
about illegal characters, malformed ids, etc.
Fixes: lp:1783474
* https://bugs.launchpad.net/kicad/+bug/1783474
Also brings horizontal toolbar in line with Pcbnew and Eeschema.
And updates the EDA_LIST_DIALOG to current practices.
This finishes the removal of the active library concept from the
Symbol Editor (started with the new component tree in 5.0).
Fixes: lp:1740717
* https://bugs.launchpad.net/kicad/+bug/1740717
wxDialog calls Show(false) when the dialog is about to be closed, but
KIDIALOG::Show() implementation did not forward the show parameter to
wxRichMessageDialog::Show() invocation. As the parameter was not
specified, the mentioned Show() call always used 'true' as the default
parameter, preventing the dialog from being closed.
Fixes: lp:1782999
* https://bugs.launchpad.net/kicad/+bug/1782999
Don't beep when inserting character from focused grid cell (but
before editor is opened).
Handle reference validation separately from name validation and
separately from user field value validation. The old way of setting
the fieldId on the validator wasn't working because the validator
gets copied.
Run validation when leaving cell. Don't just check for empty
(particularly for fields that CAN be empty).
Fixes: lp:1782917
* https://bugs.launchpad.net/kicad/+bug/1782917
(cherry picked from commit 79e04de)
This allows it to participate in Kiway things such as updating
language or common settings.
Fixes: lp:1779558
* https://bugs.launchpad.net/kicad/+bug/1779558
(cherry picked from commit b3f8478)
... and GetMsgPanelInfo.
Step 4 in the g_UserUnit eradication effort.
Also removes a couple of conversion routines that were close
enough to extinction.
(cherry picked from commit c75da51)
Work around wxWidgets failure to send first key through validator.
Unify treatment of INDETERMINATE values (such as for multiple
selections with mixed values).
(cherry picked from commit 7308729)
Allow copy of a single cell demarcated by the grid cursor.
Paste of lib_table s-expressions should always start at 0,0.
Let caller or specialized sub-class do auto-sizing; don’t
do it from within the base GRID_TRICKS.
Don’t start GRID_TRICKS menu IDs at -1; wxWidgets doesn’t
like it when you get to 0.
Add column visibility menu.
(cherry picked from commit e5071ed)
It's time to fix the focus issues. This adds a new SetInitialFocus()
routine to DIALOG_SHIM which will need to be called from a lot of
dialogs.
(cherry picked from commit 6d9647a)
The general idea is to support user-units inheritance. The
UNIT_BINDER allows wrapped controls to inherit units from their
parent dialog, while KEYWAY_HOLDER and DIALOG_SHIM allow child
KEYWAY_HOLDERs or DIALOG_SHIMs to inherit units from their
parent.
The GetUserUnits() method signature has to move to KEYWAY_HOLDER
rather than KEYWAY_PLAYER (where it makes more sense) as it’s the
only common ancestor of KEYWAY_PLAYER and DIALOG_SHIM.
As long as we'll be using the UNIT_BINDER more widely, it also
makes sense to move evaluation and validation into it.
This commit also provides eeschema’s DIALOG_LABEL_EDITOR and
pcbnew’s DIALOG_TRACK_VIA_PROPERTIES and DIALOG_SET_GRID as
models of how to use the new user-units inheritance, eval, and
validation.
Fixes: lp:593795
* https://bugs.launchpad.net/kicad/+bug/593795
(cherry picked from commit c8bc53e)
Step 1 of the g_UserUnit global eradication. This commit includes
basic hookup of hotkeys, units tool-buttons and grid dialogs.
(cherry picked from commit e0500ab)
The old item pointers (which aren't safe to keep around) were
removed in favour of opaque references (void*) which are then
compared against existing items when needed.
Also improves brightening by brightening the whole footprint
(ie: its pads, drawings, reference and value) rather than just
its target cross.
(cherry picked from commit 30e90b0)
Small icons for dialog browse, refresh, and row operations.
Icons in B&W so they don't over-emphasize with respect to other
controls in the dialog.
Layout cleanup for consistency. Removal of the blank space to
left of the fields list in the Global Fields Editor, and addition
of column-sizing-to-list-width.
More even spacing for buttons in html report panel.
Honor platform conventions for action button order and layout.
Move netlist importer to update-pcb-from-schematic algorithm
(display messages and then update instead of "dry run" checkbox)
(cherry picked from commit b21e19d)
Hotkey options have shifted some options from context-specific to global
hotkeys. This causes conflicts with old hotkey definitions. Instead,
we keep the v5 eeschema/pcbnew hotkeys completely separate. Users can
still import their custom hotkey files from v4.
Fixes: lp:1778408
* https://bugs.launchpad.net/kicad/+bug/1778408
When staging a commit for an object that has already been modified,
there is a Clone() made for the hypothetical entry. We need to free it
if we are not storing a new entry.
When parsing component names, we need to account for the possibility of
illegal characters (e.g. "/", ":") in the names from v4 libraries. They
are fixed internally by the cache parser but if we don't fix them
in the rescue routine, the symbol won't match it's cache name.
This standardizes all schematic illegal character routines into LIB_ID
Fixes: lp:1774774
* https://bugs.launchpad.net/kicad/+bug/1774774
Paths based on DEFAULT_INSTALL_PATH do not work on Windows,
as in fact there is no default install path, as in case of Unix-based
systems. In such case, the initial paths point to mingw subdirectories
that normally do not exist on user machines.
The patch changes the initial path values to make them relative to
the executable and follow the current Windows installer scheme.
Fixes: lp:1775796
* https://bugs.launchpad.net/kicad/+bug/1775796
The origin item doesn't have a fixed size. It is constant on the screen but
changes the effective BBox size based on the zoom level.
But we can't simply set it to the maximum size as this causes a splitting degeneracy
when compiling for Debian i386. By modestly adjusting the bbox, we avoid the degeneracy
while keeping the origin visible at all zoom levels
Fixes: lp:1777379
* https://bugs.launchpad.net/kicad/+bug/1777379
During the symbol library table implementation, the legal character
tests for the footprint library table were changed and the forward
slash '/' character became illegal. This change broke editing some
users footprint library tables that already had '/' in library table
nicknames. This change split the library nickname and library item
name illegal character tests.
It happens only when the 'warp and center cursor on zoom' option is disabled.
Was created after modifying the code in EDA_DRAW_FRAME::AdjustScrollBars(),
making EDA_DRAW_FRAME::RedrawScreen2() not working very well.
(partial fix of bug 1562173)
wxGLCanvas::IsDisplaySupported() handles wxGL_{MINOR,MAJOR}_VERSION
attributes only in 3.0.4. Since 3.1.0 the attributes are apparently not
supported, so instead wxGLContext::IsOK() is used (introduced in 3.1.0).
Fixes: lp:1775995
* https://bugs.launchpad.net/kicad/+bug/1775995
There are a bunch of problems with event processing and closing
documents, etc., when enabled. See the bug report for more
info.
Fixes: lp:1774777
* https://bugs.launchpad.net/kicad/+bug/1774777
Limit the bbox size of origin view item to item size. This prevents
excessive redraw.
This also side-steps a degeneracy in the RTree calculation under certain
conditions in i386 where multiple, maximum-sized items are degenerate.
Fixes: lp:1774316
* https://bugs.launchpad.net/kicad/+bug/1774316
This fixes some warnings on GCC 8.1:
warning: catching polymorphic type ‘class std::out_of_range’ by value [-Wcatch-value=]
catch( std::out_of_range )
^~~~~~~~~~~~
This fix is along the same lines as:
* ff1802d7a "Fix Coverity "Big parameter passed by value" warnings"
There are three related changes here to harden our handling of threads
in the footprint async loader.
1) Footprint async loader explicitly aborts any remaining loader threads
on exit.
2) We protect the thread join by a mutex
3) We do not pause during no-wait routines
In Cairo mode, this function uses already the alpha color value setting.
Now for low alpha values (usually they are low, as said in many GAL comments),
Cairo mode and OpenGL mode should have a similar look.
Also lock the DeleteAll call with mutext to protect threaded access.
The OpenGL contexts are removed when OPENGL_GAL class is destroyed.
Explicitly deleting all contexts prior to destroying the OPENGL_GAL
class causes an assert when the destructor tries to lock its context
prior to cleaning up OpenGL memory. In most cases, an unhandled assert
in a destructor-called function will simply exit the destructor.
Python thread cleanup will also attempt to close the context. This can
cause a race condition with multiple threads accessing/deleting the
canvas.
Fixes: lp:1774096
* https://bugs.launchpad.net/kicad/+bug/1774096
We limit the minimum zoom to Z=0.3. Minimum preset zoom level is 0.31,
so 0.3 is only reachable using the mouse wheel. Smaller than 0.18, GAL
does not display properly.
Fixes: lp:1773215
* https://bugs.launchpad.net/kicad/+bug/1773215
wxWidgets offers two dialog types: wxFileDialog and wxDirDialog, one
to select files, the other to select directories, but neither of them
handles both. DIALOG_FILE_DIR_PICKER fills that gap.
When starting async processes, we need to have a way to stop the process
before releasing memory. Descoping FOOTPRINT_ASYNC_LOADER while the
threads were still running could cause crashes depending on the memory
structure. To avoid this we define clear procedures for exiting a
running async processes and call these when exiting.
Fixes: lp:1772909
* https://bugs.launchpad.net/kicad/+bug/1772909
It can be useful to have similar class messages grouped together so that
error messages in a larger report don't get lost among the
warning/info/action messages.
This patch allows sorting of messages for dialogs that benefit from
organization. Default behavior of reporter messages remains
unchanged by this patch.
Fixes: lp:1772090
* https://bugs.launchpad.net/kicad/+bug/1772090
Remove KICAD_PTEMPLATE environment variable as it's purpose was not
clear and was often poorly defined as the path to the KiCad installed
templates.
Add a new KICAD_TEMPLATE_DIR environment variable which clearly should
be the path of the KiCad installed templates. Make this environment
variable available in the user settings in case the default is wrong
which has been the case in some instances. Use the standard search
stack to set the default system template path which has a much greater
chance of being correct.
Add a new KICAD_USER_TEMPLATE_DIR environment variable which clearly
should be the path of the user defined templates. Users most likely
were not even aware of the old default user path unless they read the
fine manual.
Set template path search stack priority as follows:
* KICAD_USER_TEMPLATE_DIR
* KICAD_TEMPLATE_DIR
* Search stack template paths
Reverse template selection dialog and project path dialog for improved
user experience.
Fixes lp:1543443
https://bugs.launchpad.net/kicad/+bug/1543443
1) hide the status popup when the dialog is brought up
2) forward events from the popup to the canvas so hotkeys work
3) make sure diff pair radius is always 100%
4) fix greyed-out Miter style label
5) make L a hotkey so it works before you start dragging
Fixes: lp:1545856
* https://bugs.launchpad.net/kicad/+bug/1545856
Unifies the different sections of hotkeys so that we are not storing two
[eeschema] or [pcbnew] sections in two different files.
Previous hotkey definitions are loaded at start if they exist but are
overwritten by the new format, if it exists. Changes to hotkeys save
only in the combined format.
Hotkey editor for each application only shows the hotkeys relevant to
that application.
Fixes: lp:1741757
* https://bugs.launchpad.net/kicad/+bug/1741757
Fixes: lp:1668799
* https://bugs.launchpad.net/kicad/+bug/1668799
This reverts the hotkeys file format to a human readable and VCS
compatible listing by splitting individual hotkey assignments onto
separate lines instead of the single key. This unifies the hotkey format
between the application configuration and export Hotkey routines.
Both hotkey formats remain readable by the same routines.
The tools were being set as idle, whenever an event handler execution
finished (via TOOL_MANAGER::finishTool()). Such approach does not take
into account cases when a tool is active and receives an event causing
another event handler of the same tool to run. When this happend, the
tool has been incorrectly set as idle when the second handler finished
its execution.
In a particular case, invoking the router settings dialog caused the PNS
router to be incorrectly detected as inactive in
EDIT_TOOL::invokeInlineRouter(). Due to that, ROUTER_TOOL::CanInlineDrag()
requested a selection that required disambiguation menu for items
that were modified by the router, but not yet committed. After the drag
tool had finished, the disambiguation menu was eventually shown
with items existing only in the undo buffer. Removing such item lead to
track DLIST corruption, effectively erasing all tracks.
Fixes: lp:1767826
* https://bugs.launchpad.net/kicad/+bug/1767826
The opencascade patch intrusively checked against libraries but broke
some build scripts. This restores the default cmake OCE behavior that was
changed by 2bab30d9a and makes the OpenCascade search truly secondary.
Minor improvement in polygon calculation to use consecutive points
rather than casting to a full segment. Avoids division except when it
will not create a denormal.
Footprint filter provides two Regex filtering options. One for keywords
and one for footprint keywords. The footprint keywords (contained in
the symbol files) need explicit '*' at the beginning and end of the
filters to allow matching start/end. Type-in filters should search
implicitly matching any wildcard substring.
Fixes: lp:1769931
* https://bugs.launchpad.net/kicad/+bug/1769931
Recent versions of wxWidgets wxStandardPaths::GetUserConfigDir() correctly
append ".config" on Linux build which was incorrect as the current code
already appended it to the path. Add a check to see if ".config" is the
last path and append as required.
Check for XDG_CONFIG_HOME environment variable on all platforms not just
Linux.
Fixes lp:1769145
https://bugs.launchpad.net/kicad/+bug/1769145
Changes SHAPE_CONVEX to SHAPE_SIMPLE to better reflect the limitations.
Changes SHAPE_LINE_CHAIN::PointInside calculation to allow points
strictly inside a line chain
Fixes: lp:1768862
* https://bugs.launchpad.net/kicad/+bug/1768862
The only required scroll event handler is wxEVT_SCROLLWIN_THUMBTRACK,
which is responsible for dragging the scrolling sliders. One of the
remaining ones is also called when mousewheel is scrolled (MSW only) and
due to that overrides the new view setting with view settings computed
from the sliders position.
Fixes: lp:1767604
* https://bugs.launchpad.net/kicad/+bug/1767604
Footprint filters need to be able to match the start and end of strings.
The standard wildcard filter implictly adds "*" to the start and end of
match strings, so we create a derived class that requires an explicit
"*" or "?" to match wildcards.
Fixes: lp:1751565
* https://bugs.launchpad.net/kicad/+bug/1751565
KiCad read incorrect value for window position and it's size at very
first launch, which results in invisble/inaccessible window on Mac OSX.
Set correct default values for these settings fixes this issue.
And fix a typo in comment.
Corrects an error in polyline estimation
Syncs graphics to world PNS by whole layer set rather than
individual layer at a time.
Prevents reloading of full pns TOOL_BASE during reset of tools unless
the tool is being activated.
Fixes: lp:1766626
* https://bugs.launchpad.net/kicad/+bug/1766626
It is a C-style assert causing application termination when triggered.
Certain systems display pcbnew window shrinked so much, that the canvas
size is 0x0 pixels. The only problem with that is the window needs to be
resized.
Fixes: lp:1767031
* https://bugs.launchpad.net/kicad/+bug/1767031
Also removes parallel implementation in favour of using the
normal one (with a new wxGauge-backed PROGRESS_REPORTER).
Fixes: lp:1764196
* https://bugs.launchpad.net/kicad/+bug/1764196
The hotkey fix committed in 53b1ec81 broke non-us keyboards. Change the
hotkey help hotkey from '?' to Ctrl+F1 to prevent the hotkey list dialog
from being shown when placing a bus wire junction in Eeschema and when
changing the track posture in Pcbnew. This is still broken in the GAL
framework.
Symbol/footprint library and entry have the same set of forbidden
characters with a single exception, space character. To accommodate for
this difference, LIB_ID validation and fix methods have been extended to
specify the LIB_ID type that is checked (schematic/board).
LIB_ID::HasIllegalChars() and LIB_ID::FixIllegalChars() had two different
sets of characters treated as invalid in LIB_IDs. The set has been
factored out to another function to avoid duplication.
wxASSERT(), contrary to assert() does not terminate the program when
triggered. As assertions in ACTION_MANAGER are not critical and should be
treated as warnings - there is no need to close the program.
Also update the rest of the symbol-chooser usage to current
specs, including examining the timestamp to see if the list
needs loading at all.
Partial fix to: lp:1760936
* https://bugs.launchpad.net/kicad/+bug/1760936
The change track posture hotkey '/' was getting interpreted as the show
hotkey list shortcut '?' on windows. This fix is temporary hack to fix
the problem which much more involved than the simple #ifdef/#endif used
to fix this issue.
Add key code tracing to help analyze key codes for future development.