コード例 #1
0
    def _append_group(self, dev_group):
        group_id = dev_group.get_id()
        group_name = dev_group.get_name()

        group_iter = self.append(None, [group_id, group_name, 0, dev_group])
        channellist = dev_group.get_channel_list()

        d = Callback()
        if self._use_channel_groups:
            d.add_callback(self._append_channel_groups, channellist, group_id, group_iter, dev_group)
            self._manager.get_channel_groups(
                result_handler=lambda p, x, u: d.callback(x), error_handler=global_error_handler
            )
            # Put all available channels either in TV or radio group
            tv_group_iter = self.append(group_iter, [group_id, _("TV Channels"), 0, dev_group])
            radio_group_iter = self.append(group_iter, [group_id, _("Radio Channels"), 0, dev_group])
        else:
            # Do not distinguish between radio and TV
            tv_group_iter = group_iter
            radio_group_iter = group_iter

        d_all = Callback()
        d_all.add_callback(self._append_channels, group_id, dev_group, tv_group_iter, radio_group_iter)
        channellist.get_channel_infos(
            result_handler=lambda p, x, u: d_all.callback(x), error_handler=global_error_handler
        )
コード例 #2
0
    def _on_button_delete_clicked(self, button):
        def delete_timer_callback(proxy, success, user_data):
            if not success:
                error_dialog = Gtk.MessageDialog(parent=self,
                    flags=Gtk.DialogFlags.MODAL|Gtk.DialogFlags.DESTROY_WITH_PARENT,
                    type=Gtk.MessageType.ERROR, buttons=Gtk.ButtonsType.OK)
                error_dialog.set_markup(
                    "<big><span weight=\"bold\">%s</span></big>" % _("Timer could not be deleted"))
                error_dialog.run()
                error_dialog.destroy()

        model, aiter = self.timersview.get_selection().get_selected()
        if aiter != None:
            timer_id = model[aiter][self.COL_ID]
            if self.recorder.is_timer_active(timer_id):
                dialog = Gtk.MessageDialog(parent=self,
                    flags=Gtk.DialogFlags.MODAL|Gtk.DialogFlags.DESTROY_WITH_PARENT,
                    type=Gtk.MessageType.QUESTION, buttons=Gtk.ButtonsType.YES_NO)
                dialog.set_markup(
                    "<big><span weight=\"bold\">%s</span></big>" % _("Abort active recording?"))
                dialog.format_secondary_text(
                    _("The timer you selected belongs to a currently active recording.") + " " +
                    _("Deleting this timer will abort the recording."))
                response = dialog.run()
                dialog.destroy()
                if response == Gtk.ResponseType.YES:
                    self.recorder.delete_timer(timer_id,
                        result_handler=delete_timer_callback,
                        error_handler=global_error_handler)
            else:
                self.recorder.delete_timer(timer_id,
                    result_handler=delete_timer_callback,
                    error_handler=global_error_handler)
コード例 #3
0
    def _append_group(self, dev_group):
        group_id = dev_group.get_id()
        group_name = dev_group.get_name()

        group_iter = self.append(None, [group_id, group_name, 0, dev_group])
        channellist = dev_group.get_channel_list()

        d = Callback()
        if self._use_channel_groups:
            d.add_callback(self._append_channel_groups, channellist, group_id,
                           group_iter, dev_group)
            self._manager.get_channel_groups(
                result_handler=lambda p, x, u: d.callback(x),
                error_handler=global_error_handler)
            # Put all available channels either in TV or radio group
            tv_group_iter = self.append(
                group_iter,
                [group_id, _("TV Channels"), 0, dev_group])
            radio_group_iter = self.append(
                group_iter,
                [group_id, _("Radio Channels"), 0, dev_group])
        else:
            # Do not distinguish between radio and TV
            tv_group_iter = group_iter
            radio_group_iter = group_iter

        d_all = Callback()
        d_all.add_callback(self._append_channels, group_id, dev_group,
                           tv_group_iter, radio_group_iter)
        channellist.get_channel_infos(
            result_handler=lambda p, x, u: d_all.callback(x),
            error_handler=global_error_handler)
コード例 #4
0
    def create_signal_box(self):
        self.progress_table = Gtk.Grid(orientation=Gtk.Orientation.VERTICAL)
        self.progress_table.set_row_spacing(6)
        self.progress_table.set_column_spacing(12)
        self.pack_start(self.progress_table, False, True, 0)

        label = TextFieldLabel(_("Signal quality:"))
        self.progress_table.add(label)

        frame = Gtk.Frame(hexpand=True)
        frame.set_shadow_type(Gtk.ShadowType.NONE)
        self.progress_table.attach_next_to(frame, label, Gtk.PositionType.RIGHT,
            1, 1)

        self.signal_quality_bar = Gtk.ProgressBar()
        self.signal_quality_bar.set_size_request(-1, 10)
        frame.add(self.signal_quality_bar)

        label = TextFieldLabel(_("Signal strength:"))
        self.progress_table.add(label)

        frame = Gtk.Frame(hexpand=True)
        frame.set_shadow_type(Gtk.ShadowType.NONE)
        self.progress_table.attach_next_to(frame, label, Gtk.PositionType.RIGHT,
            1, 1)

        self.signal_strength_bar = Gtk.ProgressBar()
        self.signal_strength_bar.set_size_request(-1, 10)
        frame.add(self.signal_strength_bar)
