OSDN Git Service

Enable to get dictionaries in the data store.
[fukui-no-namari/fukui-no-namari.git] / src / FukuiNoNamari / board_column.py
1 # Copyright (C) 2006 by Aiwota Programmer
2 # aiwotaprog@tetteke.tk
3 #
4 # This program is free software; you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License as published by
6 # the Free Software Foundation; either version 2 of the License, or
7 # (at your option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 # GNU General Public License for more details.
13 #
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
17
18 import pygtk
19 pygtk.require('2.0')
20 import gtk
21 import gobject
22 import time
23
24
25 class BaseTreeViewColumn(gtk.TreeViewColumn):
26     min_width = 20
27
28     def __init__(self, renderer, treeview):
29         gtk.TreeViewColumn.__init__(self, self.label, renderer)
30         self.treeview = treeview
31         self.setup()
32
33     def setup(self):
34         self.set_resizable(True)
35         self.set_reorderable(True)
36         self.set_clickable(True)
37         self.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
38         self.set_min_width(self.min_width)
39         self.set_fixed_width(self.def_width)
40
41         renderers = self.get_cell_renderers()
42         self.set_cell_data_func(renderers[0], self.on_cell_data)
43
44         self.connect("clicked", self.on_column_clicked)
45         self.treeview.append_column(self)
46
47     def on_sort_column_changed(self):
48         model = self.treeview.get_model()
49         if model:
50             sort_column_name, sort_reverse = model.get_sort()
51             if sort_column_name != self.id:
52                 self.set_sort_indicator(False)
53             else:
54                 self.set_sort_indicator(True)
55                 if sort_reverse:
56                     self.set_sort_order(gtk.SORT_DESCENDING)
57                 else:
58                     self.set_sort_order(gtk.SORT_ASCENDING)
59         
60     def on_column_clicked(self, treeviewcolumn):
61         model = self.treeview.get_model()
62         if model:
63             model.sort(self.id)
64             for column in self.treeview.get_columns():
65                 column.on_sort_column_changed()
66
67     def on_cell_data(self, column, cell, model, iter):
68         self.updated_thread_highlight(column, cell, model, iter)
69
70         value = model.get_dict(iter)[self.name]
71         if type(value) in (int, float):
72             if value == 0:
73                 cell.set_property("text", "")
74             else:
75                 cell.set_property("text", str(value))
76         else:
77             cell.set_property("text", value)
78
79     def updated_thread_highlight(self, column, cell, model, iter):
80
81         def is_updated_thread():
82             res = model.get_dict(iter)["res"]
83             linecount = model.get_dict(iter)["lineCount"]
84             return res != 0 and linecount != 0 and res > linecount
85
86         if is_updated_thread():
87             cell.set_property("weight", 800)
88         else:
89             cell.set_property("weight", 400)
90
91
92 tree_view_column_list = []
93     
94 class TreeViewColumn_Number(BaseTreeViewColumn):
95     name = "num"
96     id = "num"
97     label = "No."
98     def_width = 30
99
100     def on_sort_column_changed(self):
101         model = self.treeview.get_model()
102         if model:
103             sort_column_name, sort_reverse = model.get_sort()
104             if sort_column_name == self.id and sort_reverse:
105                 self.set_sort_indicator(True)
106                 self.set_sort_order(gtk.SORT_DESCENDING)
107             else:
108                 self.set_sort_indicator(False)
109         
110 tree_view_column_list.append(TreeViewColumn_Number)
111
112
113 class TreeViewColumn_Title(BaseTreeViewColumn):
114     name = "title"
115     id = "title"
116     label = "Title"
117     def_width = 330
118
119 tree_view_column_list.append(TreeViewColumn_Title)
120
121
122 class TreeViewColumn_Res(BaseTreeViewColumn):
123     name = "res"
124     id = "res"
125     label = "Res"
126     def_width = 50
127
128 tree_view_column_list.append(TreeViewColumn_Res)
129
130
131 class TreeViewColumn_LineCount(BaseTreeViewColumn):
132     name = "lineCount"
133     id = "lineCount"
134     label = "Read"
135     def_width = 50
136
137 tree_view_column_list.append(TreeViewColumn_LineCount)
138
139
140 class TreeViewColumn_LastModified(BaseTreeViewColumn):
141     id = "lastModified"
142     label = "Last Modified"
143     def_width = 200
144
145     def on_cell_data(self, column, cell, model, iter):
146         self.updated_thread_highlight(column, cell, model, iter)
147
148         lastmod = model.get_dict(iter)["lastModified"]
149         if lastmod == 0:
150             cell.set_property("text", "")
151         else:
152             cell.set_property("text", time.strftime(
153                 "%Y/%m/%d(%a) %H:%M:%S", time.localtime(lastmod)))
154
155 tree_view_column_list.append(TreeViewColumn_LastModified)
156
157
158 class TreeViewColumn_Average(BaseTreeViewColumn):
159     name = "average"
160     id = "average"
161     label = "Average"
162     def_width = 50
163
164 tree_view_column_list.append(TreeViewColumn_Average)