summaryrefslogtreecommitdiff
path: root/qt-recordmydesktop/src/rmdTrayIcon.py
diff options
context:
space:
mode:
Diffstat (limited to 'qt-recordmydesktop/src/rmdTrayIcon.py')
-rw-r--r--qt-recordmydesktop/src/rmdTrayIcon.py331
1 files changed, 331 insertions, 0 deletions
diff --git a/qt-recordmydesktop/src/rmdTrayIcon.py b/qt-recordmydesktop/src/rmdTrayIcon.py
new file mode 100644
index 0000000..b9a3bd0
--- /dev/null
+++ b/qt-recordmydesktop/src/rmdTrayIcon.py
@@ -0,0 +1,331 @@
+#/******************************************************************************
+#* qt-recordMyDesktop *
+#*******************************************************************************
+#* *
+#* Copyright (C) 2007 John Varouhakis *
+#* *
+#* *
+#* This program is free software; you can redistribute it and/or modify *
+#* it under the terms of the GNU General Public License as published by *
+#* the Free Software Foundation; either version 2 of the License, or *
+#* (at your option) any later version. *
+#* *
+#* This program is distributed in the hope that it will be useful, *
+#* but WITHOUT ANY WARRANTY; without even the implied warranty of *
+#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+#* GNU General Public License for more details. *
+#* *
+#* You should have received a copy of the GNU General Public License *
+#* along with this program; if not, write to the Free Software *
+#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
+#* *
+#* *
+#* *
+#* For further information contact me at johnvarouhakis@gmail.com *
+#******************************************************************************/
+
+
+from PyQt4 import QtGui,QtCore
+import locale, gettext
+import rmdConfig
+def _(s):
+ return QtCore.QString.fromUtf8(gettext.gettext(s))
+gettext.textdomain('qt-recordMyDesktop')
+gettext.bindtextdomain('qt-recordMyDesktop',rmdConfig.locale_install_dir)
+
+import rmdTrayPopup as iTP
+import rmdMonitor as imon
+import os,signal,popen2,fcntl
+
+#values struct:
+
+#0 fps
+#1 mouse
+#2 sound on/off
+#3 full
+#4 path
+#5 area
+#6 delay
+#7 channels
+#8 frequency
+#9 device
+#10 v_quality
+#11 s_quality
+#12 display
+#13 shared memory
+#14 drop-frames
+#15 shared threshold
+#16 quick subsampling
+
+
+class trayIcon(object):
+ #values=[15,0,0,1,os.path.join(os.getenv('HOME'),'out.ogg'),[-1,-1,-1,-1],0,
+ #1,22050,'hw:0,0',63,10,"$DISPLAY",0,1,75,1]
+ exit_status={
+ 0:_('Success'),
+ 1*256:_('Error while parsing the arguments.'),
+ 2*256:_('Initializing the encoder failed(either vorbis or theora)'),
+ 3*256:_('Could not open/configure sound card.'),
+ 4*256:_('Xdamage extension not present.'),
+ 5*256:_('Shared memory extension not present.'),
+ 6*256:_('Xfixes extension not present.'),
+ 7*256:_('XInitThreads failed.'),
+ 8*256:_('No $DISPLAY environment variable and none specified as argument.'),
+ 9*256:_('Cannot connect to Xserver.'),
+ 10*256:_('Color depth is not 24bpp.'),
+ 11*256:_('Improper window specification.'),
+ 12*256:_('Cannot attach shared memory to proccess.'),
+ 13*256:_('Cannot open file for writting.'),
+ 14*256:_('Cannot load the Jack library (dlopen/dlsym error on libjack.so).'),
+ 15*256:_('Cannot create new client.'),
+ 16*256:_('Cannot activate client.'),
+ 17*256:_('Port registration/connection failure.'),
+ 11:_('Segmentation Fault')
+ }
+
+
+ state=0#0 stopped,1 recording,2 paused
+ rmdPid=None
+ optionsOpen=[1]
+ reopen=0
+ timed_id=None
+
+ def __set_icon__(self,widget,icon):
+ widget.setIcon(QtGui.QIcon(self.__get_icon_location__(icon)))
+
+
+ def __buttonPress__(self,ActivationReason):
+ button=0
+ if ActivationReason==QtGui.QSystemTrayIcon.Trigger:
+ button=1
+ elif ActivationReason==QtGui.QSystemTrayIcon.Context:
+ button=3
+ #print button
+ if button==1 and self.state>=0:
+ if self.state == 0:
+ if self.optionsOpen[0]==1:
+ self.parent.hide()
+ self.optionsOpen[0]=0
+ self.reopen=1
+ self.__set_icon__(self.trayIcon,"stop")
+ self.state=1
+ self.__execRMD__()
+ elif self.state== 1:
+ self.__set_icon__(self.trayIcon,"start")
+ self.state=0
+ self.__stopRMD__()
+ elif self.state == 2 :
+ self.__set_icon__(self.trayIcon,"stop")
+ self.state=1
+ self.__pauseRMD__()
+
+
+ elif button == 3 and self.state>=0:
+ if self.state == 0:
+ pass
+ self.tray_popup.popupmenu.popup(QtGui.QCursor.pos())
+ elif self.state == 1:
+ self.__set_icon__(self.trayIcon,"pause")
+ self.state=2
+ self.__pauseRMD__()
+ elif self.state ==2:
+ self.__set_icon__(self.trayIcon,"stop")
+ self.state=1
+ self.__pauseRMD__()
+ def record_ext(self,button=None):
+ if self.state == 0:
+ if self.optionsOpen[0]==1:
+ self.parent.hide()
+ self.optionsOpen[0]=0
+ self.reopen=1
+ self.__set_icon__(self.trayIcon,"stop")
+ self.state=1
+ self.__execRMD__()
+
+ def __execRMD__(self):
+ self.parent.close_advanced()
+ self.parent.update()
+ self.execargs=["recordmydesktop","-o",'%s'%self.parent.values[4],
+ "-fps","%d"%self.parent.values[0]]
+ if self.parent.values[2]==False :
+ self.execargs.append("--no-sound")
+ if self.parent.values[1] == 1:
+ self.execargs.append("-dummy-cursor")
+ self.execargs.append("white")
+ elif self.parent.values[1] == 2:
+ self.execargs.append("-dummy-cursor")
+ self.execargs.append("black")
+ elif self.parent.values[1] == 3:
+ self.execargs.append("--no-cursor")
+
+ if self.parent.values[3] == 0:
+ self.execargs.append("--full-shots")
+ if self.parent.values[13] == 1:
+ self.execargs.append("--no-shared")
+ if self.parent.values[5][0]>0 :
+ self.execargs.append('-x')
+ self.execargs.append('%d'%self.parent.values[5][0])
+ if self.parent.values[5][1]>0:
+ self.execargs.append('-y')
+ self.execargs.append('%d'%self.parent.values[5][1])
+ if self.parent.values[5][2]>0 and self.parent.values[5][3]>0:
+ self.execargs.append('-width')
+ self.execargs.append('%d'%(self.parent.values[5][2]-self.parent.values[5][0]))
+ self.execargs.append('-height')
+ self.execargs.append('%d'%(self.parent.values[5][3]-self.parent.values[5][1]))
+ for i in range(4):
+ self.parent.values[5][i]=-1
+ if self.parent.values[6]>0:
+ self.execargs.append('-delay')
+ self.execargs.append('%d'%self.parent.values[6])
+ self.execargs.append('-channels')
+ self.execargs.append('%d'%self.parent.values[7])
+ self.execargs.append('-freq')
+ self.execargs.append('%d'%self.parent.values[8])
+ if self.parent.values[9]!='DEFAULT':
+ self.execargs.append('-device')
+ self.execargs.append('%s'%self.parent.values[9])
+ self.execargs.append('-v_quality')
+ self.execargs.append('%d'%self.parent.values[10])
+ self.execargs.append('-s_quality')
+ self.execargs.append('%d'%self.parent.values[11])
+ if self.parent.values[12] != "$DISPLAY":
+ self.execargs.append('-display')
+ self.execargs.append('%s'%self.parent.values[12])
+ if self.parent.values[16] == 0:
+ self.execargs.append('--quick-subsampling')
+ self.execargs.append('-workdir')
+ self.execargs.append('%s'%self.parent.values[17])
+ if self.parent.values[18] == 0:
+ self.execargs.append('--on-the-fly-encoding')
+ if self.parent.values[19] == 0:
+ self.execargs.append('--zero-compression')
+ if self.parent.values[20] == True:
+ self.execargs.append('--overwrite')
+ if self.parent.values[22] == True:
+ self.execargs.append('-use-jack')
+ portstring=""
+ for i in self.parent.values[23]:
+ portstring+=i+","
+ portstring=portstring.rstrip(",")
+ self.execargs.append(portstring)
+ #print execargs
+
+
+
+ self.childP=popen2.Popen3(self.execargs,"t")
+ flags = fcntl.fcntl(self.childP.childerr, fcntl.F_GETFL)
+ fcntl.fcntl(self.childP.childerr, fcntl.F_SETFL, flags | os.O_NONBLOCK)
+ self.rmdPid=self.childP.pid
+ self.timed_id=QtCore.QTimer(None)
+ self.timed_id.connect(self.timed_id,QtCore.SIGNAL("timeout()"),
+ self.__check_status__)
+ self.timed_id.start(1000)
+
+ def __exit_status_dialog(self,status):
+ #first try to write down a log for examination
+ try:
+ error_log=open(os.path.join(os.getenv("HOME"),"qt-recordMyDesktop-crash.log"),"w")
+ error_log.write("#This is the command given at initialization:\n")
+ for i in self.execargs:
+ error_log.write("%s "%i)
+ error_log.write("\n\n\n#recordMyDesktop stderror output:\n")
+ try:
+ for err_line in self.childP.childerr.readlines():
+ error_log.write(err_line)
+ except:
+ error_log.write("Couldn't write stderror of recordMyDesktop!\n")
+ self.childP.childerr.close()
+ except:
+ print "Couldn't write error log.\n"
+ self.dialog = QtGui.QWidget()
+ self.label1=None
+ try:
+ self.label1 = QtGui.QLabel("\t\t"+_("Recording is finished.\nrecordMyDesktop has exited with status")+
+ ": %d\n"%(status)+_("Description")+":%s\n"%(self.exit_status[int(status)]))
+ except:
+ self.label1 = QtGui.QLabel("\t\t"+_("Recording is finished.\nrecordMyDesktop has exited with uknown\nerror code")+": %d \n"%(status))
+ self.label1.setAlignment(QtCore.Qt.AlignHCenter)
+ self.dialogbutton = QtGui.QPushButton("Ok",self.dialog)
+ self.dialogbutton.connect(self.dialogbutton,QtCore.SIGNAL("clicked()"),self.dialog.close )
+ self.dialogLayout=QtGui.QVBoxLayout()
+ self.dialogLayout.addWidget(self.label1)
+ self.dialogLayout.addWidget(self.dialogbutton)
+
+ self.label1.show()
+ self.dialogbutton.show()
+ self.dialog.setLayout(self.dialogLayout)
+ self.dialog.resize(300,128)
+ self.dialog.show()
+
+ def __pauseRMD__(self):
+ os.kill(self.rmdPid,signal.SIGUSR1)
+
+ def __stopRMD__(self):
+ if self.timed_id!=None:
+ self.timed_id.stop()
+ self.timed_id=None
+ exit_ret=os.waitpid(self.rmdPid,os.WNOHANG)
+ if exit_ret[0] == 0:
+ os.kill(self.rmdPid,signal.SIGTERM)
+ self.state=-1
+ monitor=imon.rmdMonitor(self.childP.fromchild,self.rmdPid,self.parent)
+ self.state=0
+ else:
+ self.__exit_status_dialog(exit_ret[1])
+ self.parent.show()
+ self.rmdPid=None
+ if self.reopen==1:
+ self.optionsOpen[0]=1
+ self.reopen=0
+
+ #print exit_ret
+ def __check_status__(self):
+ if self.rmdPid!=None:
+ exit_ret=os.waitpid(self.rmdPid,os.WNOHANG)
+ if exit_ret[0] != 0:
+ self.state=0
+ self.__set_icon__(self.trayIcon,"start")
+ self.__exit_status_dialog(exit_ret[1])
+ self.rmdPid=None
+ if self.reopen==1:
+ self.parent.show()
+ self.optionsOpen[0]=1
+ self.reopen=0
+ self.timed_id.stop()
+ return False
+ else:
+ return True
+ else:
+ self.timed_id.stop()
+ return False
+ def __get_icon_location__(self,name):
+ if name=="start":
+ return "icons/rec1.png"
+ elif name=="stop":
+ return "icons/stop1.png"
+ elif name=="pause":
+ return "icons/pause1.png"
+
+ def __init__(self,parent):
+ self.parent=parent
+ self.trayIcon=QtGui.QSystemTrayIcon(None)
+ self.__set_icon__(self.trayIcon,"start")
+ self.tray_popup=iTP.TrayPopupMenu(self.parent,self.parent.values,self.optionsOpen)
+ self.trayIcon.connect(self.trayIcon,QtCore.SIGNAL("activated(QSystemTrayIcon::ActivationReason)"),self.__buttonPress__)
+ self.trayIcon.show()
+
+
+if __name__ == "__main__":
+ import sys
+
+ app=QtGui.QApplication(sys.argv)
+ app.values=rmdConfig.default_values
+ w = trayIcon(app)
+ app.exec_()
+
+
+
+
+
+
© All Rights Reserved