/
ui_record_view.hpp
139 lines (108 loc) · 3.46 KB
/
ui_record_view.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/*
* Copyright (C) 2016 Jared Boone, ShareBrained Technology, Inc.
*
* This file is part of PortaPack.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street,
* Boston, MA 02110-1301, USA.
*/
#ifndef __UI_RECORD_VIEW_H__
#define __UI_RECORD_VIEW_H__
#include "ui_widget.hpp"
#include "capture_thread.hpp"
#include "signal.hpp"
#include "bitmap.hpp"
#include <cstddef>
#include <string>
#include <memory>
namespace ui {
class RecordView : public View {
public:
std::function<void(std::string)> on_error{};
enum FileType {
RawS8 = 1,
RawS16 = 2,
WAV = 3,
};
RecordView(
const Rect parent_rect,
const std::filesystem::path& filename_stem_pattern,
const std::filesystem::path& folder,
FileType file_type,
const size_t write_size,
const size_t buffer_count);
~RecordView();
void focus() override;
void set_sampling_rate(const size_t new_sampling_rate);
void set_file_type(const FileType v) { file_type = v; }
void start();
void stop();
void on_hide() override;
bool is_active() const;
void set_filename_date_frequency(bool set);
private:
void toggle();
// void toggle_pitch_rssi();
void on_tick_second();
void update_status_display();
void handle_capture_thread_done(const File::Error error);
void handle_error(const File::Error error);
// bool pitch_rssi_enabled = false;
// Time Stamp
bool filename_date_frequency = false;
rtc::RTC datetime{};
const std::filesystem::path filename_stem_pattern;
const std::filesystem::path folder;
FileType file_type;
const size_t write_size;
const size_t buffer_count;
size_t sampling_rate{0};
SignalToken signal_token_tick_second{};
Rectangle rect_background{
Color::black()};
/*ImageButton button_pitch_rssi {
{ 2, 0 * 16, 3 * 8, 1 * 16 },
&bitmap_rssipwm,
Color::orange(),
Color::black()
};*/
ImageButton button_record{
//{ 4 * 8, 0 * 16, 2 * 8, 1 * 16 },
{0 * 8, 0 * 16, 2 * 8, 1 * 16},
&bitmap_record,
Color::red(),
Color::black()};
Text text_record_filename{
{7 * 8, 0 * 16, 8 * 8, 16},
"",
};
Text text_record_dropped{
{16 * 8, 0 * 16, 3 * 8, 16},
"",
};
Text text_time_available{
{21 * 8, 0 * 16, 9 * 8, 16},
"",
};
std::unique_ptr<CaptureThread> capture_thread{};
MessageHandlerRegistration message_handler_capture_thread_error{
Message::ID::CaptureThreadDone,
[this](const Message* const p) {
const auto message = *reinterpret_cast<const CaptureThreadDoneMessage*>(p);
this->handle_capture_thread_done(message.error);
}};
};
} /* namespace ui */
#endif /*__UI_RECORD_VIEW_H__*/