1 import gtk
, gobject
, os
2 from zeroinstall
.injector
import model
, writer
3 from gui
import policy
, pretty_size
5 def popup_menu(bev
, values
, fn
):
9 item
= gtk
.SeparatorMenuItem()
11 item
= gtk
.MenuItem(str(value
).capitalize())
12 item
.connect('activate', lambda item
, v
=value
: fn(v
))
15 menu
.popup(None, None, None, bev
.button
, bev
.time
)
17 rox_filer
= 'http://rox.sourceforge.net/2005/interfaces/ROX-Filer'
27 class ImplementationList(gtk
.ScrolledWindow
):
31 def __init__(self
, interface
):
32 gtk
.ScrolledWindow
.__init
__(self
, None, None)
33 self
.set_shadow_type(gtk
.SHADOW_IN
)
35 self
.model
= gtk
.ListStore(object, str, str, str,
36 gobject
.TYPE_BOOLEAN
, gobject
.TYPE_BOOLEAN
)
38 self
.tree_view
= gtk
.TreeView(self
.model
)
40 text
= gtk
.CellRendererText()
41 text_strike
= gtk
.CellRendererText()
42 toggle
= gtk
.CellRendererToggle()
44 stability
= gtk
.TreeViewColumn('Stability', text
, text
= STABILITY
)
46 for column
in (gtk
.TreeViewColumn('Version', text
, text
= VERSION
, strikethrough
= UNUSABLE
),
48 gtk
.TreeViewColumn('C', toggle
, active
= CACHED
),
49 gtk
.TreeViewColumn('Arch', text
, text
= ARCH
)):
50 self
.tree_view
.append_column(column
)
52 self
.add(self
.tree_view
)
54 def button_press(tree_view
, bev
):
55 if bev
.button
not in (1, 3):
57 pos
= tree_view
.get_path_at_pos(int(bev
.x
), int(bev
.y
))
61 impl
= self
.model
[path
][ITEM
]
63 upstream
= impl
.upstream_stability
or model
.testing
64 choices
= model
.stability_levels
.values()
68 if isinstance(new
, model
.Stability
):
69 impl
.user_stability
= new
71 impl
.user_stability
= None
72 writer
.save_interface(interface
)
74 popup_menu(bev
, ['Unset (%s)' % upstream
, None] + choices
,
76 elif bev
.button
== 3 and policy
.get_cached(impl
):
78 os
.spawnlp(os
.P_WAIT
, '0launch',
79 '0launch', rox_filer
, '-d',
80 policy
.get_implementation_path(impl
))
81 popup_menu(bev
, ['Open cached copy'], open)
82 self
.tree_view
.connect('button-press-event', button_press
)
84 def get_selection(self
):
85 return self
.tree_view
.get_selection()
87 def set_items(self
, items
):
90 new
= self
.model
.append()
91 self
.model
[new
][ITEM
] = item
92 self
.model
[new
][VERSION
] = item
.get_version()
93 self
.model
[new
][CACHED
] = policy
.get_cached(item
)
94 if item
.user_stability
:
95 self
.model
[new
][STABILITY
] = str(item
.user_stability
).upper()
97 self
.model
[new
][STABILITY
] = item
.upstream_stability
or \
99 self
.model
[new
][ARCH
] = item
.arch
or 'any'
100 self
.model
[new
][UNUSABLE
] = policy
.is_unusable(item
)