Dropped midi in favor of a GTK gui

This commit is contained in:
sebastian 2014-06-06 23:18:41 +02:00
parent 805dd062ee
commit 2e09a50fa2
5 changed files with 277 additions and 121 deletions

View File

@ -1,95 +0,0 @@
#!/bin/env python2
import rtmidi
class MidiButtonListener(object):
def __init__(self):
self.midi_in = rtmidi.MidiIn()
self.listeners = {}
def _hex_message(self, message):
return map(lambda x: hex(x), message)
def _get_listeners(self, type, data1, data2):
if not type in self.listeners.keys():
return []
if not data1 in self.listeners[type].keys():
return []
if not data2 in self.listeners[type][data1].keys():
return []
return self.listeners[type][data1][data2]
def _enumarate_listeners(self, message_type, message_data1, message_data2):
result = []
for type in [None, message_type]:
for data1 in [None, message_data1]:
for data2 in [None, message_data2]:
result += self._get_listeners(type,data1,data2)
return result
def add_listener(self, listener, type = None, data1 = None, data2 = None):
if not type in self.listeners.keys():
self.listeners[type] = {}
if not data1 in self.listeners[type].keys():
self.listeners[type][data1] = {}
if not data2 in self.listeners[type][data1].keys():
self.listeners[type][data1][data2] = []
self.listeners[type][data1][data2].append(listener)
def remove_listener(self, listener, type = None, data1 = None, data2 = None):
if not type in self.listeners.keys():
raise ValueError("No listener registered for %s" % hex(type))
if not data1 in self.listeners[type].keys():
raise ValueError("No listener registered for %s %s" % (hex(type), hex(data1)))
if not data2 in self.listeners[type][data1].keys():
raise ValueError("No listener registered for %s %s" % (hex(type), hex(data1), hex(data2)))
self.listeners[type][data1][data2].remove(listener)
def open(self, name):
input_port = None
for port_number in range(self.midi_in.get_port_count()):
port_name = self.midi_in.get_port_name(port_number)
print "Found port %d: %s" % (port_number, port_name)
if port_name.startswith(name):
input_port = port_number
if not input_port:
print "No matching midi device found"
raise ValueError("No matching midi device found")
self.midi_in.open_port(input_port)
def process_messages(self):
while(True):
message = self.midi_in.get_message()
if message:
print "Print new message: %s " % self._hex_message(message[0])
type, data1, data2 = message[0]
for listener in self._enumarate_listeners(type, data1, data2):
listener(type,data1,data2)
def close(self):
self.midi_in.close_port()

View File

@ -1,22 +0,0 @@
#!/bin/env python2
import sys
from midibuttonlistener import MidiButtonListener
from scenechange import SceneChange
INPUT_NAME = "USB Midi"
buttonlistener = MidiButtonListener()
buttonlistener.open(INPUT_NAME)
sc = SceneChange()
buttonlistener.add_listener(sc.bind_switch(1),0xb9,0x08)
buttonlistener.add_listener(sc.bind_switch(2),0xb9,0x0a)
buttonlistener.add_listener(sc.bind_switch(3),0xb9,0x0b)
buttonlistener.process_messages()

View File

@ -12,9 +12,5 @@ class SceneChange(object):
def switch_to(self, next_scene):
if self.cur_scene != next_scene:
cmd = "Swap%d%d\n" % (self.cur_scene, next_scene)
print cmd
self.snowmix_socket.send(cmd)
self.cur_scene = next_scene
def bind_switch(self, next_scene):
return lambda type, data1, data2: self.switch_to(next_scene)

69
python/videocontroller.py Normal file
View File

@ -0,0 +1,69 @@
#!/usr/bin/env python
import sys
from gi.repository import Gtk
from scenechange import SceneChange
class VideoController:
def __init__(self):
self.scenechange = SceneChange()
self.gladefile = "videocontroler.ui"
self.builder = Gtk.Builder()
self.builder.add_from_file(self.gladefile)
self.main_window = self.builder.get_object("MainWindow")
self.max_cam1_button = self.builder.get_object("MaxCam1Button")
self.max_cam2_button = self.builder.get_object("MaxCam2Button")
self.max_cam3_button = self.builder.get_object("MaxCam3Button")
self.messagebox = Gtk.MessageDialog(self.main_window, 0, Gtk.MessageType.WARNING, Gtk.ButtonsType.OK_CANCEL, "I'm afaraid I can't let you do that dave.")
self.builder.connect_signals(self)
self.main_window.show_all()
def MaxCam1ButtonToggled(self, widget):
if self.max_cam1_button.get_active():
self.max_cam2_button.set_active(False)
self.max_cam3_button.set_active(False)
self.scenechange.switch_to(1)
else:
if not self.max_cam2_button.get_active() and not self.max_cam3_button.get_active():
self.max_cam1_button.set_active(True)
def MaxCam2ButtonToggled(self, widget):
if self.max_cam2_button.get_active():
self.max_cam1_button.set_active(False)
self.max_cam3_button.set_active(False)
self.scenechange.switch_to(2)
else:
if not self.max_cam1_button.get_active() and not self.max_cam3_button.get_active():
self.max_cam2_button.set_active(True)
def MaxCam3ButtonToggled(self, widget):
if self.max_cam3_button.get_active():
self.max_cam1_button.set_active(False)
self.max_cam2_button.set_active(False)
self.scenechange.switch_to(3)
else:
if not self.max_cam1_button.get_active() and not self.max_cam2_button.get_active():
self.max_cam3_button.set_active(True)
def MainWindowDelete(self, widget, event):
if self.messagebox.run() == Gtk.ResponseType.OK:
Gtk.main_quit()
self.messagebox.hide()
return True
videocontroller = VideoController()
Gtk.main()

