1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
# -*- coding: utf-8 -*-
import gtk
try:
# we don't want to add dependency to rpm, but if we have it, we can use it
import rpm
except:
rpm = None
def gui_info_dialog ( message, parent_dialog,
message_type=gtk.MESSAGE_INFO,
widget=None, page=0, broken_widget=None ):
dialog = gtk.MessageDialog( parent_dialog,
gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT,
message_type, gtk.BUTTONS_OK,
message )
dialog.set_markup(message)
if widget != None:
if isinstance (widget, gtk.CList):
widget.select_row (page, 0)
elif isinstance (widget, gtk.Notebook):
widget.set_current_page (page)
if broken_widget != None:
broken_widget.grab_focus ()
if isinstance (broken_widget, gtk.Entry):
broken_widget.select_region (0, -1)
if parent_dialog:
dialog.set_position (gtk.WIN_POS_CENTER_ON_PARENT)
dialog.set_transient_for(parent_dialog)
else:
dialog.set_position (gtk.WIN_POS_CENTER)
ret = dialog.run ()
dialog.destroy()
return ret
def gui_error_message ( message, parent_dialog=None,
message_type=gtk.MESSAGE_ERROR,
widget=None, page=0, broken_widget=None ):
dialog = gtk.MessageDialog( parent_dialog,
gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT,
message_type, gtk.BUTTONS_OK,
message )
if parent_dialog:
dialog.set_position (gtk.WIN_POS_CENTER_ON_PARENT)
dialog.set_transient_for(parent_dialog)
else:
dialog.set_position (gtk.WIN_POS_CENTER)
ret = dialog.run ()
dialog.destroy()
return ret
def gui_question_dialog ( message, parent_dialog=None,
message_type=gtk.MESSAGE_QUESTION,
widget=None, page=0, broken_widget=None ):
dialog = gtk.MessageDialog( parent_dialog,
gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT,
message_type, gtk.BUTTONS_YES_NO,
message )
if parent_dialog:
dialog.set_position (gtk.WIN_POS_CENTER_ON_PARENT)
dialog.set_transient_for(parent_dialog)
else:
dialog.set_position (gtk.WIN_POS_CENTER)
ret = dialog.run ()
dialog.destroy()
return ret
def get_icon_for_package(theme,package):
#print package
try:
return theme.load_icon(package, 22, gtk.ICON_LOOKUP_USE_BUILTIN)
except:
# try to find icon filename by manually
if not rpm:
return None
ts = rpm.TransactionSet()
mi = ts.dbMatch( 'name', package )
possible_icons = []
icon_filename = ""
filenames = ""
for h in mi:
filenames = h['filenames']
for filename in filenames:
# add check only for last 4 chars
if filename.rfind(".png") != -1:
possible_icons.append(filename)
if filename.rfind(".desktop") != -1:
#print filename
desktop_file = open(filename, 'r')
lines = desktop_file.readlines()
for line in lines:
if line.find("Icon=") != -1:
#print line[5:-1]
icon_filename = line[5:-1]
break
desktop_file.close()
# .dektop file found
for filename in h['filenames']:
if filename.rfind("%s.png" % icon_filename) != -1:
#print filename
icon_filename = filename
break
#we didn't find the .desktop file
else:
for filename in possible_icons:
if filename.rfind("%s.png" % package):
# return the first possible filename
icon_filename = filename
break
if icon_filename:
break
if icon_filename:
#print "icon created form %s" % icon_filename
return gtk.gdk.pixbuf_new_from_file_at_size(icon_filename,22,22)
else:
return None
|