Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
d76f076
Fixed AWG shape preview.
fredzo Jan 2, 2026
27e5df6
Added duty-cycle to AWG in StreamBrowserDialog
fredzo Jan 2, 2026
bb53c34
Deduplicated renderToggle/renderToggleEXT and renderOnOffToggle/rende…
fredzo Jan 3, 2026
8be9685
Added on and off values optional parameters to renderToggle and rende…
fredzo Jan 3, 2026
72c354d
Fixed doc.
fredzo Jan 3, 2026
63f3d62
Added 7 segment display methods.
fredzo Jan 3, 2026
6a9adea
Added autorange cache in Multimeter state.
fredzo Jan 3, 2026
f037ca7
Added DMM support in StreamBrowserDialog.
fredzo Jan 3, 2026
221599f
Force multimter autorange cache update if needed uppon Multimeter dia…
fredzo Jan 3, 2026
153a909
Fixed combo rendering glitch: non displayable combo label need 2 "#" …
fredzo Jan 3, 2026
e0bf23b
Merge branch 'ngscopeclient:master' into stream-browser-dialog-update
fredzo Jan 3, 2026
a02b85c
Added show block border setting for StreamBrowserDialog : enable/disa…
fredzo Jan 4, 2026
d1d1a67
Refactored renderNumericValue() code.
fredzo Jan 4, 2026
606b420
First step to editable values in StreamBrowserDialog.
fredzo Jan 5, 2026
0dd3917
Fixed apply button behavior.
fredzo Jan 5, 2026
9ec99c5
Added apply button help text.
fredzo Jan 5, 2026
131fb30
Fixed default value for Duty Cycle.
fredzo Jan 5, 2026
717b0db
Added UI state in PowerSupplyState.
fredzo Jan 5, 2026
9054b79
Added PowerSupply UI state update in InstrumentThread.
fredzo Jan 5, 2026
f285e11
Added editable values for PSU in StreamBrowserDialog.
fredzo Jan 5, 2026
2c253a0
Fixed linux compilation error.
fredzo Jan 5, 2026
3b33b30
Added doc.
fredzo Jan 5, 2026
4ee9e42
Fixed link rendering.
fredzo Jan 5, 2026
22ae7b6
First step to adding a "+" button on top right corner of blocks to ac…
Jan 7, 2026
19d73a8
Added tooltip on properties dialog button.
Jan 7, 2026
94acc33
Fixed negative number rendering in 7segment mode.
Jan 7, 2026
a35e1ce
Added renderReadOnlyProperty() method.
Jan 7, 2026
20ba675
Added width and tooltip to render property methods.
Jan 7, 2026
e39f6d7
Added scopestate to session.
fredzo Jan 8, 2026
a8271e0
Added channel proerties block with attenuation, coupling, bandwitdh a…
fredzo Jan 8, 2026
65c8c73
Added missing file.
fredzo Jan 8, 2026
a311b39
Merge branch 'ngscopeclient:master' into stream-browser-dialog-update
fredzo Jan 8, 2026
38ad113
Added digital bank nodes to gather digital channels.
fredzo Jan 9, 2026
b2ed0eb
Added instrument state update on config flush.
Jan 9, 2026
0af25a7
Merged code from upstream to open properties on double click + close …
Jan 10, 2026
9598004
Merge
Jan 10, 2026
68643e9
Merge branch 'ngscopeclient:master' into stream-browser-dialog-update
fredzo Jan 10, 2026
2c2a41d
Finished merge from upstream.
Jan 10, 2026
2633bf1
Fixed state handling in ChannelPropertyDialog
Jan 10, 2026
1fd1a19
Fixed node rendering for fiters.
Jan 10, 2026
bfb7e5a
Merge branch 'ngscopeclient:master' into stream-browser-dialog-update
fredzo Jan 11, 2026
00540b7
Fixed typos.
Jan 11, 2026
178285d
Added Rise and Fall time to AWG node in StreamBrowserDialog.
Jan 11, 2026
56887e3
Finished removing FunctionGeneratorDialog.
fredzo Jan 12, 2026
cafbb36
Next step to removing MultimeterDialog.
fredzo Jan 12, 2026
1c1ff08
Merged oscilloscopes and oscilloscopeStates in Session class.
fredzo Jan 12, 2026
1b28ddb
Made PSU/DMM numeric value a 3 option choice (monospace font (default…
fredzo Jan 12, 2026
fcd130d
Fixed UTF8 special characters in cpp file.
fredzo Jan 12, 2026
7bebb64
Finished MultimterDialog removal.
fredzo Jan 12, 2026
808fc31
Refactored property editors from StreamBrowserDialog to Dialog class.
fredzo Jan 12, 2026
f2ec92e
Made color optional and default color to text color rather than white…
fredzo Jan 12, 2026
41daa41
Made digital threshold property implcit apply.
fredzo Jan 12, 2026
af7e613
Fixed typos.
fredzo Jan 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions src/ngscopeclient/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,6 @@ add_executable(ngscopeclient
FilterGraphWorkspace.cpp
FilterPropertiesDialog.cpp
FontManager.cpp
FunctionGeneratorDialog.cpp
GuiLogSink.cpp
HistoryDialog.cpp
HistoryManager.cpp
Expand All @@ -89,7 +88,6 @@ add_executable(ngscopeclient
MeasurementsDialog.cpp
MemoryLeakerDialog.cpp
MetricsDialog.cpp
MultimeterDialog.cpp
NFDFileBrowser.cpp
NotesDialog.cpp
PacketManager.cpp
Expand Down
51 changes: 48 additions & 3 deletions src/ngscopeclient/ChannelPropertiesDialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
* *
* ngscopeclient *
* *
* Copyright (c) 2012-2025 Andrew D. Zonenberg and contributors *
* Copyright (c) 2012-2026 Andrew D. Zonenberg and contributors *
* All rights reserved. *
* *
* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the *
Expand Down Expand Up @@ -43,9 +43,20 @@ using namespace std;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Construction / destruction

ChannelPropertiesDialog::ChannelPropertiesDialog(InstrumentChannel* chan, MainWindow* parent, bool graphEditorMode)
ChannelPropertiesDialog::ChannelPropertiesDialog(InstrumentChannel* chan, MainWindow* parent, bool graphEditorMode)
: BaseChannelPropertiesDialog(chan, parent, graphEditorMode)
{
// Get oscilloscope state, for that we need to make a shared_ptr out of the base pointer returned by chan->GetInstrument()
m_session = &m_parent->GetSession();
auto instrument = chan->GetInstrument();
if(instrument)
{
std::shared_ptr<Instrument> scopeSharedPointer = instrument->shared_from_this();
shared_ptr<Oscilloscope> sharedScope = dynamic_pointer_cast<Oscilloscope>(scopeSharedPointer);
if(sharedScope)
m_state = m_session->GetOscilloscopeState(sharedScope);
}

auto ochan = dynamic_cast<OscilloscopeChannel*>(chan);
if(!ochan)
LogFatal("ChannelPropertiesDialog expects an OscilloscopeChannel\n");
Expand Down Expand Up @@ -307,12 +318,12 @@ bool ChannelPropertiesDialog::DoRender()

//Input settings only make sense if we have an attached scope
auto nstreams = m_channel->GetStreamCount();
auto index = m_channel->GetIndex();
if(scope)
{
if(ImGui::CollapsingHeader("Input", defaultOpenFlags))
{
//Type of probe connected
auto index = m_channel->GetIndex();
string ptype = m_probe;
if(ptype == "")
ptype = "(not detected)";
Expand Down Expand Up @@ -340,6 +351,9 @@ bool ChannelPropertiesDialog::DoRender()
//refresh in case scope driver changed the value
m_committedThreshold = scope->GetDigitalThreshold(index);
m_threshold = yunit.PrettyPrint(m_committedThreshold);

// Tell intrument thread that the scope state has to be updated
if(m_state) m_state->m_needsUpdate[index] = true;
}
HelpMarker("Switching threshold for the digital input buffer");
}
Expand All @@ -354,6 +368,9 @@ bool ChannelPropertiesDialog::DoRender()
//refresh in case scope driver changed the value
m_committedHysteresis = scope->GetDigitalHysteresis(index);
m_hysteresis = yunit.PrettyPrint(m_committedHysteresis);

// Tell intrument thread that the scope state has to be updated
if(m_state) m_state->m_needsUpdate[index] = true;
}
HelpMarker("Hysteresis for the digital input buffer");
}
Expand Down Expand Up @@ -398,6 +415,9 @@ bool ChannelPropertiesDialog::DoRender()
m_committedRange[i] = ochan->GetVoltageRange(i);
m_range[i] = unit.PrettyPrint(m_committedRange[i]);
}

// Tell intrument thread that the scope state has to be updated
if(m_state) m_state->m_needsUpdate[index] = true;
}
if(m_probe != "")
ImGui::EndDisabled();
Expand All @@ -408,7 +428,12 @@ bool ChannelPropertiesDialog::DoRender()
{
ImGui::SetNextItemWidth(width);
if(Combo("Coupling", m_couplingNames, m_coupling))
{
ochan->SetCoupling(m_couplings[m_coupling]);

// Tell intrument thread that the scope state has to be updated
if(m_state) m_state->m_needsUpdate[index] = true;
}
HelpMarker("Coupling configuration for the input");
}

Expand All @@ -417,7 +442,12 @@ bool ChannelPropertiesDialog::DoRender()
{
ImGui::SetNextItemWidth(width);
if(Combo("Bandwidth", m_bwlNames, m_bwl))
{
ochan->SetBandwidthLimit(m_bwlValues[m_bwl]);

// Tell intrument thread that the scope state has to be updated
if(m_state) m_state->m_needsUpdate[index] = true;
}
HelpMarker("Hardware bandwidth limiter setting");
}
}
Expand Down Expand Up @@ -465,8 +495,13 @@ bool ChannelPropertiesDialog::DoRender()
if(scope->CanInvert(index))
{
if(ImGui::Checkbox("Invert", &m_inverted))
{
ochan->Invert(m_inverted);

// Tell intrument thread that the scope state has to be updated
if(m_state) m_state->m_needsUpdate[index] = true;
}

HelpMarker(
"When checked, input value is multiplied by -1.\n\n"
"For a differential probe, this is equivalent to swapping the positive and negative inputs."
Expand Down Expand Up @@ -558,8 +593,13 @@ bool ChannelPropertiesDialog::DoRender()
}
ImGui::SetNextItemWidth(width);
if(UnitInputWithExplicitApply("Offset", m_offset[i], m_committedOffset[i], unit))
{
ochan->SetOffset(m_committedOffset[i], i);

// Tell intrument thread that the scope state has to be updated
if(m_state) m_state->m_needsUpdate[index] = true;
}

//Same for range
auto range = ochan->GetVoltageRange(i);
auto srange = unit.PrettyPrint(m_committedRange[i]);
Expand All @@ -570,8 +610,13 @@ bool ChannelPropertiesDialog::DoRender()
}
ImGui::SetNextItemWidth(width);
if(UnitInputWithExplicitApply("Range", m_range[i], m_committedRange[i], unit))
{
ochan->SetVoltageRange(m_committedRange[i], i);

// Tell intrument thread that the scope state has to be updated
if(m_state) m_state->m_needsUpdate[index] = true;
}

ImGui::PopID();
}
}
Expand Down
5 changes: 4 additions & 1 deletion src/ngscopeclient/ChannelPropertiesDialog.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
* *
* ngscopeclient *
* *
* Copyright (c) 2012-2025 Andrew D. Zonenberg *
* Copyright (c) 2012-2026 Andrew D. Zonenberg *
* All rights reserved. *
* *
* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the *
Expand Down Expand Up @@ -49,6 +49,9 @@ class ChannelPropertiesDialog : public BaseChannelPropertiesDialog

void RefreshInputSettings(Oscilloscope* scope, size_t nchan);

///@brief Current channel stats, live updated
std::shared_ptr<OscilloscopeState> m_state;

std::string m_displayName;
std::string m_committedDisplayName;

Expand Down
Loading
Loading