~ubuntu-branches/ubuntu/maverick/awn-extras-applets/maverick

« back to all changes in this revision

Viewing changes to applets/unmaintained/MiMenu/mimenu.py

  • Committer: Bazaar Package Importer
  • Author(s): Julien Lavergne
  • Date: 2010-08-29 14:29:52 UTC
  • mto: This revision was merged to the branch mainline in revision 21.
  • Revision ID: james.westby@ubuntu.com-20100829142952-rhvuetyms9bv5uu7
Tags: upstream-0.4.0+bzr1372
ImportĀ upstreamĀ versionĀ 0.4.0+bzr1372

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/usr/bin/python
2
 
# -*- coding: utf-8 -*-
3
 
 
4
 
# Copyright (c) 2007 Randal Barlow <im.tehk at gmail.com>
5
 
#
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.
10
 
#
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.
15
 
#
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.
20
 
 
21
 
import sys, os
22
 
import subprocess
23
 
import string
24
 
 
25
 
import pygtk
26
 
import gtk
27
 
from gtk import gdk
28
 
 
29
 
import awn
30
 
import menus
31
 
import pathfinder
32
 
import keyboard
33
 
 
34
 
class App (awn.AppletSimple):
35
 
    """
36
 
    """
37
 
    def __init__ (self, uid, panel_id):
38
 
        """
39
 
        Creating the applet's core
40
 
        """
41
 
        self.visible = False
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)
49
 
        location =  __file__
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')
55
 
        #TODO: i18n
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)
78
 
 
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)
96
 
        entry = gtk.Entry()
97
 
        entry.set_size_request(-1,28)
98
 
        search_button = gtk.Button(stock="gtk-find")
99
 
        hbox = gtk.HBox()
100
 
        hbox2 = gtk.HBox()
101
 
        vbox = gtk.VBox()
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)
109
 
        swindow.add(tree2)
110
 
        hbox.pack_start(vbox)
111
 
        hbox.add(swindow)
112
 
        hbox.show_all()
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)
123
 
        self.entry = entry
124
 
        self.tree1 = tree1
125
 
        self.tree2 = tree2
126
 
 
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)
131
 
        else:
132
 
            try:
133
 
                subprocess.Popen(["tracker-search-tool", self.entry.get_text()],
134
 
                                 shell=False)
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)
142
 
                dialog.run()
143
 
                dialog.destroy()
144
 
 
145
 
    def button_press(self, widget, event):
146
 
        if event.button == 1:
147
 
            if self.dialog.flags() & gtk.VISIBLE:
148
 
                self.dialog.hide()
149
 
            else:
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)
158
 
 
159
 
    def treeclick(self,widget,tree,obj,toggle,t2act=False):
160
 
        """
161
 
        this method is activated when tree1 is clicked.
162
 
        It fills tree2 with a model from the selected tree1 row
163
 
        """
164
 
        selection = tree.get_selection()
165
 
        selection.set_mode('single')
166
 
        if t2act == True:
167
 
            selection.select_path(1)
168
 
            selection.select_path(0)
169
 
        model, iter = selection.get_selected()
170
 
        try:name = model.get_value(iter,1)
171
 
        except:name=None
172
 
        if name != None:
173
 
            try:
174
 
                if toggle == True:
175
 
                    obj = self.objlist2
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)
180
 
                    self.dialog.hide()
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,
184
 
                                            self.location_icon)
185
 
                    self.tree2.set_cursor_on_cell((0,0), focus_column=None,
186
 
                                                  focus_cell=None,
187
 
                                                  start_editing=False)
188
 
                    self.tree2.set_model(model)
189
 
                    self.tree2.set_cursor_on_cell((0,0), focus_column=None,
190
 
                                                  focus_cell=None,
191
 
                                                  start_editing=False)
192
 
            except KeyError:
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://','')],
197
 
                                     shell=False)
198
 
                    self.dialog.hide()
199
 
            try:
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)
205
 
            except:pass
206
 
 
207
 
if __name__ == "__main__":
208
 
    awn.init                      (sys.argv[1:])
209
 
    applet = App                  (awn.uid, awn.panel_id)
210
 
    awn.embed_applet              (applet)
211
 
    applet.show_all               ()
212
 
    gtk.main                      ()