Ejemplo n.º 1
0
    def edit_session(self, instance, session_id):
        def _on_answer(instance, answer):
            if answer:
                session_name = session_editor.session_name
                if not session_name or len(session_name) == 0:
                    alertPopup('Error', 'A session name must be specified')
                    return
                # did the session name change? if so, refresh the view.
                new_name = session_editor.session_name
                if new_name != session.name:
                    session.name = new_name
                    session_accordion = self._find_session_accordion_item(
                        session)
                    session_accordion.title = new_name

                session.notes = session_editor.session_notes
                self.datastore.update_session(session)
                self.dispatch('on_session_updated', session)
            popup.dismiss()

        session = self.datastore.get_session_by_id(session_id, self.sessions)
        session_editor = SessionEditorView()
        session_editor.session_name = session.name
        session_editor.session_notes = session.notes
        popup = editor_popup('Edit Session',
                             session_editor,
                             _on_answer,
                             size=(dp(600), dp(300)))
Ejemplo n.º 2
0
    def _add_new_action(self, *args):
        def popup_dismissed(instance, result):
            if result:
                selected = instance.content.selected_item
                if selected is not None:
                    alertaction = selected.key
                    self.alertrule.alert_actions.append(alertaction)
                    self.dispatch('on_edit_action', alertaction)
                    self.refresh_view()
            popup.dismiss()

        alertaction_prototypes = get_alertaction_default_collection(
            exclude_filter=self.alertrule.alert_actions)

        items = [
            ItemSelectionRef(title=alertaction.title,
                             image_source=alertaction.PREVIEW_IMAGE,
                             key=alertaction)
            for alertaction in alertaction_prototypes
        ]

        if len(items) == 0:
            toast('No more actions available')
        else:
            view = ItemSelectorView(item_references=items)
            popup = editor_popup('Select Action',
                                 view,
                                 popup_dismissed,
                                 size_hint=(None, None),
                                 size=(min(Window.width, dp(700)),
                                       min(Window.height, dp(400))),
                                 auto_dismiss_time=10)
 def on_bt_configure(self, instance, value):
     if not self._bt_popup:
         content = AdvancedBluetoothConfigView(self.config.connectivityConfig)
         popup = editor_popup(title="Configure Bluetooth", content=content,
                              answerCallback=self.on_bluetooth_popup_answer)
         self._bt_popup = popup
         self._bt_config_view = content
Ejemplo n.º 4
0
 def on_bt_configure(self, instance, value):
     if not self._bt_popup:
         content = AdvancedBluetoothConfigView(
             self.config.connectivityConfig)
         popup = editor_popup(title="Configure Bluetooth",
                              content=content,
                              answerCallback=self.on_bluetooth_popup_answer)
         self._bt_popup = popup
         self._bt_config_view = content
    def _edit_channel(self, channel_index, is_new):
        channel = self.obd2_cfg.pids[channel_index]
        working_channel_cfg = copy.deepcopy(channel)
        content = OBD2ChannelConfigView(self.obd2_preset_settings, is_new, self.mapping_capable)
        content.init_config(working_channel_cfg, self.can_filters, self.max_sample_rate, self.channels)

        def _on_answer(instance, answer):
            if answer:
                self._replace_config(self.obd2_cfg.pids[channel_index], working_channel_cfg)
                self.dispatch('on_modified')
                self.reload_obd2_channel_grid(self.obd2_cfg)
            popup.dismiss()

        popup = editor_popup('Edit OBDII channel', content, _on_answer, size=(dp(500), dp(300)))
Ejemplo n.º 6
0
    def _edit_channel(self, channel_index, is_new):
        channel = self.obd2_cfg.pids[channel_index]
        working_channel_cfg = copy.deepcopy(channel)
        content = OBD2ChannelConfigView(self.obd2_preset_settings, is_new, self.mapping_capable)
        content.init_config(working_channel_cfg, self.can_filters, self.max_sample_rate, self.channels)

        def _on_answer(instance, answer):
            if answer:
                self._replace_config(channel, working_channel_cfg)
                self.dispatch('on_modified')
                self.reload_obd2_channel_grid(self.obd2_cfg)
            popup.dismiss()

        popup = editor_popup('Edit OBDII channel', content, _on_answer, size=(dp(500), dp(300)))