コード例 #5
0
    def show_devices(self):
        self._label.hide()

        if self.devicesview == None:
            self.devicesview = Gtk.TreeView.new_with_model(self.deviceslist)
            self.devicesview.get_selection().connect("changed",
                self.on_device_selection_changed)

            cell_name = Gtk.CellRendererText()
            col_name = Gtk.TreeViewColumn(_("Name"))
            col_name.pack_start(cell_name, True)
            col_name.set_cell_data_func(cell_name, self.name_data_func, None)
            self.devicesview.append_column(col_name)

            cell_type = Gtk.CellRendererText()
            col_type = Gtk.TreeViewColumn(_("Type"))
            col_type.pack_start(cell_type, True)
            col_type.add_attribute(cell_type, "text", 1)
            self.devicesview.append_column(col_type)

            scrolledview = Gtk.ScrolledWindow()
            scrolledview.set_shadow_type(Gtk.ShadowType.ETCHED_IN)
            scrolledview.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
            scrolledview.add(self.devicesview)
            scrolledview.show_all()

            text = "<b>%s</b>" % _("Select the device you want to configure.")
            self.frame = BaseFrame(text, scrolledview)
            self.frame.show()
            self.pack_start(self.frame, True, True, 0)

        self.devicesview.grab_focus()

        if len(self.deviceslist) == 1:
            self.emit("next-page")
コード例 #6
0
    def create_signal_box(self):
        self.progress_table = Gtk.Grid(orientation=Gtk.Orientation.VERTICAL)
        self.progress_table.set_row_spacing(6)
        self.progress_table.set_column_spacing(12)
        self.pack_start(self.progress_table, False, True, 0)

        label = TextFieldLabel(_("Signal quality:"))
        self.progress_table.add(label)

        frame = Gtk.Frame(hexpand=True)
        frame.set_shadow_type(Gtk.ShadowType.NONE)
        self.progress_table.attach_next_to(frame, label,
                                           Gtk.PositionType.RIGHT, 1, 1)

        self.signal_quality_bar = Gtk.ProgressBar()
        self.signal_quality_bar.set_size_request(-1, 10)
        frame.add(self.signal_quality_bar)

        label = TextFieldLabel(_("Signal strength:"))
        self.progress_table.add(label)

        frame = Gtk.Frame(hexpand=True)
        frame.set_shadow_type(Gtk.ShadowType.NONE)
        self.progress_table.attach_next_to(frame, label,
                                           Gtk.PositionType.RIGHT, 1, 1)

        self.signal_strength_bar = Gtk.ProgressBar()
        self.signal_strength_bar.set_size_request(-1, 10)
        frame.add(self.signal_strength_bar)
コード例 #7
0
 def __init__(self, parent_window):
     Gtk.MessageDialog.__init__(self, parent=parent_window,
         flags=Gtk.DialogFlags.MODAL|Gtk.DialogFlags.DESTROY_WITH_PARENT,
         type=Gtk.MessageType.ERROR, buttons=Gtk.ButtonsType.OK)
     self.set_markup ("<big><span weight=\"bold\">%s</span></big>" % _("Timer could not be created"))
     self.format_secondary_text(
         _("Make sure that the timer doesn't conflict with another one and doesn't start in the past.")
     )
コード例 #8
0
ファイル: SummaryPage.py プロジェクト: GNOME/gnome-dvb-daemon
    def set_device_name_and_details(self, name, details, success):
        if success:
            text = "<span weight=\"bold\">%s</span>" % (_("The device %s has been configured successfully.") % name)
        else:
            text = "<span weight=\"bold\">%s</span>" % (_("Failed configuring device %s.") % name)
        self._label.set_markup(text)

        self._details_label.set_markup(details)
コード例 #9
0
    def show_all_configured(self):
        if self.frame:
            self.frame.hide()

        text = "<big><span weight=\"bold\">%s</span></big>" % _('All devices are already configured.')
        text += "\n\n"
        text += _('Go to the control center if you want to alter the settings of already configured devices.')
        self._label.set_markup (text)
        self._label.show()
コード例 #10
0
    def show_no_devices(self):
        if self.frame:
            self.frame.hide()

        text = "<big><span weight=\"bold\">%s</span></big>" % _('No devices have been found.')
        text += "\n\n"
        text += _('Either no DVB cards are installed or all cards are busy. In the latter case make sure you close all programs such as video players that access your DVB card.')
        self._label.set_markup (text)
        self._label.show()
コード例 #11
0
    def name_data_func(self, column, cell, model, aiter, user_data):
        name = model[aiter][0]
        adapter = model[aiter][3]
        frontend = model[aiter][4]

        text = _("<b>%s</b>\n") % name
        text += "<small>%s</small>" % (_("Adapter: %d, Frontend: %d") % (adapter, frontend))

        cell.set_property("markup", text)
コード例 #12
0
 def __init__(self, parent_window):
     Gtk.MessageDialog.__init__(self,
                                parent=parent_window,
                                flags=Gtk.DialogFlags.MODAL
                                | Gtk.DialogFlags.DESTROY_WITH_PARENT,
                                type=Gtk.MessageType.ERROR,
                                buttons=Gtk.ButtonsType.OK)
     self.set_markup("<big><span weight=\"bold\">%s</span></big>" %
                     _("Timer could not be created"))
     self.format_secondary_text(
         _("Make sure that the timer doesn't conflict with another one and doesn't start in the past."
           ))
コード例 #13
0
ファイル: Preferences.py プロジェクト: GNOME/gnome-dvb-daemon
 def add_device_to_new_group_callback(proxy, success, user_data):
     if not success:
         # "Error: create group"
         error_dialog = Gtk.MessageDialog(parent=self,
             flags=Gtk.DialogFlags.MODAL|Gtk.DialogFlags.DESTROY_WITH_PARENT,
             type=Gtk.MessageType.ERROR, buttons=Gtk.ButtonsType.OK)
         error_dialog.set_markup(
             "<big><span weight=\"bold\">%s</span></big>" % _("Group could not be created"))
         error_dialog.format_secondary_text(
             _("Make sure that you selected the correct channels file and directory where recordings are stored and that both are readable.")
         )
         error_dialog.run()
         error_dialog.destroy()
