Merge lp:~rastkokaradzic/screenlets/testing into lp:screenlets
- testing
- Merge into trunk
Proposed by
Märt Põder
Status: | Merged |
---|---|
Merged at revision: | 785 |
Proposed branch: | lp:~rastkokaradzic/screenlets/testing |
Merge into: | lp:screenlets |
Diff against target: |
449 lines (+188/-55) 4 files modified
Makefile (+1/-1) potfiles.sh (+17/-1) src/lib/utils.py (+14/-8) src/share/screenlets-manager/screenlets-manager.py (+156/-45) |
To merge this branch: | bzr merge lp:~rastkokaradzic/screenlets/testing |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Märt Põder | Approve | ||
Review via email: mp+98786@code.launchpad.net |
Commit message
Description of the change
Add screenlet categories to Screenlets Manager
To post a comment you must log in.
Revision history for this message
Märt Põder (boamaod) : | # |
review:
Approve
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'Makefile' | |||
2 | --- Makefile 2009-03-15 20:06:25 +0000 | |||
3 | +++ Makefile 2012-03-22 06:31:18 +0000 | |||
4 | @@ -9,7 +9,7 @@ | |||
5 | 9 | # | 9 | # |
6 | 10 | 10 | ||
7 | 11 | VERSION = `cat VERSION` | 11 | VERSION = `cat VERSION` |
9 | 12 | PREFIX = /usr | 12 | PREFIX = /usr/local |
10 | 13 | INSTALL_LOG = install.log | 13 | INSTALL_LOG = install.log |
11 | 14 | 14 | ||
12 | 15 | .PHONY : docs | 15 | .PHONY : docs |
13 | 16 | 16 | ||
14 | === modified file 'potfiles.sh' | |||
15 | --- potfiles.sh 2011-08-12 19:41:00 +0000 | |||
16 | +++ potfiles.sh 2012-03-22 06:31:18 +0000 | |||
17 | @@ -14,7 +14,7 @@ | |||
18 | 14 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | 14 | # along with this program. If not, see <http://www.gnu.org/licenses/>. |
19 | 15 | 15 | ||
20 | 16 | VERSION=$(cat VERSION) | 16 | VERSION=$(cat VERSION) |
22 | 17 | 17 | INDIV_ROOT=../indiv-screenlets/ | |
23 | 18 | function po() | 18 | function po() |
24 | 19 | { | 19 | { |
25 | 20 | tmpname="/tmp/$(uuidgen).pot" | 20 | tmpname="/tmp/$(uuidgen).pot" |
26 | @@ -67,7 +67,23 @@ | |||
27 | 67 | fi | 67 | fi |
28 | 68 | } | 68 | } |
29 | 69 | 69 | ||
30 | 70 | function po_categories() { | ||
31 | 71 | SAVEIFS=$IFS | ||
32 | 72 | IFS=$(echo -en "\n\b") | ||
33 | 73 | CAT_LIST=`cat $INDIV_ROOT/src/*/*.py | grep __category__ | awk -F\' '{print tolower($(NF-1))}' | sort -r |uniq -c| awk '{for(i=2;i<=NF;i++) | ||
34 | 74 | printf "%s ",$i;print "" }'` | ||
35 | 75 | echo -e "\n#Extracted categories from indiv-screenlets\n" >> $1/$1.pot | ||
36 | 76 | for i in $CAT_LIST | ||
37 | 77 | do | ||
38 | 78 | i=`echo $i | sed 's/ *$//g'` | ||
39 | 79 | l=`echo ${i:0:1} | tr "[:lower:]" "[:upper:]"` | ||
40 | 80 | echo -e "msgid \"$l${i:1}\"\nmsgstr \"\"\n" >> $1/$1.pot | ||
41 | 81 | done | ||
42 | 82 | IFS=$SAVEIFS | ||
43 | 83 | } | ||
44 | 84 | |||
45 | 70 | po "screenlets" | 85 | po "screenlets" |
46 | 71 | po "screenlets-manager" | 86 | po "screenlets-manager" |
47 | 87 | po_categories "screenlets-manager" | ||
48 | 72 | 88 | ||
49 | 73 | 89 | ||
50 | 74 | 90 | ||
51 | === modified file 'src/lib/utils.py' | |||
52 | --- src/lib/utils.py 2012-03-03 03:55:06 +0000 | |||
53 | +++ src/lib/utils.py 2012-03-22 06:31:18 +0000 | |||
54 | @@ -301,6 +301,16 @@ | |||
55 | 301 | end = data.find(last, begin) | 301 | end = data.find(last, begin) |
56 | 302 | return data[begin:end] | 302 | return data[begin:end] |
57 | 303 | 303 | ||
58 | 304 | def getCatBetween(data, first, last): | ||
59 | 305 | x = len(first) | ||
60 | 306 | f=data.find(first) | ||
61 | 307 | if f==-1: | ||
62 | 308 | return 'Miscellaneous' | ||
63 | 309 | else: | ||
64 | 310 | begin = f +x | ||
65 | 311 | end = data.find(last, begin) | ||
66 | 312 | return data[begin:end] | ||
67 | 313 | |||
68 | 304 | def get_screenlet_metadata_by_path (path): | 314 | def get_screenlet_metadata_by_path (path): |
69 | 305 | """Returns a dict with name, info, author and version of the given | 315 | """Returns a dict with name, info, author and version of the given |
70 | 306 | screenlet. Use with care because it may import the screenlet | 316 | screenlet. Use with care because it may import the screenlet |
71 | @@ -325,14 +335,10 @@ | |||
72 | 325 | author = getBetween(sldata,'__author__','\n') | 335 | author = getBetween(sldata,'__author__','\n') |
73 | 326 | author1 = getBetween(author ,"'","'") | 336 | author1 = getBetween(author ,"'","'") |
74 | 327 | if author1.find(' = ') != -1: author1 = getBetween(author ,chr(34),chr(34)) | 337 | if author1.find(' = ') != -1: author1 = getBetween(author ,chr(34),chr(34)) |
83 | 328 | category = getBetween(sldata,'__category__','\n') | 338 | category = getCatBetween(sldata,'__category__','\n') |
84 | 329 | category1 = getBetween(category ,"'","'") | 339 | category1 = getCatBetween(category ,"'","'") |
85 | 330 | if category1.find(' = ') != -1: category1 = getBetween(category ,chr(34),chr(34)) | 340 | if category1.find(' = ') != -1: |
86 | 331 | try: | 341 | category1 = getCatBetween(category ,chr(34),chr(34)) |
79 | 332 | category1=int(category1) | ||
80 | 333 | except: | ||
81 | 334 | category1=10 | ||
82 | 335 | |||
87 | 336 | version = getBetween(sldata,'__version__','\n') | 342 | version = getBetween(sldata,'__version__','\n') |
88 | 337 | version1 = getBetween(version ,"'","'") | 343 | version1 = getBetween(version ,"'","'") |
89 | 338 | if version1.find(' = ') != -1: version1 = getBetween(version ,chr(34),chr(34)) | 344 | if version1.find(' = ') != -1: version1 = getBetween(version ,chr(34),chr(34)) |
90 | 339 | 345 | ||
91 | === modified file 'src/share/screenlets-manager/screenlets-manager.py' | |||
92 | --- src/share/screenlets-manager/screenlets-manager.py 2012-03-03 03:55:06 +0000 | |||
93 | +++ src/share/screenlets-manager/screenlets-manager.py 2012-03-22 06:31:18 +0000 | |||
94 | @@ -86,24 +86,21 @@ | |||
95 | 86 | 86 | ||
96 | 87 | def __init__ (self): | 87 | def __init__ (self): |
97 | 88 | #dict of categories that will be shown in combobox | 88 | #dict of categories that will be shown in combobox |
111 | 89 | self.available_categories = { | 89 | self.available_categories = [_('All categories')] |
99 | 90 | 0: _('All'), | ||
100 | 91 | 1: _('Alarms and alerts'), | ||
101 | 92 | 2: _('Date and time'), | ||
102 | 93 | 3: _('Fund and amusements'), | ||
103 | 94 | 4: _('Internet and email'), | ||
104 | 95 | 5: _('News'), | ||
105 | 96 | 6: _('System information'), | ||
106 | 97 | 7: _('Toolbars and launchers'), | ||
107 | 98 | 8: _('Weather'), | ||
108 | 99 | 9: _('Dictionaries and translations'), | ||
109 | 100 | 10: _('Miscellaneous') | ||
110 | 101 | } | ||
112 | 102 | 90 | ||
113 | 103 | # create ui and populate it | 91 | # create ui and populate it |
114 | 104 | self.create_ui() | 92 | self.create_ui() |
115 | 105 | # populate UI | 93 | # populate UI |
116 | 106 | self.load_screenlets() | 94 | self.load_screenlets() |
117 | 95 | |||
118 | 96 | tcats = sorted(self.tmp_cats.items(),key=lambda(k,v):(v,k))[::-1] | ||
119 | 97 | i = 0 | ||
120 | 98 | while (i<min(10,len(tcats)-1)): | ||
121 | 99 | self.available_categories.append(_(tcats[i][0])) | ||
122 | 100 | i=i+1 | ||
123 | 101 | for cat in self.available_categories: | ||
124 | 102 | self.combo1.append_text(cat) | ||
125 | 103 | self.combo1.set_active(0) | ||
126 | 107 | # if we are running as root, show error | 104 | # if we are running as root, show error |
127 | 108 | if USER == 0: | 105 | if USER == 0: |
128 | 109 | screenlets.show_error(None, _("""Important! You are running this application as root user, almost all functionality is disabled. You can use this to install screenlets into the system-wide path."""), | 106 | screenlets.show_error(None, _("""Important! You are running this application as root user, almost all functionality is disabled. You can use this to install screenlets into the system-wide path."""), |
129 | @@ -115,10 +112,6 @@ | |||
130 | 115 | self.connect_daemon() | 112 | self.connect_daemon() |
131 | 116 | 113 | ||
132 | 117 | # screenlets stuff | 114 | # screenlets stuff |
133 | 118 | |||
134 | 119 | |||
135 | 120 | |||
136 | 121 | |||
137 | 122 | 115 | ||
138 | 123 | def lookup_daemon (self): | 116 | def lookup_daemon (self): |
139 | 124 | """Find the screenlets-daemon or try to launch it. Initializes | 117 | """Find the screenlets-daemon or try to launch it. Initializes |
140 | @@ -161,9 +154,9 @@ | |||
141 | 161 | """Delete the selected screenlet from the user's screenlet dir.""" | 154 | """Delete the selected screenlet from the user's screenlet dir.""" |
142 | 162 | sel = self.view.get_selected_items() | 155 | sel = self.view.get_selected_items() |
143 | 163 | if sel and len(sel) > 0 and len(sel[0]) > 0: | 156 | if sel and len(sel) > 0 and len(sel[0]) > 0: |
145 | 164 | it = self.model.get_iter(sel[0][0]) | 157 | it = self.model_filter.get_iter(sel[0][0]) |
146 | 165 | if it: | 158 | if it: |
148 | 166 | info = self.model.get_value(it, 2) | 159 | info = self.model_filter.get_value(it, 2) |
149 | 167 | if info and not info.system: | 160 | if info and not info.system: |
150 | 168 | # delete the file | 161 | # delete the file |
151 | 169 | if screenlets.show_question(None, _('Do you really want to permanently uninstall and delete the %sScreenlet from your system?') % info.name, _('Delete Screenlet')): | 162 | if screenlets.show_question(None, _('Do you really want to permanently uninstall and delete the %sScreenlet from your system?') % info.name, _('Delete Screenlet')): |
152 | @@ -178,8 +171,62 @@ | |||
153 | 178 | screenlets.show_error(None, _('Can\'t delete system-wide screenlets.')) | 171 | screenlets.show_error(None, _('Can\'t delete system-wide screenlets.')) |
154 | 179 | return False | 172 | return False |
155 | 180 | 173 | ||
156 | 174 | |||
157 | 181 | def load_screenlets (self): | 175 | def load_screenlets (self): |
158 | 182 | """Load all available screenlets, create ScreenletInfo-objects for | 176 | """Load all available screenlets, create ScreenletInfo-objects for |
159 | 177 | them and add them into global dictionary used later for filtering.""" | ||
160 | 178 | # fallback icon | ||
161 | 179 | self.noimg = gtk.gdk.pixbuf_new_from_file_at_size(\ | ||
162 | 180 | screenlets.INSTALL_PREFIX + '/share/screenlets-manager/noimage.svg', | ||
163 | 181 | 56, 56) | ||
164 | 182 | # get list of available/running screenlets | ||
165 | 183 | self.loaded_screenlets = {} | ||
166 | 184 | self.tmp_cats = {} | ||
167 | 185 | lst_a = utils.list_available_screenlets() | ||
168 | 186 | lst_a.sort() | ||
169 | 187 | for s in lst_a: | ||
170 | 188 | try: | ||
171 | 189 | img = utils.get_screenlet_icon(s, 56, 56) | ||
172 | 190 | except Exception, ex: | ||
173 | 191 | #print "Exception while loading icon '%s': %s" % (path, ex) | ||
174 | 192 | img = self.noimg | ||
175 | 193 | # get metadata and create ScreenletInfo-object from it | ||
176 | 194 | meta = utils.get_screenlet_metadata(s) | ||
177 | 195 | if meta: | ||
178 | 196 | # get meta values | ||
179 | 197 | def setfield(name, default): | ||
180 | 198 | if meta.has_key(name): | ||
181 | 199 | if meta[name] != None: | ||
182 | 200 | return meta[name] | ||
183 | 201 | else: | ||
184 | 202 | return default | ||
185 | 203 | else: | ||
186 | 204 | return default | ||
187 | 205 | name = setfield('name', '') | ||
188 | 206 | info = setfield('info', '') | ||
189 | 207 | author = setfield('author', '') | ||
190 | 208 | category= setfield('category', 'Miscellaneous') | ||
191 | 209 | version = setfield('version', '') | ||
192 | 210 | #Appends category into dict of categories that counts how much screenlets have defined that category. | ||
193 | 211 | #It's used later to load top defined categories in category filter combobox | ||
194 | 212 | if self.tmp_cats.has_key(category): | ||
195 | 213 | self.tmp_cats[category] += 1 | ||
196 | 214 | else: | ||
197 | 215 | self.tmp_cats[category] = 1 | ||
198 | 216 | |||
199 | 217 | |||
200 | 218 | # get info | ||
201 | 219 | slinfo = utils.ScreenletInfo(s, name, info, author,category, version, img) | ||
202 | 220 | else: | ||
203 | 221 | print 'Error while loading screenlets metadata for "%s".' % s | ||
204 | 222 | slinfo = utils.ScreenletInfo(s, '','', '','', '', img) | ||
205 | 223 | #Append screenlet info into global dictionary used later to filter screenlets | ||
206 | 224 | self.loaded_screenlets[slinfo.name] = slinfo | ||
207 | 225 | self.model.append(['<span size="9000">%s</span>' % s, img, slinfo]) | ||
208 | 226 | |||
209 | 227 | |||
210 | 228 | def load_screenletss (self): | ||
211 | 229 | """Load all available screenlets, create ScreenletInfo-objects for | ||
212 | 183 | them and add them to the iconview-model.""" | 230 | them and add them to the iconview-model.""" |
213 | 184 | # fallback icon | 231 | # fallback icon |
214 | 185 | noimg = gtk.gdk.pixbuf_new_from_file_at_size(\ | 232 | noimg = gtk.gdk.pixbuf_new_from_file_at_size(\ |
215 | @@ -224,7 +271,7 @@ | |||
216 | 224 | name = setfield('name', '') | 271 | name = setfield('name', '') |
217 | 225 | info = setfield('info', '') | 272 | info = setfield('info', '') |
218 | 226 | author = setfield('author', '') | 273 | author = setfield('author', '') |
220 | 227 | category= setfield('category', 10) | 274 | category = setfield('category', 10) |
221 | 228 | version = setfield('version', '') | 275 | version = setfield('version', '') |
222 | 229 | #If found defined category checks if its available, if not put in Miscellaneous | 276 | #If found defined category checks if its available, if not put in Miscellaneous |
223 | 230 | if category in self.available_categories.keys(): | 277 | if category in self.available_categories.keys(): |
224 | @@ -248,7 +295,7 @@ | |||
225 | 248 | # add to model | 295 | # add to model |
226 | 249 | 296 | ||
227 | 250 | wshow = True | 297 | wshow = True |
229 | 251 | if self.available_categories.values()[combo_cat_sel]=='All': | 298 | if self.available_categories.values()[combo_cat_sel]=='All categories': |
230 | 252 | wshow = True | 299 | wshow = True |
231 | 253 | elif self.available_categories.values()[combo_cat_sel]==slinfo.category: | 300 | elif self.available_categories.values()[combo_cat_sel]==slinfo.category: |
232 | 254 | wshow = True | 301 | wshow = True |
233 | @@ -272,7 +319,7 @@ | |||
234 | 272 | 319 | ||
235 | 273 | def get_Info_by_name (self, name): | 320 | def get_Info_by_name (self, name): |
236 | 274 | """Returns a ScreenletInfo-object for the screenlet with given name.""" | 321 | """Returns a ScreenletInfo-object for the screenlet with given name.""" |
238 | 275 | for row in self.model: | 322 | for row in self.model_filter: |
239 | 276 | if row[2] and row[2].name == name: | 323 | if row[2] and row[2].name == name: |
240 | 277 | return row[2] | 324 | return row[2] |
241 | 278 | return None | 325 | return None |
242 | @@ -282,17 +329,17 @@ | |||
243 | 282 | int the IconView.""" | 329 | int the IconView.""" |
244 | 283 | sel = self.view.get_selected_items() | 330 | sel = self.view.get_selected_items() |
245 | 284 | if sel and len(sel)>0 and len(sel[0])>0: | 331 | if sel and len(sel)>0 and len(sel[0])>0: |
247 | 285 | it = self.model.get_iter(sel[0][0]) | 332 | it = self.model_filter.get_iter(sel[0][0]) |
248 | 286 | if it: | 333 | if it: |
250 | 287 | return self.model.get_value(it, 2) | 334 | return self.model_filter.get_value(it, 2) |
251 | 288 | return None | 335 | return None |
252 | 289 | 336 | ||
253 | 290 | def reset_selected_screenlet(self): | 337 | def reset_selected_screenlet(self): |
254 | 291 | sel = self.view.get_selected_items() | 338 | sel = self.view.get_selected_items() |
255 | 292 | if sel and len(sel) > 0 and len(sel[0]) > 0: | 339 | if sel and len(sel) > 0 and len(sel[0]) > 0: |
257 | 293 | it = self.model.get_iter(sel[0][0]) | 340 | it = self.model_filter.get_iter(sel[0][0]) |
258 | 294 | if it: | 341 | if it: |
260 | 295 | info = self.model.get_value(it, 2) | 342 | info = self.model_filter.get_value(it, 2) |
261 | 296 | if screenlets.show_question(None, _('Do you really want to reset the %sScreenlet configuration?') % info.name, _('Reset Screenlet')): | 343 | if screenlets.show_question(None, _('Do you really want to reset the %sScreenlet configuration?') % info.name, _('Reset Screenlet')): |
262 | 297 | # delete screenlet's config directory | 344 | # delete screenlet's config directory |
263 | 298 | os.system('rm -rf %s/%s' % (screenlets.DIR_CONFIG, info.name)) | 345 | os.system('rm -rf %s/%s' % (screenlets.DIR_CONFIG, info.name)) |
264 | @@ -306,7 +353,7 @@ | |||
265 | 306 | 353 | ||
266 | 307 | def set_screenlet_active (self, name, active): | 354 | def set_screenlet_active (self, name, active): |
267 | 308 | """Set the screenlet's active-state to active (True/False).""" | 355 | """Set the screenlet's active-state to active (True/False).""" |
269 | 309 | for row in self.model: | 356 | for row in self.model_filter: |
270 | 310 | if row[2].name == name[:-9]: | 357 | if row[2].name == name[:-9]: |
271 | 311 | row[2].active = active | 358 | row[2].active = active |
272 | 312 | # if selected, also toggle checkbox | 359 | # if selected, also toggle checkbox |
273 | @@ -314,7 +361,67 @@ | |||
274 | 314 | if sel and sel.name == name[:-9]: | 361 | if sel and sel.name == name[:-9]: |
275 | 315 | self.recreate_infobox(sel) | 362 | self.recreate_infobox(sel) |
276 | 316 | break | 363 | break |
278 | 317 | 364 | def visible_cb(self, model, iter, data): | |
279 | 365 | slinfo = model.get_value(iter,2) | ||
280 | 366 | if(slinfo != None): | ||
281 | 367 | #Check if filter box value matches screenlet name | ||
282 | 368 | if self.filter_input != '': | ||
283 | 369 | filter_slname = str(slinfo.name).lower() | ||
284 | 370 | filter_find = filter_slname.find(self.filter_input) | ||
285 | 371 | if filter_find == -1: | ||
286 | 372 | return False | ||
287 | 373 | |||
288 | 374 | wshow = True | ||
289 | 375 | #Check if screenlet is currently running | ||
290 | 376 | if self.combo_type_sel == 1: | ||
291 | 377 | if self.loaded_screenlets[slinfo.name].active == False: | ||
292 | 378 | return False | ||
293 | 379 | elif self.combo_type_sel == 2: | ||
294 | 380 | if slinfo.autostart != True: | ||
295 | 381 | return False | ||
296 | 382 | elif self.combo_type_sel == 3: | ||
297 | 383 | if slinfo.system != True: | ||
298 | 384 | return False | ||
299 | 385 | elif self.combo_type_sel == 4: | ||
300 | 386 | if slinfo.system != False: | ||
301 | 387 | return False | ||
302 | 388 | #Check if category selection matches screenlet category | ||
303 | 389 | if self.available_categories[self.combo_cat_sel]=='All categories': | ||
304 | 390 | wshow = True | ||
305 | 391 | elif self.available_categories[self.combo_cat_sel]==slinfo.category: | ||
306 | 392 | wshow = True | ||
307 | 393 | elif (not(slinfo.category in self.available_categories)) and self.available_categories[self.combo_cat_sel]=='Miscellaneous': | ||
308 | 394 | wshow = True | ||
309 | 395 | else: | ||
310 | 396 | wshow = False | ||
311 | 397 | return wshow | ||
312 | 398 | |||
313 | 399 | |||
314 | 400 | |||
315 | 401 | |||
316 | 402 | else: | ||
317 | 403 | return False | ||
318 | 404 | |||
319 | 405 | |||
320 | 406 | |||
321 | 407 | def refilter_screenlets(self,widget,id): | ||
322 | 408 | if id == 'search_clean': | ||
323 | 409 | self.txtsearch.set_text('') | ||
324 | 410 | self.filter_input = '' | ||
325 | 411 | elif id == 'search_changed': | ||
326 | 412 | self.filter_input = str(self.txtsearch.get_text()).lower() | ||
327 | 413 | elif id == 'type_changed': | ||
328 | 414 | self.combo_type_sel = self.combo.get_active() | ||
329 | 415 | if(self.combo_type_sel == 1): | ||
330 | 416 | lst_r = utils.list_running_screenlets() | ||
331 | 417 | if lst_r != None: | ||
332 | 418 | for item in lst_r: | ||
333 | 419 | if item[:-9] in self.loaded_screenlets.keys(): | ||
334 | 420 | self.loaded_screenlets[item[:-9]].active=True | ||
335 | 421 | |||
336 | 422 | elif id == 'category_changed': | ||
337 | 423 | self.combo_cat_sel = self.combo1.get_active() | ||
338 | 424 | self.model_filter.refilter() | ||
339 | 318 | # ui creation | 425 | # ui creation |
340 | 319 | 426 | ||
341 | 320 | def create_ui (self): | 427 | def create_ui (self): |
342 | @@ -345,10 +452,11 @@ | |||
343 | 345 | vbox.pack_start(hbox, True, True) | 452 | vbox.pack_start(hbox, True, True) |
344 | 346 | hbox.show() | 453 | hbox.show() |
345 | 347 | # iconview | 454 | # iconview |
346 | 348 | self.model= gtk.ListStore(object) | ||
347 | 349 | self.view = iv = gtk.IconView() | 455 | self.view = iv = gtk.IconView() |
348 | 350 | self.model = gtk.ListStore(str, gtk.gdk.Pixbuf, object) | 456 | self.model = gtk.ListStore(str, gtk.gdk.Pixbuf, object) |
350 | 351 | iv.set_model(self.model) | 457 | self.model_filter = self.model.filter_new() |
351 | 458 | self.model_filter.set_visible_func(self.visible_cb, None) | ||
352 | 459 | iv.set_model(self.model_filter) | ||
353 | 352 | iv.set_markup_column(0) | 460 | iv.set_markup_column(0) |
354 | 353 | iv.set_pixbuf_column(1) | 461 | iv.set_pixbuf_column(1) |
355 | 354 | # disable UI for root user | 462 | # disable UI for root user |
356 | @@ -365,7 +473,7 @@ | |||
357 | 365 | iv.connect("drag_data_received", self.drag_data_received) | 473 | iv.connect("drag_data_received", self.drag_data_received) |
358 | 366 | # wrap iconview in scrollwin | 474 | # wrap iconview in scrollwin |
359 | 367 | sw = self.slwindow = gtk.ScrolledWindow() | 475 | sw = self.slwindow = gtk.ScrolledWindow() |
361 | 368 | sw.set_size_request(560, 350) | 476 | sw.set_size_request(560, 380) |
362 | 369 | sw.set_shadow_type(gtk.SHADOW_IN) | 477 | sw.set_shadow_type(gtk.SHADOW_IN) |
363 | 370 | sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) | 478 | sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) |
364 | 371 | sw.add(iv) | 479 | sw.add(iv) |
365 | @@ -457,33 +565,39 @@ | |||
366 | 457 | self.label.set_width_chars(70) | 565 | self.label.set_width_chars(70) |
367 | 458 | self.label.set_alignment(0, 0) | 566 | self.label.set_alignment(0, 0) |
368 | 459 | self.label.set_size_request(-1, 65) | 567 | self.label.set_size_request(-1, 65) |
369 | 568 | self.filter_input='' | ||
370 | 460 | self.btnsearch = gtk.Button() | 569 | self.btnsearch = gtk.Button() |
371 | 570 | self.filterbox = gtk.VBox() | ||
372 | 461 | self.searchbox = gtk.HBox() | 571 | self.searchbox = gtk.HBox() |
373 | 462 | self.txtsearch = gtk.Entry() | 572 | self.txtsearch = gtk.Entry() |
374 | 463 | self.btnsearch.set_image(gtk.image_new_from_stock(gtk.STOCK_CLOSE, | 573 | self.btnsearch.set_image(gtk.image_new_from_stock(gtk.STOCK_CLOSE, |
375 | 464 | gtk.ICON_SIZE_BUTTON)) | 574 | gtk.ICON_SIZE_BUTTON)) |
379 | 465 | self.btnsearch.connect("clicked",self.redraw_screenlets, 'clean') | 575 | self.btnsearch.connect("clicked",self.refilter_screenlets, 'search_clean') |
380 | 466 | self.txtsearch.connect("changed",self.redraw_screenlets, 'enter') | 576 | self.txtsearch.connect("changed",self.refilter_screenlets, 'search_changed') |
381 | 467 | self.txtsearch.connect("backspace",self.redraw_screenlets, 'backspace') | 577 | |
382 | 468 | 578 | ||
383 | 469 | self.searchbox.pack_start(self.txtsearch, 1) | 579 | self.searchbox.pack_start(self.txtsearch, 1) |
384 | 470 | self.searchbox.pack_start(self.btnsearch, False) | 580 | self.searchbox.pack_start(self.btnsearch, False) |
386 | 471 | butbox.pack_start(self.searchbox, False,0,3) | 581 | self.filterbox.pack_start(self.searchbox, False) |
387 | 582 | |||
388 | 472 | self.combo = gtk.combo_box_new_text() | 583 | self.combo = gtk.combo_box_new_text() |
389 | 473 | self.combo.append_text(_('All Screenlets')) | 584 | self.combo.append_text(_('All Screenlets')) |
390 | 474 | self.combo.append_text(_('Running Screenlets')) | 585 | self.combo.append_text(_('Running Screenlets')) |
391 | 475 | self.combo.append_text(_('Autostart Screenlets')) | 586 | self.combo.append_text(_('Autostart Screenlets')) |
392 | 476 | self.combo.append_text(_('Only native Screenlets')) | 587 | self.combo.append_text(_('Only native Screenlets')) |
393 | 477 | self.combo.append_text(_('Only third party')) | 588 | self.combo.append_text(_('Only third party')) |
394 | 589 | self.combo_type_sel=0 | ||
395 | 478 | self.combo.set_active(0) | 590 | self.combo.set_active(0) |
397 | 479 | self.combo.connect("changed",self.redraw_screenlets, 'enter') | 591 | self.combo.connect("changed",self.refilter_screenlets, 'type_changed') |
398 | 480 | self.combo.show() | 592 | self.combo.show() |
399 | 481 | self.combo1 = gtk.combo_box_new_text() | 593 | self.combo1 = gtk.combo_box_new_text() |
402 | 482 | for cat in self.available_categories.values(): | 594 | self.combo_cat_sel=0 |
401 | 483 | self.combo1.append_text(_(cat)) | ||
403 | 484 | self.combo1.set_active(0) | 595 | self.combo1.set_active(0) |
405 | 485 | self.combo1.connect("changed",self.redraw_screenlets, 'enter') | 596 | self.combo1.connect("changed",self.refilter_screenlets, 'category_changed') |
406 | 486 | self.combo1.show() | 597 | self.combo1.show() |
407 | 598 | self.filterbox.pack_start(self.combo1, False) | ||
408 | 599 | self.filterbox.pack_start(self.combo, False) | ||
409 | 600 | butbox.pack_start(self.filterbox, False,0,3) | ||
410 | 487 | butbox.pack_start(but1, False) | 601 | butbox.pack_start(but1, False) |
411 | 488 | butbox.pack_start(but2, False) | 602 | butbox.pack_start(but2, False) |
412 | 489 | butbox.pack_start(but3, False) | 603 | butbox.pack_start(but3, False) |
413 | @@ -495,8 +609,6 @@ | |||
414 | 495 | #sep2 = gtk.HSeparator() | 609 | #sep2 = gtk.HSeparator() |
415 | 496 | #butbox.pack_start(sep2, False,False,5) | 610 | #butbox.pack_start(sep2, False,False,5) |
416 | 497 | butbox.pack_start(but8, False) | 611 | butbox.pack_start(but8, False) |
417 | 498 | butbox.pack_start(self.combo, False) | ||
418 | 499 | butbox.pack_start(self.combo1, False) | ||
419 | 500 | #butbox.pack_start(self.label, False) | 612 | #butbox.pack_start(self.label, False) |
420 | 501 | butbox.show_all() | 613 | butbox.show_all() |
421 | 502 | hbox.pack_start(butbox, False, False, 10) | 614 | hbox.pack_start(butbox, False, False, 10) |
422 | @@ -616,10 +728,7 @@ | |||
423 | 616 | self.bbox.pack_start(ibox, False,False) | 728 | self.bbox.pack_start(ibox, False,False) |
424 | 617 | 729 | ||
425 | 618 | def redraw_screenlets(self,widget,id): | 730 | def redraw_screenlets(self,widget,id): |
430 | 619 | if id == 'backspace': | 731 | if id == 'clean': |
427 | 620 | if len(self.txtsearch.get_text()) == 1: | ||
428 | 621 | self.txtsearch.set_text('') | ||
429 | 622 | elif id == 'clean': | ||
431 | 623 | self.txtsearch.set_text('') | 732 | self.txtsearch.set_text('') |
432 | 624 | else: | 733 | else: |
433 | 625 | self.model.clear() | 734 | self.model.clear() |
434 | @@ -936,6 +1045,7 @@ | |||
435 | 936 | os.system('sh '+ DIR_AUTOSTART + s + ' &') | 1045 | os.system('sh '+ DIR_AUTOSTART + s + ' &') |
436 | 937 | elif id == 'closeall': | 1046 | elif id == 'closeall': |
437 | 938 | utils.quit_all_screenlets() | 1047 | utils.quit_all_screenlets() |
438 | 1048 | self.refilter_screenlets(None,'type_changed') | ||
439 | 939 | 1049 | ||
440 | 940 | elif id == 'download': | 1050 | elif id == 'download': |
441 | 941 | if screenlets.UBUNTU: | 1051 | if screenlets.UBUNTU: |
442 | @@ -1298,6 +1408,7 @@ | |||
443 | 1298 | widget.set_sensitive(False) | 1408 | widget.set_sensitive(False) |
444 | 1299 | else: | 1409 | else: |
445 | 1300 | utils.delete_autostarter(info.name) | 1410 | utils.delete_autostarter(info.name) |
446 | 1411 | self.refilter_screenlets(None,'None') | ||
447 | 1301 | 1412 | ||
448 | 1302 | def toggle_tray (self, widget): | 1413 | def toggle_tray (self, widget): |
449 | 1303 | """Callback for handling changes to the tray-CheckButton.""" | 1414 | """Callback for handling changes to the tray-CheckButton.""" |