Ejemplo n.º 1
0
 def __init__(self, playlist, udi=None):
     TreeItem.__init__(self)
     
     # Init playlist.
     self.playlist = playlist
     self.udi = udi
     self.title = self.playlist.get_name()
     self.song_view = SongView()
     self.song_view.add_songs(self.playlist.get_songs())
     self.song_view.connect("begin-add-items", lambda w: self.switch_it())
     self.song_view.connect("empty-items", lambda w: self.switch_it(False))
     self.song_view.set_size_request(PLAYLIST_WIDTH, -1)
     
     # Init params.
     self.entry = None
     self.item_height = 26
     self.item_width = CATEGROYLIST_WIDTH
     self.ENTRY_COLUMN = 0
     self.is_double_click = False
     self.is_highlight = False
     self.text_padding = 15
     
     # create jobs box.
     self.main_box = gtk.VBox()
     
     self.jobs_main_box = LocalEmpty(self.song_view.on_drag_data_received,
                                     self.song_view.recursion_add_dir)
     self.jobs_main_box.set_size_request(PLAYLIST_WIDTH, -1)
Ejemplo n.º 2
0
 def update(self, playlist):
     '''update'''
     self.playlist = playlist
     songs = self.playlist.get_songs()
     self.song_view = SongView()
     self.song_view.add_songs(songs)
     self.song_view.connect("begin-add-items", lambda w: self.switch_it())
     self.song_view.connect("empty-items", lambda w: self.switch_it(False))
     self.scrolled_window = ScrolledWindow(0, 0)
     self.scrolled_window.add_child(self.song_view)
     self.scrolled_window.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
     self.scrolled_window.set_size_request(220, -1)
     self.title = playlist.get_name()
Ejemplo n.º 3
0
class ListTreeItem(TreeItem):        
    
    def __init__(self, playlist, udi=None):
        TreeItem.__init__(self)
        
        # Init playlist.
        self.playlist = playlist
        self.udi = udi
        self.title = self.playlist.get_name()
        self.song_view = SongView()
        self.song_view.add_songs(self.playlist.get_songs())
        self.song_view.connect("begin-add-items", lambda w: self.switch_it())
        self.song_view.connect("empty-items", lambda w: self.switch_it(False))
        self.song_view.set_size_request(PLAYLIST_WIDTH, -1)
        
        # Init params.
        self.entry = None
        self.item_height = 26
        self.item_width = CATEGROYLIST_WIDTH
        self.ENTRY_COLUMN = 0
        self.is_double_click = False
        self.is_highlight = False
        self.text_padding = 15
        
        # create jobs box.
        self.main_box = gtk.VBox()
        
        self.jobs_main_box = LocalEmpty(self.song_view.on_drag_data_received,
                                        self.song_view.recursion_add_dir)
        self.jobs_main_box.set_size_request(PLAYLIST_WIDTH, -1)
        
    def get_list_widget(self):
        if self.get_songs():
            switch_box(self.main_box, self.song_view)
        else:    
            switch_box(self.main_box, self.jobs_main_box)
        return self.main_box    
        
    def switch_it(self, scrolled_window=True):
        if scrolled_window:
            switch_box(self.main_box, self.song_view)
        else:    
            switch_box(self.main_box, self.jobs_main_box)
            
    def get_songs(self):
        if self.song_view:
            return self.song_view.get_songs()
        
    def get_title(self):    
        return self.title
        
    def set_title(self, value):    
        self.title = value
        
    def emit_redraw_request(self):
        if self.redraw_request_callback:
            self.redraw_request_callback(self)
        
    def get_height(self):    
        return self.item_height
    
    def get_column_widths(self):
        return (self.item_width, )
    
    def get_column_renders(self):
        return (self.render_title,)
    
    def render_title(self, cr, rect):
        if self.is_highlight:    
            draw_single_mask(cr, rect.x + 1, rect.y, rect.width - 3, rect.height, "globalItemHighlight")
        elif self.is_hover:
            draw_single_mask(cr, rect.x + 1, rect.y, rect.width - 3, rect.height, "globalItemHover")
        
        if self.is_highlight:
            text_color = "#FFFFFF"
        else:    
            text_color = app_theme.get_color("labelText").get_color()
            
        rect.x += self.text_padding    
        rect.width -= self.text_padding * 2
        
            
        draw_text(cr, self.title, rect.x, rect.y, rect.width, rect.height, text_size=9, 
                  text_color = text_color,
                  alignment=pango.ALIGN_LEFT)    
        
    def render_content(self, cr, rect):
        if self.is_highlight:    
            if not self.is_double_click:
                draw_single_mask(cr, rect.x + 1, rect.y, rect.width, rect.height, "globalItemHighlight")
                text_color = "#FFFFFF"
            else:    
                text_color = app_theme.get_color("labelText").get_color()
                
        elif self.is_hover:
            text_color = app_theme.get_color("labelText").get_color()
            draw_single_mask(cr, rect.x + 1, rect.y, rect.width, rect.height, "globalItemHover")
        else:    
            text_color = app_theme.get_color("labelText").get_color()

            
        if not self.is_highlight:    
            self.entry_buffer.move_to_start()
            
        self.entry_buffer.set_text_color(text_color)
        width, height = self.entry_buffer.get_content_size()
        offset_y = (self.item_height - height) / 2
        # offset_x = (self.item_height - width) / 2
        rect.y += offset_y
        rect.x += 10
        # rect.x += offset_x
        
        if self.entry and self.entry.allocation.width == self.get_column_widths()[0]-4:
            self.entry.calculate()
            self.entry_buffer.set_text_color("#000000")
            self.entry_buffer.render(cr, rect, self.entry.im)
        else:
            self.entry_buffer.render(cr, rect)
        
    def unselect(self):
        self.is_select = False
        self.emit_redraw_request()
        
    def select(self):        
        self.is_select = True
        self.emit_redraw_request()
        
    def highlight(self):    
        self.is_highlight = True
        self.emit_redraw_request()
        
    def unhighlight(self):    
        self.is_highlight = False
        self.emit_redraw_request()
        
    def unhover(self, column, offset_x, offset_y):
        self.is_hover = False
        self.emit_redraw_request()
    
    def hover(self, column, offset_x, offset_y):
        self.is_hover = True
        self.emit_redraw_request()
        
    def single_click(self, column, offset_x, offset_y):
        self.is_double_click = False
        self.emit_redraw_request()
        
    def double_click(self, column, offset_x, offset_y):
        self.is_double_click = True