コード例 #14
0
ファイル: Preferences.py プロジェクト: GNOME/gnome-dvb-daemon
 def add_device_callback(proxy, success, user_data):
     if not success:
         # "Error: add to group"
         error_dialog = Gtk.MessageDialog(parent=self,
             flags=Gtk.DialogFlags.MODAL|Gtk.DialogFlags.DESTROY_WITH_PARENT,
             type=Gtk.MessageType.ERROR, buttons=Gtk.ButtonsType.OK)
         error_dialog.set_markup(
             "<big><span weight=\"bold\">%s</span></big>" % _("Device could not be added to group"))
         error_dialog.format_secondary_text(
             _("Make sure that the device isn't already assigned to a different group and that all devices in the group are of the same type.")
         )
         error_dialog.run()
         error_dialog.destroy()
コード例 #15
0
    def show_error(self, error):
        if self.frame:
            self.frame.hide()

        text = "<big><span weight=\"bold\">%s</span></big>" % _('An error occurred while retrieving devices.')
        text += "\n\n"
        text += _("Make sure other applications don't access DVB devices and you have permissions to access them.")
        text += "\n\n"
        text += _('The detailed error message is:')
        text += "\n<i>%s</i>" % error
        self._label.set_selectable(True)
        self._label.set_markup (text)
        self._label.show()
コード例 #16
0
    def __init__(self, parent, model, device_type):
        Gtk.Dialog.__init__(self,
                            title=_("Add to Group"),
                            parent=parent,
                            buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.REJECT,
                                     Gtk.STOCK_OK, Gtk.ResponseType.ACCEPT))
        self.set_modal(True)
        self.set_destroy_with_parent(True)
        self.__selected_group = None
        self.set_border_width(5)

        self.vbox_main = Gtk.Box(orientation=Gtk.Orientation.VERTICAL,
                                 spacing=12)
        self.vbox_main.set_border_width(5)
        self.vbox_main.show()
        self.get_content_area().pack_start(self.vbox_main, True, True, 0)

        groupbox = Gtk.Box(spacing=18)
        groupbox.show()

        group_frame = BaseFrame("<b>%s</b>" % _("Add Device to Group"),
                                groupbox)
        group_frame.show()
        self.vbox_main.pack_start(group_frame, True, True, 0)

        group_label = TextFieldLabel()
        group_label.show()
        group_label.set_markup_with_mnemonic(_("_Group:"))
        groupbox.pack_start(group_label, False, False, 0)

        self.groups = Gtk.ListStore(str, GObject.TYPE_PYOBJECT)

        combo = Gtk.ComboBox.new_with_model(self.groups)
        combo.connect("changed", self.on_combo_changed)
        cell = Gtk.CellRendererText()
        combo.pack_start(cell, True)
        combo.add_attribute(cell, "text", 0)
        combo.show()
        group_label.set_mnemonic_widget(combo)
        groupbox.pack_start(combo, True, True, 0)

        def append_groups(groups):
            for group in groups:
                if group.get_type() == device_type:
                    name = group["name"]
                    if name == "":
                        name = "Group %d" % group["id"]
                    self.groups.append([name, group])

        model.get_registered_device_groups(result_handler=append_groups)
コード例 #17
0
    def setup_dvb_c(self):
        countries = {}
        t = gettext.translation("iso_3166", fallback=True)
        for lang in COUNTRIES_DVB_C:
            countries[lang] = t.gettext(COUNTRIES[lang])

        self._create_table()

        country = Gtk.Label(halign=Gtk.Align.START)
        country.set_markup_with_mnemonic(_("_Country:"))
        country.show()
        self.table.add(country)

        self.countries = Gtk.ListStore(str, str)
        self.countries.set_sort_column_id(0, Gtk.SortType.ASCENDING)
        self.countries.set_sort_func(0, self.combobox_sort_func, None)

        for code, name in list(countries.items()):
            self.countries.append([name, code])

        self.country_combo = Gtk.ComboBox.new_with_model_and_entry(self.countries)
        self.country_combo.set_hexpand(True)
        self.country_combo.connect('changed', self.on_country_changed)
        self.__data_dir = "dvb-c"
        cell = Gtk.CellRendererText()
        self.country_combo.pack_start(cell, True)
        self.country_combo.set_entry_text_column(0)
        self.country_combo.show()
        self.table.attach_next_to(self.country_combo, country,
            Gtk.PositionType.RIGHT, 1, 1)
        country.set_mnemonic_widget(self.country_combo)

        providers = Gtk.Label()
        providers.set_markup_with_mnemonic(_("_Providers:"))
        providers.show()
        self.table.add(providers)

        self.providers = Gtk.ListStore(str, str)
        self.providers.set_sort_column_id(0, Gtk.SortType.ASCENDING)

        self.providers_view, scrolledview = self._create_providers_treeview(
            self.providers, _("Provider"))
        self.providers_view.get_selection().connect('changed',
            self.on_providers_changed)
        providers.set_mnemonic_widget(self.providers_view)

        scrolledview.set_property("expand", True)
        self.table.attach_next_to(scrolledview, providers,
            Gtk.PositionType.BOTTOM, 2, 1)
        self.providers_view.set_sensitive(False)
