ngscopeclient 0.1-dev+51fbda87c
MainWindow.h
Go to the documentation of this file.
1/***********************************************************************************************************************
2* *
3* ngscopeclient *
4* *
5* Copyright (c) 2012-2024 Andrew D. Zonenberg and contributors *
6* All rights reserved. *
7* *
8* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the *
9* following conditions are met: *
10* *
11* * Redistributions of source code must retain the above copyright notice, this list of conditions, and the *
12* following disclaimer. *
13* *
14* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the *
15* following disclaimer in the documentation and/or other materials provided with the distribution. *
16* *
17* * Neither the name of the author nor the names of any contributors may be used to endorse or promote products *
18* derived from this software without specific prior written permission. *
19* *
20* THIS SOFTWARE IS PROVIDED BY THE AUTHORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED *
21* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL *
22* THE AUTHORS BE HELD LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
23* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR *
24* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
25* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE *
26* POSSIBILITY OF SUCH DAMAGE. *
27* *
28***********************************************************************************************************************/
29
35#ifndef MainWindow_h
36#define MainWindow_h
37
38#include "Dialog.h"
39#include "Session.h"
40#include "FontManager.h"
41#include "TextureManager.h"
42#include "VulkanWindow.h"
43#include "WaveformGroup.h"
44
45#include "FilterGraphEditor.h"
48#include "StreamBrowserDialog.h"
51#include "Workspace.h"
52
53#include "../scopehal/PacketDecoder.h"
54
57class HistoryDialog;
58class FileBrowser;
60
62{
63public:
64 SplitGroupRequest(std::shared_ptr<WaveformGroup> group, ImGuiDir direction, StreamDescriptor stream)
65 : m_group(group)
66 , m_direction(direction)
67 , m_stream(stream)
68 {
69 auto schan = dynamic_cast<OscilloscopeChannel*>(stream.m_channel);
70 if(schan)
71 schan->AddRef();
72 }
73
75 : m_group(rhs.m_group)
76 , m_direction(rhs.m_direction)
77 , m_stream(rhs.m_stream)
78 {
79 auto schan = dynamic_cast<OscilloscopeChannel*>(rhs.m_stream.m_channel);
80 if(schan)
81 schan->AddRef();
82 }
83
84 SplitGroupRequest& operator=(const SplitGroupRequest& /*rhs*/) =delete;
85
87 {
88 auto schan = dynamic_cast<OscilloscopeChannel*>(m_stream.m_channel);
89 if(schan)
90 schan->Release();
91 }
92
93 std::shared_ptr<WaveformGroup> m_group;
94 ImGuiDir m_direction;
95 StreamDescriptor m_stream;
96};
97
102{
103public:
104 DockDialogRequest(std::shared_ptr<Dialog> dlg)
105 : m_dlg(dlg)
106 {}
107
108 std::shared_ptr<Dialog> m_dlg;
109};
110
115{
116public:
117 MainWindow(std::shared_ptr<QueueHandle> queue);
118 virtual ~MainWindow();
119
120 static bool OnMemoryPressureStatic(MemoryPressureLevel level, MemoryPressureType type, size_t requestedSize);
121 bool OnMemoryPressure(MemoryPressureLevel level, MemoryPressureType type, size_t requestedSize);
122 void LogMemoryUsage();
123
124 void AddDialog(std::shared_ptr<Dialog> dlg);
125 void RemoveFunctionGenerator(std::shared_ptr<SCPIFunctionGenerator> gen);
126
127 void OnScopeAdded(std::shared_ptr<Oscilloscope> scope, bool createViews);
128
129 void QueueSplitGroup(std::shared_ptr<WaveformGroup> group, ImGuiDir direction, StreamDescriptor stream)
130 { m_splitRequests.push_back(SplitGroupRequest(group, direction, stream)); }
131
132 void ShowChannelProperties(OscilloscopeChannel* channel);
133 void ShowInstrumentProperties(std::shared_ptr<Instrument> instrumet);
134 void ShowTimebaseProperties();
135 void ShowTriggerProperties();
136 void ShowManageInstruments();
137 void ShowSyncWizard(std::shared_ptr<TriggerGroup> group, std::shared_ptr<Oscilloscope> secondary);
138
139 void OnCursorMoved(int64_t offset);
140
142 int64_t stamp,
143 int64_t duration = 0,
144 StreamDescriptor target = StreamDescriptor(nullptr, 0));
145
150 {
152 m_timebaseDialog->Refresh();
153 }
154
159 {
161 m_triggerDialog->Refresh();
162 }
163
164 void ToneMapAllWaveforms(vk::raii::CommandBuffer& cmdbuf);
165
166 void RenderWaveformTextures(
167 vk::raii::CommandBuffer& cmdbuf,
168 std::vector<std::shared_ptr<DisplayedChannel> >& channels);
169
170 void SetNeedRender()
171 { m_needRender = true; }
172
173 void ClearPersistence()
174 {
175 m_clearPersistence = true;
176 SetNeedRender();
177 }
178
179 virtual void Render();
180
181 void QueueCloseSession()
182 { m_sessionClosing = true; }
183
184 Session& GetSession()
185 { return m_session; }
186
187 float GetTraceAlpha()
188 { return m_traceAlpha; }
189
190 float GetPersistDecay()
191 { return m_persistenceDecay; }
192
193 void SetPersistDecay(float f)
194 { m_persistenceDecay = f; }
195
197 const std::string& name,
198 WaveformArea* area,
199 StreamDescriptor initialStream,
200 bool showProperties = true,
201 bool addToArea = true);
203
205
206 const std::vector<std::string>& GetEyeGradients()
207 { return m_eyeGradients; }
208
209 std::string GetEyeGradientFriendlyName(std::string internalName)
210 { return m_eyeGradientFriendlyNames[internalName]; }
211
215 std::shared_ptr<MeasurementsDialog> GetMeasurementsDialog(bool createIfNotExisting);
216
218
222 std::map<uintptr_t, std::string> GetGraphEditorGroups()
223 { return m_graphEditorGroups; }
224
225protected:
226 virtual void DoRender(vk::raii::CommandBuffer& cmdBuf);
227
228 void CloseSession();
230
232 // GUI handlers
233
234 virtual void RenderUI();
235 void MainMenu();
236 void FileMenu();
237 void FileRecentMenu();
238 void ViewMenu();
239 void AddMenu();
240 void DoAddSubMenu(
241 std::vector<time_t>& timestamps,
242 std::map<time_t, std::vector<std::string> >& reverseMap,
243 const std::string& typePretty,
244 const std::string& defaultName,
245 const std::string& typeInternal
246 );
247 void AddChannelsMenu();
248 void AddImportMenu();
249 void AddGenerateMenu();
250 void SetupMenu();
251 void WindowMenu();
252 void WindowAnalyzerMenu();
253 void WindowGeneratorMenu();
254 void WindowPSUMenu();
256 void DebugMenu();
258 void HelpMenu();
259 void Toolbar();
260 void LoadToolbarIcons();
261 void ToolbarButtons();
262 void TriggerStartDropdown(float buttonsize);
263 void TriggerSingleDropdown(float buttonsize);
264 void TriggerForceDropdown(float buttonsize);
265 void TriggerStopDropdown(float buttonsize);
266 void DoTriggerDropdown(const char* action, std::shared_ptr<TriggerGroup>& group, bool& all);
267 void DockingArea();
268 void StatusBar(float height);
269
270 void LoadGradients();
271 void LoadGradient(const std::string& friendlyName, const std::string& internalName);
272 std::map<std::string, std::string> m_eyeGradientFriendlyNames;
273 std::vector<std::string> m_eyeGradients;
274
275 void LoadFilterIcons();
276 void LoadStatusBarIcons();
278
281
283 ImVec2 m_workPos;
284
287
289 std::set< std::shared_ptr<Workspace> > m_workspaces;
290
292 std::set< std::shared_ptr<Dialog> > m_dialogs;
293
295 std::map<std::shared_ptr<SCPIMultimeter>, std::shared_ptr<Dialog> > m_meterDialogs;
296
298 std::map<std::shared_ptr<SCPIPowerSupply>, std::shared_ptr<Dialog> > m_psuDialogs;
299
301 std::map<std::shared_ptr<SCPIFunctionGenerator>, std::shared_ptr<Dialog> > m_generatorDialogs;
302
304 std::map<std::shared_ptr<SCPIBERT>, std::shared_ptr<Dialog> > m_bertDialogs;
305
307 std::map<std::shared_ptr<SCPIRFSignalGenerator>, std::shared_ptr<Dialog> > m_rfgeneratorDialogs;
308
310 std::map<std::shared_ptr<SCPILoad>, std::shared_ptr<Dialog> > m_loadDialogs;
311
313 std::map<std::shared_ptr<SCPIInstrument>, std::shared_ptr<Dialog> > m_scpiConsoleDialogs;
314
316 std::map<InstrumentChannel*, std::shared_ptr<Dialog> > m_channelPropertiesDialogs;
317
319 std::map<PacketDecoder*, std::shared_ptr<ProtocolAnalyzerDialog> > m_protocolAnalyzerDialogs;
320
322 std::vector<std::shared_ptr<WaveformGroup> > m_waveformGroups;
323
325 std::recursive_mutex m_waveformGroupsMutex;
326
328 std::vector<std::shared_ptr<WaveformGroup> > m_newWaveformGroups;
329
332
333 std::string NameNewWaveformGroup();
334
336 std::shared_ptr<Dialog> m_logViewerDialog;
337
339 std::shared_ptr<Dialog> m_metricsDialog;
340
342 std::shared_ptr<Dialog> m_preferenceDialog;
343
345 std::shared_ptr<HistoryDialog> m_historyDialog;
346
348 std::shared_ptr<TimebasePropertiesDialog> m_timebaseDialog;
349
351 std::shared_ptr<TriggerPropertiesDialog> m_triggerDialog;
352
354 std::shared_ptr<ManageInstrumentsDialog> m_manageInstrumentsDialog;
355
357 std::shared_ptr<Dialog> m_persistenceDialog;
358
360 std::shared_ptr<Dialog> m_notesDialog;
361
363 std::shared_ptr<FilterGraphEditor> m_graphEditor;
364
366 std::shared_ptr<StreamBrowserDialog> m_streamBrowser;
367
369 std::shared_ptr<CreateFilterBrowser> m_filterPalette;
370
373
375 std::map<uintptr_t, std::string> m_graphEditorGroups;
376
378 std::shared_ptr<MeasurementsDialog> m_measurementsDialog;
379
380 void OnDialogClosed(const std::shared_ptr<Dialog>& dlg);
381
383 std::vector<SplitGroupRequest> m_splitRequests;
384
386 std::shared_ptr<Workspace> m_initialWorkspaceDockRequest;
387
389 std::vector<size_t> m_groupsToClose;
390
391 std::shared_ptr<WaveformGroup> GetBestGroupForWaveform(StreamDescriptor stream);
392
395
398
401
403 std::set< std::pair<OscilloscopeChannel*, WaveformArea*> > m_pendingChannelDisplayRequests;
404
406 // Session state
407
410
413
414 SCPITransport* MakeTransport(const std::string& trans, const std::string& args);
415
417 // Serialization
418
419 void OnOpenFile(bool online);
420 void DoOpenFile(const std::string& sessionPath, bool online);
421 bool PreLoadSessionFromYaml(const YAML::Node& node, const std::string& dataDir, bool online);
422 bool LoadSessionFromYaml(const YAML::Node& node, const std::string& dataDir, bool online);
423public:
424 bool LoadUIConfiguration(int version, const YAML::Node& node);
425
426 void OnGraphEditorConfigModified(const std::string& blob)
427 { m_graphEditorConfigBlob = blob; }
428
429 const std::string& GetGraphEditorConfigBlob()
430 { return m_graphEditorConfigBlob; }
431
432protected:
433 void OnSaveAs();
434 void DoSaveFile(std::string sessionPath);
435 bool SaveSessionToYaml(YAML::Node& node, const std::string& dataDir);
436 void SaveLabNotes(const std::string& dataDir);
437 void LoadLabNotes(const std::string& dataDir);
438 bool SetupDataDirectory(const std::string& dataDir);
439 YAML::Node SerializeUIConfiguration();
440 YAML::Node SerializeDialogs();
441 bool LoadDialogs(const YAML::Node& node);
442
443 void RenderFileBrowser();
444
445 enum
446 {
447 BROWSE_OPEN_SESSION,
448 BROWSE_SAVE_SESSION
449 } m_fileBrowserMode;
450
452 std::shared_ptr<FileBrowser> m_fileBrowser;
453
455 std::vector<YAML::Node> m_fileBeingLoaded;
456
459
461 std::string m_sessionFileName;
462
464 std::string m_sessionDataDir;
465
466public:
467 std::string GetDataDir()
468 { return m_sessionDataDir; }
469
470protected:
471
474
475protected:
476
478 // Recent item lists
479
483 std::map<std::string, time_t> m_recentInstruments;
484
485 void LoadRecentInstrumentList();
486 void SaveRecentInstrumentList();
487
491 std::map<std::string, time_t> m_recentFiles;
492
493 void LoadRecentFileList();
494 void SaveRecentFileList();
495
496public:
497 void AddToRecentInstrumentList(std::shared_ptr<SCPIInstrument> inst);
498
499protected:
500
502 // Error handling
503
504 std::string m_errorPopupTitle;
505 std::string m_errorPopupMessage;
506
507 bool m_showingLoadWarnings;
508 bool m_loadConfirmationChecked;
509
510 void RenderErrorPopup();
512public:
513 void ShowErrorPopup(const std::string& title, const std::string& msg);
514
515protected:
517 // Graphics items
518
519 TextureManager m_texmgr;
520
527
531 std::atomic<bool> m_clearPersistence;
532
534 std::unique_ptr<vk::raii::CommandPool> m_cmdPool;
535
537 std::unique_ptr<vk::raii::CommandBuffer> m_cmdBuffer;
538
539 bool DropdownButton(const char* id, float height);
540
541public:
542
546 ImFont* GetFontPref(const std::string& name)
547 { return m_fontmgr.GetFont(m_session.GetPreferences().GetFont(name.c_str())); }
548
549 ImU32 GetColorPref(const std::string& name)
550 { return m_session.GetPreferences().GetColor(name); }
551
552 ImTextureID GetTexture(const std::string& name)
553 { return m_texmgr.GetTexture(name); }
554
555 TextureManager* GetTextureManager()
556 { return &m_texmgr; }
557
558 std::string GetIconForFilter(Filter* f);
559
561
562protected:
563 FontManager m_fontmgr;
564
566 std::map<std::type_index, std::string> m_filterIconMap;
567
569 std::map<FunctionGenerator::WaveShape, std::string> m_waveformShapeIconMap;
570
571 void UpdateFonts();
572
574 // Status bar
575public:
576
577 void AddStatusHelp(const std::string& icon, const std::string& text)
578 { m_statusHelp[icon] = text; }
579
580protected:
581 std::map<std::string, std::string> m_statusHelp;
582
584 // Performance counters
585
586protected:
587 int64_t m_toneMapTime;
588
589public:
590 int64_t GetToneMapTime()
591 { return m_toneMapTime; }
592};
593
594#endif
MemoryPressureLevel
Levels of memory pressure.
Definition: AcceleratorBuffer.h:67
MemoryPressureType
Types of memory pressure.
Definition: AcceleratorBuffer.h:84
Declaration of Dialog.
Declaration of FilterGraphEditor.
Declaration of FontManager.
Declaration of ManageInstrumentsDialog.
Declaration of ProtocolAnalyzerDialog.
Declaration of Session.
Declaration of StreamBrowserDialog.
Declaration of TextureManager.
Declaration of TimebasePropertiesDialog.
Declaration of TriggerPropertiesDialog.
Declaration of VulkanWindow.
Declaration of WaveformGroup.
Declaration of Workspace.
Definition: CreateFilterBrowser.h:44
Pending request to dock a dialog as a top level tab (TODO other options)
Definition: MainWindow.h:102
Abstract base class for a dialog that displays a file picker window.
Definition: FileBrowser.h:44
Abstract base class for all filter graph blocks which are not physical instrument channels.
Definition: Filter.h:95
Definition: FontManager.h:46
ImFont * GetFont(FontDescription desc)
Gets the font, if any, for the provided description.
Definition: FontManager.h:56
WaveShape
Predefined waveform shapes.
Definition: FunctionGenerator.h:55
UI for the history system.
Definition: HistoryDialog.h:47
Top level application window.
Definition: MainWindow.h:115
void DebugSCPIConsoleMenu()
Runs the Debug | SCPI Console menu.
Definition: MainWindow_Menus.cpp:814
std::vector< YAML::Node > m_fileBeingLoaded
YAML structure for file we're currently loading.
Definition: MainWindow.h:455
void AddChannelsMenu()
Run the Add | Channels menu.
Definition: MainWindow_Menus.cpp:368
void AddAreaForStreamIfNotAlreadyVisible(StreamDescriptor stream)
Makes sure we have at least one waveform area displaying a given stream.
Definition: MainWindow.cpp:331
std::shared_ptr< CreateFilterBrowser > m_filterPalette
Filter palette.
Definition: MainWindow.h:369
std::map< std::shared_ptr< SCPIBERT >, std::shared_ptr< Dialog > > m_bertDialogs
Map of BERTs to BERT control dialogs.
Definition: MainWindow.h:304
std::vector< SplitGroupRequest > m_splitRequests
Pending requests to split waveform groups.
Definition: MainWindow.h:383
bool LoadSessionFromYaml(const YAML::Node &node, const std::string &dataDir, bool online)
Deserialize a YAML::Node (and associated data directory) to the current session.
Definition: MainWindow.cpp:2352
bool m_fileLoadInProgress
True if we're actively loading a file.
Definition: MainWindow.h:458
Filter * CreateFilter(const std::string &name, WaveformArea *area, StreamDescriptor initialStream, bool showProperties=true, bool addToArea=true)
Creates a filter optionally and adds all of its streams to the best waveform area.
Definition: MainWindow.cpp:1895
std::string m_sessionDataDir
Current session data directory.
Definition: MainWindow.h:464
void RemoveFunctionGenerator(std::shared_ptr< SCPIFunctionGenerator > gen)
Closes the function generator dialog, if we have one.
Definition: MainWindow.cpp:1851
void OnOpenFile(bool online)
Handler for file | open menu. Spawns the browser dialog.
Definition: MainWindow.cpp:2168
std::vector< std::shared_ptr< WaveformGroup > > m_newWaveformGroups
Set of newly created waveform groups that aren't yet docked.
Definition: MainWindow.h:328
std::string m_sessionFileName
Current session file path.
Definition: MainWindow.h:461
std::map< uintptr_t, std::string > GetGraphEditorGroups()
Returns the groups we have configured for our graph editor.
Definition: MainWindow.h:222
YAML::Node SerializeUIConfiguration()
Serialize waveform areas etc to a YAML::Node.
Definition: MainWindow.cpp:3138
void OnCursorMoved(int64_t offset)
Called when a cursor is moved, so protocol analyzers can move highlights as needed.
Definition: MainWindow.cpp:2156
int m_nextWaveformGroup
Name for next autogenerated waveform group.
Definition: MainWindow.h:331
std::shared_ptr< Dialog > m_logViewerDialog
Logfile viewer.
Definition: MainWindow.h:336
Session m_session
Our session object.
Definition: MainWindow.h:409
std::atomic< bool > m_clearPersistence
True if we should clear persistence on the next render pass.
Definition: MainWindow.h:531
bool m_openOnline
True if the pending file is to be opened online.
Definition: MainWindow.h:473
void WindowPSUMenu()
Run the Window | Power Supply menu.
Definition: MainWindow_Menus.cpp:758
std::string GetIconForFilter(Filter *f)
Gets the icon to use for a filter.
Definition: MainWindow_Icons.cpp:608
std::set< std::shared_ptr< Dialog > > m_dialogs
All dialogs and other pop-up UI elements.
Definition: MainWindow.h:292
void LoadStatusBarIcons()
Load icons for the status bar.
Definition: MainWindow_Icons.cpp:227
std::map< std::string, time_t > m_recentInstruments
List of recently used instruments.
Definition: MainWindow.h:483
void LoadToolbarIcons()
Load toolbar icons from disk if preferences changed.
Definition: MainWindow_Icons.cpp:770
static bool OnMemoryPressureStatic(MemoryPressureLevel level, MemoryPressureType type, size_t requestedSize)
Static wrapper for calling OnMemoryPressure.
Definition: MainWindow.cpp:3473
void WindowMenu()
Run the Window menu.
Definition: MainWindow_Menus.cpp:559
void DebugMenu()
Run the Debug menu.
Definition: MainWindow_Menus.cpp:840
void WindowGeneratorMenu()
Run the Window | Generator menu.
Definition: MainWindow_Menus.cpp:723
void RefreshTriggerPropertiesDialog()
Update the trigger properties dialog.
Definition: MainWindow.h:158
std::map< InstrumentChannel *, std::shared_ptr< Dialog > > m_channelPropertiesDialogs
Map of channels to properties dialogs.
Definition: MainWindow.h:316
std::shared_ptr< FileBrowser > m_fileBrowser
Browser for pending file loads.
Definition: MainWindow.h:452
std::string GetIconForWaveformShape(FunctionGenerator::WaveShape shape)
Gets the icon to use for a given wave shape.
Definition: MainWindow_Icons.cpp:758
std::shared_ptr< Workspace > m_initialWorkspaceDockRequest
Pending requests to dock initial stuff.
Definition: MainWindow.h:386
void ViewMenu()
Run the View menu.
Definition: MainWindow_Menus.cpp:225
void LoadFilterIcons()
Load icons for the filter graph.
Definition: MainWindow_Icons.cpp:249
std::vector< std::shared_ptr< WaveformGroup > > m_waveformGroups
Waveform groups.
Definition: MainWindow.h:322
std::map< std::shared_ptr< SCPIRFSignalGenerator >, std::shared_ptr< Dialog > > m_rfgeneratorDialogs
Map of RF generators to generator control dialogs.
Definition: MainWindow.h:307
ImVec2 m_workPos
Start position of the viewport minus the menu and toolbar.
Definition: MainWindow.h:283
void AddMenu()
Run the Add menu.
Definition: MainWindow_Menus.cpp:247
std::map< std::type_index, std::string > m_filterIconMap
Map of filter types to class names.
Definition: MainWindow.h:566
std::shared_ptr< Dialog > m_notesDialog
Lab notes.
Definition: MainWindow.h:360
void NavigateToTimestamp(int64_t stamp, int64_t duration=0, StreamDescriptor target=StreamDescriptor(nullptr, 0))
Scrolls all waveform groups so that the specified timestamp is visible.
Definition: MainWindow.cpp:1370
void FileRecentMenu()
Runs the File | Recent menu.
Definition: MainWindow_Menus.cpp:174
void AddImportMenu()
Run the Add | Import menu.
Definition: MainWindow_Menus.cpp:439
void RenderErrorPopup()
Popup message when something big goes wrong.
Definition: MainWindow.cpp:1668
std::shared_ptr< MeasurementsDialog > m_measurementsDialog
Measurements dialog.
Definition: MainWindow.h:378
std::shared_ptr< Dialog > m_preferenceDialog
Preferences.
Definition: MainWindow.h:342
std::map< std::shared_ptr< SCPIPowerSupply >, std::shared_ptr< Dialog > > m_psuDialogs
Map of PSUs to power supply control dialogs.
Definition: MainWindow.h:298
std::shared_ptr< Dialog > m_persistenceDialog
Persistence settings.
Definition: MainWindow.h:357
void RefreshTimebasePropertiesDialog()
Update the timebase properties dialog.
Definition: MainWindow.h:149
std::map< uintptr_t, std::string > m_graphEditorGroups
Group IDs and names for the graph editor.
Definition: MainWindow.h:375
std::unique_ptr< vk::raii::CommandPool > m_cmdPool
Command pool for allocating our command buffers.
Definition: MainWindow.h:534
std::unique_ptr< vk::raii::CommandBuffer > m_cmdBuffer
Command buffer used during rendering operations.
Definition: MainWindow.h:537
bool SetupDataDirectory(const std::string &dataDir)
Make sure the data directory exists.
Definition: MainWindow.cpp:3052
void WindowAnalyzerMenu()
Run the Window | Analyzer menu.
Definition: MainWindow_Menus.cpp:676
void LoadWaveformShapeIcons()
Load icons for wave shape preview.
Definition: MainWindow_Icons.cpp:661
std::map< std::shared_ptr< SCPIInstrument >, std::shared_ptr< Dialog > > m_scpiConsoleDialogs
Map of instruments to SCPI console dialogs.
Definition: MainWindow.h:313
void LoadLabNotes(const std::string &dataDir)
Loads the lab notes from Markdown files in the data directory.
Definition: MainWindow.cpp:2954
void OnSaveAs()
Handler for file | save as menu. Spawns the browser dialog.
Definition: MainWindow.cpp:2184
std::map< PacketDecoder *, std::shared_ptr< ProtocolAnalyzerDialog > > m_protocolAnalyzerDialogs
Map of filters to analyzer dialogs.
Definition: MainWindow.h:319
std::map< FunctionGenerator::WaveShape, std::string > m_waveformShapeIconMap
Map of Waveform Shapes to icons.
Definition: MainWindow.h:569
bool PreLoadSessionFromYaml(const YAML::Node &node, const std::string &dataDir, bool online)
Sanity check a YAML::Node (and associated data directory) to the current session without fully loadin...
Definition: MainWindow.cpp:2318
void UpdateFonts()
Font.
Definition: MainWindow.cpp:1867
std::string m_graphEditorConfigBlob
Config blob for filter graph editor.
Definition: MainWindow.h:372
std::map< std::shared_ptr< SCPILoad >, std::shared_ptr< Dialog > > m_loadDialogs
Map of loads to control dialogs.
Definition: MainWindow.h:310
std::shared_ptr< TriggerPropertiesDialog > m_triggerDialog
Trigger properties.
Definition: MainWindow.h:351
float m_traceAlpha
Trace alpha.
Definition: MainWindow.h:397
std::shared_ptr< ManageInstrumentsDialog > m_manageInstrumentsDialog
Manage instruments.
Definition: MainWindow.h:354
void DoSaveFile(std::string sessionPath)
Actually save a file (may be triggered by file|save or file|save as)
Definition: MainWindow.cpp:2851
void FindAreaForStream(WaveformArea *area, StreamDescriptor stream)
Given a stream and optionally a WaveformArea, adds the stream to some area.
Definition: MainWindow.cpp:1971
float m_persistenceDecay
Persistence decay factor.
Definition: MainWindow.h:400
ImFont * GetFontPref(const std::string &name)
Returns a font, given the name of a preference setting.
Definition: MainWindow.h:546
SCPITransport * MakeTransport(const std::string &trans, const std::string &args)
Helper function for creating a transport and printing an error if the connection is unsuccessful.
Definition: MainWindow.cpp:1616
void HelpMenu()
Run the Help menu.
Definition: MainWindow_Menus.cpp:864
std::shared_ptr< TimebasePropertiesDialog > m_timebaseDialog
Timebase properties.
Definition: MainWindow.h:348
std::map< std::shared_ptr< SCPIFunctionGenerator >, std::shared_ptr< Dialog > > m_generatorDialogs
Map of generators to generator control dialogs.
Definition: MainWindow.h:301
void ToneMapAllWaveforms(vk::raii::CommandBuffer &cmdbuf)
Run the tone-mapping shader on all of our waveforms.
Definition: MainWindow.cpp:549
std::shared_ptr< StreamBrowserDialog > m_streamBrowser
Stream browser.
Definition: MainWindow.h:366
bool LoadDialogs(const YAML::Node &node)
Load dialog configuration.
Definition: MainWindow.cpp:2622
ImVec2 m_workSize
Size position of the viewport minus the menu and toolbar.
Definition: MainWindow.h:286
std::shared_ptr< WaveformGroup > GetBestGroupForWaveform(StreamDescriptor stream)
Figure out what group to use for a newly added stream, based on unit compatibility etc.
Definition: MainWindow.cpp:355
void DoOpenFile(const std::string &sessionPath, bool online)
Actually open a file (may be triggered by dialog, command line request, or recent file menu)
Definition: MainWindow.cpp:2228
void AddGenerateMenu()
Run the Add | Generate menu.
Definition: MainWindow_Menus.cpp:474
void ShowErrorPopup(const std::string &title, const std::string &msg)
Opens the error popup.
Definition: MainWindow.cpp:1659
void LoadGradient(const std::string &friendlyName, const std::string &internalName)
Load a single gradient.
Definition: MainWindow.cpp:817
std::map< std::string, time_t > m_recentFiles
List of recently used files.
Definition: MainWindow.h:491
void InitializeDefaultSession()
Creates a new session initialized with some default windows.
Definition: MainWindow.cpp:203
std::set< std::pair< OscilloscopeChannel *, WaveformArea * > > m_pendingChannelDisplayRequests
Pending requests to display a channel in a waveform area (from CreateFilter())
Definition: MainWindow.h:403
void SetupMenu()
Run the Setup menu.
Definition: MainWindow_Menus.cpp:511
void SaveLabNotes(const std::string &dataDir)
Saves the lab notes to Markdown files in the data directory.
Definition: MainWindow.cpp:2906
std::map< std::shared_ptr< SCPIMultimeter >, std::shared_ptr< Dialog > > m_meterDialogs
Map of multimeters to meter control dialogs.
Definition: MainWindow.h:295
void LoadGradients()
Load gradient images.
Definition: MainWindow.cpp:798
std::shared_ptr< Dialog > m_metricsDialog
Performance metrics.
Definition: MainWindow.h:339
YAML::Node SerializeDialogs()
Serializes the list of open dialogs.
Definition: MainWindow.cpp:3217
void MainMenu()
Run the top level menu bar.
Definition: MainWindow_Menus.cpp:103
void WindowMultimeterMenu()
Run the Window | Multimeter menu.
Definition: MainWindow_Menus.cpp:786
bool SaveSessionToYaml(YAML::Node &node, const std::string &dataDir)
Serialize the current session to a YAML::Node.
Definition: MainWindow.cpp:3004
bool m_showDemo
Enable flag for main imgui demo window.
Definition: MainWindow.h:280
void DoAddSubMenu(std::vector< time_t > &timestamps, std::map< time_t, std::vector< std::string > > &reverseMap, const std::string &typePretty, const std::string &defaultName, const std::string &typeInternal)
Run the Add | (instrument type) submenu.
Definition: MainWindow_Menus.cpp:290
bool m_sessionClosing
True if a close-session request came in this frame.
Definition: MainWindow.h:412
void OnScopeAdded(std::shared_ptr< Oscilloscope > scope, bool createViews)
Handles creation of a new oscilloscope.
Definition: MainWindow.cpp:383
void OnFilterReconfigured(Filter *f)
Handle a filter being reconfigured.
Definition: MainWindow.cpp:2136
std::shared_ptr< HistoryDialog > m_historyDialog
History.
Definition: MainWindow.h:345
std::vector< size_t > m_groupsToClose
Pending requests to close waveform groups.
Definition: MainWindow.h:389
std::recursive_mutex m_waveformGroupsMutex
Mutex for controlling access to m_waveformGroups.
Definition: MainWindow.h:325
bool m_needRender
True if a resize or other event this frame requires we re-rasterize waveforms.
Definition: MainWindow.h:526
int m_toolbarIconSize
Cached toolbar icon size.
Definition: MainWindow.h:394
std::shared_ptr< MeasurementsDialog > GetMeasurementsDialog(bool createIfNotExisting)
Return the measurements dialog, if we have one.
Definition: MainWindow.cpp:1642
std::shared_ptr< FilterGraphEditor > m_graphEditor
Filter graph editor.
Definition: MainWindow.h:363
std::set< std::shared_ptr< Workspace > > m_workspaces
Workspaces (can't be with other dialogs because they can contain other stuff)
Definition: MainWindow.h:289
void RenderFileBrowser()
Runs the file browser dialog.
Definition: MainWindow.cpp:2199
void RenderLoadWarningPopup()
Popup message when loading a file that might not match the current hardware setup.
Definition: MainWindow.cpp:1690
void FileMenu()
Run the File menu.
Definition: MainWindow_Menus.cpp:121
Definition: MeasurementsDialog.h:42
Definition: MultimeterDialog.h:42
A single channel on an oscilloscope.
Definition: OscilloscopeChannel.h:49
Abstraction of a transport layer for moving SCPI data between endpoints.
Definition: SCPITransport.h:47
A Session stores all of the instrument configuration and other state the user has open.
Definition: Session.h:95
Definition: MainWindow.h:62
Descriptor for a single stream coming off a channel.
Definition: StreamDescriptor.h:46
Manages loading and saving texture resources to files.
Definition: TextureManager.h:102
A GLFW window containing a Vulkan surface.
Definition: VulkanWindow.h:44
A WaveformArea is a plot that displays one or more OscilloscopeChannel's worth of data.
Definition: WaveformArea.h:446