~ubuntu-branches/ubuntu/quantal/griffith/quantal

« back to all changes in this revision

Viewing changes to lib/main_treeview.py

  • Committer: Package Import Robot
  • Author(s): Piotr Ożarowski
  • Date: 2011-12-18 21:15:25 UTC
  • mfrom: (1.1.17) (3.1.11 sid)
  • Revision ID: package-import@ubuntu.com-20111218211525-endbgt82m3jh9gde
Tags: 0.13-1
* New upstream release
* VCS-* fields removed (berlios will be shutdown)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
# -*- coding: UTF-8 -*-
2
2
 
3
 
__revision__ = '$Id: main_treeview.py 1456 2010-10-03 11:41:49Z mikej06 $'
 
3
__revision__ = '$Id: main_treeview.py 1572 2011-08-23 18:47:22Z mikej06 $'
4
4
 
5
 
# Copyright (c) 2005-2009 Vasco Nunes, Piotr Ożarowski
 
5
# Copyright (c) 2005-2011 Vasco Nunes, Piotr Ożarowski
6
6
 
7
7
# This program is free software; you can redistribute it and/or modify
8
8
# it under the terms of the GNU General Public License as published by
23
23
 
24
24
import logging
25
25
import os
26
 
 
27
26
import gtk
28
27
from sqlalchemy import select, desc
29
28
from sqlalchemy.sql.expression import Select
30
 
 
31
29
import db
32
30
import gutils
33
31
import sql
34
32
 
35
33
log = logging.getLogger("Griffith")
36
34
 
 
35
def on_tree_selection(tree_selection, self):
 
36
    counts = tree_selection.count_selected_rows()
 
37
    treeview_selection_on_event(self, self.widgets['treeview'])
 
38
    treemodel, selected = tree_selection.get_selected_rows()
 
39
    self.selected_iter = [treemodel.get_iter(path) for path in selected]
 
40
    
 
41
    if counts == 1:
 
42
        # TODO: rewrite me
 
43
        self.widgets['menu']['clone'].set_sensitive(True)
 
44
        self.widgets['menu']['make_cover'].set_sensitive(True)
 
45
        self.widgets['menu']['loan'].set_sensitive(True)
 
46
        self.widgets['menu']['edit'].set_sensitive(True)
 
47
        self.widgets['popups']['edit'].set_sensitive(True)
 
48
        self.widgets['popups']['loan'].set_sensitive(True)
 
49
        self.widgets['popups']['clone'].set_sensitive(True)
 
50
        self.widgets['popups']['print_cover'].set_sensitive(True)
 
51
    else:
 
52
        set_details(self)
 
53
        # lets make some options unavailable when multiselction is active. for now.
 
54
        # TODO: rewrite me
 
55
        self.widgets['menu']['clone'].set_sensitive(False)
 
56
        self.widgets['menu']['make_cover'].set_sensitive(False)
 
57
        self.widgets['menu']['loan'].set_sensitive(False)
 
58
        self.widgets['menu']['edit'].set_sensitive(False)
 
59
        self.widgets['popups']['edit'].set_sensitive(False)
 
60
        self.widgets['popups']['loan'].set_sensitive(False)
 
61
        self.widgets['popups']['clone'].set_sensitive(False)
 
62
        self.widgets['popups']['print_cover'].set_sensitive(False)
 
63
    treeview_clicked(self)
 
64
 
 
65
def foreach_treeview_selected(model, path, iter, selected):
 
66
    selected.append(model.get_value(iter, 0))
 
67
 
 
68
def treeview_selection_on_event(self, treeview, iter = False):
 
69
    self.selected = []
 
70
    treeview.get_selection().selected_foreach(foreach_treeview_selected, self.selected)
 
71
    #return selected
37
72
 
38
73
def treeview_clicked(self):
39
74
    if self.initialized is False:
40
75
        return False
41
 
    if self.total:
42
 
        treeselection = self.widgets['treeview'].get_selection()
43
 
        (tmp_model, tmp_iter) = treeselection.get_selected()
44
 
        if tmp_iter is None:
45
 
            log.info('Treeview: no selection')
46
 
            return False
47
 
        number = tmp_model.get_value(tmp_iter, 0)
48
 
        movie = self.db.session.query(db.Movie).filter_by(number=number).first()
49
 
        if movie is None:
50
 
            log.info("Treeview: movie doesn't exists (number=%s)", number)
