~awn-extras/awn-extras/vector-effects-extras

« back to all changes in this revision

Viewing changes to src/to-do/to-do.py

  • Committer: Michal Hruby
  • Date: 2008-09-29 19:42:23 UTC
  • mfrom: (877.1.13 awn-extras)
  • Revision ID: mhr3@zoznam.sk-20080929194223-c2q6qbr7attyuo8o
Merged trunk.

Show diffs side-by-side

added added

removed removed

Lines of Context:
35
35
#Awn stuff
36
36
import sys
37
37
import awn
38
 
from awn.extras import detach
 
38
from awn.extras import detach, surface_to_pixbuf
39
39
 
40
40
class App(awn.AppletSimple):
41
41
  last_num_items = -1
42
42
  surface = None
43
43
  last_height = -1
 
44
  progress_buttons = []
 
45
  
44
46
  def __init__(self, uid, orient, height):
45
47
    self.uid = uid
46
48
    self.height = height
199
201
  
200
202
  #Remove anything shown in the dialog - does not hide the dialog
201
203
  def clear_dialog(self,*args):
 
204
    for pb in self.progress_buttons:
 
205
      pb.disconn()
 
206
      pb.destroy()
 
207
    
 
208
    while True:
 
209
      try:
 
210
        del self.progress_buttons[0]
 
211
      except:
 
212
        break
 
213
    
202
214
    try:
203
215
      self.dialog_widget.destroy()
204
216
    except:
271
283
  
272
284
  #Show the about dialog
273
285
  def show_about(self,*args):
274
 
    win = gtk.AboutDialog()
275
 
    win.set_name("To-Do List")
 
286
    win = gtk.AboutDialog()
 
287
    win.set_name("To-Do List")
276
288
    win.set_copyright("Copyright 2008 sharkbaitbobby "+\
277
 
      "<sharkbaitbobby+awn@gmail.com>")
278
 
    win.set_authors(["sharkbaitbobby <sharkbaitbobby+awn@gmail.com>"])
279
 
    win.set_comments("A simple To-Do List")
 
289
      "<sharkbaitbobby+awn@gmail.com>")
 
290
    win.set_authors(["sharkbaitbobby <sharkbaitbobby+awn@gmail.com>"])
 
291
    win.set_comments("A simple To-Do List")
280
292
    win.set_license("This program is free software; you can redistribute it "+\
281
293
      "and/or modify it under the terms of the GNU General Public License "+\
282
294
      "as published by the Free Software Foundation; either version 2 of "+\
287
299
      "License for more details. You should have received a copy of the GNU "+\
288
300
      "General Public License along with this program; if not, write to the "+\
289
301
      "Free Software Foundation, Inc.,"+\
290
 
      "51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA.")
291
 
    win.set_wrap_license(True)
292
 
    win.set_documenters(["sharkbaitbobby <sharkbaitbobby+awn@gmail.com>"])
293
 
    win.set_artists(["Cairo"])
294
 
    win.run()
 
302
      "51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA.")
 
303
    win.set_wrap_license(True)
 
304
    win.set_documenters(["sharkbaitbobby <sharkbaitbobby+awn@gmail.com>"])
 
305
    win.set_artists(["Cairo"])
 
306
    win.run()
295
307
    win.destroy()
296
308
  
297
309
  #Hide the icon
415
427
        except:
416
428
          pass
417
429
        
 
430
        #Make a ProgressButton
 
431
        dialog_progress = ProgressButton(self, y)
 
432
        
418
433
        #Make a right arrow button to edit/add details about the item
419
434
        dialog_details = gtk.Button()
420
435
        dialog_details.set_tooltip_text('View/Edit details')
431
446
            xoptions=gtk.SHRINK,yoptions=gtk.SHRINK)
432
447
          dialog_table.attach(dialog_entry,2,3,y,(y+1),\
433
448
            yoptions=gtk.SHRINK)
