Pull to refresh

Totem Gnome Applet

Reading time 6 min
Views 988
В предыдущем посте , я описывал создание простейшего апплета панели Gnome. В этом посте хотелось бы продемонстрировать апплет взаимодействующий с видеопроигрывателем Totem. Данный апплет будет представлять из себя небольшое приложение с 4 кнопками и надписью, у кнопок будет следующая функцианальность: воспроизведение, паузу, воспроизведение предыдущего и следующего.

Код апплета:
Copy Source | Copy HTML
  1. #!/usr/bin/env python
  2.  
  3. import sys
  4. import gtk
  5. import pygtk
  6. import subprocess
  7. import gnomeapplet
  8.  
  9. def factory(applet, iid):
  10.     button = gtk.Button("")
  11.     image = gtk.Image()
  12.     image.set_from_stock("gtk-media-previous",gtk.ICON_SIZE_BUTTON)
  13.     button.set_image(image)
  14.     button.connect("clicked",previous_clicked)
  15.     hbox.add(button)
  16.  
  17.     button = gtk.Button("")
  18.     image = gtk.Image()
  19.     image.set_from_stock("gtk-media-play",gtk.ICON_SIZE_BUTTON)
  20.     button.set_image(image)
  21.     button.connect("clicked",play_clicked)
  22.     hbox.add(button)
  23.  
  24.     button = gtk.Button("")
  25.     image = gtk.Image()
  26.     image.set_from_stock("gtk-media-pause",gtk.ICON_SIZE_BUTTON)
  27.     button.set_image(image)
  28.     button.connect("clicked",pause_clicked)
  29.     hbox.add(button)
  30.  
  31.     button = gtk.Button("")
  32.     image = gtk.Image()
  33.     image.set_from_stock("gtk-media-next",gtk.ICON_SIZE_BUTTON)
  34.     button.set_image(image)
  35.     button.connect("clicked",next_clicked)
  36.     hbox.add(button)
  37.  
  38.     hbox = gtk.HBox()
  39.     label = gtk.Label("Gnome player:")
  40.     hbox.add(label)
  41.  
  42.     applet.add(hbox)
  43.     applet.show_all()
  44.     return True
  45.  
  46. def previous_clicked(event):
  47.     subprocess.Popen(("totem","--previous"))
  48.  
  49. def play_clicked(event):
  50.     subprocess.Popen(("totem","--play"))
  51.  
  52. def pause_clicked(event):
  53.     subprocess.Popen(("totem","--pause"))
  54.  
  55. def next_clicked(event):
  56.     subprocess.Popen(("totem","--next"))
  57.  
  58. if len(sys.argv) == 2:
  59.     if sys.argv[1] == "run-in-window":
  60.         main_window = gtk.Window(gtk.WINDOW_TOPLEVEL)
  61.         main_window.set_title("Totem Applet")
  62.         main_window.connect("destroy", gtk.main_quit)
  63.         app = gnomeapplet.Applet()
  64.         factory(app, None)
  65.         app.reparent(main_window)
  66.         main_window.show_all()
  67.         gtk.main()
  68.         sys.exit()
  69.  
  70. gnomeapplet.bonobo_factory("OAFIID:GNOME_TotemApplet_Factory",
  71.                                      gnomeapplet.Applet.__gtype__,
  72.                                      "simple remote control", "1.0", factory)

Здесь у нас контейнером всех элементов выступает элемент — HBox, содержащий в себе надпись label, и 4 кнопки — button — воспроизведение, пауза и т.д. За описанием контейнера идет описание 4-ех событий — нажатия на наши кнопки, описание окна, и непосредственно регистрация нашего апплета.
Файл .server:
Copy Source | Copy HTML
  1. <oaf_info>
  2.        <oaf_server iid="OAFIID:GNOME_TotemApplet_Factory"
  3.                    type="exe" location="/home/totemapplet.py">
  4.  
  5.                <oaf_attribute name="repo_ids" type="stringv">
  6.                        <item value="IDL:Bonobo/GenericFactory:1.0"/>
  7.                        <item value="IDL:Bonobo/Unknown:1.0"/>
  8.                </oaf_attribute>
  9.                <oaf_attribute name="name" type="string" value="Totem Applet"/>
  10.                <oaf_attribute name="description" type="string" value="Simple remote control"/>
  11.        </oaf_server>
  12.  
  13.        <oaf_server iid="OAFIID:GNOME_TotemApplet"
  14.                    type="factory" location="OAFIID:GNOME_TotemApplet_Factory">
  15.  
  16.                <oaf_attribute name="repo_ids" type="stringv">
  17.                        <item value="IDL:GNOME/Vertigo/PanelAppletShell:1.0"/>
  18.                        <item value="IDL:Bonobo/Control:1.0"/>
  19.                        <item value="IDL:Bonobo/Unknown:1.0"/>
  20.                </oaf_attribute>
  21.                <oaf_attribute name="name" type="string" value="Totem Applet"/>
  22.                <oaf_attribute name="description" type="string" value="Simple remote control"/>
  23.                <oaf_attribute name="panel:category" type="string" value="Utility"/>
  24.        </oaf_server>
  25.        </oaf_info>

После того как проделано вышеописанное, нужно проделать следующие:
Копируем файл .server в /usr/lib/bonobo/servers/: cp /home/totemapplet.server /usr/lib/bonobo/servers/
Делаем наш апплет иполняемым: chmod +x totemapplet.py
Добавляем на панель и наслаждаемся.
Tags:
Hubs:
+6
Comments 3
Comments Comments 3

Articles