فهرست منبع

tick multiplier adj. and tooltips in pane control bar

Berke 1 سال پیش
والد
کامیت
531edde316
1فایلهای تغییر یافته به همراه35 افزوده شده و 17 حذف شده
  1. 35 17
      src/main.rs

+ 35 - 17
src/main.rs

@@ -257,7 +257,7 @@ pub enum Message {
     ShowLayoutModal,
     HideLayoutModal,
 
-    TicksizeSelected(u16),
+    TicksizeSelected(TickMultiplier),
     SetMinTickSize(f32),
     
     ErrorOccurred(String),
@@ -295,7 +295,7 @@ struct State {
 
     kline_stream: bool,
 
-    tick_multiply: u16,
+    tick_multiply: TickMultiplier,
     min_tick_size: Option<f32>,
 
     exchange_latency: Option<u32>,
@@ -384,7 +384,7 @@ impl State {
             focus: None,
             first_pane,
             pane_lock: false,
-            tick_multiply: 1,
+            tick_multiply: TickMultiplier(10),
             min_tick_size: None, 
 
             exchange_latency: None,
@@ -427,7 +427,8 @@ impl State {
                     let copied_trades = heatmap_chart.get_raw_trades();
 
                     if let Some(footprint_chart) = &mut self.footprint_chart {
-                        footprint_chart.change_tick_size(copied_trades, self.tick_multiply as f32 * self.min_tick_size.unwrap_or(1.0));
+                        let tick_size = self.tick_multiply.multiply_with_min_tick_size(self.min_tick_size.unwrap_or(1.0));
+                        footprint_chart.change_tick_size(copied_trades, tick_size);
                     }
                 }
 
@@ -446,14 +447,15 @@ impl State {
             Message::TicksizeSelected(tick_multiply) => {
                 if let Some(heatmap_chart) = &mut self.heatmap_chart {
                     let copied_trades = heatmap_chart.get_raw_trades();
-
+            
                     if let Some(footprint_chart) = &mut self.footprint_chart {
-                        footprint_chart.change_tick_size(copied_trades, tick_multiply as f32 * self.min_tick_size.unwrap_or(1.0));
-
+                        let tick_size = tick_multiply.multiply_with_min_tick_size(self.min_tick_size.unwrap_or(1.0));
+                        footprint_chart.change_tick_size(copied_trades, tick_size);
+            
                         self.tick_multiply = tick_multiply;
                     }
                 }
-
+            
                 Task::none()
             },
             Message::TimeframeSelected(timeframe, pane) => {
@@ -684,7 +686,7 @@ impl State {
                                         Timeframe::M30 => 30,
                                     };
 
-                                    let tick_size = self.tick_multiply as f32 * self.min_tick_size.unwrap_or_default();
+                                    let tick_size = self.tick_multiply.multiply_with_min_tick_size(self.min_tick_size.unwrap_or(1.0));
 
                                     self.footprint_chart = Some(Footprint::new(timeframe_u16, tick_size, klines_raw, copied_trades));
                                 }
@@ -883,11 +885,9 @@ impl State {
                             let mut trade_latency_count: i64 = 0;
 
                             for feed_latency in self.feed_latency_cache.iter() {
-                                // Always add depth_latency
                                 depth_latency_sum += feed_latency.depth_latency;
                                 depth_latency_count += 1;
 
-                                // Add trade_latency if it exists
                                 if let Some(trade_latency) = feed_latency.trade_latency {
                                     trade_latency_sum += trade_latency;
                                     trade_latency_count += 1;
@@ -1217,7 +1217,6 @@ impl State {
                     .spacing(10)
                     .push(ws_controls)
                     .push(Space::with_width(Length::Fill))
-                    .push(button("Debug").on_press(Message::Debug("Debug".to_string())))                
                     .push(layout_controls)
             )
             .push(pane_grid);
@@ -1548,7 +1547,7 @@ fn view_controls<'a>(
     total_panes: usize,
     is_maximized: bool,
     selected_timeframe: Option<&'a Timeframe>,
-    selected_ticksize: u16,
+    selected_ticksize: TickMultiplier,
 ) -> Element<'a, Message> {
     let mut row = row![].spacing(5);
 
@@ -1564,15 +1563,20 @@ fn view_controls<'a>(
             selected_timeframe,
             move |timeframe| Message::TimeframeSelected(timeframe, pane),
         ).placeholder("Choose a timeframe...").text_size(11).width(iced::Pixels(80.0));
-        row = row.push(timeframe_picker);
+
+        let tooltip = tooltip(timeframe_picker, "Timeframe", tooltip::Position::Top).style(style::tooltip);
+
+        row = row.push(tooltip);
     }
     if pane_id == PaneId::FootprintChart {
         let ticksize_picker = pick_list(
-            [1, 2, 5, 10, 25, 50, 100, 200],
-            Some(selected_ticksize),
+            [TickMultiplier(1), TickMultiplier(2), TickMultiplier(5), TickMultiplier(10), TickMultiplier(25), TickMultiplier(50), TickMultiplier(100), TickMultiplier(200)],
+            Some(selected_ticksize), 
             Message::TicksizeSelected,
         ).placeholder("Ticksize multiplier...").text_size(11).width(iced::Pixels(80.0));
-        row = row.push(ticksize_picker);
+        let tooltip = tooltip(ticksize_picker, "Ticksize multiplier", tooltip::Position::Top).style(style::tooltip);
+
+        row = row.push(tooltip);
     }
 
     let mut buttons = vec![
@@ -1594,6 +1598,20 @@ fn view_controls<'a>(
 
     row.into()
 }
+#[derive(Debug, Clone, Copy, PartialEq, Eq)]
+pub struct TickMultiplier(u16);
+
+impl std::fmt::Display for TickMultiplier {
+    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
+        write!(f, "{}x", self.0)
+    }
+}
+
+impl TickMultiplier {
+    fn multiply_with_min_tick_size(&self, min_tick_size: f32) -> f32 {
+        self.0 as f32 * min_tick_size
+    }
+}
 
 use crate::market_data::Trade;
 struct ConvertedTrade {