434
 
          dialog_table.attach(dialog_details,3,4,y,(y+1),\
 
449
          dialog_table.attach(dialog_progress, 3, 4, y, (y+1), \
 
450
            xoptions=gtk.SHRINK, yoptions=gtk.SHRINK)
 
451
          dialog_table.attach(dialog_details,4,5,y,(y+1),\
435
452
            xoptions=gtk.SHRINK,yoptions=gtk.SHRINK)
436
453
        else:
437
454
          dialog_table.attach(dialog_x,0,1,y,(y+1),\
438
455
            xoptions=gtk.SHRINK,yoptions=gtk.SHRINK)
439
456
          dialog_table.attach(dialog_entry,1,3,y,(y+1),\
440
457
            yoptions=gtk.SHRINK)
441
 
          dialog_table.attach(dialog_details,3,4,y,(y+1),\
 
458
          dialog_table.attach(dialog_progress, 3, 4, y, (y+1), \
 
459
            xoptions=gtk.SHRINK, yoptions=gtk.SHRINK)
 
460
          dialog_table.attach(dialog_details,4,5,y,(y+1),\
442
461
            xoptions=gtk.SHRINK,yoptions=gtk.SHRINK)
443
462
        
444
463
        
445
464
        #Put the widgets in a list of widgets - used for expanding categories
446
 
        self.dialog_widgets.append([dialog_x,dialog_entry,dialog_details])
 
465
        self.dialog_widgets.append([dialog_x,dialog_entry,dialog_progress, \
 
466
          dialog_details])
 
467
        self.progress_buttons.append(dialog_progress)
447
468
        
448
469
        #If this item is in a category - don't show it automatically (show_all)
449
470
        if self.settings['category'][y] not in [-1]+self.settings['expanded']:
450
471
          dialog_x.set_no_show_all(True)
451
472
          dialog_entry.set_no_show_all(True)
 
473
          dialog_progress.set_no_show_all(True)
452
474
          dialog_details.set_no_show_all(True)
453
475
        
454
476
        y+=1
503
525
        #Put the widgets in the table
504
526
        dialog_table.attach(dialog_x,0,1,y,(y+1),\
505
527
          xoptions=gtk.SHRINK,yoptions=gtk.SHRINK)
506
 
        dialog_table.attach(dialog_expander,1,3,y,(y+1),\
 
528
        dialog_table.attach(dialog_expander,1,4,y,(y+1),\
507
529
          yoptions=gtk.SHRINK)
508
 
        dialog_table.attach(dialog_details,3,4,y,(y+1),\
 
530
        dialog_table.attach(dialog_details,4,5,y,(y+1),\
509
531
          xoptions=gtk.SHRINK,yoptions=gtk.SHRINK)
510
532
        if num_items > 0:
511
533
          dialog_table.attach(dialog_vsep,1,2,y+1,(y+1+num_items),\
523
545
    
524
546
    if len(self.settings['items'])==0:
525
547
      #If # items is 0, make the button take up all the width
526
 
      dialog_table.attach(self.dialog_add,0,4,y,(y+1),\
 
548
      dialog_table.attach(self.dialog_add,0,5,y,(y+1),\
527
549
        yoptions=gtk.SHRINK)
528
550
    
529
551
    else:
530
552
      #Otherwise, just add it normally; center aligned
531
 
      dialog_table.attach(self.dialog_add,0,4,y,(y+1),\
 
553
      dialog_table.attach(self.dialog_add,0,5,y,(y+1),\
532
554
        xoptions=gtk.SHRINK,yoptions=gtk.SHRINK)
533
555
    
534
556
    #Put the table in the dialog
686
708
      func(*args)
687
709
  
688
710
  #Edit the details of an item
689
 
  def edit_details(self,num):
 
711
  def edit_details(self, num, edit_progress=False):
690
712
    if type(num)==gtk.Button:
691
713
      num = num.iterator
692
714
    
759
781
    progress_spin = gtk.SpinButton(progress_adj,1,0)
760
782
    progress_spin.iterator = num
761
783
    progress_spin.connect('focus-out-event',self.spin_focusout)
 
784
    if edit_progress == True:
 
785
      progress_spin.grab_focus()
762
786
    
763
787
    #Pack the widgets to the HBox
764
788
    progress_hbox.pack_start(progress_label,False)
792
816
    widget.show_all()
793
817
    self.clear_dialog()
794
818
    self.add_to_dialog(widget)
795
 
    ok_button.grab_focus()
 
819
    if not edit_progress:
 
820
      ok_button.grab_focus()
796
821
  
797
822
  #When a RadioButton from the edit details dialog has been selected
798
823
  def radio_selected(self,widget):
1333
1358
    
1334
1359
    #Please, for your own sake, do not write code like this next section.
1335
1360
    i = 0
1336
 
    #print 'list of items: ' + str(list_of_items)
1337
1361
    for item_category in self.settings['category']:
1338
1362
      if i not in list_of_items:
1339
1363
        #print '%s not in list_of_items:' % i
1390
1414
  def confirm_check(self, button):
1391
1415
    self.settings[button.key] = not button.get_active()
1392
1416
 
 
1417
#A gtk.Button that displays and changes an item's progress
 
1418
class ProgressButton(gtk.Button):
 
1419
  def __init__(self, applet, Id):
 
1420
    self.applet = applet
 
1421
    self.settings = applet.settings
 
1422
    self.Id = Id
 
1423
    gtk.Button.__init__(self)
 
1424
    
 
1425
    self.surface = None
 
1426
    self.pixbuf = None
 
1427
    self.conn = None
 
1428
    self.conn2 = None
 
1429
  
 
1430
    #Set up the icon
 
1431
    progress = self.settings['progress'][self.Id]
 
1432
    self.surface = icon.icon2(self.settings, applet.color, self.surface, \
 
1433
      progress)
 
1434
    self.pixbuf = surface_to_pixbuf(self.surface)
 
1435
    image = gtk.image_new_from_pixbuf(self.pixbuf)
 
1436
    self.set_image(image)
 
1437
    
 
1438
    #For looks
 
1439
    self.set_relief(gtk.RELIEF_NONE)
 
1440
    
 
1441
    #Connect to changes in color or items' progress
 
1442
    self.settings.connect('color', self.update)
 
1443
    
 
1444
    #Connect to the scroll event
 
1445
    self.conn = self.connect('scroll-event', self.scroll)
 
1446
    self.conn2 = self.connect('clicked', \
 
1447
      lambda *a: applet.edit_details(self.Id, True))
 
1448
    
 
1449
    #Set the tooltip: X% done
 
1450
    self.set_tooltip_text(str(int(progress)) + '% done')
 
1451
  
 
1452
  def update(self, *args):
 
1453
    #Reset up the icon
 
1454
    progress = self.settings['progress'][self.Id]
 
1455
    self.surface = icon.icon2(self.settings, applet.color, self.surface, \
 
1456
      progress)
 
1457
    self.pixbuf = surface_to_pixbuf(self.surface)
 
1458
    image = gtk.image_new_from_pixbuf(self.pixbuf)
 
1459
    self.set_image(image)
 
1460
    
 
1461
    #Reset the tooltip
 
1462
    self.set_tooltip_text(str(int(progress)) + '% done')
 
1463
  
 
1464
  def scroll(self, widget, event):
 
1465
    #Scrolling up
 
1466
    if event.direction == gtk.gdk.SCROLL_UP:
 
1467
      #Increase percentage
 
1468
      list_of_progress = []
 
1469
      y = 0
 
1470
      for progress in self.settings['progress']:
 
1471
        if y == self.Id:
 
1472
          if progress + 5 >= 100:
 
1473
            list_of_progress.append(100)
 
1474
          else:
 
1475
            list_of_progress.append(progress + 5)
 
1476
        
 
1477
        else:
 
1478
          list_of_progress.append(progress)
 
1479
        y += 1
 
1480
      
 
1481
      self.settings['progress'] = list_of_progress
 
1482
      self.update()
 
1483
    
 
1484
    #Scrolling down
 
1485
    elif event.direction == gtk.gdk.SCROLL_DOWN:
 
1486
      #Decrease percentage
 
1487
      list_of_progress = []
 
1488
      y = 0
 
1489
      for progress in self.settings['progress']:
 
1490
        if y == self.Id:
 
1491
          if progress - 5 <= 0:
 
1492
            list_of_progress.append(0)
 
1493
          else:
 
1494
            list_of_progress.append(progress - 5)
 
1495
        
 
1496
        else:
 
1497
          list_of_progress.append(progress)
 
1498
        y += 1
 
1499
      
 
1500
      self.settings['progress'] = list_of_progress
 
1501
      self.update()
 
1502
  
 
1503
  #Why does this not work the way it should???
 
1504
  def disconn(self):
 
1505
    self.settings.disconnect('color', self.update)
 
1506
    for x in dir(self):
 
1507
      del x
 
1508
    del self
 
1509
 
1393
1510
if __name__ == '__main__':
1394
1511
  awn.init(sys.argv[1:])
1395
1512
  applet = App(awn.uid,awn.orient,awn.height)