KiCad PCB EDA Suite
Loading...
Searching...
No Matches
trace_helpers.cpp
Go to the documentation of this file.
1/*
2 * This program source code file is part of KiCad, a free EDA CAD application.
3 *
4 * Copyright (C) 2018 Wayne Stambaugh <[email protected]>
5 * Copyright The KiCad Developers, see AUTHORS.txt for contributors.
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <https://www.gnu.org/licenses/>.
19 */
20
25
26#include <trace_helpers.h>
27
28#include <wx/tokenzr.h>
29
30const wxChar* const traceFindReplace = wxT( "KICAD_FIND_REPLACE" );
31const wxChar* const kicadTraceCoords = wxT( "KICAD_COORDS" );
32const wxChar* const kicadTraceKeyEvent = wxT( "KICAD_KEY_EVENTS" );
33const wxChar* const kicadTraceToolStack = wxT( "KICAD_TOOL_STACK" );
34const wxChar* const kicadTraceCoroutineStack = wxT( "KICAD_COROUTINE_STACK" );
35const wxChar* const traceSchLibMem = wxT( "KICAD_SCH_LIB_MEM" );
36const wxChar* const traceFindItem = wxT( "KICAD_FIND_ITEM" );
37const wxChar* const traceSchLegacyPlugin = wxT( "KICAD_SCH_LEGACY_PLUGIN" );
38const wxChar* const traceSchPlugin = wxT( "KICAD_SCH_PLUGIN" );
39const wxChar* const traceGedaPcbPlugin = wxT( "KICAD_GEDA_PLUGIN" );
40const wxChar* const traceKicadPcbPlugin = wxT( "KICAD_PCB_PLUGIN" );
41const wxChar* const tracePrinting = wxT( "KICAD_PRINT" );
42const wxChar* const traceAutoSave = wxT( "KICAD_AUTOSAVE" );
43const wxChar* const tracePathsAndFiles = wxT( "KICAD_PATHS_AND_FILES" );
44const wxChar* const traceLocale = wxT( "KICAD_LOCALE" );
45const wxChar* const traceFonts = wxT( "KICAD_FONTS" );
46const wxChar* const traceScreen = wxT( "KICAD_SCREEN" );
47const wxChar* const traceZoomScroll = wxT( "KICAD_ZOOM_SCROLL" );
48const wxChar* const traceSymbolResolver = wxT( "KICAD_SYM_RESOLVE" );
49const wxChar* const traceDisplayLocation = wxT( "KICAD_DISPLAY_LOCATION" );
50const wxChar* const traceSchSheetPaths = wxT( "KICAD_SCH_SHEET_PATHS" );
51const wxChar* const traceSchCurrentSheet = wxT( "KICAD_SCH_CURRENT_SHEET" );
52const wxChar* const traceSchFieldRendering = wxT( "KICAD_SCH_FIELD_RENDERING" );
53const wxChar* const traceSchPainter = wxT( "KICAD_SCH_PAINTER" );
54const wxChar* const traceSchSymbolRef = wxT( "KICAD_SCH_SYMBOL_REF" );
55const wxChar* const traceEnvVars = wxT( "KICAD_ENV_VARS" );
56const wxChar* const traceSchDragNetCollision = wxT( "KICAD_SCH_DRAG_NET_COLLISION" );
57const wxChar* const traceCrossProbeFlash = wxT( "CROSS_PROBE_FLASH" );
58const wxChar* const traceGalProfile = wxT( "KICAD_GAL_PROFILE" );
59const wxChar* const traceGalContext = wxT( "KICAD_GAL_CONTEXT" );
60const wxChar* const traceStackedPins = wxT( "KICAD_STACKED_PINS" );
61const wxChar* const traceLibWatch = wxT( "KICAD_LIB_WATCH" );
62const wxChar* const traceKiCad2Step = wxT( "KICAD2STEP" );
63const wxChar* const traceUiProfile = wxT( "KICAD_UI_PROFILE" );
64const wxChar* const traceGit = wxT( "KICAD_GIT" );
65const wxChar* const traceModelPreview = wxT( "KICAD_MODEL_PREVIEW" );
66const wxChar* const traceDiffMerge = wxT( "KICAD_DIFF_MERGE" );
67const wxChar* const traceEagleIo = wxT( "KICAD_EAGLE_IO" );
68const wxChar* const traceDiptraceIo = wxT( "KICAD_DIPTRACE_IO" );
69const wxChar* const traceEasyPc = wxT( "KICAD_EASYPC_IO" );
70const wxChar* const traceCadstarIo = wxT( "KICAD_CADSTAR_IO" );
71const wxChar* const traceFabmaster = wxT( "KICAD_FABMASTER" );
72const wxChar* const traceAltiumIo = wxT( "KICAD_ALTIUM_IO" );
73const wxChar* const traceOdbppIo = wxT( "KICAD_ODBPP_IO" );
74const wxChar* const traceEasyEdaIo = wxT( "KICAD_EASYEDA_IO" );
75const wxChar* const tracePadsIo = wxT( "KICAD_PADS_IO" );
76const wxChar* const tracePcadIo = wxT( "KICAD_PCAD_IO" );
77const wxChar* const traceDesignBlocks = wxT( "KICAD_DESIGN_BLOCK" );
78const wxChar* const traceLibFieldTable = wxT( "KICAD_LIB_FIELD_TABLE" );
79const wxChar* const tracePdfPlotter = wxT( "KICAD_PDF_PLOTTER" );
80const wxChar* const traceSnap = wxT( "KICAD_SNAP" );
81const wxChar* const traceLibraries = wxT( "KICAD_LIBRARIES" );
82const wxChar* const traceSchMove = wxT( "KICAD_SCH_MOVE" );
83const wxChar* const traceSymbolInheritance = wxT( "KICAD_SYMBOL_INHERITANCE" );
84const wxChar* const traceSchNetChain = wxT( "KICAD_SCH_NETCHAIN" );
85const wxChar* const traceImportNetNames = wxT( "KICAD_IMPORT_NET_NAMES" );
86
87#ifdef KICAD_GAL_PROFILE
88LATENCY_PROBE latencyProbeZoomToRender( "zoom-to-render", 16 );
89LATENCY_PROBE latencyProbeRepaintToMotion( "repaint-to-motion", 16 );
90#endif
91
92wxString dump( const wxArrayString& aArray )
93{
94 wxString tmp;
95
96 for( unsigned i = 0; i < aArray.GetCount(); i++ )
97 {
98 if( aArray[i].IsEmpty() )
99 tmp << wxT( "\"\" " );
100 else
101 tmp << aArray[i] << wxT( " " );
102 }
103
104 return tmp;
105}
106
107
108// The following code was shamelessly copied from the wxWidgets keyboard sample
109// at https://github.com/wxWidgets/wxWidgets/blob/master/samples/keyboard/keyboard.cpp.
110
112// Author: Vadim Zeitlin
113// Modified by: Marcin Wojdyr
114// Created: 07.04.02
115// Copyright: (c) 2002 Vadim Zeitlin
116// Licence: wxWindows licence
118
119// helper function that returns textual description of wx virtual keycode
120const char* GetVirtualKeyCodeName(int keycode)
121{
122 switch ( keycode )
123 {
124#define WXK_(x) \
125 case WXK_##x: return #x;
126
127 WXK_(BACK)
128 WXK_(TAB)
129 WXK_(RETURN)
130 WXK_(ESCAPE)
131 WXK_(SPACE)
132 WXK_(DELETE)
133 WXK_(START)
134 WXK_(LBUTTON)
135 WXK_(RBUTTON)
136 WXK_(CANCEL)
137 WXK_(MBUTTON)
138 WXK_(CLEAR)
139 WXK_(SHIFT)
140 WXK_(ALT)
142 WXK_(MENU)
143 WXK_(PAUSE)
144 WXK_(CAPITAL)
145 WXK_(END)
146 WXK_(HOME)
147 WXK_(LEFT)
148 WXK_(UP)
149 WXK_(RIGHT)
150 WXK_(DOWN)
151 WXK_(SELECT)
152 WXK_(PRINT)
153 WXK_(EXECUTE)
154 WXK_(SNAPSHOT)
155 WXK_(INSERT)
156 WXK_(HELP)
157 WXK_(NUMPAD0)
158 WXK_(NUMPAD1)
159 WXK_(NUMPAD2)
160 WXK_(NUMPAD3)
161 WXK_(NUMPAD4)
162 WXK_(NUMPAD5)
163 WXK_(NUMPAD6)
164 WXK_(NUMPAD7)
165 WXK_(NUMPAD8)
166 WXK_(NUMPAD9)
168 WXK_(ADD)
171 WXK_(DECIMAL)
172 WXK_(DIVIDE)
173 WXK_(F1)
174 WXK_(F2)
175 WXK_(F3)
176 WXK_(F4)
177 WXK_(F5)
178 WXK_(F6)
179 WXK_(F7)
180 WXK_(F8)
181 WXK_(F9)
182 WXK_(F10)
183 WXK_(F11)
184 WXK_(F12)
185 WXK_(F13)
186 WXK_(F14)
187 WXK_(F15)
188 WXK_(F16)
189 WXK_(F17)
190 WXK_(F18)
191 WXK_(F19)
192 WXK_(F20)
193 WXK_(F21)
194 WXK_(F22)
195 WXK_(F23)
196 WXK_(F24)
197 WXK_(NUMLOCK)
198 WXK_(SCROLL)
199 WXK_(PAGEUP)
200 WXK_(PAGEDOWN)
201 WXK_(NUMPAD_SPACE)
202 WXK_(NUMPAD_TAB)
203 WXK_(NUMPAD_ENTER)
204 WXK_(NUMPAD_F1)
205 WXK_(NUMPAD_F2)
206 WXK_(NUMPAD_F3)
207 WXK_(NUMPAD_F4)
208 WXK_(NUMPAD_HOME)
209 WXK_(NUMPAD_LEFT)
210 WXK_(NUMPAD_UP)
211 WXK_(NUMPAD_RIGHT)
212 WXK_(NUMPAD_DOWN)
213 WXK_(NUMPAD_PAGEUP)
214 WXK_(NUMPAD_PAGEDOWN)
215 WXK_(NUMPAD_END)
216 WXK_(NUMPAD_BEGIN)
217 WXK_(NUMPAD_INSERT)
218 WXK_(NUMPAD_DELETE)
219 WXK_(NUMPAD_EQUAL)
220 WXK_(NUMPAD_MULTIPLY)
221 WXK_(NUMPAD_ADD)
222 WXK_(NUMPAD_SEPARATOR)
223 WXK_(NUMPAD_SUBTRACT)
224 WXK_(NUMPAD_DECIMAL)
225 WXK_(NUMPAD_DIVIDE)
226
227 WXK_(WINDOWS_LEFT)
228 WXK_(WINDOWS_RIGHT)
229#ifdef __WXOSX__
230 WXK_(RAW_CONTROL)
231#endif
232#undef WXK_
233
234 default:
235 return nullptr;
236 }
237}
238
239
240// helper function that returns textual description of key in the event
241wxString GetKeyName( const wxKeyEvent &aEvent )
242{
243 int keycode = aEvent.GetKeyCode();
244 const char* virt = GetVirtualKeyCodeName( keycode );
245
246 if( virt )
247 return virt;
248
249 if( keycode > 0 && keycode < 32 )
250 return wxString::Format( "Ctrl-%c", (unsigned char)('A' + keycode - 1) );
251
252 if( keycode >= 32 && keycode < 128 )
253 return wxString::Format( "'%c'", (unsigned char)keycode );
254
255#if wxUSE_UNICODE
256 int uc = aEvent.GetUnicodeKey();
257
258 if( uc != WXK_NONE )
259 return wxString::Format( "'%c'", uc );
260#endif
261
262 return "unknown";
263}
264
265
266wxString dump( const wxKeyEvent& aEvent )
267{
268 wxString msg;
269 wxString eventType = wxS( "unknown" );
270
271 if( aEvent.GetEventType() == wxEVT_KEY_DOWN )
272 eventType = wxS( "KeyDown" );
273 else if( aEvent.GetEventType() == wxEVT_KEY_UP )
274 eventType = wxS( "KeyUp" );
275 else if( aEvent.GetEventType() == wxEVT_CHAR )
276 eventType = wxS( "Char" );
277 else if( aEvent.GetEventType() == wxEVT_CHAR_HOOK )
278 eventType = wxS( "Hook" );
279
280 // event key_name KeyCode modifiers Unicode raw_code raw_flags pos
281 msg.Printf( "%7s %15s %5d %c%c%c%c"
282#if wxUSE_UNICODE
283 "%5d (U+%04x)"
284#else
285 " none "
286#endif
287#ifdef wxHAS_RAW_KEY_CODES
288 " %7lu 0x%08lx"
289#else
290 " not-set not-set"
291#endif
292 " (%5d,%5d)",
293 eventType,
294 GetKeyName( aEvent ),
295 aEvent.GetKeyCode(),
296 aEvent.ControlDown() ? 'C' : '-',
297 aEvent.AltDown() ? 'A' : '-',
298 aEvent.ShiftDown() ? 'S' : '-',
299 aEvent.MetaDown() ? 'M' : '-'
300#if wxUSE_UNICODE
301 , aEvent.GetUnicodeKey()
302 , aEvent.GetUnicodeKey()
303#endif
304#ifdef wxHAS_RAW_KEY_CODES
305 , (unsigned long) aEvent.GetRawKeyCode()
306 , (unsigned long) aEvent.GetRawKeyFlags()
307#endif
308 , aEvent.GetX()
309 , aEvent.GetY()
310 );
311
312 return msg;
313}
314
@ ADD
Definition am_param.h:146
@ SUBTRACT
Definition cursors.h:68
const wxChar *const traceSchPainter
Flag to enable debug output of schematic painter operations.
const wxChar *const traceOdbppIo
const wxChar *const traceSchSymbolRef
Flag to enable debug output of schematic symbol reference resolution.
const wxChar *const traceLibraries
Flag to enable library table and library manager tracing.
const wxChar *const traceSymbolResolver
Flag to enable debug output of symbol library resolver results.
const wxChar *const traceSchFieldRendering
Flag to enable debug output of schematic field rendering and positioning.
const wxChar *const traceDiffMerge
Flag to enable diff/merge engine and renderer debugging output.
const wxChar *const traceLibWatch
Flag to enable debug output for library file watch refreshes.
const wxChar *const traceSymbolInheritance
Flag to enable tracing of circular symbol inheritance detection.
const wxChar *const traceLocale
Flag to enable locale debug output.
const wxChar *const traceSchCurrentSheet
Flag to enable debug output of current sheet tracking in the schematic editor.
const wxChar *const traceKicadPcbPlugin
Flag to enable KiCad PCB plugin debug output.
const wxChar *const traceAutoSave
Flag to enable auto save feature debug tracing.
const wxChar *const traceEasyEdaIo
const wxChar *const kicadTraceKeyEvent
Flag to enable wxKeyEvent debug tracing.
const wxChar *const traceUiProfile
Flag to enable user interface profile tracing.
const wxChar *const traceEnvVars
Flag to enable debug output of environment variable operations.
const wxChar *const traceFindReplace
Flag to enable find and replace debug tracing.
const wxChar *const traceImportNetNames
Flag to enable tracing of imported net-name reconciliation between a schematic and its board.
const wxChar *const traceFindItem
Flag to enable find debug tracing.
const wxChar *const kicadTraceCoroutineStack
Flag to enable tracing of the coroutine call stack.
const wxChar *const traceSchLibMem
Flag to enable schematic library memory deletion debug output.
const wxChar *const traceEagleIo
const wxChar *const tracePathsAndFiles
Flag to enable path and file name debug output.
const wxChar *const traceKiCad2Step
Flag to enable KiCad2Step debug tracing.
const wxChar *const traceSchPlugin
Flag to enable legacy schematic plugin debug output.
const wxChar *const traceSchSheetPaths
Flag to enable debug output of schematic symbol sheet path manipulation code.
const wxChar *const traceSchNetChain
Flag to enable tracing of schematic net chain rebuild and ERC cross-chain checks.
const wxChar *const traceSchDragNetCollision
Flag to enable debug output of schematic drag net collision detection.
const wxChar *const traceFabmaster
const wxChar *const traceCrossProbeFlash
Flag to enable debug output for cross-probe flash operations.
const wxChar *const traceSchLegacyPlugin
Flag to enable legacy schematic plugin debug output.
const wxChar *const traceSchMove
Flag to watch how schematic move tool actions are handled.
const wxChar *const traceEasyPc
const wxChar *const tracePrinting
Flag to enable print controller debug output.
const wxChar *const traceCadstarIo
const wxChar *const kicadTraceCoords
Flag to enable draw panel coordinate debug tracing.
const wxChar *const traceZoomScroll
Flag to enable debug output of zoom-scrolling calculations in KIGFX::ZOOM_CONTROLLER and derivatives.
const wxChar *const traceGalContext
Flag to enable debug output of GAL context binding.
const wxChar *const traceGedaPcbPlugin
Flag to enable GEDA PCB plugin debug output.
const wxChar *const traceScreen
Flag to enable debug output of BASE_SCREEN and it's derivatives.
const wxChar *const traceModelPreview
Flag to enable native operating-system model preview debug output.
const wxChar *const tracePcadIo
const wxChar *const traceSnap
Flag to enable snap/grid helper debug tracing.
const wxChar *const tracePdfPlotter
Flag to enable PDF plotter debug tracing.
const wxChar *const traceAltiumIo
const wxChar *const tracePadsIo
const wxChar *const traceDesignBlocks
const wxChar *const traceStackedPins
Flag to enable debug output for stacked pins handling in symbol/pin code.
const wxChar *const traceFonts
Flag to enable locale debug output.
const wxChar *const traceDiptraceIo
const wxChar *const traceGit
Flag to enable Git debugging output.
const wxChar *const traceDisplayLocation
Flag to enable debug output of display positioning logic.
const wxChar *const traceLibFieldTable
const wxChar *const kicadTraceToolStack
Flag to enable tracing of the tool handling stack.
const wxChar *const traceGalProfile
Flag to enable debug output of GAL performance profiling.
@ START
First endpoint of a segment or arc.
static VECTOR2D CLEAR
wxString dump(const wxArrayString &aArray)
Debug helper for printing wxArrayString contents.
#define WXK_(x)
wxString GetKeyName(const wxKeyEvent &aEvent)
const char * GetVirtualKeyCodeName(int keycode)
wxLogTrace helper definitions.
#define SEPARATOR