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
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()
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")
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
def select_clear(self): common.clear_selection(self.tw)