Ejemplo n.º 7
0
    def _load_track_setup_view(self, track_cfg):
        """
        Present the user with the track setup view
        """
        def cancelled_track():
            # user cancelled, store current location as where they cancelled
            # so we prevent bugging the user again
            self._settings.userPrefs.set_last_selected_track(
                0, 0, str(self._gps_sample.geopoint))
            HelpInfo.help_popup('lap_setup', self)

        def on_track_complete(instance, track_map):
            if track_map is None:
                cancelled_track()
            else:
                Logger.debug(
                    "DashboardView: setting track_map: {}".format(track_map))
                self._track_manager.add_track(track_map)
                track_cfg.track.import_trackmap(track_map)
                track_cfg.stale = True
                self._set_rc_track(track_cfg)

            if self._popup:
                self._popup.dismiss()
            self._popup = None

        def on_close(instance, answer):
            if not answer:
                cancelled_track()

            if self._popup:
                self._popup.dismiss()
            self._popup = None

        if self._popup is not None:
            # can't open dialog multiple times
            return

        content = TrackBuilderView(self._rc_api,
                                   self._databus,
                                   self._track_manager,
                                   current_point=self._gps_sample.geopoint,
                                   prompt_track_creation=True)
        self._popup = editor_popup("Race track setup",
                                   content,
                                   on_close,
                                   hide_ok=True,
                                   size_hint=(0.9, 0.9))
        content.bind(on_track_complete=on_track_complete)
        self._popup.open()
Ejemplo n.º 8
0
    def on_customize(self, *args):
        def popup_dismissed(instance, result):
            if result:
                selected_model = instance.content.selected_model
                self._set_model_pref(selected_model)
                self.ids.imu.model_path = selected_model
            popup.dismiss()

        view = ModelSelectorView(selected_model=self.ids.imu.model_path, model_path=ImuGauge.MODEL_PATH)

        popup = editor_popup('Select Model', view,
                             popup_dismissed,
                             size=(dp(700), dp(500)),
                             auto_dismiss_time=Gauge.POPUP_DISMISS_TIMEOUT_SHORT)
Ejemplo n.º 9
0
    def _edit_channel(self, channel_index):
        content = CANChannelConfigView()
        working_channel_cfg = copy.deepcopy(self.can_channels_cfg.channels[channel_index])
        content.init_config(working_channel_cfg, self.can_filters, self.max_sample_rate, self.channels)

        def _on_answer(instance, answer):
            if answer:
                self._replace_config(self.can_channels_cfg.channels[channel_index], working_channel_cfg)
                self.dispatch('on_modified')

            self.reload_can_channel_grid(self.can_channels_cfg)
            popup.dismiss()

        popup = editor_popup('Edit CAN Channel Mapping', content, _on_answer, size=(dp(500), dp(300)))
Ejemplo n.º 10
0
    def on_customize(self, *args):
        def popup_dismissed(instance, result):
            if result:
                selected_model = instance.content.selected_model
                self._set_model_pref(selected_model)
                self.ids.imu.model_path = selected_model
            popup.dismiss()

        view = ModelSelectorView(selected_model=self.ids.imu.model_path, model_path=ImuGauge.MODEL_PATH)

        popup = editor_popup('Select Model', view,
                             popup_dismissed,
                             size=(dp(700), dp(500)),
                             auto_dismiss_time=Gauge.POPUP_DISMISS_TIMEOUT_SHORT)
    def _edit_channel(self, channel_index):
        content = CANChannelConfigView()
        working_channel_cfg = copy.deepcopy(self.can_channels_cfg.channels[channel_index])
        content.init_config(working_channel_cfg, self.can_filters, self.max_sample_rate, self.channels)

        def _on_answer(instance, answer):
            if answer:
                self._replace_config(self.can_channels_cfg.channels[channel_index], working_channel_cfg)
                self.dispatch('on_modified')

            self.reload_can_channel_grid(self.can_channels_cfg)
            popup.dismiss()

        popup = editor_popup('Edit CAN Channel Mapping', content, _on_answer, size=(dp(500), dp(300)))
Ejemplo n.º 12
0
 def edit_session(self, instance, session_id):
     def _on_answer(instance, answer):
         if answer:
             session_name = session_editor.session_name
             if not session_name or len(session_name) == 0:
                 alertPopup('Error', 'A session name must be specified')
                 return
             session.name = session_editor.session_name
             session.notes = session_editor.session_notes
             self.datastore.update_session(session)
             self.refresh_session_list()
         popup.dismiss()
     
     session = self.datastore.get_session_by_id(session_id, self.sessions)
     session_editor = SessionEditorView()
     session_editor.session_name = session.name
     session_editor.session_notes = session.notes
     popup = editor_popup('Edit Session', session_editor, _on_answer)