Ejemplo n.º 4
0
class PlaylistItem(gobject.GObject):
    
    def __init__(self, playlist):
        '''Init song item.'''
        self.item_id = None
        self.main_box = gtk.VBox()
        self.update(playlist)        
        self.create_jobs_box()


    def draw_mask(self, widget, event):            
        cr = widget.window.cairo_create()
        rect = widget.allocation
        draw_alpha_mask(cr, rect.x, rect.y, rect.width, rect.height, "layoutMiddle")
        
    def create_jobs_box(self):    
        
        self.file_job_button = self.create_job_button("plus", _("Add Music"), self.song_view.recursion_add_dir)
        # self.file_job_button.connect("clicked", self.open_file_or_dir)

        self.job_box = gtk.EventBox()
        self.job_box.set_size_request(220, -1)
        targets = [("text/deepin-songs", gtk.TARGET_SAME_APP, 1), ("text/uri-list", 0, 2), ("text/plain", 0, 3)]
        self.job_box.drag_dest_set(gtk.DEST_DEFAULT_MOTION | gtk.DEST_DEFAULT_DROP,
                           targets, gtk.gdk.ACTION_COPY)
        self.job_box.set_visible_window(False)
        self.job_box.connect("drag-data-received", self.song_view.on_drag_data_received)
        
        # Content box. 
        
        content_box = gtk.VBox()
        content_box.pack_start(create_bottom_align(), True, True)
        # content_box.pack_start(ImageBox(app_theme.get_pixbuf("jobs/scan_tip.png")), False, False)
        content_box.pack_start(self.file_job_button, False, False)
        content_box.pack_start(create_upper_align(), True, True)
        
        # Rind box.
        rind_box = gtk.HBox()
        rind_box.pack_start(create_right_align(), True, True)
        rind_box.pack_start(content_box, False, False)
        rind_box.pack_start(create_left_align(), True, True)
        
        self.job_box.add(rind_box)
        self.jobs_align = gtk.Alignment()
        self.jobs_align.set(0.5, 0.5, 1, 1)
        self.jobs_align.add(self.job_box)
        self.jobs_align.connect("expose-event", self.draw_mask)
        
    def create_job_button(self, icon_name, content, callback=None):    
        button = ComplexButton(
            [app_theme.get_pixbuf("jobs/complex_normal.png"),
             app_theme.get_pixbuf("jobs/complex_hover.png"),
             app_theme.get_pixbuf("jobs/complex_press.png")],
            app_theme.get_pixbuf("jobs/%s.png" % icon_name),
            content
            )
        if callback:
            button.connect("clicked", lambda w : callback())
        return button    
        
    def set_title(self, value):    
        self.title = value
        
    def get_title(self):    
        return self.title
    
    def get_left_image(self):
        return None
    
    def get_has_arrow(self):
        return None
    
    def set_item_id(self, index):
        self.item_id = index
        
    def get_item_id(self):    
        return self.item_id
        
    def update(self, playlist):
        '''update'''
        self.playlist = playlist
        songs = self.playlist.get_songs()
        self.song_view = SongView()
        self.song_view.add_songs(songs)
        self.song_view.connect("begin-add-items", lambda w: self.switch_it())
        self.song_view.connect("empty-items", lambda w: self.switch_it(False))
        self.scrolled_window = ScrolledWindow(0, 0)
        self.scrolled_window.add_child(self.song_view)
        self.scrolled_window.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
        self.scrolled_window.set_size_request(220, -1)
        self.title = playlist.get_name()
        
    def get_list_widget(self):
        if self.get_songs():
            switch_box(self.main_box, self.scrolled_window)
        else:    
            switch_box(self.main_box, self.jobs_align)
        return self.main_box    
    
    def switch_it(self, scrolled_window=True):
        if scrolled_window:
            switch_box(self.main_box, self.scrolled_window)
        else:    
            switch_box(self.main_box, self.jobs_align)
    
    def get_songs(self):
        if self.song_view:
            return self.song_view.get_songs()