コード例 #18
0
    def setup_dvb_c(self):
        countries = {}
        t = gettext.translation("iso_3166", fallback=True)
        for lang in COUNTRIES_DVB_C:
            countries[lang] = t.gettext(COUNTRIES[lang])

        self._create_table()

        country = Gtk.Label(halign=Gtk.Align.START)
        country.set_markup_with_mnemonic(_("_Country:"))
        country.show()
        self.table.add(country)

        self.countries = Gtk.ListStore(str, str)
        self.countries.set_sort_column_id(0, Gtk.SortType.ASCENDING)
        self.countries.set_sort_func(0, self.combobox_sort_func, None)

        for code, name in list(countries.items()):
            self.countries.append([name, code])

        self.country_combo = Gtk.ComboBox.new_with_model_and_entry(self.countries)
        self.country_combo.set_hexpand(True)
        self.country_combo.connect('changed', self.on_country_changed)
        self.__data_dir = "cable"
        cell = Gtk.CellRendererText()
        self.country_combo.pack_start(cell, True)
        self.country_combo.set_entry_text_column(0)
        self.country_combo.show()
        self.table.attach_next_to(self.country_combo, country,
            Gtk.PositionType.RIGHT, 1, 1)
        country.set_mnemonic_widget(self.country_combo)

        providers = Gtk.Label()
        providers.set_markup_with_mnemonic(_("_Providers:"))
        providers.show()
        self.table.add(providers)

        self.providers = Gtk.ListStore(str, str)
        self.providers.set_sort_column_id(0, Gtk.SortType.ASCENDING)

        self.providers_view, scrolledview = self._create_providers_treeview(
            self.providers, _("Provider"))
        self.providers_view.get_selection().connect('changed',
            self.on_providers_changed)
        providers.set_mnemonic_widget(self.providers_view)

        scrolledview.set_property("expand", True)
        self.table.attach_next_to(scrolledview, providers,
            Gtk.PositionType.BOTTOM, 2, 1)
        self.providers_view.set_sensitive(False)
コード例 #19
0
 def on_delete_group_clicked(self, button):
     dialog = Gtk.MessageDialog(parent=self,
         flags=Gtk.DialogFlags.MODAL|Gtk.DialogFlags.DESTROY_WITH_PARENT,
         type=Gtk.MessageType.QUESTION, buttons=Gtk.ButtonsType.YES_NO)
     group_id, group_name = self.get_selected_channel_group()
     msg = _("Are you sure you want to delete the group '%s'?") % group_name
     dialog.set_markup (
         "<big><span weight=\"bold\">%s</span></big>\n\n%s" %
         (msg, _("All assignments to this group will be lost.")))
     if dialog.run() == Gtk.ResponseType.YES:
         self.model.remove_channel_group(group_id,
             result_handler=self.on_remove_channel_group_finished,
             error_handler=gnomedvb.global_error_handler)
     dialog.destroy()
コード例 #20
0
 def __init__(self, parent_window):
     Gtk.MessageDialog.__init__(self, parent=parent_window,
                 flags=Gtk.DialogFlags.MODAL|Gtk.DialogFlags.DESTROY_WITH_PARENT,
                 type=Gtk.MessageType.INFO, buttons=Gtk.ButtonsType.OK)
     self.set_markup("<big><span weight=\"bold\">%s</span></big>" % (
         _("Recording has been scheduled successfully"))
     )
コード例 #21
0
ファイル: Preferences.py プロジェクト: GNOME/gnome-dvb-daemon
    def _on_button_remove_clicked(self, button):
        def remove_device_callback(proxy, success, user_data):
            if success:
                # "Success: remove device"
                # Add device to unassigned devices
                self.unassigned_devices.append([device])
            else:
                # "Error: remove device"
                error_dialog = Gtk.MessageDialog(parent=self,
                    flags=Gtk.DialogFlags.MODAL|Gtk.DialogFlags.DESTROY_WITH_PARENT,
                    type=Gtk.MessageType.ERROR, buttons=Gtk.ButtonsType.OK)
                error_dialog.set_markup(
                    "<big><span weight=\"bold\">%s</big></span>" % _("Device could not be removed from group"))
                error_dialog.run()
                error_dialog.destroy()

        model, aiter = self.devicegroupsview.get_selection().get_selected()

        if aiter != None:
            group = model[aiter][model.COL_GROUP]
            device = model[aiter][model.COL_DEVICE]

            dialog = Gtk.MessageDialog(parent=self,
                flags=Gtk.DialogFlags.MODAL|Gtk.DialogFlags.DESTROY_WITH_PARENT,
                type=Gtk.MessageType.QUESTION, buttons=Gtk.ButtonsType.YES_NO)
            dialog.set_markup(
                _("Are you sure you want to remove device <b>%s</b> from <b>%s</b>?") % (device.name,
                device.group_name))
            response = dialog.run()
            dialog.destroy()
            if response == Gtk.ResponseType.YES:
                if isinstance(device, Device):
                    group.remove_device(device,
                        result_handler=remove_device_callback,
                        error_handler=global_error_handler)
コード例 #22
0
    def _fill_providers(self, selected_country):
        # Only DVB-T has bruteforce scan
        if self.__adapter_info["type"] == GROUP_TERRESTRIAL:
            self.providers.append([_("Don't know"), self.NOT_LISTED])

        # only search in correct subfolders, to avoid errors if one of the
        # DTV_SCAN_TABLES_DIRS exists, but has incorrect content
        for d in DTV_SCAN_TABLES_DIRS:
            if os.access(d, os.F_OK | os.R_OK) and os.access(os.path.join(d, self.__data_dir), os.F_OK | os.R_OK):
                for f in os.listdir(os.path.join(d, self.__data_dir)):
                    values = f.split('-', 1)
                    if len(values) != 2:
                        continue
                    country, city = values

                    if country == selected_country:
                        self.providers.append([city,
                            os.path.join(d, self.__data_dir, f)])

        self.providers_view.set_sensitive(True)
        first_iter = self.providers.get_iter_first()
        self.providers_view.get_selection().select_iter(first_iter)

        self.get_toplevel().get_window().set_cursor(None)
        self.emit("finished", True)

        return False
