コード例 #1
0
    def double_click(self, widget, item, column):
        if not item.is_select:
            return
        #if not item.clicked:
            #return

        if not column in item.ENTRY_COLUMN:
            return
        if item.entry:
            item.entry.grab_focus()
            return
        item.get_buffer(column)
        item.entry_buffer.set_property('cursor-visible', True)
        hbox = gtk.HBox(False)
        align = gtk.Alignment(0, 0, 1, 1)
        entry = Entry()
        entry.set_data("item", item)
        entry.set_data("button_press", False)
        entry.set_buffer(item.entry_buffer)
        width = item.get_column_widths()[column]
        if width >= 0:
            entry.set_size_request(item.get_column_widths()[column]-4, 0)

        entry.connect("press-return", lambda w: hbox.destroy())
        entry.connect("destroy", self.edit_done, hbox, item)
        entry.connect_after("focus-in-event", self.entry_focus_changed, item)
        entry.connect_after("focus-out-event", self.entry_focus_changed, item)
        self.pack_start(hbox, False, False)
        self.set_data("entry_widget", entry)
        hbox.pack_start(entry, False, False)
        hbox.pack_start(align)
        hbox.show_all()
        entry.set_can_focus(True)
        entry.grab_focus()
        entry.select_all()
        item.entry = entry
コード例 #2
0
ファイル: ui.py プロジェクト: maskegger/deepin-music-player
class CustomEntry(gtk.VBox):
    __gsignals__ = {
        
        "clear" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ()),
        "enter-press" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_PYOBJECT,))
    }
    
    def __init__(self,  content=""):
        '''
        Initialize InputEntry class.
        '''
        # Init.
        gtk.VBox.__init__(self)
        clean_button = CleanButton()
        clean_button.connect("clicked", self.on_clean_clicked)
        self.entry = Entry(content, place_holder=_("Need some music? Find it here..."))
        entry_align = gtk.Alignment()
        entry_align.set(0.5, 0.5, 1, 1)
        entry_align.add(self.entry)
        
        clean_box = gtk.HBox(spacing=5)
        clean_box.pack_start(entry_align, True, True)
        self.clean_button_align = set_widget_gravity(clean_button, gravity=(0.5, 0.5, 0, 0),
                                                paddings=(0, 0, 0, 5))
        self.clean_button_align.set_no_show_all(True)
        
        clean_box.pack_start(self.clean_button_align, False, False)
        self.add(clean_box)
        
        self.entry.connect("press-return", self.__emit_enter_signal)
        self.entry.connect("changed", self.__on_entry_changed)
        self.connect("expose-event", self.expose_input_entry)
        
    def on_clean_clicked(self, widget):    
        # self.emit("clear")
        self.set_text("")
        
    def get_clean_visible(self):    
        return self.clean_button_align.get_visible()
    
    def hide_clean_button(self):
        self.clean_button_align.hide_all()
        self.clean_button_align.set_no_show_all(True)
        
        
    def __emit_enter_signal(self, widget):    
        self.hide_clean_button()
        self.emit("enter-press", self.get_text())
        
    def __on_entry_changed(self, widget, string):    
        if string:
            self.clean_button_align.set_no_show_all(False)
            self.clean_button_align.show_all()
        else:    
            self.clean_button_align.hide_all()
            self.clean_button_align.set_no_show_all(True)

        
    def set_sensitive(self, sensitive):
        '''
        Internal function to wrap function `set_sensitive`.
        '''
        super(InputEntry, self).set_sensitive(sensitive)
        self.entry.set_sensitive(sensitive)
            
    def emit_action_active_signal(self):
        '''
        Internal callback for `action-active` signal.
        '''
        self.emit("action-active", self.get_text())                
        
    def expose_input_entry(self, widget, event):
        '''
        Internal callback for `expose-event` signal.
        '''
        # Init.
        cr = widget.window.cairo_create()
        rect = widget.allocation
        
        cr.set_source_rgba(*alpha_color_hex_to_cairo(("#FFFFFF", 0.9)))
        cr.rectangle(rect.x, rect.y, rect.width, rect.height)
        cr.fill()
        
        # Draw frame.
        with cairo_disable_antialias(cr):
            cr.set_line_width(1)
            cr.set_source_rgba(*color_hex_to_cairo("#C3C4C5"))
            cr.move_to(rect.x + rect.width, rect.y)
            cr.rel_line_to(0, rect.height)
            cr.stroke()
        
        propagate_expose(widget, event)
        
        # return True
    
    def set_size(self, width, height):
        '''
        Set input entry size with given value.
        
        @param width: New width of input entry.
        @param height: New height of input entry.
        '''
        # self.set_size_request(width, height)    
        self.entry.set_size_request(width - 2, height - 2)
        
    def set_editable(self, editable):
        '''
        Set editable status of input entry.
        
        @param editable: input entry can editable if option is True, else can't edit.
        '''
        self.entry.set_editable(editable)
        
    def set_text(self, text):
        '''
        Set text of input entry.
        
        @param text: input entry string.
        '''
        self.entry.set_text(text)
        
    def get_text(self):
        '''
        Get text of input entry.
        
        @return: Return text of input entry.
        '''
        return self.entry.get_text()
    
    def focus_input(self):
        '''
        Focus input cursor.
        '''
        self.entry.grab_focus()