2
# -*- coding: utf-8 -*-
4
# Copyright (c) 2007 Randal Barlow <im.tehk at gmail.com>
6
# This library is free software; you can redistribute it and/or
7
# modify it under the terms of the GNU Lesser General Public
8
# License as published by the Free Software Foundation; either
9
# version 2 of the License, or (at your option) any later version.
11
# This library is distributed in the hope that it will be useful,
12
# but WITHOUT ANY WARRANTY; without even the implied warranty of
13
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
# Lesser General Public License for more details.
16
# You should have received a copy of the GNU Lesser General Public
17
# License along with this library; if not, write to the
18
# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19
# Boston, MA 02111-1307, USA.
34
class App (awn.AppletSimple):
37
def __init__ (self, uid, panel_id):
39
Creating the applet's core
42
screen_hieght = gtk.gdk.screen_height()
43
if screen_hieght >= 901:
44
self.screen_hieght = int(screen_hieght * 0.4)
45
if screen_hieght <= 900:
46
self.screen_hieght = int(screen_hieght * 0.5)
47
if screen_hieght <= 700:
48
self.screen_hieght = int(screen_hieght * 0.55)
50
self.location = location.replace('mimenu.py','')
51
self.location_icon = self.location + '/icons/icon.svg'
52
awn.AppletSimple.__init__ (self, "mimenu", uid, panel_id)
53
self.height = self.get_size()
54
self.set_icon_name('gnome-main-menu')
56
self.set_tooltip_text("Main Menu Applet")
57
self.dialog = awn.Dialog (self)
58
self.theme = gtk.icon_theme_get_default()
59
self.popup_menu = self.create_default_menu()
60
render = gtk.CellRendererPixbuf()
61
cell1 = gtk.CellRendererText()
62
cell2 = gtk.CellRendererText()
63
cell2.set_property('xalign', 1.0)
64
column1 = gtk.TreeViewColumn("==1==", render)
65
column1.add_attribute(render, 'pixbuf', 0)
66
column2 = gtk.TreeViewColumn("==2==", cell1,text=1)
67
tree1 = gtk.TreeView()
68
tree1.set_size_request(200, -1)
69
tree1.set_headers_visible (0)
70
tree1.append_column(column1)
71
tree1.append_column(column2)
72
lst1,self.objlist1 = menus.get_menus(menus.data.MENUROOT,
73
root2=menus.data.SYSTEMMENUROOT)
74
model = menus.set_model(tree1,lst1,self.theme,self.location_icon)
75
tree1.connect('cursor_changed', self.treeclick,
76
tree1,self.objlist1,False)
77
tree1.set_model(model)
79
render = gtk.CellRendererPixbuf()
80
cell1 = gtk.CellRendererText()
81
cell2 = gtk.CellRendererText()
82
cell2.set_property('xalign', 1.0)
83
column1 = gtk.TreeViewColumn("==1==", render)
84
column1.add_attribute(render, 'pixbuf', 0)
85
column2 = gtk.TreeViewColumn("==2==", cell1,text=1)
86
tree2 = gtk.TreeView()
87
tree2.set_size_request(200, -1)
88
tree2.set_headers_visible (0)
89
tree2.append_column(column1)
90
tree2.append_column(column2)
91
lst2,self.objlist2 = menus.get_menus(menus.data.MENUROOT)
92
model,self.objlist3 = menus.get_places(self.theme)
93
tree2.set_model(model)
94
tree2.connect("button-press-event", keyboard.tree2faux,
95
self.treeclick,tree2,self.objlist2)
97
entry.set_size_request(-1,28)
98
search_button = gtk.Button(stock="gtk-find")
102
swindow = gtk.ScrolledWindow()
103
swindow.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
104
swindow.set_size_request(-1, self.screen_hieght)
105
hbox2.pack_start(entry,expand=False, fill=False, padding=0)
106
hbox2.pack_end(search_button,expand=False, fill=False, padding=0)
107
vbox.pack_start(tree1)
108
vbox.pack_end(hbox2,expand=False, fill=False, padding=0)
110
hbox.pack_start(vbox)
113
self.dialog.add(hbox)
114
self.connect("button-press-event", self.button_press)
115
self.dialog.props.hide_on_unfocus = True
116
entry.connect("activate",self.search)
117
search_button.connect("clicked",self.search)
118
tree1.connect("key-press-event",keyboard.navigate,tree2,1)
119
tree2.connect("key-press-event",keyboard.navigate,tree1,2)
120
tree2.connect("row-activated",keyboard.tree2activated,
121
self.treeclick,tree2,self.objlist2)
122
tree2.set_hover_selection(True)
127
def search(self,widget):
128
test = pathfinder.exists(self.entry.get_text())
129
if test[0] == True and test[1] != None:
130
subprocess.Popen([test[1]], shell=False)
133
subprocess.Popen(["tracker-search-tool", self.entry.get_text()],
135
except OSError:#Probably tracker not installed
136
dialog = gtk.MessageDialog(None, gtk.DIALOG_DESTROY_WITH_PARENT, \
137
gtk.MESSAGE_ERROR, gtk.BUTTONS_CLOSE, "You need Tracker " + \
138
"installed to search.\nInstall it by using your package " + \
139
"manager or downloading from http://projects.gnome.org/tracker/")
140
dialog.set_title("Error")
141
dialog.set_icon_name(gtk.STOCK_DIALOG_ERROR)
145
def button_press(self, widget, event):
146
if event.button == 1:
147
if self.dialog.flags() & gtk.VISIBLE:
150
self.tree1.set_cursor((self.objlist1.__len__()-1,0),None,False)
151
self.dialog.show_all()
152
if "placesmodel" in self.__dict__:pass
153
else:self.placesmodel,self.objlist3 = menus.get_places(self.theme)
154
self.tree2.set_model(self.placesmodel)
155
self.tree1.grab_focus()
156
elif event.button == 3:
157
self.popup_menu.popup(None, None, None, event.button, event.time)
159
def treeclick(self,widget,tree,obj,toggle,t2act=False):
161
this method is activated when tree1 is clicked.
162
It fills tree2 with a model from the selected tree1 row
164
selection = tree.get_selection()
165
selection.set_mode('single')
167
selection.select_path(1)
168
selection.select_path(0)
169
model, iter = selection.get_selected()
170
try:name = model.get_value(iter,1)
176
if obj[name][0] == 1:
177
command = obj[name][1]
178
if '%' in command:command = command[:command.index('%')]
179
subprocess.Popen([command], shell=True)
181
if obj[name][0] == 2:
182
lst,self.objlist2 = menus.get_menus(obj[name][1])
183
model = menus.set_model(self.tree1,lst,self.theme,
185
self.tree2.set_cursor_on_cell((0,0), focus_column=None,
188
self.tree2.set_model(model)
189
self.tree2.set_cursor_on_cell((0,0), focus_column=None,
193
if self.objlist3[name][0] == 0:
194
print self.objlist3[name][1].replace('file://','')
195
subprocess.Popen(["xdg-open",
196
self.objlist3[name][1].replace('file://','')],
200
if obj[name][0] == 4:
201
if "placesmodel" in self.__dict__:pass
202
else:self.placesmodel,self.objlist3 = \
203
menus.get_places(self.theme)
204
self.tree2.set_model(self.placesmodel)
207
if __name__ == "__main__":
208
awn.init (sys.argv[1:])
209
applet = App (awn.uid, awn.panel_id)
210
awn.embed_applet (applet)