208
python/videocontroller.ui Normal file
View File

@ -0,0 +1,208 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.18.3 -->
<interface>
<requires lib="gtk+" version="3.12"/>
<object class="GtkWindow" id="MainWindow">
<property name="can_focus">False</property>
<property name="opacity">0.92000000000000004</property>
<property name="title" translatable="yes">Video Controller</property>
<property name="default_width">443</property>
<property name="default_height">250</property>
<signal name="delete-event" handler="MainWindowDelete" swapped="no"/>
<child>
<object class="GtkLayout" id="layout1">
<property name="width_request">490</property>
<property name="height_request">370</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="width">0</property>
<property name="height">0</property>
<child>
<object class="GtkToggleButton" id="MaxCam3Button">
<property name="label" translatable="yes">Maximize
Cam 3</property>
<property name="width_request">150</property>
<property name="height_request">150</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<signal name="toggled" handler="MaxCam3ButtonToggled" swapped="no"/>
</object>
<packing>
<property name="x">330</property>
<property name="y">10</property>
</packing>
</child>
<child>
<object class="GtkToggleButton" id="MaxCam1Button">
<property name="label" translatable="yes">Maximize
Cam1</property>
<property name="width_request">150</property>
<property name="height_request">150</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<signal name="toggled" handler="MaxCam1ButtonToggled" swapped="no"/>
</object>
<packing>
<property name="x">10</property>
<property name="y">10</property>
</packing>
</child>
<child>
<object class="GtkToggleButton" id="MaxCam2Button">
<property name="label" translatable="yes">Maximize
Cam 2</property>
<property name="width_request">150</property>
<property name="height_request">150</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<signal name="toggled" handler="MaxCam2ButtonToggled" swapped="no"/>
</object>
<packing>
<property name="x">170</property>
<property name="y">10</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="SetTextLabel">
<property name="width_request">130</property>
<property name="height_request">30</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_top">3</property>
<property name="label" translatable="yes">Set text</property>
</object>
<packing>
<property name="x">10</property>
<property name="y">170</property>
</packing>
</child>
<child>
<object class="GtkButton" id="SetTextButton">
<property name="label" translatable="yes">Set Text</property>
<property name="width_request">120</property>
<property name="height_request">30</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<signal name="clicked" handler="SetTextButtonClicked" swapped="no"/>
</object>
<packing>
<property name="x">340</property>
<property name="y">174</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="StartTimerLabel">
<property name="width_request">130</property>
<property name="height_request">30</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Start a new timer</property>
</object>
<packing>
<property name="x">10</property>
<property name="y">220</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="StartTimerEnty">
<property name="width_request">180</property>
<property name="height_request">30</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
</object>
<packing>
<property name="x">150</property>
<property name="y">220</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="SetTextEntry">
<property name="width_request">180</property>
<property name="height_request">30</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
</object>
<packing>
<property name="x">150</property>
<property name="y">174</property>
</packing>
</child>
<child>
<object class="GtkButton" id="StartTimerButton">
<property name="label" translatable="yes">Start Timer</property>
<property name="width_request">120</property>
<property name="height_request">30</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<signal name="clicked" handler="StartTimerButtonClicked" swapped="no"/>
</object>
<packing>
<property name="x">340</property>
<property name="y">220</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="ChangeTimerLabel">
<property name="width_request">150</property>
<property name="height_request">30</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Change timer dispaly</property>
</object>
<packing>
<property name="x">10</property>
<property name="y">270</property>
</packing>
</child>
<child>
<object class="GtkComboBoxText" id="ChangeTimerComboBox">
<property name="width_request">290</property>
<property name="height_request">30</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<signal name="changed" handler="ChangeTimerComboBoxChanged" swapped="no"/>
</object>
<packing>
<property name="x">170</property>
<property name="y">270</property>
</packing>
</child>
<child>
<object class="GtkButton" id="HideTextButton">
<property name="label" translatable="yes">Hide text</property>
<property name="width_request">200</property>
<property name="height_request">30</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
</object>
<packing>
<property name="x">10</property>
<property name="y">320</property>
</packing>
</child>
<child>
<object class="GtkButton" id="HideTimer">
<property name="label" translatable="yes">Hide Timer</property>
<property name="width_request">200</property>
<property name="height_request">30</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
</object>
<packing>
<property name="x">230</property>
<property name="y">320</property>
</packing>
</child>
</object>
</child>
</object>
</interface>