- Código: Selecionar todos
#!/usr/bin/env python
#-*- coding: ISO-8859-1 -*-
#
# Uma criação de Mrk3004 - Vinycius Maia
# Versão: 1.0 | Revisão: 0.5.3
#
# Este é um software de código livre
# e pode ser modificado de qualquer maneira
# desde que sejam mantidos os devidos créditos
# ao autor do script. Faça bom uso.
#
#
# Class TrayIcon: >> Icone de Notificação
#
# - clickEvent >> Ações do Click
# - update >> Atualiza Icone
# - getVolume >> Pega o volume atual (float)
#
# Class TrayTrackGTK: >> Popup no icone de notificação
#
# - criar >> Cria janela
# - getCordenadasTrayIcon >> Pega cordenadas do Tray
# - fechar >> Fecha janela
# - TrackMotion_event >> Ajusta volume ao mover o track
#
import gtk
import pygtk
import gobject
import egg.trayicon
import subprocess
import os
# Configuração Geral
Mixer = "ossmix" # Programa controlador do mixer
Controle = "vol" # Mixer Controlável
VolumeMaximo = 100 # Volume máximo para o mixer selecionado
VolumeMinimo = 30 # Volume mínimo para o mixer selecionado
TrackText = True # Mostrar Texto na popup do tray
TrackWidth = 40 # Tamanho horizontal da popup
TrackHeight = 150 # Tamanho vertical da popup
class TrayIcon():
def __init__(self):
self.trayicon = egg.trayicon.TrayIcon("")
self.icone = gtk.Image()
self.icone_atual = ""
self.tray_eventbox = gtk.EventBox()
self.tray_eventbox.add(self.icone)
self.tray_eventbox.connect("button_press_event", self.clickEvent)
self.trayicon.add(self.tray_eventbox)
self.trayicon.show_all()
self.TrayTrackPopup = TrayTrackGTK()
self.TrayTrackPopup_exists = False
self.update()
def clickEvent(self, widget, event):
# Fix para a amplificação dos mixers
#subprocess.call([Mixer, "video", "--", "120"])
#subprocess.call([Mixer, "mono", "--", "120"])
#subprocess.call([Mixer, "speaker", "--", "120"])
#subprocess.call([Mixer, "pcm", "--", "120"])
#subprocess.call([Mixer, "igain", "--", "120"])
#subprocess.call([Mixer, "vmix0.pcm1", "--", "120"])
#subprocess.call([Mixer, "vmix0.pcm2", "--", "120"])
#subprocess.call([Mixer, "vmix0.pcm3", "--", "120"])
#subprocess.call([Mixer, "vmix0.pcm4", "--", "120"])
#subprocess.call([Mixer, "vmix0.pcm5", "--", "120"])
#subprocess.call([Mixer, "vmix0-outvol", "--", "120"])
#subprocess.call([Mixer, "vmix0-invol", "--", "120"])
if event.button == 1:
if self.TrayTrackPopup_exists:
self.TrayTrackPopup.fechar()
self.TrayTrackPopup_exists = False
else:
self.TrayTrackPopup.criar()
self.TrayTrackPopup_exists = True
#elif event.button == 3:
# subprocess.Popen(["notify-send", "Controle de Volume para OSS4", "Uma criação de Mrk3004 - Vinycius Maia"])
self.update()
def update(self):
volume = self.getVolume()
if VolumeMaximo <= 35:
if volume == VolumeMinimo:
status = "muted"
elif volume > (VolumeMaximo /2) +7:
status = "high"
elif volume >= (VolumeMaximo /2):
status = "medium"
elif volume > VolumeMinimo:
status = "low"
else:
if volume == VolumeMinimo:
status = "muted"
elif volume > (VolumeMaximo /2) +30:
status = "high"
elif volume >= (VolumeMaximo /2):
status = "medium"
elif volume > VolumeMinimo:
status = "low"
if status != self.icone_atual:
self.icone.set_from_icon_name("audio-volume-"+status, 0)
self.icone_atual = status;
def getVolume(self):
process = subprocess.Popen([Mixer, Controle], stdout=subprocess.PIPE)
volume = float(process.communicate()[0].split()[-1].split(':')[0])
process.wait()
return volume
class TrayTrackGTK:
def criar(self):
# Cria Janela
self.scale_window = gtk.Window(type=gtk.WINDOW_POPUP)
# Tamanho
self.track_width = TrackWidth
self.track_height = TrackHeight
# Pegar Cordenadas da Tray
track_cordenadas = self.getCordenadasTrayIcon(voltray.icone,self.track_height,self.track_width)
# Colocar janela da cordenada
self.scale_window.move(track_cordenadas[0],track_cordenadas[1])
self.scale = gtk.VScale()
# Definições
self.scale.set_update_policy(gtk.UPDATE_CONTINUOUS)
self.scale.set_digits(1)
self.scale.set_value_pos(gtk.POS_TOP)
self.scale.set_draw_value(TrackText)
self.scale.set_inverted(True)
self.scale.set_range(VolumeMinimo, VolumeMaximo)
self.scale.set_size_request(self.track_width,self.track_height)
self.scale.set_value(voltray.getVolume())
# Linka os eventos
self.scale.connect("motion_notify_event", self.TrackMotion_event)
self.scale_window.add(self.scale)
# Mostra na tela
self.scale_window.show_all()
def getCordenadasTrayIcon(self,trayicon,track_height,windows_width):
track_cordenadas=trayicon.window.get_origin()
size=trayicon.window.get_size()
screen=trayicon.window.get_screen()
screen_height=screen.get_height()
if track_cordenadas[1] <= track_height:
y=track_cordenadas[1]+size[1]
else:
y=track_cordenadas[1]-track_height
msg_xy=(track_cordenadas[0],y)
return msg_xy
def fechar(self):
self.scale_window.destroy()
def TrackMotion_event(self,widget,event):
volume = int(self.scale.get_value())
if volume > 100:
subprocess.call([Mixer, Controle, "--", "100"])
elif volume < 0:
subprocess.call([Mixer, Controle, "--", "0"])
else:
subprocess.call([Mixer, Controle, "--", "%d" % volume])
voltray.update()
if __name__ == "__main__":
voltray = TrayIcon()
gtk.main()
Paste: http://paste.ubuntu.com/666498/
Agora tenho um desafio.... Como já devem saber que a egg.trayicon foi substituida por gtk.StatusIcon e, óbviamente se tornou obsoleta, o desafio é atualizar esse script... praticamente vou ter que recriar o applet rs
Mas esse ainda pode esperar um pouco, já que é só a fins de estudo mesmo rsrs