예제 #1
0
    def clear_selection(self):
        first, last = self.buf.get_bounds()
        self.buf.remove_tag_by_name('selected', first, last)

        common.clear_selection(self.tw)

        self.sel_i = None
        self.sel_j = None
예제 #2
0
    def set_selection(self):
        # Clear previous selection, if any
        first, last = self.buf.get_bounds()
        self.buf.remove_tag_by_name('selected', first, last)

        # Get the range of text selected
        try:
            first, last = self.buf.get_selection_bounds()

            # Clear the selection
            common.clear_selection(self.tw)

        except ValueError:
            # If there is no selection, then use position of insertion mark
            insmark = self.buf.get_insert()
            if insmark == None:
                common.view.popup_error(
                    "Please make selection or set insertion mark first.")
                return

            first = self.buf.get_iter_at_mark(insmark)
            last = first.copy()
            last.forward_to_line_end()

        frow = first.get_line()
        lrow = last.get_line()

        # Adjust to beginning and end of lines
        if not first.starts_line():
            first.set_line(frow)
        if last.starts_line():
            # Hack to fix problem where selection covers the newline
            # but not the first character of the next line
            lrow -= 1
            last.set_line(lrow)
        if not last.ends_line():
            last.forward_to_line_end()
        #print "selection: %d-%d" % (frow, lrow)

        # Apply color to rows and save selection indexes
        self.buf.apply_tag_by_name('selected', first, last)
        self.sel_i = first.get_line()
        self.sel_j = last.get_line()
예제 #3
0
    def _find(self, response):
        dialog = self.sr

        if response == 'close':
            common.clear_selection(self.tw)
            return True

        if response == 'replace':
            if not self.buf.get_has_selection():
                # No selection.
                dialog.set_message("NO SELECTION")
                return True

            try:
                start, end = self.buf.get_selection_bounds()
            except ValueError:
                dialog.set_message("ERROR SELECTION?")
                return True

            # TODO: how to force increments of undoable actions?
            self.buf.delete(start, end)
            self.buf.insert(start, dialog.get_replace_text())

            # Clear the selection
            common.clear_selection(self.tw)

            return True

        reverse = dialog.is_reverse_search()
        if dialog.is_case_sensitive():
            search_flags = gtksourceview2.SEARCH_CASE_INSENSITIVE
        else:
            search_flags = 0

        i = self.buf.get_iter_at_mark(self.searchmark)
        if i == None:
            dialog.set_message("PLEASE PLACE CURSOR")
            return
        dialog.set_message("Search begins in line %d" % (i.get_line()))

        if reverse:
            searched = i.backward_search(dialog.get_search_text(),
                                         search_flags, None)
        else:
            searched = i.forward_search(dialog.get_search_text(), search_flags,
                                        None)
        if searched:
            dialog.set_message("Found string")
            start, end = searched
            self.buf.select_range(start, end)
            self.scroll_to_lineno(start.get_line())
            if reverse:
                self.buf.move_mark(self.searchmark, start)
            else:
                self.buf.move_mark(self.searchmark, end)

        else:
            end = i
            if reverse:
                i = self.buf.get_end_iter()
                searched = i.backward_search(dialog.get_search_text(),
                                             search_flags, end)
            else:
                i = self.buf.get_start_iter()
                searched = i.forward_search(dialog.get_search_text(),
                                            search_flags, end)
            if searched:
                dialog.set_message("Found string")
                start, end = searched
                self.buf.select_range(start, end)
                self.scroll_to_lineno(start.get_line())
                if reverse:
                    self.buf.move_mark(self.searchmark, start)
                else:
                    self.buf.move_mark(self.searchmark, end)

            else:
                dialog.set_message("NO MORE INSTANCES FOUND")
예제 #4
0
    def _get_commands_from_selection(self, copytext=None):

        if copytext == None:
            copytext = self.add_frozen
            
        if copytext:
            # If copytext==True then we are not storing a reference
            # to the command in the page, but the command string
            # already pre-expanded
            start, end = self.buf.get_bounds()
            txtbuf = self.buf.get_text(start, end)
        
        # Get the range of text selected
        try:
            first, last = self.buf.get_selection_bounds()
        except ValueError:
            raise common.SelectionError("Error getting selection--no selection?")
            
        frow = first.get_line()
        lrow = last.get_line()
        if last.starts_line():
            # Hack to fix problem where selection covers the newline
            # but not the first character of the next line
            lrow -= 1
        #print "selection: %d-%d" % (frow, lrow)

        # Clear the selection
        common.clear_selection(self.tw)

        # Break selection into individual lines
        cmds = []

        for i in xrange(int(lrow)+1-frow):

            row = frow+i
            #print "row: %d" % (row)

            first.set_line(row)
            last.set_line(row)
            last.forward_to_line_end()
            if last.get_line() > row:
                # forward_to_line_end() seems to go to the next row
                # if the line consists of simply a newline
                cmd = ""
            else:
                cmd = self.buf.get_text(first, last).strip()
            self.logger.debug("cmd=%s" % (cmd))
            if (len(cmd) == 0) or cmd.startswith('#'):
                # TODO: linked comments
                cmdobj = CommandObject.CommentCommandObject('cm%d',
                                                            self.queueName,
                                                            self.logger, cmd)

            elif copytext:
                cmdstr = self.process_cmdstr(txtbuf, cmd)
                cmdobj = CommandObject.SimpleCommandObject('cp%d',
                                                           self.queueName,
                                                           self.logger, cmdstr)
            else:
                # tag the text so we can manipulate it later
                cmdobj = OpeCommandObject('ope%d', self.queueName,
                                          self.logger, self)
                tag = cmdobj.guitag
                self.buf.create_tag(tag)
                self.buf.apply_tag_by_name(tag, first, last)

            cmds.append(cmdobj)

        return cmds
예제 #5
0
 def select_clear(self):
     common.clear_selection(self.tw)