コード例 #23
0
    def _fill_providers(self, selected_country):
        # Only DVB-T has bruteforce scan
        if self.__adapter_info["type"] == GROUP_TERRESTRIAL:
            self.providers.append([_("Don't know"), self.NOT_LISTED])

        for d in DVB_APPS_DIRS:
            if os.access(d, os.F_OK | os.R_OK):
                for f in os.listdir(os.path.join(d, self.__data_dir)):
                    values = f.split('-', 1)
                    if len(values) != 2:
                        continue
                    country, city = values

                    if country == selected_country:
                        self.providers.append([city,
                            os.path.join(d, self.__data_dir, f)])

        self.providers_view.set_sensitive(True)
        first_iter = self.providers.get_iter_first()
        self.providers_view.get_selection().select_iter(first_iter)

        self.get_toplevel().get_window().set_cursor(None)
        self.emit("finished", True)

        return False
コード例 #24
0
    def _get_description_data(self,
                              column,
                              cell,
                              model,
                              aiter,
                              user_data=None):
        self._set_colors()
        event_id = model[aiter][ScheduleStore.COL_EVENT_ID]

        if event_id == ScheduleStore.NEW_DAY:
            date = model[aiter][ScheduleStore.COL_DATETIME]
            description = "<big><b>%s</b></big>" % date.strftime("%A %x")
            cell.set_property("xalign", 0.5)
            cell.set_property("cell-background-rgba", self.date_color)
        else:
            cell.set_property("xalign", 0)
            cell.set_property("cell-background-rgba", self.entry_color)

            duration = seconds_to_time_duration_string(
                model[aiter][ScheduleStore.COL_DURATION])
            title = model[aiter][ScheduleStore.COL_TITLE]

            short_desc = model[aiter][ScheduleStore.COL_SHORT_DESC]
            if len(short_desc) > 0:
                short_desc += "\n"

            description = "<b>%s</b>\n%s<small><i>%s: %s</i></small>" % (
                title, short_desc, _("Duration"), duration)

        cell.set_property("markup", description)
コード例 #25
0
    def _on_event_selected(self, treeview, event):
        if event.type == getattr(Gdk.EventType, "2BUTTON_PRESS"):
            model, aiter = treeview.get_selection().get_selected()
            if aiter != None:
                dialog = Gtk.MessageDialog(
                    parent=self,
                    flags=Gtk.DialogFlags.MODAL
                    | Gtk.DialogFlags.DESTROY_WITH_PARENT,
                    type=Gtk.MessageType.QUESTION,
                    buttons=Gtk.ButtonsType.YES_NO)
                dialog.set_markup(
                    "<big><span weight=\"bold\">%s</span></big>" %
                    _("Schedule recording for the selected event?"))

                success = True
                if dialog.run() == Gtk.ResponseType.YES:
                    event_id = model[aiter][model.COL_EVENT_ID]
                    group = self._get_selected_group()
                    channel_sid = self._get_selected_channel_sid()
                    recorder = group.get_recorder()
                    rec_id, success = recorder.add_timer_for_epg_event(
                        event_id, channel_sid)
                dialog.destroy()

                if not success:
                    dialog = TimerFailureDialog(self)
                    dialog.run()
                    dialog.destroy()
コード例 #26
0
    def __init__(self, model=None):
        GObject.GObject.__init__(self)
        if model != None:
            self.set_model(model)

        self._append_text_column(_("Title"), RecordingsStore.COL_NAME)
        self._append_text_column(_("Channel"), RecordingsStore.COL_CHANNEL)

        col_length, cell_length = self._append_text_column(_("Length"),
            RecordingsStore.COL_DURATION)
        col_length.set_cell_data_func(cell_length, self._get_length_data, None)

        cell = CellRendererDatetime()
        col = Gtk.TreeViewColumn(_("Start"), cell,
            datetime=RecordingsStore.COL_START)
        self.append_column(col)
コード例 #27
0
ファイル: SetupWizard.py プロジェクト: GNOME/gnome-dvb-daemon
    def on_prepare(self, assistant, page):
        if isinstance(page, IntroPage):
            # Reset to None so we can automatically search for adapter again
            self.__adapter_info = None
        elif isinstance(page, AdaptersPage):
            self.__expert_mode = self.intro_page.has_expert_mode()
            page.display_configured(self.__expert_mode)
            page.run()
        elif isinstance(page, InitialTuningDataPage):
            page.set_adapter_info(self.__adapter_info)
        elif isinstance(page, ChannelScanPage):
            self.__ask_on_exit = True
            if self.__adapter_info["name"] != None:
                page.start_scanning(self.__adapter_info["adapter"],
                    self.__adapter_info["frontend"], self.__adapter_info["type"], self.tuning_data_page.get_tuning_data ())
        elif isinstance(page, SetupDevicePage):
            page.set_adapter(self.__adapter_info)
            page.set_scanner(self.scan_page.get_scanner())
            page.set_channels(self.scan_page.get_selected_channel_sids())
            page.run(self.__create_group)
        elif isinstance(page, SaveChannelListPage):
            page.set_scanner(self.scan_page.get_scanner())
            page.set_channels(self.scan_page.get_selected_channel_sids())
        elif isinstance(page, SummaryPage):
            self.__ask_on_exit = False
            if self.__expert_mode:
                summary = _('The generated channels file can be used to configure your devices in the control center.')
                success = True
            else:
                success, summary = self.setup_page.get_summary()
            page.set_device_name_and_details(self.__adapter_info["name"],
                summary, success)
            self.__adapter_info = None

        self.set_page_title(page, page.get_page_title())
コード例 #28
0
    def get_description_data(self, column, cell, model, aiter, user_data=None):
        device = model[aiter][model.COL_DEVICE]

        if isinstance(device, Device):
            # translators: first is device's name, second its type
            text = _("<b>%s (%s)</b>\n") % (device.name, DVB_TYPE_TO_DESC[device.type])
            text += "<small>%s</small>" % (_("Adapter: %d, Frontend: %d") % (device.adapter,
                device.frontend))
        else:
            if device == "":
                group = model[aiter][model.COL_GROUP]
                text = _("Group %d") % group["id"]
            else:
                text = device[0]

        cell.set_property("markup", text)
