Exemple #1
0
class AutoCompletionTreeView(object):
    def __init__(self, model):
        self.model = model

        self.completion_win = Window()
        self.completion_win.set_modal(True)
        self.completion_win.set_keep_above(True)

        self.completion_tree_view = BrowserTreeView(self.model)
        self.completion_tree_view.set_enable_search(False)

        self.completion_scrolled_win = ScrolledWindow(
            self.completion_tree_view)
        self.completion_win.add(self.completion_scrolled_win)

        self.column = Gtk.TreeViewColumn()
        self.completion_tree_view.append_column(self.column)

        self.renderer_text = Gtk.CellRendererText()
        self.column.pack_start(self.renderer_text, False)
        self.column.set_attributes(self.renderer_text, text=DATA_COL)

        # display an undecorated window with a grey border
        self.completion_scrolled_win.set_size_request(WIN_WIDTH, WIN_HEIGHT)
        self.completion_scrolled_win.set_policy(Gtk.PolicyType.NEVER,
                                                Gtk.PolicyType.AUTOMATIC)
        self.completion_win.set_decorated(False)
        self.completion_scrolled_win.set_border_width(2)
        # self.completion_scrolled_win.modify_bg(Gtk.StateType.NORMAL, Gdk.Color(GREY))
        self.column.set_min_width(50)

        # hide column
        self.completion_tree_view.set_headers_visible(False)
Exemple #2
0
	def __init__(self, attrib, data, ui=None):
		if data.endswith('\n'):
			data = data[:-1]
			# If we have trailing \n it looks like an extra empty line
			# in the buffer, so we default remove one
		CustomObjectClass.__init__(self, attrib, data, ui)
		if self.ui and self.ui.__class__.__name__ == 'GtkInterface': # XXX seperate widget and object
			from zim.gui.widgets import ScrolledWindow

			# SourceView scrolled window
			self.buffer = gtksourceview2.Buffer()
			self.buffer.set_text(self._data)
			self.buffer.connect('modified-changed', self.on_modified_changed)
			self.buffer.set_highlight_matching_brackets(True)
			self.buffer.set_modified(False)
			self._data = None
			self.view = gtksourceview2.View(self.buffer)
			self.view.modify_font(pango.FontDescription('monospace'))
			self.view.set_auto_indent(True)
			self.view.set_smart_home_end(True)
			self.view.set_highlight_current_line(True)
			self.view.set_right_margin_position(80)
			self.view.set_show_right_margin(True)
			self.view.set_tab_width(4)

			win = ScrolledWindow(self.view, gtk.POLICY_AUTOMATIC, gtk.POLICY_NEVER)
				# only horizontal scroll
			win.set_border_width(5)

			self._attrib.setdefault('lang', None)
			self._attrib.setdefault('linenumbers', 'true') # FIXME make boolean
			self.set_language(self._attrib['lang'], save=False)
			self.show_line_numbers(self._attrib['linenumbers'], save=False)

			self.view.connect('populate-popup', self.on_populate_popup)

			# simple toolbar
			#~ bar = gtk.HBox() # FIXME: use gtk.Toolbar stuff
			#~ lang_selector = gtk.combo_box_new_text()
			#~ lang_selector.append_text('(None)')
			#~ for l in lang_names: lang_selector.append_text(l)
			#~ try:
				#~ lang_selector.set_active(lang_ids.index(self._attrib['lang'])+1)
				#~ self.set_language(self._attrib['lang'] or None, False)
			#~ except (ValueError, KeyError):
				#~ lang_selector.set_active(0)
				#~ self.set_language(None, False)
			#~ lang_selector.connect('changed', self.on_lang_changed)
			#~ bar.pack_start(lang_selector, False, False)
		#~
			#~ line_numbers = gtk.ToggleButton('Line numbers')
			#~ try:
				#~ line_numbers.set_active(self._attrib['linenumbers']=='true')
				#~ self.show_line_numbers(self._attrib['linenumbers'], False)
			#~ except (ValueError, KeyError):
				#~ line_numbers.set_active(True)
				#~ self.show_line_numbers(True, False)
			#~ line_numbers.connect('toggled', self.on_line_numbers_toggled)
			#~ bar.pack_start(line_numbers, False, False)

			# TODO: other toolbar options
			# TODO: autohide toolbar if textbuffer is not active

			# Pack everything
			box = gtk.VBox()
			#~ box.pack_start(bar, False, False)
			box.pack_start(win)
			self._widget = CustomObjectBin()
			self._widget.set_has_cursor(True)
			self._widget.add(box)

			# Hook up integration with pageview cursor movement
			def on_grab_cursor(bin, position):
				begin, end = self.buffer.get_bounds()
				if position == POSITION_BEGIN:
					self.buffer.place_cursor(begin)
				else:
					self.buffer.place_cursor(end)
				self.view.grab_focus()

			def on_move_cursor(view, step_size, count, extend_selection):
				buffer = view.get_buffer()
				iter = buffer.get_iter_at_mark(buffer.get_insert())
				if (iter.is_start() or iter.is_end()) \
				and not extend_selection:
					if iter.is_start() and count < 0:
						self._widget.release_cursor(POSITION_BEGIN)
						return None
					elif iter.is_end() and count > 0:
						self._widget.release_cursor(POSITION_END)
						return None

				return gtksourceview2.View.do_move_cursor(view, step_size, count, extend_selection)

			self._widget.connect('grab-cursor', on_grab_cursor)
			self.view.connect('move-cursor', on_move_cursor)

			# Resize widget if parent TextView has been resized -- XXX
			self.ui.mainwindow.pageview.view.connect_after('size-allocate',
												self.on_parent_view_resized)
		else:
			self.view = None