All pastes #57666 Raw Edit

Python

public python v1 · immutable
#57666 ·published 2006-05-21 18:03 UTC
rendered paste body
import gtk, gtk.gdk, gtk.keysyms, gobjectfrom deskbar.ui.cuemiac.CuemiacEntry import CuemiacEntryfrom deskbar.ui.cuemiac.CuemiacAlignedWindow import CuemiacAlignedWindowclass CuemiacPopupEntry(CuemiacEntry):				def __init__(self, default_entry_pixbuf, tree_view, applet):		CuemiacEntry.__init__(self, default_entry_pixbuf)				# State variables		self.ignore_enter = False				self.first_sel_changed = True		self.entry_window_group = gtk.WindowGroup()				# Our own UI elements		#FIXME: get the applet here somehow		self.entry.show()		self.popup_window = CuemiacAlignedWindow(self.entry, applet, gtk.WINDOW_POPUP)		self.popup_window.show()		self.tree_view = tree_view		self.tree_view.show()				self.vbox = gtk.VBox ()		self.vbox.show()		self.popup_window.add (self.vbox)						self.scroll_view = gtk.ScrolledWindow ()		self.scroll_view.show()		self.scroll_view.set_policy (gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)			self.scroll_view.add (self.tree_view)		self.vbox.pack_start (self.scroll_view)						# Setup elements		self.tree_view.set_hover_selection (True)		self.selection = self.tree_view.get_selection()		self.selection.set_mode(gtk.SELECTION_SINGLE)		self.selection.unselect_all()		# Construct the popup				# Signals setup		self.selection.connect("changed", self.on_selection_changed)		self.tree_view.connect('button-press-event', self.on_treeview_button_press)		self.tree_view.connect('enter-notify-event', self.on_treeview_enter)		self.tree_view.connect('motion-notify-event', self.on_treeview_motion)		self.popup_window.connect('key-press-event', self.on_popup_key_press)				self.popup_window.connect('button-press-event', self.on_popup_button_press)		self.entry.connect("changed", self.on_entry_changed)		self.entry.connect("key-press-event", self.on_entry_key_press)		def popup(self):		if not (self.popup_window.flags()&gtk.MAPPED):			return		print 'Entered1'		if not (self.entry.flags()&gtk.MAPPED):			return		print 'Entered2'		if not (self.entry.flags()&gtk.HAS_FOCUS):			return		print 'Entered3'		self.ignore_enter = True				entry_toplevel = self.entry.get_toplevel()		entry_group = self.entry_window_group		if entry_toplevel != None and entry_toplevel.group != None:			entry_group = entry_toplevel.group		entry_group.add_window (self.popup_window)		self.tree_view.grab_focus()		self.tree_view.realize()		self.selection.unselect_all()				for row in self.tree_view.get_model():			print row				self.popup_window.update_position()		#self.tree_view.set_size_request(100, 100)		#self.popup_window.set_size_request(200, 200)		#popup.move(100, 100)		print 'Popup window show'		self.popup_window.show()		# Grab pointer		self.popup_window.grab_add()		gtk.gdk.pointer_grab(			self.popup_window.window, True,			gtk.gdk.BUTTON_PRESS_MASK|				gtk.gdk.BUTTON_RELEASE_MASK|				gtk.gdk.POINTER_MOTION_MASK,			None, None, gtk.get_current_event_time())		def popdown(self):		if not (self.popup_window.flags()&gtk.MAPPED):			return				self.ignore_enter = False		self.popup_window.hide()				# Ungrab pointer		gtk.gdk.pointer_ungrab(gtk.get_current_event_time())		self.popup_window.grab_remove()	def on_treeview_button_press(self, widget, event):		if not (self.popup_window.flags()&gtk.MAPPED):			return False					path = tree_view.get_path_at_pos(event.x, event.y)		if path != None:			print 'emit Match selected and block changed_id from entry'			self.popdown()			return True					return False				def on_treeview_enter(self, widget, event):		return self.ignore_enter				def on_treeview_motion(self, widget, event):		self.ignore_enter = False		return False				def on_selection_changed(self, selection):		if self.first_sel_changed:			self.first_sel_changed = False			if self.tree_view.is_focus():				self.selection.unselect_all()		def on_popup_key_press(self, widget, event):		if not (self.popup_window.flags()&gtk.MAPPED):			return False					self.entry.event(event)		return True			def on_popup_button_press(self, widget, event):		if not (self.popup_window.flags()&gtk.MAPPED):			return False					self.popdown()		return True			def on_entry_changed(self, entry):		print 'Entry Changed cb'		gobject.idle_add(self.popup)			def on_entry_key_press(self, widget, event):		if not (self.popup_window.flags()&gtk.MAPPED):			return False					if event.keyval in (gtk.keysyms.Up, gtk.keysyms.KP_Up,gtk.keysyms.Down, gtk.keysyms.KP_Down,gtk.keysyms.Page_Up,gtk.keysyms.Page_Down):			matches = 4			model, iter = self.selection.get_selected()			if iter == None:				iter = model.get_iter_first()			if event.keyval in (gtk.keysyms.Up, gtk.keysyms.KP_Up):				iter = model.iter_next(iter)			elif event.keyval in (gtk.keysyms.Down, gtk.keysyms.KP_Down):				iter = model.iter_next(iter)			elif event.keyval in (gtk.keysyms.Page_Up):				iter = model.iter_next(iter)			elif event.keyval in (gtk.keysyms.Page_Down):				iter = model.iter_next(iter)				#		if current_selected < 0:	#			sel.unselect_all()	#		elif current_selected < matches:			self.selection.unselect_all()			self.tree_view.set_cursor(model.get_path(iter), None, False)				#path = gtk.TreePath(index of selection)				#tree_view.set_cursor(path, None, False)			print 'Move cursor in tree'			return True					elif event.keyval == gtk.keysyms.Escape:			self.popdown()			return True					elif event.keyval in (gtk.keysyms.Tab, gtk.keysyms.KP_Tab, gtk.keysyms.ISO_Left_Tab):			self.popdown()			#self.entry.get_toplevel().child_focus(gtk.DIR_TAB_FORWARD)			return True					elif event.keyval in (gtk.keysyms.ISO_Enter, gtk.keysyms.KP_Enter, gtk.keysyms.Return):			print 'Emit match selected'			self.popdown()			return True					return False