コード例 #29
0
    def __create_toolbar(self):
        toolbar = Gtk.Toolbar()
        toolbar.show()
        self.vbox.pack_start(toolbar, False, True, 0)

        self.button_prefs = Gtk.ToolButton.new_from_stock(Gtk.STOCK_EDIT)
        self.button_prefs.connect("clicked", self._on_button_prefs_clicked)
        self.button_prefs.set_sensitive(False)
        self.button_prefs.set_tooltip_markup(_("Edit selected group"))
        self.button_prefs.show()
        toolbar.insert(self.button_prefs, self.BUTTON_EDIT)

        self.button_remove = Gtk.ToolButton.new_from_stock(Gtk.STOCK_REMOVE)
        self.button_remove.connect("clicked", self._on_button_remove_clicked)
        self.button_remove.set_sensitive(False)
        self.button_remove.set_tooltip_markup(_("Remove selected device"))
        self.button_remove.show()
        toolbar.insert(self.button_remove, self.BUTTON_REMOVE)

        sep = Gtk.SeparatorToolItem()
        sep.show()
        toolbar.insert(sep, self.SEP1)

        prefs_image = Gtk.Image.new_from_stock(Gtk.STOCK_PREFERENCES,
                                               Gtk.IconSize.SMALL_TOOLBAR)
        button_setup = Gtk.MenuToolButton(icon_widget=prefs_image,
                                          label=_("Setup"))
        button_setup.connect("clicked", self._on_button_setup_clicked)
        button_setup.set_tooltip_markup(_("Setup devices"))
        button_setup.show()
        toolbar.insert(button_setup, self.BUTTON_PREFERENCES)

        setup_menu = Gtk.Menu()
        new_image = Gtk.Image.new_from_stock(Gtk.STOCK_NEW, Gtk.IconSize.MENU)
        new_image.show()
        self.button_new = Gtk.ImageMenuItem.new_with_label(
            _("Create new group"))
        self.button_new.connect("activate", self._on_button_new_clicked)
        self.button_new.set_image(new_image)
        self.button_new.set_sensitive(False)
        self.button_new.set_tooltip_markup(
            _("Create new group for selected device"))
        self.button_new.show()
        setup_menu.append(self.button_new)

        add_image = Gtk.Image.new_from_stock(Gtk.STOCK_ADD, Gtk.IconSize.MENU)
        add_image.show()
        self.button_add = Gtk.ImageMenuItem.new_with_label(_("Add to group"))
        self.button_add.connect("activate", self._on_button_add_clicked)
        self.button_add.set_image(add_image)
        self.button_add.set_sensitive(False)
        self.button_add.set_tooltip_markup(
            _("Add selected device to existing group"))
        self.button_add.show()
        setup_menu.append(self.button_add)

        button_setup.set_menu(setup_menu)
コード例 #30
0
 def show_progressbar(self):
     self._label.hide()
     self._progressbar = Gtk.ProgressBar()
     self._progressbar.set_text(_("Searching for devices"))
     self._progressbar.set_fraction(0.1)
     self._progressbar.show()
     self.pack_start(self._progressbar, False, True, 0)
     self._progressbar_timer = GLib.timeout_add(100, self.progressbar_pulse, None)
コード例 #31
0
    def __init__(self, name, recdir, parent=None):
        NewGroupDialog.__init__(self, parent)

        self.set_title(_("Edit group"))
        self.show_channels_section(False)

        self.name_entry.set_text(name)
        self.recordings_entry.set_text(recdir)
コード例 #32
0
ファイル: IntroPage.py プロジェクト: GNOME/gnome-dvb-daemon
    def __init__(self):
        BasePage.__init__(self)

        text = "<b>%s</b>" % _('Welcome to the digital television Assistant.')
        self._label.set_markup(text)
        self._label.set_line_wrap(False)

        text1 = _('It will automatically configure your devices and search for channels, if necessary.')
        text2 = _("Click \"Forward\" to begin.")
        label2 = Gtk.Label(text1 + "\n\n" + text2)
        label2.set_line_wrap(True)
        label2.set_halign(Gtk.Align.START)
        label2.set_valign(Gtk.Align.START)
        self.pack_start(label2, True, True, 0)

        self.expert_mode = Gtk.CheckButton.new_with_mnemonic(_('_Expert mode'))
        self.pack_start(self.expert_mode, False, False, 0)
コード例 #33
0
    def __init__(self, model=None):
        GObject.GObject.__init__(self)
        if model != None:
            self.set_model(model)

        self._append_text_column(_("Title"), RecordingsStore.COL_NAME)
        self._append_text_column(_("Channel"), RecordingsStore.COL_CHANNEL)

        col_length, cell_length = self._append_text_column(
            _("Length"), RecordingsStore.COL_DURATION)
        col_length.set_cell_data_func(cell_length, self._get_length_data, None)

        cell = CellRendererDatetime()
        col = Gtk.TreeViewColumn(_("Start"),
                                 cell,
                                 datetime=RecordingsStore.COL_START)
        self.append_column(col)
コード例 #34
0
ファイル: Dialogs.py プロジェクト: GNOME/gnome-dvb-daemon
 def _on_channels_open_clicked(self, button):
     dialog = Gtk.FileChooserDialog (title = _("Select File"),
         parent=self, action=Gtk.FileChooserAction.OPEN,
         buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.REJECT,
                   Gtk.STOCK_OK, Gtk.ResponseType.ACCEPT))
     if dialog.run() == Gtk.ResponseType.ACCEPT:
         self.channels_entry.set_text(dialog.get_filename())
     dialog.destroy()
