Alexander Alekseev | fefc6c1 | 2020-08-19 10:48:44 | [diff] [blame] | 1 | // Copyright 2020 The Chromium Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | #ifndef ASH_HUD_DISPLAY_GRAPH_PAGE_VIEW_BASE_H_ |
| 6 | #define ASH_HUD_DISPLAY_GRAPH_PAGE_VIEW_BASE_H_ |
| 7 | |
| 8 | #include "ash/hud_display/data_source.h" |
Alexander Alekseev | 7d66f34 | 2020-09-03 15:57:17 | [diff] [blame] | 9 | #include "ash/hud_display/legend.h" |
Alexander Alekseev | fefc6c1 | 2020-08-19 10:48:44 | [diff] [blame] | 10 | #include "base/sequence_checker.h" |
| 11 | #include "ui/views/view.h" |
| 12 | |
Alexander Alekseev | 7d66f34 | 2020-09-03 15:57:17 | [diff] [blame] | 13 | namespace views { |
| 14 | class ImageButton; |
| 15 | } |
| 16 | |
Alexander Alekseev | fefc6c1 | 2020-08-19 10:48:44 | [diff] [blame] | 17 | namespace ash { |
| 18 | namespace hud_display { |
| 19 | |
Alexander Alekseev | 7d66f34 | 2020-09-03 15:57:17 | [diff] [blame] | 20 | class Grid; |
Alexander Alekseev | 0fbea5c | 2020-09-29 05:05:47 | [diff] [blame] | 21 | class Legend; |
Alexander Alekseev | 7d66f34 | 2020-09-03 15:57:17 | [diff] [blame] | 22 | |
Alexander Alekseev | fefc6c1 | 2020-08-19 10:48:44 | [diff] [blame] | 23 | // Interface for a single graph page. |
Allen Bauer | 44c7f368 | 2020-10-22 22:12:58 | [diff] [blame] | 24 | class GraphPageViewBase : public views::View { |
Alexander Alekseev | fefc6c1 | 2020-08-19 10:48:44 | [diff] [blame] | 25 | public: |
| 26 | METADATA_HEADER(GraphPageViewBase); |
| 27 | |
| 28 | GraphPageViewBase(); |
| 29 | GraphPageViewBase(const GraphPageViewBase&) = delete; |
| 30 | GraphPageViewBase& operator=(const GraphPageViewBase&) = delete; |
| 31 | ~GraphPageViewBase() override; |
| 32 | |
| 33 | // Update page data from the new snapshot. |
| 34 | virtual void UpdateData(const DataSource::Snapshot& snapshot) = 0; |
| 35 | |
Alexander Alekseev | 7d66f34 | 2020-09-03 15:57:17 | [diff] [blame] | 36 | // Adds default legend. |
| 37 | void CreateLegend(const std::vector<Legend::Entry>& entries); |
| 38 | |
Alexander Alekseev | 666011d6 | 2020-10-26 20:28:50 | [diff] [blame] | 39 | // Put grid in its dedicated container. See Grid class for details. |
Alexander Alekseev | 7d66f34 | 2020-09-03 15:57:17 | [diff] [blame] | 40 | Grid* CreateGrid(float left, |
| 41 | float top, |
| 42 | float right, |
| 43 | float bottom, |
Jan Wilken Dörrie | 85285b0 | 2021-03-11 23:38:47 | [diff] [blame^] | 44 | const std::u16string& x_unit, |
| 45 | const std::u16string& y_unit, |
Alexander Alekseev | 7d66f34 | 2020-09-03 15:57:17 | [diff] [blame] | 46 | int horizontal_points_number, |
Alexander Alekseev | 666011d6 | 2020-10-26 20:28:50 | [diff] [blame] | 47 | int horizontal_ticks_interval, |
| 48 | float vertical_ticks_interval); |
Alexander Alekseev | 7d66f34 | 2020-09-03 15:57:17 | [diff] [blame] | 49 | |
Alexander Alekseev | 0fbea5c | 2020-09-29 05:05:47 | [diff] [blame] | 50 | protected: |
| 51 | void RefreshLegendValues(); |
| 52 | |
Alexander Alekseev | fefc6c1 | 2020-08-19 10:48:44 | [diff] [blame] | 53 | private: |
Allen Bauer | 44c7f368 | 2020-10-22 22:12:58 | [diff] [blame] | 54 | void OnButtonPressed(); |
| 55 | |
Alexander Alekseev | 7d66f34 | 2020-09-03 15:57:17 | [diff] [blame] | 56 | // Container for the Grid object. |
| 57 | views::View* grid_container_ = nullptr; // not owned |
| 58 | |
| 59 | // Container for the legend object. |
| 60 | views::View* legend_container_ = nullptr; // not owned |
| 61 | views::ImageButton* legend_min_max_button_ = nullptr; // not owned |
Alexander Alekseev | 0fbea5c | 2020-09-29 05:05:47 | [diff] [blame] | 62 | Legend* legend_ = nullptr; // not owned |
Alexander Alekseev | 7d66f34 | 2020-09-03 15:57:17 | [diff] [blame] | 63 | |
Alexander Alekseev | fefc6c1 | 2020-08-19 10:48:44 | [diff] [blame] | 64 | SEQUENCE_CHECKER(ui_sequence_checker_); |
| 65 | }; |
| 66 | |
| 67 | } // namespace hud_display |
| 68 | } // namespace ash |
| 69 | |
| 70 | #endif // ASH_HUD_DISPLAY_GRAPH_PAGE_VIEW_BASE_H_ |