def do_query_data(self, start: Gtk.TextIter, end: Gtk.TextIter,
                      state: GtkSource.GutterRendererState):
        view: GtkSource.View = self.get_view()
        buffer: GtkSource.Buffer = view.get_buffer()
        execution_marks = buffer.get_source_marks_at_line(
            start.get_line(), 'execution-line')
        breaked_marks = buffer.get_source_marks_at_line(
            start.get_line(), 'breaked-line')

        if len(breaked_marks) > 0:
            type_id = -1
            slot_id = -1
            if len(execution_marks) > 0:
                _, type_id, slot_id = EXECUTION_LINE_PATTERN.match(
                    execution_marks[0].get_name()).groups()
            self.set_pixbuf(
                create_breaked_line_icon(int(type_id), int(slot_id),
                                         self._icon_actor, self._icon_object,
                                         self._icon_performer,
                                         self._icon_global_script))
            return
        if len(execution_marks) > 0:
            _, type_id, slot_id = EXECUTION_LINE_PATTERN.match(
                execution_marks[0].get_name()).groups()
            # Don't show for global
            self.set_pixbuf(
                create_execution_line_icon(int(type_id), int(slot_id),
                                           self._icon_actor, self._icon_object,
                                           self._icon_performer,
                                           self._icon_global_script))
            return
        self.set_pixbuf(self.empty)
 def on_sourcebuffer_delete_range(self, buffer: GtkSource.Buffer,
                                  start: Gtk.TextIter, end: Gtk.TextIter):
     if start.get_line() != end.get_line() or start.get_chars_in_line(
     ) == 0:
         i = start.copy()
         ms = []
         while i.get_offset() <= end.get_offset():
             ms += buffer.get_source_marks_at_iter(i, 'breakpoint')
             if not i.forward_char():
                 break
         for m in ms:
             self.remove_breakpoint(m)
     return True
    def on_sourceview_line_mark_activated(self, widget: GtkSource.View,
                                          textiter: Gtk.TextIter,
                                          event: Gdk.Event):
        marks = widget.get_buffer().get_source_marks_at_iter(textiter)

        # Only allow editing one view.
        if self._explorerscript_active and widget == self._ssb_script_view:
            return
        if not self._explorerscript_active and widget == self._explorerscript_view:
            return

        # No mark? Add!
        if len(marks) < 1:
            self.add_breakpoint(textiter.get_line() + 1, widget)
        else:
            # Mark? Remove breakpoint!
            for mark in marks:
                self.remove_breakpoint(mark)
        return True