コード例 #35
0
 def add_device_to_new_group_callback(proxy, success, user_data):
     if not success:
         # "Error: create group"
         error_dialog = Gtk.MessageDialog(
             parent=self,
             flags=Gtk.DialogFlags.MODAL
             | Gtk.DialogFlags.DESTROY_WITH_PARENT,
             type=Gtk.MessageType.ERROR,
             buttons=Gtk.ButtonsType.OK)
         error_dialog.set_markup(
             "<big><span weight=\"bold\">%s</span></big>" %
             _("Group could not be created"))
         error_dialog.format_secondary_text(
             _("Make sure that you selected the correct channels file and directory where recordings are stored and that both are readable."
               ))
         error_dialog.run()
         error_dialog.destroy()
コード例 #36
0
    def show_error(self):
        if self._progressbar != None:
            self._progressbar.destroy()

        text = "<big><span weight=\"bold\">%s</span></big>" % _("An error occured while trying to setup the device.")
        self._label.set_selectable(True)
        self._label.set_markup (text)
        self._label.show()
コード例 #37
0
 def add_device_callback(proxy, success, user_data):
     if not success:
         # "Error: add to group"
         error_dialog = Gtk.MessageDialog(
             parent=self,
             flags=Gtk.DialogFlags.MODAL
             | Gtk.DialogFlags.DESTROY_WITH_PARENT,
             type=Gtk.MessageType.ERROR,
             buttons=Gtk.ButtonsType.OK)
         error_dialog.set_markup(
             "<big><span weight=\"bold\">%s</span></big>" %
             _("Device could not be added to group"))
         error_dialog.format_secondary_text(
             _("Make sure that the device isn't already assigned to a different group and that all devices in the group are of the same type."
               ))
         error_dialog.run()
         error_dialog.destroy()
コード例 #38
0
ファイル: Dialogs.py プロジェクト: GNOME/gnome-dvb-daemon
    def __init__(self, name, recdir, parent=None):
        NewGroupDialog.__init__(self, parent)

        self.set_title (_("Edit group"))
        self.show_channels_section(False)

        self.name_entry.set_text(name)
        self.recordings_entry.set_text(recdir)
コード例 #39
0
ファイル: Dialogs.py プロジェクト: GNOME/gnome-dvb-daemon
 def _on_recordings_open_clicked(self, button):
     dialog = Gtk.FileChooserDialog (title = _("Select Directory"),
         parent=self, action=Gtk.FileChooserAction.SELECT_FOLDER,
         buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.REJECT,
                   Gtk.STOCK_OK, Gtk.ResponseType.ACCEPT))
     if dialog.run() == Gtk.ResponseType.ACCEPT:
         self.recordings_entry.set_text(dialog.get_filename())
     dialog.destroy()
コード例 #40
0
 def on_delete_group_clicked(self, button):
     dialog = Gtk.MessageDialog(parent=self,
                                flags=Gtk.DialogFlags.MODAL
                                | Gtk.DialogFlags.DESTROY_WITH_PARENT,
                                type=Gtk.MessageType.QUESTION,
                                buttons=Gtk.ButtonsType.YES_NO)
     group_id, group_name = self.get_selected_channel_group()
     msg = _("Are you sure you want to delete the group '%s'?") % group_name
     dialog.set_markup(
         "<big><span weight=\"bold\">%s</span></big>\n\n%s" %
         (msg, _("All assignments to this group will be lost.")))
     if dialog.run() == Gtk.ResponseType.YES:
         self.model.remove_channel_group(
             group_id,
             result_handler=self.on_remove_channel_group_finished,
             error_handler=gnomedvb.global_error_handler)
     dialog.destroy()
コード例 #41
0
ファイル: Dialogs.py プロジェクト: GNOME/gnome-dvb-daemon
    def __init__(self, parent, model, device_type):
        Gtk.Dialog.__init__(self, title=_("Add to Group"), parent=parent,
            buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.REJECT,
                      Gtk.STOCK_OK, Gtk.ResponseType.ACCEPT))
        self.set_modal(True)
        self.set_destroy_with_parent(True)
        self.__selected_group = None
        self.set_border_width(5)

        self.vbox_main = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=12)
        self.vbox_main.set_border_width(5)
        self.vbox_main.show()
        self.get_content_area().pack_start(self.vbox_main, True, True, 0)

        groupbox = Gtk.Box(spacing=18)
        groupbox.show()

        group_frame = BaseFrame("<b>%s</b>" % _("Add Device to Group"), groupbox)
        group_frame.show()
        self.vbox_main.pack_start(group_frame, True, True, 0)

        group_label = TextFieldLabel()
        group_label.show()
        group_label.set_markup_with_mnemonic(_("_Group:"))
        groupbox.pack_start(group_label, False, False, 0)

        self.groups = Gtk.ListStore(str, GObject.TYPE_PYOBJECT)

        combo = Gtk.ComboBox.new_with_model(self.groups)
        combo.connect("changed", self.on_combo_changed)
        cell = Gtk.CellRendererText()
        combo.pack_start(cell, True)
        combo.add_attribute(cell, "text", 0)
        combo.show()
        group_label.set_mnemonic_widget(combo)
        groupbox.pack_start(combo, True, True, 0)

        def append_groups(groups):
            for group in groups:
                if group.get_type() == device_type:
                    name = group["name"]
                    if name == "":
                        name = "Group %d" % group["id"]
                    self.groups.append([name, group])
        model.get_registered_device_groups(result_handler=append_groups)
コード例 #42
0
    def setup_dvb_s(self):

        satellite = Gtk.Label()
        satellite.set_markup_with_mnemonic(_("_Satellite:"))
        satellite.show()
        self.pack_start(satellite, False, False, 0)

        self.satellites = Gtk.ListStore(str, str)
        self.satellites.set_sort_column_id(0, Gtk.SortType.ASCENDING)

        self.satellite_view, scrolledview = self._create_providers_treeview(
            self.satellites, _("Satellite"))
        self.satellite_view.get_selection().connect("changed",
            self.on_satellite_changed)
        satellite.set_mnemonic_widget(self.satellite_view)
        self.pack_start(scrolledview, True, True, 0)

        self.read_satellites()