51
 
        elif self.widgets['poster_window'].flags() & gtk.VISIBLE == gtk.VISIBLE:
 
76
    if len(self.selected) == 1:
 
77
        movie = self.db.session.query(db.Movie).filter_by(number=int(self.selected[0])).first()
 
78
        if self.widgets['poster_window'].flags() & gtk.VISIBLE == gtk.VISIBLE:
52
79
            # poster window is visible
53
80
            filename = None
54
81
            if movie.poster_md5:
56
83
            if not filename:
57
84
                filename = gutils.get_defaultimage_fname(self)
58
85
            self.widgets['big_poster'].set_from_file(filename)
59
 
        for ext in self.extensions:
60
 
            ext.maintree_clicked(treeselection, movie)
 
86
        #for ext in self.extensions:
 
87
            #ext.maintree_clicked(treeselection, movie)
61
88
        set_details(self, movie)
62
89
    else:
63
 
        set_details(self, {})
64
 
 
 
90
        return False
65
91
 
66
92
def set_details(self, item=None):#{{{
67
93
    if item is None:
139
165
    else:
140
166
        w['condition'].set_text('')
141
167
    if 'region' in item and item['region']:
142
 
        if str(item['region']) in [str(i) for i in range(len(self._regions))]:
143
 
            w['region'].set_markup("<i>%s</i>" % gutils.html_encode(item['region']))
144
 
            if int(item['region']) < 9:
 
168
        if item['region'] < len(self._regions):
 
169
            w['region'].set_markup("<i>%s</i>" % gutils.html_encode(self._regions[item['region']]))
 
170
            if int(item['region']) < 12:
145
171
                self.widgets['tooltips'].set_tip(w['region'], self._regions[int(item['region'])])
146
172
        else:
147
173
            log.info("Wrong value in 'region' field (movie_id=%s, region=%s)" % (item['movie_id'], item['region']))
240
266
            w['picture_button'].set_sensitive(False)
241
267
    else:
242
268
        image_path = gutils.get_defaultimage_fname(self)
 
269
        self.widgets['add']['delete_poster'].set_sensitive(False)
243
270
        w['picture_button'].set_sensitive(False)
244
271
    w['picture'].set_from_file(image_path)
245
272
    # ratig
298
325
                self.loans_treemodel.set_value(myiter, 1, str(loan.return_date)[:10])
299
326
            else:
300
327
                self.loans_treemodel.set_value(myiter, 1, "---")
301
 
            person = self.db.session.query(db.Person.name).filter_by(person_id=loan.person.person_id).first()
302
 
            self.loans_treemodel.set_value(myiter, 2, person.name)
 
328
            if loan.person:
 
329
                person = self.db.session.query(db.Person.name).filter_by(person_id=loan.person.person_id).first()
 
330
                self.loans_treemodel.set_value(myiter, 2, person.name)
303
331
 
304
332
    # volumes/collections
305
333
    if 'volume_id' in item and item['volume_id'] > 0:
533
561
    treemodel.set_value(iter, 5, movie.genre)
534
562
    treemodel.set_value(iter, 6, movie.seen)
535
563
    if movie.year is not None and (isinstance(movie.year, int) or isinstance(movie.year, long)):
536
 
        treemodel.set_value(iter, 7, movie.year)
 
564
        treemodel.set_value(iter, 7, str(movie.year))
537
565
    if movie.runtime is not None and (isinstance(movie.runtime, int) or isinstance(movie.runtime, long)):
538
566
        treemodel.set_value(iter, 8, '%003d' % movie.runtime + _(' min'))
539
567
    if movie.rating is not None and (isinstance(movie.rating, int) or isinstance(movie.rating, long)):
546
574
#}}}
547
575
 
548
576
def select(self, iter, ensurevisible = True): #{{{
549
 
    self.widgets['treeview'].get_selection().select_iter(iter)
550
 
    if ensurevisible:
551
 
        self.widgets['treeview'].scroll_to_cell(self.treemodel.get_path(iter))
 
577
    if iter:
 
578
        self.widgets['treeview'].get_selection().select_iter(iter)
 
579
        if ensurevisible:
 
580
            self.widgets['treeview'].scroll_to_cell(self.treemodel.get_path(iter))
 
581
    else:
 
582
        self.widgets['treeview'].get_selection().unselect_all()
552
583
    self.treeview_clicked()
553
584
#}}}
554
585