#include <glib.h>
+#include "ardour/ardour.h"
+
#include "button.h"
#include "surface.h"
#include "control_group.h"
Control*
Button::factory (Surface& surface, Button::ID bid, int id, const std::string& name, Group& group)
{
- Button* b = new Button (bid, id, name, group);
+ Button* b = new Button (surface, bid, id, name, group);
/* store button with the device-specific ID */
surface.buttons[id] = b;
surface.controls.push_back (b);
return b;
}
+void
+Button::pressed ()
+{
+ press_time = ARDOUR::get_microseconds ();
+}
+
+void
+Button::released ()
+{
+ press_time = 0;
+}
+
+int32_t
+Button::long_press_count ()
+{
+ if (press_time == 0) {
+ return -1; /* button is not pressed */
+ }
+
+ const ARDOUR::microseconds_t delta = ARDOUR::get_microseconds () - press_time;
+
+ if (delta < 500000) {
+ return 0;
+ } else if (delta < 1000000) {
+ return 1;
+ }
+
+ return 2;
+}
int
Button::name_to_id (const std::string& name)
{
if (!g_ascii_strcasecmp (name.c_str(), "Busses")) { return Busses; }
if (!g_ascii_strcasecmp (name.c_str(), "Outputs")) { return Outputs; }
if (!g_ascii_strcasecmp (name.c_str(), "User")) { return User; }
+ if (!g_ascii_strcasecmp (name.c_str(), "UserA")) { return UserA; }
+ if (!g_ascii_strcasecmp (name.c_str(), "UserB")) { return UserB; }
if (!g_ascii_strcasecmp (name.c_str(), "Shift")) { return Shift; }
if (!g_ascii_strcasecmp (name.c_str(), "Option")) { return Option; }
if (!g_ascii_strcasecmp (name.c_str(), "Ctrl")) { return Ctrl; }