Ejemplo n.º 13
0
    def edit_session(self, instance, session_id):
        def _on_answer(instance, answer):
            if answer:
                session_name = session_editor.session_name
                if not session_name or len(session_name) == 0:
                    alertPopup('Error', 'A session name must be specified')
                    return
                session.name = session_editor.session_name
                session.notes = session_editor.session_notes
                self.datastore.update_session(session)
                self.refresh_session_list()
            popup.dismiss()

        session = self.datastore.get_session_by_id(session_id, self.sessions)
        session_editor = SessionEditorView()
        session_editor.session_name = session.name
        session_editor.session_notes = session.notes
        popup = editor_popup('Edit Session', session_editor, _on_answer)
Ejemplo n.º 14
0
    def track_builder(self, *args):
        def popup_dismissed(instance):
            content.cleanup()

        def on_track_complete(instance, track_map):
            popup.dismiss()
            self._track_manager.add_track(track_map)
            self._track_cfg.track.import_trackmap(track_map)
            self._track_cfg.stale = True
            self._update_track()
            self.dispatch('on_modified')

        def on_close(instance, answer):
            popup.dismiss()

        content = TrackBuilderView(databus=self._databus, rc_api=self._rc_api, track_manager=self._track_manager)
        popup = editor_popup("Track Builder", content, on_close, hide_ok=True, size_hint=(0.9, 0.9))
        content.bind(on_track_complete=on_track_complete)
        popup.open()
Ejemplo n.º 15
0
    def on_add_can_channel(self):
        if not self.can_channels_cfg:
            return

        can_channel = CANChannel()
        can_channel.sampleRate = self.DEFAULT_CAN_SAMPLE_RATE

        content = CANChannelConfigView()
        content.init_config(can_channel, self.can_filters, self.max_sample_rate, self.channels)

        popup = None
        def _on_answer(instance, answer):
            if answer:
                self.add_can_channel(can_channel)
                self.dispatch('on_modified')
                self.reload_can_channel_grid(self.can_channels_cfg)
            popup.dismiss()

        popup = editor_popup('Add CAN Channel Mapping', content, _on_answer, size=(dp(500), dp(300)))
    def on_add_obd2_channel(self):
        if not self.obd2_cfg:
            return

        pid_config = PidConfig()
        pid_config.sampleRate = self.DEFAULT_OBD2_SAMPLE_RATE

        def _on_answer(instance, answer):
            if answer:
                self.obd2_cfg.pids.append(pid_config)
                channel_index = len(self.obd2_cfg.pids) - 1
                self.add_obd2_channel(channel_index, pid_config)
                self.dispatch('on_modified')
                self.reload_obd2_channel_grid(self.obd2_cfg)
            popup.dismiss()

        content = OBD2ChannelConfigView(self.obd2_preset_settings, True, self.mapping_capable)
        content.init_config(pid_config, self.can_filters, self.max_sample_rate, self.channels)
        popup = editor_popup('Add OBDII channel', content, _on_answer, size=(dp(500), dp(300)))
Ejemplo n.º 17
0
    def on_add_obd2_channel(self):
        if not self.obd2_cfg:
            return

        pid_config = PidConfig()
        pid_config.sampleRate = self.DEFAULT_OBD2_SAMPLE_RATE

        def _on_answer(instance, answer):
            if answer:
                self.obd2_cfg.pids.append(pid_config)
                channel_index = len(self.obd2_cfg.pids) - 1
                self.add_obd2_channel(channel_index, pid_config)
                self.dispatch('on_modified')
                self.reload_obd2_channel_grid(self.obd2_cfg)
            popup.dismiss()

        content = OBD2ChannelConfigView(self.obd2_preset_settings, True, self.mapping_capable)
        content.init_config(pid_config, self.can_filters, self.max_sample_rate, self.channels)
        popup = editor_popup('Add OBDII channel', content, _on_answer, size=(dp(500), dp(300)))
    def on_add_can_channel(self):
        if not self.can_channels_cfg:
            return

        can_channel = CANChannel()
        can_channel.sampleRate = self.DEFAULT_CAN_SAMPLE_RATE

        content = CANChannelConfigView()
        content.init_config(can_channel, self.can_filters, self.max_sample_rate, self.channels)

        popup = None
        def _on_answer(instance, answer):
            if answer:
                self.add_can_channel(can_channel)
                self.dispatch('on_modified')
                self.reload_can_channel_grid(self.can_channels_cfg)
            popup.dismiss()

        popup = editor_popup('Add CAN Channel Mapping', content, _on_answer, size=(dp(500), dp(300)))
