diff options
Diffstat (limited to 'record.py')
-rwxr-xr-x[-rw-r--r--] | record.py | 90 |
1 files changed, 83 insertions, 7 deletions
diff --git a/record.py b/record.py index e25010e..3b2c1a5 100644..100755 --- a/record.py +++ b/record.py @@ -27,6 +27,7 @@ from gettext import ngettext import gtk from gtk import gdk +import gio import cairo import pango import pangocairo @@ -72,10 +73,11 @@ else: class Record(activity.Activity): + def __init__(self, handle): super(Record, self).__init__(handle) self.props.enable_fullscreen_mode = False - Instance(self) + self.Instance = Instance(self) self.add_events(gtk.gdk.VISIBILITY_NOTIFY_MASK) self.connect("visibility-notify-event", self._visibility_changed) @@ -172,7 +174,7 @@ class Record(activity.Activity): self._toolbar.insert(gtk.SeparatorToolItem(), -1) - self._toolbar_controls = RecordControl(self._toolbar) + self._toolbar_controls = RecordControl(self._toolbar, self, 8 if self._video_button else 6) separator = gtk.SeparatorToolItem() separator.props.draw = False @@ -854,29 +856,103 @@ class PlayButton(gtk.Button): class RecordControl(): - - def __init__(self, toolbar): + def __init__(self, toolbar, activity, output_pos): + self.activity = activity + self.toolbar = toolbar + self.output_pos = output_pos self._timer_value = TIMER_VALUES[0] self._timer_button = ToolButton('timer-0') self._timer_button.set_tooltip(_('Select timer')) self._timer_button.connect('clicked', self._timer_selection_cb) - toolbar.insert(self._timer_button, -1) + self.toolbar.insert(self._timer_button, -1) self._setup_timer_palette() self._duration_value = DURATION_VALUES[0] self._duration_button = ToolButton('duration-2') self._duration_button.set_tooltip(_('Select duration')) self._duration_button.connect('clicked', self._duration_selection_cb) - toolbar.insert(self._duration_button, -1) + self.toolbar.insert(self._duration_button, -1) self._setup_duration_palette() self._quality_value = 0 self._quality_button = ToolButton('low-quality') self._quality_button.set_tooltip(_('Select quality')) self._quality_button.connect('clicked', self._quality_selection_cb) - toolbar.insert(self._quality_button, -1) + self.toolbar.insert(self._quality_button, -1) self._setup_quality_palette() + + self._setup_output_palette(False) + return + + def _output_selection_cb(self, widget): + if self._output_palette: + if not self._output_palette.is_up(): + self._output_palette.popup(immediate=True, + state=self._timer_palette.SECONDARY) + else: + self._output_palette.popdown(immediate=True) + return + + def _setup_output_palette(self, notFirst): + if notFirst: + self.toolbar.remove(self._output_button) + self._output_button = ToolButton() + self._output_button.set_icon_name('user-documents') + self._output_button.set_tooltip(_('Select output device')) + self._output_button.connect('clicked', self._output_selection_cb) + self._output_button.show() + self.toolbar.insert(self._output_button, self.output_pos) + self._output_palette = self._output_button.get_palette() + + volume_monitor = gio.volume_monitor_get() + self._mount_added_hid = volume_monitor.connect('mount-added', + self.__mount_change_cb) + self._mount_removed_hid = volume_monitor.connect('mount-removed', + self.__mount_change_cb) + + button = MenuItem(icon_name='activity-journal', + text_label='Journal') + self._output_palette.menu.append(button) + button.connect('activate', self._output_selected_cb, None) + button.show() + self._output_palette.menu.append(button) + + for mount in volume_monitor.get_mounts(): + self._add_button(mount) + + def __mount_change_cb(self, volume_monitor, mount): + self._setup_output_palette(True) + + def _get_mount_icon_name(self, mount, size): + icon = mount.get_icon() + if isinstance(icon, gio.ThemedIcon): + icon_theme = gtk.icon_theme_get_default() + for icon_name in icon.props.names: + if icon_theme.lookup_icon(icon_name, size, 0) is not None: + return icon_name + logging.error('Cannot find icon name for %s, %s', icon, mount) + return 'drive' + + def _add_button(self, mount): + logging.debug('VolumeToolbar._add_button: %r', mount.get_name()) + + button = MenuItem(icon_name= + self._get_mount_icon_name(mount, gtk.ICON_SIZE_LARGE_TOOLBAR), + text_label=mount.get_name()) + self._output_palette.menu.append(button) + button.connect('activate', self._output_selected_cb, mount) + button.show() + self._output_palette.menu.append(button) + + def _output_selected_cb(self, button, mount): + if mount: + self.activity.Instance.savePath = mount.get_root().get_path() + self._output_button.set_icon_name(self._get_mount_icon_name(mount, + gtk.ICON_SIZE_LARGE_TOOLBAR)) + else: + self.activity.Instance.savePath = None + self._output_button.set_icon_name('activity-journal') def _timer_selection_cb(self, widget): if self._timer_palette: |