52#include "imgui_markdown.h"
56#include "../scopehal/PacketDecoder.h"
67 std::shared_ptr<WaveformGroup>
group,
75 , m_streamGroup(
nullptr)
99 : m_group(
rhs.m_group)
100 , m_direction(
rhs.m_direction)
101 , m_stream(
rhs.m_stream)
103 , m_streamGroup(
rhs.m_streamGroup)
104 , m_singleArea(
rhs.m_singleArea)
112 else if(
rhs.m_streamGroup)
114 for(
auto chan :
rhs.m_streamGroup->m_channels)
131 else if(m_streamGroup)
133 for(
auto chan : m_streamGroup->m_channels)
140 std::shared_ptr<WaveformGroup> m_group;
147 std::shared_ptr<StreamGroupDescriptor> m_streamGroup;
161 std::shared_ptr<Dialog> m_dlg;
175 void LogMemoryUsage();
177 void AddDialog(std::shared_ptr<Dialog>
dlg);
182 void QueueSplitGroup(
183 std::shared_ptr<WaveformGroup>
group,
194 void ShowInstrumentProperties(std::shared_ptr<Instrument>
instrument);
195 void ShowTriggerProperties();
196 void ShowManageInstruments();
197 void ShowSyncWizard(std::shared_ptr<TriggerGroup>
group, std::shared_ptr<Oscilloscope>
secondary);
204 auto pos = ImGui::GetIO().MousePos;
233 void RenderWaveformTextures(
234 vk::raii::CommandBuffer&
cmdbuf,
235 std::vector<std::shared_ptr<InputDescriptor> >&
channels);
240 void ClearPersistence()
246 virtual void Render();
248 void QueueCloseSession()
254 float GetTraceAlpha()
257 float GetPersistDecay()
267 const std::string& name,
276 const std::vector<std::string>& GetEyeGradients()
277 {
return m_eyeGradients; }
279 std::string GetEyeGradientFriendlyName(
const std::string&
internalName)
295 void SetStartupSession(
const std::string& path)
303 virtual void DoRender(vk::raii::CommandBuffer& cmdBuf);
311 virtual void RenderUI();
336 void ToolbarButtons();
342 void DoTriggerDropdown(
const char*
action, std::shared_ptr<TriggerGroup>&
group,
bool&
all);
344 void StatusBar(
float height);
348 std::map<std::string, std::string> m_eyeGradientFriendlyNames;
349 std::vector<std::string> m_eyeGradients;
373 std::map<std::shared_ptr<SCPIMultimeter>, std::shared_ptr<Dialog> >
m_meterDialogs;
376 std::map<std::shared_ptr<SCPIPowerSupply>, std::shared_ptr<Dialog> >
m_psuDialogs;
382 std::map<std::shared_ptr<SCPIBERT>, std::shared_ptr<Dialog> >
m_bertDialogs;
388 std::map<std::shared_ptr<SCPILoad>, std::shared_ptr<Dialog> >
m_loadDialogs;
411 std::string NameNewWaveformGroup();
458 void OnDialogClosed(
const std::shared_ptr<Dialog>&
dlg);
508 bool LoadUIConfiguration(
int version,
const YAML::Node&
node);
510 void OnGraphEditorConfigModified(
const std::string&
blob)
513 const std::string& GetGraphEditorConfigBlob()
554 const std::string& GetDataDir()
572 void LoadRecentInstrumentList();
573 void SaveRecentInstrumentList();
580 void LoadRecentFileList();
581 void SaveRecentFileList();
584 void AddToRecentInstrumentList(std::shared_ptr<SCPIInstrument> inst);
585 void RenameRecentInstrument(std::shared_ptr<SCPIInstrument> inst,
const std::string&
oldName);
586 void RepathRecentInstrument(std::shared_ptr<SCPIInstrument> inst,
const std::string&
oldPath);
593 std::string m_errorPopupTitle;
594 std::string m_errorPopupMessage;
596 bool m_showingLoadWarnings;
597 bool m_loadConfirmationChecked;
626 bool DropdownButton(
const char*
id,
float height);
638 return std::pair<ImFont*, float>(m_fontmgr.
GetFont(
desc),
desc.second);
641 ImU32 GetColorPref(
const std::string& name)
642 {
return m_session.GetPreferences().GetColor(name); }
645 {
return m_texmgr.GetTexture(name); }
648 {
return &m_texmgr; }
654 ImGui::MarkdownConfig GetMarkdownConfig();
671 void AddStatusHelp(
const std::string&
icon,
const std::string&
text)
675 std::map<std::string, std::string> m_statusHelp;
685 {
return m_toneMapTime; }
MemoryPressureLevel
Levels of memory pressure.
Definition AcceleratorBuffer.h:172
MemoryPressureType
Types of memory pressure.
Definition AcceleratorBuffer.h:189
Declaration of FilterGraphEditor.
Declaration of FontManager.
Declaration of ManageInstrumentsDialog.
Enum definitions for preference settings.
Declaration of ProtocolAnalyzerDialog.
Declaration of StreamBrowserDialog.
Declaration of TextureManager.
Declaration of TriggerPropertiesDialog.
Declaration of TutorialWizard.
Declaration of VulkanWindow.
Declaration of Workspace.
Definition AcceleratorBuffer.h:204
Definition CreateFilterBrowser.h:44
Pending request to dock a dialog as a top level tab (TODO other options)
Definition MainWindow.h:155
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:105
Definition FontManager.h:49
ImFont * GetFont(FontDescription desc)
Gets the font, if any, for the provided description.
Definition FontManager.h:59
WaveShape
Predefined waveform shapes.
Definition FunctionGenerator.h:55
UI for the history system.
Definition HistoryDialog.h:47
A single channel of an instrument.
Definition InstrumentChannel.h:63
Top level application window.
Definition MainWindow.h:168
void DebugSCPIConsoleMenu()
Runs the Debug | SCPI Console menu.
Definition MainWindow_Menus.cpp:748
static void SetTooltipPosition()
Helper for making sure tooltips aren't obscured by the mouse.
Definition MainWindow.h:202
std::string m_lastWindowTitle
Last window title set (glfw doesnt let us get this)
Definition MainWindow.h:551
Filter * CreateFilter(const std::string &name, uint32_t flags, WaveformArea *area, StreamDescriptor initialStream)
Creates a filter optionally and adds all of its streams to the best waveform area.
Definition MainWindow.cpp:2201
std::vector< YAML::Node > m_fileBeingLoaded
YAML structure for file we're currently loading.
Definition MainWindow.h:539
void AddChannelsMenu()
Run the Add | Channels menu.
Definition MainWindow_Menus.cpp:397
void AddAreaForStreamIfNotAlreadyVisible(StreamDescriptor stream)
Makes sure we have at least one waveform area displaying a given stream.
Definition MainWindow.cpp:341
std::shared_ptr< CreateFilterBrowser > m_filterPalette
Filter palette.
Definition MainWindow.h:447
std::map< std::shared_ptr< SCPIBERT >, std::shared_ptr< Dialog > > m_bertDialogs
Map of BERTs to BERT control dialogs.
Definition MainWindow.h:382
void LoadMiscIcons()
Load various miscellaneous icons and textures.
Definition MainWindow_Icons.cpp:804
std::vector< SplitGroupRequest > m_splitRequests
Pending requests to split waveform groups.
Definition MainWindow.h:461
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:2667
bool m_fileLoadInProgress
True if we're actively loading a file.
Definition MainWindow.h:542
IconTheme_t m_toolbarIconTheme
cached toolbar icon theme
Definition MainWindow.h:475
std::string m_sessionDataDir
Current session data directory.
Definition MainWindow.h:548
void RemoveFunctionGenerator(std::shared_ptr< SCPIFunctionGenerator > gen)
Closes the function generator dialog, if we have one.
Definition MainWindow.cpp:2162
void OnOpenFile(bool online)
Handler for file | open menu. Spawns the browser dialog.
Definition MainWindow.cpp:2483
std::shared_ptr< TutorialWizard > GetTutorialWizard()
Gets a pointer to the tutorial wizard (if we have one open)
Definition MainWindow.h:299
std::vector< std::shared_ptr< WaveformGroup > > m_newWaveformGroups
Set of newly created waveform groups that aren't yet docked.
Definition MainWindow.h:406
std::string m_sessionFileName
Current session file path.
Definition MainWindow.h:545
YAML::Node SerializeUIConfiguration()
Serialize waveform areas etc to a YAML::Node.
Definition MainWindow.cpp:3445
void OnCursorMoved(int64_t offset)
Called when a cursor is moved, so protocol analyzers can move highlights as needed.
Definition MainWindow.cpp:2471
int m_nextWaveformGroup
Name for next autogenerated waveform group.
Definition MainWindow.h:409
std::shared_ptr< Dialog > m_logViewerDialog
Logfile viewer.
Definition MainWindow.h:414
Session m_session
Our session object.
Definition MainWindow.h:493
std::atomic< bool > m_clearPersistence
True if we should clear persistence on the next render pass.
Definition MainWindow.h:621
bool m_openOnline
True if the pending file is to be opened online.
Definition MainWindow.h:560
void WindowPSUMenu()
Run the Window | Power Supply menu.
Definition MainWindow_Menus.cpp:711
std::string GetIconForFilter(Filter *f)
Gets the icon to use for a filter.
Definition MainWindow_Icons.cpp:642
std::set< std::shared_ptr< Dialog > > m_dialogs
All dialogs and other pop-up UI elements.
Definition MainWindow.h:370
void LoadStatusBarIcons()
Load icons for the status bar.
Definition MainWindow_Icons.cpp:258
std::map< std::string, time_t > m_recentInstruments
List of recently used instruments.
Definition MainWindow.h:570
void LoadToolbarIcons()
Load toolbar icons from disk if preferences changed.
Definition MainWindow_Icons.cpp:816
void RefreshStreamBrowserDialog()
Update the timebase properties dialog.
Definition MainWindow.h:216
static bool OnMemoryPressureStatic(MemoryPressureLevel level, MemoryPressureType type, size_t requestedSize)
Static wrapper for calling OnMemoryPressure.
Definition MainWindow.cpp:3783
void WindowMenu()
Run the Window menu.
Definition MainWindow_Menus.cpp:562
void DebugMenu()
Run the Debug menu.
Definition MainWindow_Menus.cpp:783
void RefreshTriggerPropertiesDialog()
Update the trigger properties dialog.
Definition MainWindow.h:225
std::map< InstrumentChannel *, std::shared_ptr< Dialog > > m_channelPropertiesDialogs
Map of channels to properties dialogs.
Definition MainWindow.h:394
std::shared_ptr< FileBrowser > m_fileBrowser
Browser for pending file loads.
Definition MainWindow.h:536
std::string GetIconForWaveformShape(FunctionGenerator::WaveShape shape)
Gets the icon to use for a given wave shape.
Definition MainWindow_Icons.cpp:792
std::shared_ptr< Workspace > m_initialWorkspaceDockRequest
Pending requests to dock initial stuff.
Definition MainWindow.h:464
void ViewMenu()
Run the View menu.
Definition MainWindow_Menus.cpp:216
void LoadFilterIcons()
Load icons for the filter graph.
Definition MainWindow_Icons.cpp:280
std::vector< std::shared_ptr< WaveformGroup > > m_waveformGroups
Waveform groups.
Definition MainWindow.h:400
std::map< std::shared_ptr< SCPIRFSignalGenerator >, std::shared_ptr< Dialog > > m_rfgeneratorDialogs
Map of RF generators to generator control dialogs.
Definition MainWindow.h:385
ImVec2 m_workPos
Start position of the viewport minus the menu and toolbar.
Definition MainWindow.h:361
void AddMenu()
Run the Add menu.
Definition MainWindow_Menus.cpp:230
std::map< std::type_index, std::string > m_filterIconMap
Map of filter types to class names.
Definition MainWindow.h:660
std::shared_ptr< Dialog > m_notesDialog
Lab notes.
Definition MainWindow.h:435
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:1557
void FileRecentMenu()
Runs the File | Recent menu.
Definition MainWindow_Menus.cpp:165
void AddImportMenu()
Run the Add | Import menu.
Definition MainWindow_Menus.cpp:450
void RenderErrorPopup()
Popup message when something big goes wrong.
Definition MainWindow.cpp:1960
std::shared_ptr< MeasurementsDialog > m_measurementsDialog
Measurements dialog.
Definition MainWindow.h:456
std::shared_ptr< Dialog > m_preferenceDialog
Preferences.
Definition MainWindow.h:423
FontWithSize GetFontPref(const std::string &name)
Returns a font, given the name of a preference setting.
Definition MainWindow.h:635
std::map< std::shared_ptr< SCPIPowerSupply >, std::shared_ptr< Dialog > > m_psuDialogs
Map of PSUs to power supply control dialogs.
Definition MainWindow.h:376
std::shared_ptr< TutorialWizard > m_tutorialDialog
Tutorial flow.
Definition MainWindow.h:438
void RenderReconnectPopup()
Popup message when reconnecting to a session.
Definition MainWindow.cpp:1919
std::map< uintptr_t, std::string > m_graphEditorGroups
Group IDs and names for the graph editor.
Definition MainWindow.h:453
std::unique_ptr< vk::raii::CommandBuffer > m_cmdBuffer
Command buffer used during rendering operations.
Definition MainWindow.h:624
bool SetupDataDirectory(const std::string &dataDir)
Make sure the data directory exists.
Definition MainWindow.cpp:3340
void WindowAnalyzerMenu()
Run the Window | Analyzer menu.
Definition MainWindow_Menus.cpp:664
void LoadWaveformShapeIcons()
Load icons for wave shape preview.
Definition MainWindow_Icons.cpp:695
std::map< std::shared_ptr< SCPIInstrument >, std::shared_ptr< Dialog > > m_scpiConsoleDialogs
Map of instruments to SCPI console dialogs.
Definition MainWindow.h:391
void LoadLabNotes(const std::string &dataDir)
Loads the lab notes from Markdown files in the data directory.
Definition MainWindow.cpp:3240
void OnSaveAs()
Handler for file | save as menu. Spawns the browser dialog.
Definition MainWindow.cpp:2499
std::map< PacketDecoder *, std::shared_ptr< ProtocolAnalyzerDialog > > m_protocolAnalyzerDialogs
Map of filters to analyzer dialogs.
Definition MainWindow.h:397
std::map< FunctionGenerator::WaveShape, std::string > m_waveformShapeIconMap
Map of Waveform Shapes to icons.
Definition MainWindow.h:663
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:2633
void UpdateFonts()
Font.
Definition MainWindow.cpp:2178
std::shared_ptr< Dialog > m_memoryDialog
Memory analysis.
Definition MainWindow.h:420
std::string m_graphEditorConfigBlob
Config blob for filter graph editor.
Definition MainWindow.h:450
std::map< std::shared_ptr< SCPILoad >, std::shared_ptr< Dialog > > m_loadDialogs
Map of loads to control dialogs.
Definition MainWindow.h:388
std::shared_ptr< TriggerPropertiesDialog > m_triggerDialog
Trigger properties.
Definition MainWindow.h:429
float m_traceAlpha
Trace alpha.
Definition MainWindow.h:478
std::shared_ptr< ManageInstrumentsDialog > m_manageInstrumentsDialog
Manage instruments.
Definition MainWindow.h:432
void DoSaveFile(std::string sessionPath)
Actually save a file (may be triggered by file|save or file|save as)
Definition MainWindow.cpp:3137
void FindAreaForStream(WaveformArea *area, StreamDescriptor stream)
Given a stream and optionally a WaveformArea, adds the stream to some area.
Definition MainWindow.cpp:2285
float m_persistenceDecay
Persistence decay factor.
Definition MainWindow.h:481
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:1867
void HelpMenu()
Run the Help menu.
Definition MainWindow_Menus.cpp:836
std::map< std::shared_ptr< SCPIFunctionGenerator >, std::shared_ptr< Dialog > > m_generatorDialogs
Map of generators to generator control dialogs.
Definition MainWindow.h:379
void ToneMapAllWaveforms(vk::raii::CommandBuffer &cmdbuf)
Run the tone-mapping shader on all of our waveforms.
Definition MainWindow.cpp:559
std::shared_ptr< StreamBrowserDialog > m_streamBrowser
Stream browser.
Definition MainWindow.h:444
bool LoadDialogs(const YAML::Node &node)
Load dialog configuration.
Definition MainWindow.cpp:2952
ImVec2 m_workSize
Size position of the viewport minus the menu and toolbar.
Definition MainWindow.h:364
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:365
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:2543
void AddGenerateMenu()
Run the Add | Generate menu.
Definition MainWindow_Menus.cpp:485
void ShowErrorPopup(const std::string &title, const std::string &msg)
Opens the error popup.
Definition MainWindow.cpp:1910
const std::map< uintptr_t, std::string > & GetGraphEditorGroups()
Returns the groups we have configured for our graph editor.
Definition MainWindow.h:292
void LoadGradient(const std::string &friendlyName, const std::string &internalName)
Load a single gradient.
Definition MainWindow.cpp:910
std::map< std::string, time_t > m_recentFiles
List of recently used files.
Definition MainWindow.h:578
void InitializeDefaultSession()
Creates a new session initialized with some default windows.
Definition MainWindow.cpp:205
std::set< std::pair< OscilloscopeChannel *, WaveformArea * > > m_pendingChannelDisplayRequests
Pending requests to display a channel in a waveform area (from CreateFilter())
Definition MainWindow.h:484
void SetupMenu()
Run the Setup menu.
Definition MainWindow_Menus.cpp:522
void SaveLabNotes(const std::string &dataDir)
Saves the lab notes to Markdown files in the data directory.
Definition MainWindow.cpp:3192
std::map< std::shared_ptr< SCPIMultimeter >, std::shared_ptr< Dialog > > m_meterDialogs
Map of multimeters to meter control dialogs.
Definition MainWindow.h:373
void LoadGradients()
Load gradient images.
Definition MainWindow.cpp:891
std::shared_ptr< Dialog > m_metricsDialog
Performance metrics.
Definition MainWindow.h:417
YAML::Node SerializeDialogs()
Serializes the list of open dialogs.
Definition MainWindow.cpp:3531
std::string m_startupSession
Pending request to open a session.
Definition MainWindow.h:487
void MainMenu()
Run the top level menu bar.
Definition MainWindow_Menus.cpp:94
bool SaveSessionToYaml(YAML::Node &node, const std::string &dataDir)
Serialize the current session to a YAML::Node.
Definition MainWindow.cpp:3292
bool m_showDemo
Enable flag for main imgui demo window.
Definition MainWindow.h:358
void DoAddSubMenu(std::vector< time_t > ×tamps, 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:288
bool m_sessionClosing
True if a close-session request came in this frame.
Definition MainWindow.h:496
void OnScopeAdded(std::shared_ptr< Oscilloscope > scope, bool createViews)
Handles creation of a new oscilloscope.
Definition MainWindow.cpp:393
void OnFilterReconfigured(Filter *f)
Handle a filter being reconfigured.
Definition MainWindow.cpp:2451
std::shared_ptr< HistoryDialog > m_historyDialog
History.
Definition MainWindow.h:426
std::vector< size_t > m_groupsToClose
Pending requests to close waveform groups.
Definition MainWindow.h:467
std::recursive_mutex m_waveformGroupsMutex
Mutex for controlling access to m_waveformGroups.
Definition MainWindow.h:403
bool m_needRender
True if a resize or other event this frame requires we re-rasterize waveforms.
Definition MainWindow.h:616
int m_toolbarIconSize
Cached toolbar icon size.
Definition MainWindow.h:472
std::shared_ptr< MeasurementsDialog > GetMeasurementsDialog(bool createIfNotExisting)
Return the measurements dialog, if we have one.
Definition MainWindow.cpp:1893
std::shared_ptr< FilterGraphEditor > m_graphEditor
Filter graph editor.
Definition MainWindow.h:441
std::set< std::shared_ptr< Workspace > > m_workspaces
Workspaces (can't be with other dialogs because they can contain other stuff)
Definition MainWindow.h:367
void RenderFileBrowser()
Runs the file browser dialog.
Definition MainWindow.cpp:2514
void RenderLoadWarningPopup()
Popup message when loading a file that might not match the current hardware setup.
Definition MainWindow.cpp:2010
void FileMenu()
Run the File menu.
Definition MainWindow_Menus.cpp:112
Definition MeasurementsDialog.h:44
A single channel on an oscilloscope.
Definition OscilloscopeChannel.h:49
Abstraction of a transport layer for moving SCPI data between endpoints.
Definition SCPITransport.h:53
A Session stores all of the instrument configuration and other state the user has open.
Definition Session.h:126
Definition MainWindow.h:64
std::string m_ramp
Color ramp request (may be blank if unspecified)
Definition MainWindow.h:145
Descriptor for a single stream coming off a channel.
Definition StreamDescriptor.h:47
Manages loading and saving texture resources to files.
Definition TextureManager.h:105
A GLFW window containing a Vulkan surface.
Definition VulkanWindow.h:44