Ejemplo n.º 19
0
    def _load_track_setup_view(self, track_cfg):
        """
        Present the user with the track setup view
        """

        def cancelled_track():
            # user cancelled, store current location as where they cancelled
            # so we prevent bugging the user again
            self._settings.userPrefs.set_last_selected_track(0, 0, str(self._gps_sample.geopoint))
            HelpInfo.help_popup('lap_setup', self)

        def on_track_complete(instance, track_map):
            if track_map is None:
                cancelled_track()
            else:
                Logger.debug("DashboardView: setting track_map: {}".format(track_map))
                self._track_manager.add_track(track_map)
                track_cfg.track.import_trackmap(track_map)
                track_cfg.stale = True
                self._set_rc_track(track_cfg)

            if self._popup:
                self._popup.dismiss()
            self._popup = None

        def on_close(instance, answer):
            if not answer:
                cancelled_track()

            if self._popup:
                self._popup.dismiss()
            self._popup = None

        if self._popup is not None:
            # can't open dialog multiple times
            return

        content = TrackBuilderView(self._rc_api, self._databus, self._track_manager, current_point=self._gps_sample.geopoint, prompt_track_creation=True)
        self._popup = editor_popup("Race track setup", content, on_close, hide_ok=True, size_hint=(0.9, 0.9))
        content.bind(on_track_complete=on_track_complete)
        self._popup.open()
Ejemplo n.º 20
0
    def on_set_track_press(self, *args):
        def on_track_select_close(instance, answer):
            if answer:
                selected_track = content.selected_track
                if selected_track is None:
                    toast('Please select a track')
                    return
                if self._track_cfg:
                    Logger.info("SingleAutoConfigScreen: setting track: {}".format(selected_track.name))
                    track_cfg = Track.fromTrackMap(selected_track)
                    self._track_cfg.track = track_cfg
                    self._track_cfg.stale = True
                    self._update_track()
                    self.dispatch('on_modified')
            popup.dismiss()

        # use the current location, if available
        current_point = self._gps_sample.geopoint if self._gps_sample.is_locked else None
        content = TrackSelectView(track_manager=self._track_manager, current_location=current_point)
        popup = editor_popup("Select a track", content, on_track_select_close, size_hint=(0.9, 0.9))
        popup.open()
Ejemplo n.º 21
0
    def edit_session(self, instance, session_id):
        def _on_answer(instance, answer):
            if answer:
                session_name = session_editor.session_name
                if not session_name or len(session_name) == 0:
                    alertPopup('Error', 'A session name must be specified')
                    return
                # did the session name change? if so, refresh the view.
                new_name = session_editor.session_name
                if new_name != session.name:
                    session.name = new_name
                    session_accordion = self._find_session_accordion_item(session)
                    session_accordion.title = new_name

                session.notes = session_editor.session_notes
                self.datastore.update_session(session)
                self.dispatch('on_session_updated', session)
            popup.dismiss()

        session = self.datastore.get_session_by_id(session_id, self.sessions)
        session_editor = SessionEditorView()
        session_editor.session_name = session.name
        session_editor.session_notes = session.notes
        popup = editor_popup('Edit Session', session_editor, _on_answer)
Ejemplo n.º 22
0
 def on_set_track_press(self, instance):
     content = TrackSelectView(self._track_manager)
     self._track_select_view = content
     self._popup = editor_popup("Select your track", content,
                                self._on_track_select_close)
     self._popup.open()
Ejemplo n.º 23
0
 def _load_race_setup_view(self):
     content = TrackSelectView(self._track_manager)
     self._race_setup_view = content
     self._popup = editor_popup("Select your track", content,
                                self._on_race_setup_close)
     self._popup.open()
Ejemplo n.º 24
0
 def _load_race_setup_view(self):
     content = TrackSelectView(self._track_manager)
     self._race_setup_view = content
     self._popup = editor_popup("Select your track", content, self._on_race_setup_close)
     self._popup.open()