11#ifndef __GUI_WIDGETS_DIGITAL_METER_H__
12#define __GUI_WIDGETS_DIGITAL_METER_H__
14#include "common/dsp/transport.h"
15#include "common/utils/types.h"
16#include "gui/backend/gtk_widgets/gtk_wrapper.h"
18#define DIGITAL_METER_WIDGET_TYPE (digital_meter_widget_get_type ())
36enum class DigitalMeterType
38 DIGITAL_METER_TYPE_BPM,
39 DIGITAL_METER_TYPE_POSITION,
40 DIGITAL_METER_TYPE_TIMESIG,
41 DIGITAL_METER_TYPE_NOTE_TYPE,
42 DIGITAL_METER_TYPE_NOTE_LENGTH,
47typedef struct _DigitalMeterWidget
49 GtkWidget parent_instance;
51 DigitalMeterType type;
55 GtkGestureDrag * drag;
63 int num_part_start_pos;
65 int dec_part_start_pos;
87 int sixteenths_start_pos;
88 int sixteenths_end_pos;
95 int update_sixteenths;
105 int seconds_start_pos;
118 NoteLength * note_length;
119 NoteType * note_type;
126 int update_timesig_top;
128 int update_timesig_bot;
132 int beat_unit_at_start;
159 PangoLayout * seg7_layout;
160 PangoLayout * normal_layout;
164 GtkPopoverMenu * popover_menu;
182 DigitalMeterType type,
183 NoteLength * note_length,
184 NoteType * note_type,
185 const char * caption);
187#define digital_meter_widget_new_for_position( \
188 obj, drag_begin, getter, setter, drag_end, caption) \
189 _digital_meter_widget_new_for_position ( \
190 (void *) obj, (void (*) (void *)) drag_begin, \
191 (void (*) (void *, Position *)) getter, \
192 (void (*) (void *, Position *)) setter, (void (*) (void *)) drag_end, \
213 void (*drag_begin) (
void *),
214 void (*get_val) (
void *, Position *),
215 void (*set_val) (
void *, Position *),
216 void (*drag_end) (
void *),
217 const char * caption);