コード例 #43
0
 def delete_timer_callback(proxy, success, user_data):
     if not success:
         error_dialog = Gtk.MessageDialog(parent=self,
             flags=Gtk.DialogFlags.MODAL|Gtk.DialogFlags.DESTROY_WITH_PARENT,
             type=Gtk.MessageType.ERROR, buttons=Gtk.ButtonsType.OK)
         error_dialog.set_markup(
             "<big><span weight=\"bold\">%s</span></big>" % _("Timer could not be deleted"))
         error_dialog.run()
         error_dialog.destroy()
コード例 #44
0
    def setup_dvb_s(self):

        satellite = Gtk.Label()
        satellite.set_markup_with_mnemonic(_("_Satellite:"))
        satellite.show()
        self.pack_start(satellite, False, False, 0)

        self.satellites = Gtk.ListStore(str, str)
        self.satellites.set_sort_column_id(0, Gtk.SortType.ASCENDING)

        self.satellite_view, scrolledview = self._create_providers_treeview(
            self.satellites, _("Satellite"))
        self.satellite_view.get_selection().connect("changed",
            self.on_satellite_changed)
        satellite.set_mnemonic_widget(self.satellite_view)
        self.pack_start(scrolledview, True, True, 0)

        self.read_satellites()
コード例 #45
0
 def __init__(self, parent_window):
     Gtk.MessageDialog.__init__(self,
                                parent=parent_window,
                                flags=Gtk.DialogFlags.MODAL
                                | Gtk.DialogFlags.DESTROY_WITH_PARENT,
                                type=Gtk.MessageType.INFO,
                                buttons=Gtk.ButtonsType.OK)
     self.set_markup("<big><span weight=\"bold\">%s</span></big>" %
                     (_("Recording has been scheduled successfully")))
コード例 #46
0
    def show_progressbar(self):
        # From parent
        self._label.hide()

        self._progressbar = Gtk.ProgressBar()
        self._progressbar.set_text(_("Configuring device"))
        self._progressbar.set_fraction(0.1)
        self._progressbar.show()
        self.pack_start(self._progressbar, False, True, 0)
        self._progressbar_timer = GLib.timeout_add(100, self.progressbar_pulse)
コード例 #47
0
 def _on_recordings_open_clicked(self, button):
     dialog = Gtk.FileChooserDialog(
         title=_("Select Directory"),
         parent=self,
         action=Gtk.FileChooserAction.SELECT_FOLDER,
         buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.REJECT, Gtk.STOCK_OK,
                  Gtk.ResponseType.ACCEPT))
     if dialog.run() == Gtk.ResponseType.ACCEPT:
         self.recordings_entry.set_text(dialog.get_filename())
     dialog.destroy()
コード例 #48
0
 def _on_channels_open_clicked(self, button):
     dialog = Gtk.FileChooserDialog(
         title=_("Select File"),
         parent=self,
         action=Gtk.FileChooserAction.OPEN,
         buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.REJECT, Gtk.STOCK_OK,
                  Gtk.ResponseType.ACCEPT))
     if dialog.run() == Gtk.ResponseType.ACCEPT:
         self.channels_entry.set_text(dialog.get_filename())
     dialog.destroy()
コード例 #49
0
    def __init__(self):
        BasePage.__init__(self)

        text = "<b>%s</b>" % _('Welcome to the digital television Assistant.')
        self._label.set_markup(text)
        self._label.set_line_wrap(False)

        text1 = _(
            'It will automatically configure your devices and search for channels, if necessary.'
        )
        text2 = _("Click \"Forward\" to begin.")
        label2 = Gtk.Label(text1 + "\n\n" + text2)
        label2.set_line_wrap(True)
        label2.set_halign(Gtk.Align.START)
        label2.set_valign(Gtk.Align.START)
        self.pack_start(label2, True, True, 0)

        self.expert_mode = Gtk.CheckButton.new_with_mnemonic(_('_Expert mode'))
        self.pack_start(self.expert_mode, False, False, 0)
コード例 #50
0
    def __init__(self, model=None):
        GObject.GObject.__init__(self)
        if model != None:
            self.set_model(model)

        col_name = Gtk.TreeViewColumn(_("Channel group"))
        self.cell_name = Gtk.CellRendererText()
        col_name.pack_start(self.cell_name, True)
        col_name.add_attribute(self.cell_name, "markup", ChannelGroupsStore.COL_NAME)
        col_name.add_attribute(self.cell_name, "editable", ChannelGroupsStore.COL_EDITABLE)
        self.append_column(col_name)
コード例 #51
0
    def __create_unassigned_devices(self):
        self.unassigned_devices = UnassignedDevicesStore()
        self.unassigned_view = DeviceGroupsView(self.unassigned_devices)
        self.unassigned_view.get_selection().connect(
            "changed", self._on_unassigned_selection_changed)
        self.unassigned_view.show()

        unassigned_frame = Frame("<b>%s</b>" % _("Unconfigured devices"),
                                 self.unassigned_view)
        unassigned_frame.show()
        self.vbox_main.pack_start(unassigned_frame, True, True, 0)
コード例 #52
0
    def _on_about_clicked(self, action, user_data=None):
        about = Gtk.AboutDialog()
        about.set_transient_for(self)
        #translators: These appear in the About dialog, usual format applies.
        about.set_translator_credits(_("translator-credits"))

        for prop, val in list(gnomedvb.INFOS.items()):
            about.set_property(prop, val)

        about.set_screen(self.get_screen())
        about.run()
        about.destroy()