add reset view button

This commit is contained in:
Rokas Puzonas 2025-03-02 16:12:06 +02:00
parent 09fccb7069
commit e33ab321d0

View File

@ -22,8 +22,6 @@ const max_files = 32;
const FileChannel = struct { const FileChannel = struct {
path: []u8, path: []u8,
min_value: f64,
max_value: f64,
samples: []f64, samples: []f64,
fn deinit(self: FileChannel, allocator: std.mem.Allocator) void { fn deinit(self: FileChannel, allocator: std.mem.Allocator) void {
@ -42,8 +40,6 @@ const DeviceChannel = struct {
units: i32 = NIDaq.c.DAQmx_Val_Volts, units: i32 = NIDaq.c.DAQmx_Val_Volts,
min_sample_rate: f64, min_sample_rate: f64,
max_sample_rate: f64, max_sample_rate: f64,
min_value: f64,
max_value: f64,
active_task: ?*TaskPool.Entry = null, active_task: ?*TaskPool.Entry = null,
@ -57,7 +53,12 @@ const ChannelView = struct {
view_rect: Graph.ViewOptions, view_rect: Graph.ViewOptions,
follow: bool = false, follow: bool = false,
height: f32 = 150, height: f32 = 200,
default_from: f32,
default_to: f32,
default_min_value: f64,
default_max_value: f64,
source: union(enum) { source: union(enum) {
file: usize, file: usize,
@ -262,22 +263,24 @@ pub fn appendChannelFromFile(self: *App, path: []const u8) !void {
const loaded_file_index = findFreeSlot(FileChannel, &self.loaded_files) orelse return error.FileLimitReached; const loaded_file_index = findFreeSlot(FileChannel, &self.loaded_files) orelse return error.FileLimitReached;
self.loaded_files[loaded_file_index] = FileChannel{ self.loaded_files[loaded_file_index] = FileChannel{
.min_value = min_value,
.max_value = max_value,
.path = path_dupe, .path = path_dupe,
.samples = samples .samples = samples
}; };
errdefer self.loaded_files[loaded_file_index] = null; errdefer self.loaded_files[loaded_file_index] = null;
const margin = 0.1; const from: f32 = 0;
const sample_range = max_value - min_value; const to: f32 = @floatFromInt(samples.len);
self.channel_views.appendAssumeCapacity(ChannelView{ self.channel_views.appendAssumeCapacity(ChannelView{
.view_rect = .{ .view_rect = .{
.from = 0, .from = from,
.to = @floatFromInt(samples.len), .to = to,
.min_value = min_value - sample_range * margin, .min_value = min_value,
.max_value = max_value + sample_range * margin .max_value = max_value
}, },
.default_from = from,
.default_to = to,
.default_min_value = min_value,
.default_max_value = max_value,
.source = .{ .file = loaded_file_index } .source = .{ .file = loaded_file_index }
}); });
errdefer _ = self.channel_views.pop(); errdefer _ = self.channel_views.pop();
@ -310,8 +313,6 @@ pub fn appendChannelFromDevice(self: *App, channel_name: []const u8) !void {
.name = name_buff, .name = name_buff,
.min_sample_rate = ni_daq.getMinSampleRate(channel_name_z) catch max_sample_rate, .min_sample_rate = ni_daq.getMinSampleRate(channel_name_z) catch max_sample_rate,
.max_sample_rate = max_sample_rate, .max_sample_rate = max_sample_rate,
.min_value = min_value,
.max_value = max_value,
.samples = std.ArrayList(f64).init(self.allocator) .samples = std.ArrayList(f64).init(self.allocator)
}; };
errdefer self.device_channels[device_channel_index] = null; errdefer self.device_channels[device_channel_index] = null;
@ -323,6 +324,10 @@ pub fn appendChannelFromDevice(self: *App, channel_name: []const u8) !void {
.min_value = min_value, .min_value = min_value,
.max_value = max_value .max_value = max_value
}, },
.default_from = 0,
.default_to = 0,
.default_min_value = min_value,
.default_max_value = max_value,
.source = .{ .device = device_channel_index } .source = .{ .device = device_channel_index }
}); });
errdefer _ = self.channel_views.pop(); errdefer _ = self.channel_views.pop();
@ -499,6 +504,8 @@ fn showChannelView(self: *App, channel_view: *ChannelView) !void {
source.lockSamples(); source.lockSamples();
defer source.unlockSamples(); defer source.unlockSamples();
var channel_rect_opts: *Graph.ViewOptions = &channel_view.view_rect;
const channel_box = self.ui.newBoxFromPtr(channel_view); const channel_box = self.ui.newBoxFromPtr(channel_view);
channel_box.background = rl.Color.blue; channel_box.background = rl.Color.blue;
channel_box.layout_axis = .Y; channel_box.layout_axis = .Y;
@ -516,6 +523,18 @@ fn showChannelView(self: *App, channel_view: *ChannelView) !void {
self.ui.pushParent(tools_box); self.ui.pushParent(tools_box);
defer self.ui.popParent(); defer self.ui.popParent();
{
const reset_view_button = self.ui.button(.text, "Reset view");
reset_view_button.size.y = UI.Size.percent(1, 0);
if (self.ui.signalFromBox(reset_view_button).clicked()) {
channel_rect_opts.from = channel_view.default_from;
channel_rect_opts.to = channel_view.default_to;
channel_rect_opts.min_value = channel_view.default_min_value;
channel_rect_opts.max_value = channel_view.default_max_value;
}
}
if (source == .device) { if (source == .device) {
const device_channel = source.device; const device_channel = source.device;
@ -542,8 +561,8 @@ fn showChannelView(self: *App, channel_view: *ChannelView) !void {
.continous = .{ .sample_rate = device_channel.max_sample_rate } .continous = .{ .sample_rate = device_channel.max_sample_rate }
}, },
.{ .{
.min_value = device_channel.min_value, .min_value = channel_view.default_min_value,
.max_value = device_channel.max_value, .max_value = channel_view.default_max_value,
.units = device_channel.units, .units = device_channel.units,
.channel = channel_name .channel = channel_name
} }
@ -571,8 +590,6 @@ fn showChannelView(self: *App, channel_view: *ChannelView) !void {
} }
{ {
var channel_rect_opts: *Graph.ViewOptions = &channel_view.view_rect;
const graph_box = self.ui.newBoxFromString("Graph"); const graph_box = self.ui.newBoxFromString("Graph");
graph_box.flags.insert(.clickable); graph_box.flags.insert(.clickable);
graph_box.flags.insert(.draggable); graph_box.flags.insert(.draggable);