MIPI - Physical Interface for MIDI Files
Loading...
Searching...
No Matches
ui_piano.h
Go to the documentation of this file.
1#ifndef UI_PIANO_H
2#define UI_PIANO_H
3
4#include "rclcpp/rclcpp.hpp"
5
6#include <QtWidgets/QWidget>
7#include <QtWidgets/QLabel>
8#include <QtWidgets/QPushButton>
9#include <QtWidgets/QVBoxLayout>
10#include <QtWidgets/QHBoxLayout>
11#include <QtWidgets/QSlider>
12#include <QtWidgets/QGroupBox>
13#include <QFileDialog>
14#include <QComboBox>
15#include <QRadioButton>
16#include <QDir>
17#include <QString>
18#include <QFileInfo>
19#include <QtWidgets/QButtonGroup>
20
21#include "jamc/srv/func.hpp"
22#include "jamc/srv/time_scale.hpp"
23#include "jamc/srv/load.hpp"
24
25#include <sensor_msgs/msg/image.hpp>
26
28
29namespace UI
30{
31 // Enum to track current direction state
33
34 class PianoUI : public QWidget, public rclcpp::Node
35 {
36 Q_OBJECT
37 public:
38 PianoUI();
39 ~PianoUI();
40
41 private:
42 // State tracking
43 bool is_playing = false;
46
47 // UI Elements
48 QLabel* _title;
49 QSlider* _track_slider;
50 QPushButton* _play_pause_button;
51 QPushButton* _direction_button; // Single toggle button for direction
53 QRadioButton* _channel_select;
56 QPushButton* _new_file_button;
58 QComboBox* _old_file_button;
59
60 // Status Labels
61 QLabel* _status_val;
62 QLabel* _speed_val;
63 QLabel* _time_val;
64
65 // Layouts
66 QVBoxLayout* _channel_layout;
67 QButtonGroup* _channel_group;
68
69 void update_status_info();
73
74 rclcpp::Client<jamc::srv::Func>::SharedPtr playback_client;
75 rclcpp::Client<jamc::srv::Func>::SharedPtr direction_client;
76 rclcpp::Client<jamc::srv::TimeScale>::SharedPtr time_scale_client;
77 rclcpp::Client<jamc::srv::Load>::SharedPtr channel_client;
78 rclcpp::Client<jamc::srv::Func>::SharedPtr debug_client;
79
81
82 QLabel* _camera_view;
83 rclcpp::Subscription<sensor_msgs::msg::Image>::SharedPtr _camera_sub;
84
85 QPushButton* _debug_button;
86
92 void image_callback(const sensor_msgs::msg::Image::SharedPtr msg);
93
94 private slots:
95 void play_pause();
96 void open_midi_file();
97 void toggle_direction(); // New toggle slot
100 void send_time_scale();
101
108 void send_channel_selection(int index);
109 void load_existing_mipi(int index);
110 void send_debug_request();
111 };
112};
113
114#endif // UI_PIANO_H
Standalone Class for processing midi files and saving/loading mipi files. Contains various getters to...
Definition midi_processor.h:54
Definition ui_piano.h:35
QLabel * _time_val
Definition ui_piano.h:63
rclcpp::Client< jamc::srv::TimeScale >::SharedPtr time_scale_client
Definition ui_piano.h:76
void force_pause_and_reset()
Immediate helper method to halt UI playback tracking and reset visual sliders.
Definition ui_piano.cpp:187
rclcpp::Client< jamc::srv::Func >::SharedPtr direction_client
Definition ui_piano.h:75
void toggle_direction()
Toggles between Forward and Reverse playback logic.
Definition ui_piano.cpp:343
QPushButton * _debug_button
Definition ui_piano.h:85
bool is_playing
Definition ui_piano.h:43
rclcpp::Subscription< sensor_msgs::msg::Image >::SharedPtr _camera_sub
Definition ui_piano.h:83
PlaybackDirection current_dir
Definition ui_piano.h:44
MidiProcessor processor
Definition ui_piano.h:80
QLabel * _new_file_label
Definition ui_piano.h:55
QString _midi_file_path
Definition ui_piano.h:45
QLabel * _old_file_label
Definition ui_piano.h:57
void set_direction_reverse()
Explicitly sets playback direction to Reverse via the /MIPI/direction service.
Definition ui_piano.cpp:364
QVBoxLayout * _channel_layout
Definition ui_piano.h:66
rclcpp::Client< jamc::srv::Func >::SharedPtr debug_client
Definition ui_piano.h:78
QPushButton * _direction_button
Definition ui_piano.h:51
void play_pause()
Toggles the playback state and notifies the /MIPI/play_pause service.
Definition ui_piano.cpp:247
void set_direction_forward()
Explicitly sets playback direction to Forward via the /MIPI/direction service.
Definition ui_piano.cpp:351
void image_callback(const sensor_msgs::msg::Image::SharedPtr msg)
ROS 2 Subscriber callback for camera feed.
Definition ui_piano.cpp:152
QPushButton * _new_file_button
Definition ui_piano.h:56
void send_debug_request()
Sends a trigger request to the debug service for development testing.
Definition ui_piano.cpp:163
rclcpp::Client< jamc::srv::Load >::SharedPtr channel_client
Definition ui_piano.h:77
QButtonGroup * _channel_group
Definition ui_piano.h:67
void load_existing_mipi(int index)
UI Slot for loading a file selected from the dropdown menu.
Definition ui_piano.cpp:294
void send_time_scale()
Transmits the current speed slider value as a time scale factor (0.01-1.0) to the robot.
Definition ui_piano.cpp:387
QComboBox * _old_file_button
Definition ui_piano.h:58
QSlider * _speed_control
Definition ui_piano.h:54
QSlider * _track_slider
Definition ui_piano.h:49
QLabel * _status_val
Definition ui_piano.h:61
void update_channel_radio_buttons()
Rebuilds the radio button group based on the currently loaded MIDI processor data.
Definition ui_piano.cpp:224
PianoUI()
Hybrid Qt-ROS2 Class for managing the User Interface of the MIDI-to-UR3 system.
Definition ui_piano.cpp:22
QPushButton * _play_pause_button
Definition ui_piano.h:50
void populate_mipi_combobox()
Scans the ~/mipi_files directory to refresh the dropdown list.
Definition ui_piano.cpp:206
QRadioButton * _channel_select
Definition ui_piano.h:53
QLabel * _channel_title
Definition ui_piano.h:52
QLabel * _title
Definition ui_piano.h:48
void update_status_info()
Refreshes all status labels in the UI with the latest system state information.
Definition ui_piano.cpp:377
~PianoUI()
Standard Destructor for PianoUI Class.
Definition ui_piano.cpp:145
void send_channel_selection(int index)
Transmits the selected MIDI channel to the robot controller.
Definition ui_piano.cpp:314
void open_midi_file()
UI Slot for opening a file dialog to process a raw .mid file.
Definition ui_piano.cpp:269
rclcpp::Client< jamc::srv::Func >::SharedPtr playback_client
Definition ui_piano.h:74
QLabel * _camera_view
Definition ui_piano.h:82
QLabel * _speed_val
Definition ui_piano.h:62
Definition ui_piano.cpp:10
PlaybackDirection
Definition ui_piano.h:32