summaryrefslogtreecommitdiff
path: root/gtk-recordmydesktop
diff options
context:
space:
mode:
authoriovar <iovar@f606c939-3180-4ac9-a4b8-4b8779d57d0a>2006-09-23 07:09:36 +0000
committeriovar <iovar@f606c939-3180-4ac9-a4b8-4b8779d57d0a>2006-09-23 07:09:36 +0000
commit288e26ab518b03512bb2889c2b466d592c2eec3e (patch)
tree6e63c02d67d25a27e2f028d192ea655759e10be2 /gtk-recordmydesktop
parentddccb175869188b4090f468368d42fcd29363f7e (diff)
new interface
git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@63 f606c939-3180-4ac9-a4b8-4b8779d57d0a
Diffstat (limited to 'gtk-recordmydesktop')
-rwxr-xr-xgtk-recordmydesktop/gtk-recordMyDesktop4
-rw-r--r--gtk-recordmydesktop/rmdPrefsWidget.py112
-rw-r--r--gtk-recordmydesktop/rmdSelect.py18
-rwxr-xr-xgtk-recordmydesktop/rmdSelectThumb.py185
-rw-r--r--gtk-recordmydesktop/rmdSimple.py277
-rw-r--r--gtk-recordmydesktop/rmdTrayIcon.py105
-rw-r--r--gtk-recordmydesktop/rmdTrayPopup.py14
7 files changed, 590 insertions, 125 deletions
diff --git a/gtk-recordmydesktop/gtk-recordMyDesktop b/gtk-recordmydesktop/gtk-recordMyDesktop
index 61afcf1..69e309f 100755
--- a/gtk-recordmydesktop/gtk-recordMyDesktop
+++ b/gtk-recordmydesktop/gtk-recordMyDesktop
@@ -27,10 +27,10 @@
#* For further information contact me at johnvarouhakis@gmail.com *
#**********************************************************************************/
-import rmdTrayIcon
+import rmdSimple
def main():
- tr=rmdTrayIcon.trayIcon()
+ tr=rmdSimple.simpleWidget()
main()
diff --git a/gtk-recordmydesktop/rmdPrefsWidget.py b/gtk-recordmydesktop/rmdPrefsWidget.py
index 6ca4b3f..772d952 100644
--- a/gtk-recordmydesktop/rmdPrefsWidget.py
+++ b/gtk-recordmydesktop/rmdPrefsWidget.py
@@ -36,27 +36,27 @@ import os
class prefsWidget(object):
- labelStrings=[_('Frames Per Second'),_('Sound Recording'),_('Startup Delay(secs)'),
+ labelStrings=[_('Frames Per Second'),_(''),_('Startup Delay(secs)'),
_('Channels'),_('Frequency'),_('Device'),_('Video Quality'),_('Sound Quality'),
_('Display'),_('Mouse Cursor'),_('Full shots at every frame'),_('MIT-Shm extension'),
_('Drop Frames(encoder)'),_('Shared Threshold'),_('Quick Subsampling')]
mouseStrings=[_('Normal'),_('White'),_('Black'),_('None')]
stateStrings=[_('Enabled'),_('Disabled')]
- tabStrings=[_('Basic'),_('Sound'),_('Encoding'),_('Advanced')]
+ tabStrings=[_('Basic'),_('Sound'),_('Advanced')]
def destroy(self,Event=None):
self.values[0]=self.fpsSpinButton.get_value_as_int()
self.values[1]=self.mouseComboBox.get_active()
- self.values[2]=self.soundComboBox.get_active()
+ #self.values[2]=self.soundComboBox.get_active()
self.values[3]=self.fullComboBox.get_active()
- self.values[4]=self.pathEntry.get_text()
+ #self.values[4]=self.pathEntry.get_text()
#self.values[5]=self.are
self.values[6]=self.delaySpinButton.get_value_as_int()
self.values[7]=self.channelsSpinButton.get_value_as_int()
self.values[8]=self.freqSpinButton.get_value_as_int()
self.values[9]=self.deviceEntry.get_text().replace(' ','')
- self.values[10]=self.vidqSpinButton.get_value_as_int()
- self.values[11]=self.soundqSpinButton.get_value_as_int()
+ #self.values[10]=self.vidqSpinButton.get_value_as_int()
+ #self.values[11]=self.soundqSpinButton.get_value_as_int()
self.values[12]=self.displayEntry.get_text().replace(' ','')
self.values[13]=self.sharedComboBox.get_active()
self.values[14]=self.frdropComboBox.get_active()
@@ -72,25 +72,14 @@ class prefsWidget(object):
self.optionsOpen[0]=0
self.window.destroy()
- def __fileSelQuit__(self,Event=None):
- self.fileSel.destroy()
-
- def __fileSelOk__(self,Event=None):
- self.pathEntry.set_text(self.fileSel.get_filename())
- self.fileSel.destroy()
- def __fileSelect__(self,Event=None):
- self.fileSel = gtk.FileSelection(title=None)
- self.fileSel.ok_button.connect("clicked", self.__fileSelOk__)
- self.fileSel.cancel_button.connect("clicked", self.__fileSelQuit__)
- self.fileSel.set_filename(self.values[4])
- self.fileSel.show()
def __subWidgets__(self):
self.labels={}
self.boxes={}
self.labelbox={}
- for i in range(4):
+ #self.labelbox[0]=gtk.VBox(homogeneous=False, spacing=20)
+ for i in range(3):
self.labelbox[i]=gtk.VBox(homogeneous=False, spacing=20)
self.notebook = gtk.Notebook()
@@ -99,21 +88,21 @@ class prefsWidget(object):
self.fpsSpinButton= gtk.SpinButton(self.fpsAdjustment, climb_rate=0.5, digits=0)
- self.soundComboBox = gtk.combo_box_new_text()
- for i in range(2):
- self.soundComboBox.append_text(self.stateStrings[i])
- self.soundComboBox.set_active(self.values[2])
+ #self.soundComboBox = gtk.combo_box_new_text()
+ #for i in range(2):
+ #self.soundComboBox.append_text(self.stateStrings[i])
+ #self.soundComboBox.set_active(self.values[2])
self.delayAdjustment=gtk.Adjustment(value=self.values[6], lower=0,upper=10000, step_incr=1, page_incr=5, page_size=0)
self.delaySpinButton= gtk.SpinButton(self.delayAdjustment, climb_rate=0.5, digits=0)
- self.pathEntry= gtk.Entry(max=0)
- self.pathEntry.set_text(self.values[4])
- self.pathButton = gtk.Button(None,gtk.STOCK_SAVE_AS)
+ #self.pathEntry= gtk.Entry(max=0)
+ #self.pathEntry.set_text(self.values[4])
+ #self.pathButton = gtk.Button(None,gtk.STOCK_SAVE_AS)
- self.okButton=gtk.Button(None,gtk.STOCK_OK)
+ self.okButton=gtk.Button(None,gtk.STOCK_CLOSE)
- for i in range(3):
+ for i in xrange(0,3,2):
self.labels[i]=gtk.Label(self.labelStrings[i])
self.labels[i].set_justify(gtk.JUSTIFY_LEFT)
self.boxes[i]=gtk.HBox(homogeneous=False, spacing=0)
@@ -123,26 +112,27 @@ class prefsWidget(object):
self.boxes[3]=gtk.HBox(homogeneous=False, spacing=20)
self.labelbox[0].pack_start(self.boxes[3],expand=False,fill=False)
- placeholder2=gtk.Label("")
+ placeholder2=gtk.Label("\n\n\n\n\n\n")
placeholder2.show()
- self.labelbox[0].pack_start(placeholder2)
+ self.labelbox[0].pack_start(placeholder2,True,True)
self.boxes[4]=gtk.HBox(homogeneous=False, spacing=0)
self.labelbox[0].pack_end(self.boxes[4])
self.fpsSpinButton.show()
self.boxes[0].pack_end(self.fpsSpinButton,expand=False,fill=False)
- self.soundComboBox.show()
- self.boxes[1].pack_end(self.soundComboBox,expand=False,fill=False)
+ #self.soundComboBox.show()
+ #self.boxes[1].pack_end(self.soundComboBox,expand=False,fill=False)
self.delaySpinButton.show()
self.boxes[2].pack_end(self.delaySpinButton,expand=False,fill=False)
- self.pathEntry.show()
- self.boxes[3].pack_start(self.pathEntry,expand=False,fill=False)
- self.pathButton.show()
- self.boxes[3].pack_end(self.pathButton,expand=False,fill=False)
+ #self.pathEntry.show()
+ #self.boxes[3].pack_start(self.pathEntry,expand=False,fill=False)
+ #self.pathButton.show()
+ #self.boxes[3].pack_end(self.pathButton,expand=False,fill=False)
self.okButton.show()
- self.boxes[4].pack_start(self.okButton,expand=True,fill=True)
+ self.boxes[4].pack_end(self.okButton,expand=False,fill=False)
for i in range(5):
- self.boxes[i].show()
+ if i!=1:
+ self.boxes[i].show()
#sound page
for i in xrange(3,6):
self.labels[i]=gtk.Label(self.labelStrings[i])
@@ -172,24 +162,24 @@ class prefsWidget(object):
#encoding page
- for i in xrange(6,8):
- self.labels[i]=gtk.Label(self.labelStrings[i])
- self.labels[i].set_justify(gtk.JUSTIFY_LEFT)
- self.boxes[i+5]=gtk.HBox(homogeneous=False, spacing=0)
- self.boxes[i+5].pack_start(self.labels[i],expand=False,fill=False)
- self.labels[i].show()
- #self.boxes[i+5].show()
- self.labelbox[2].pack_start(self.boxes[i+5],expand=False,fill=False)
- self.vidqAdjustment=gtk.Adjustment(value=self.values[10], lower=0,upper=63, step_incr=1, page_incr=1, page_size=1)
- self.vidqSpinButton= gtk.SpinButton(self.vidqAdjustment, climb_rate=0.5, digits=0)
- self.boxes[11].pack_end(self.vidqSpinButton,expand=False,fill=False)
- self.vidqSpinButton.show()
- self.boxes[11].show()
- self.soundqAdjustment=gtk.Adjustment(value=self.values[11], lower=-1,upper=10, step_incr=1, page_incr=1, page_size=1)
- self.soundqSpinButton= gtk.SpinButton(self.soundqAdjustment, climb_rate=0.5, digits=0)
- self.boxes[12].pack_end(self.soundqSpinButton,expand=False,fill=False)
- self.soundqSpinButton.show()
- self.boxes[12].show()
+ #for i in xrange(6,8):
+ #self.labels[i]=gtk.Label(self.labelStrings[i])
+ #self.labels[i].set_justify(gtk.JUSTIFY_LEFT)
+ #self.boxes[i+5]=gtk.HBox(homogeneous=False, spacing=0)
+ #self.boxes[i+5].pack_start(self.labels[i],expand=False,fill=False)
+ #self.labels[i].show()
+ ##self.boxes[i+5].show()
+ #self.labelbox[2].pack_start(self.boxes[i+5],expand=False,fill=False)
+ #self.vidqAdjustment=gtk.Adjustment(value=self.values[10], lower=0,upper=63, step_incr=1, page_incr=1, page_size=1)
+ #self.vidqSpinButton= gtk.SpinButton(self.vidqAdjustment, climb_rate=0.5, digits=0)
+ #self.boxes[11].pack_end(self.vidqSpinButton,expand=False,fill=False)
+ #self.vidqSpinButton.show()
+ #self.boxes[11].show()
+ #self.soundqAdjustment=gtk.Adjustment(value=self.values[11], lower=-1,upper=10, step_incr=1, page_incr=1, page_size=1)
+ #self.soundqSpinButton= gtk.SpinButton(self.soundqAdjustment, climb_rate=0.5, digits=0)
+ #self.boxes[12].pack_end(self.soundqSpinButton,expand=False,fill=False)
+ #self.soundqSpinButton.show()
+ #self.boxes[12].show()
#misc page
for i in xrange(8,15):
@@ -199,7 +189,7 @@ class prefsWidget(object):
self.boxes[i+5].pack_start(self.labels[i],expand=False,fill=False)
self.labels[i].show()
#self.boxes[i+5].show()
- self.labelbox[3].pack_start(self.boxes[i+5],expand=False,fill=False)
+ self.labelbox[2].pack_start(self.boxes[i+5],expand=False,fill=False)
self.displayEntry= gtk.Entry(max=0)
self.displayEntry.set_text(self.values[12])
self.boxes[13].pack_end(self.displayEntry,expand=False,fill=False)
@@ -254,15 +244,15 @@ class prefsWidget(object):
self.boxes[19].show()
#append and show
- for i in range(4):
+ for i in range(3):
self.notebook.append_page(self.labelbox[i],gtk.Label(self.tabStrings[i]))
self.window.add(self.notebook)
- for i in range(4):
+ for i in range(3):
self.labelbox[i].show()
self.notebook.show()
def __makeCons__(self):
- self.pathButton.connect("clicked",self.__fileSelect__)
+ #self.pathButton.connect("clicked",self.__fileSelect__)
self.okButton.connect("clicked",self.destroy)
def __init__(self,values,optionsOpen):
@@ -276,7 +266,7 @@ class prefsWidget(object):
self.__makeCons__()
- self.window.set_size_request(288,384)
+ self.window.set_size_request(350,-1)
self.window.show()
def main(self):
diff --git a/gtk-recordmydesktop/rmdSelect.py b/gtk-recordmydesktop/rmdSelect.py
index 45dfb2f..cf03403 100644
--- a/gtk-recordmydesktop/rmdSelect.py
+++ b/gtk-recordmydesktop/rmdSelect.py
@@ -106,21 +106,7 @@ class GtkAreaSelector(gtk.Window):
self.area_return[1]=min(int(self.y1),int(self.y2))
self.area_return[2]=max(int(self.x1),int(self.x2))
self.area_return[3]=max(int(self.y1),int(self.y2))
- dialog = gtk.Dialog(title=None, parent=None, flags=0, buttons=None)
- label1 = gtk.Label("Recording area for the next session\n\t\t\tis set to:")
- dialog.vbox.pack_start(label1, True, True, 0)
- label1.show()
- label2 = gtk.Label("(%d,%d) - (%d,%d)\n"%(self.area_return[0],self.area_return[1],self.area_return[2],self.area_return[3]))
- dialog.vbox.pack_start(label2, True, True, 0)
- label2.show()
- button = gtk.Button(label=None, stock=gtk.STOCK_OK)
- dialog.vbox.pack_start(button, True, True, 0)
- def __destroy(button):
- dialog.destroy()
- button.connect("clicked", __destroy)
- button.show()
- dialog.set_size_request(300,128)
- dialog.show()
+ self.hide()
self.destroy()
return True
@@ -142,7 +128,7 @@ class GtkAreaSelector(gtk.Window):
self.queue_draw()
return True
- def delete_cb(self, widget):
+ def delete_cb(self, widget,Event=None):
pass
if __name__ == "__main__":
diff --git a/gtk-recordmydesktop/rmdSelectThumb.py b/gtk-recordmydesktop/rmdSelectThumb.py
new file mode 100755
index 0000000..74c2186
--- /dev/null
+++ b/gtk-recordmydesktop/rmdSelectThumb.py
@@ -0,0 +1,185 @@
+
+import gtk
+import gtk.gdk
+#from rmdSelect import *
+import gobject
+import gc
+
+class GtkThumbSelector(gtk.DrawingArea):
+ def __init__(self,area_return,hidden,update_interval=2000):
+ self.hidden=hidden
+ self.area_return=area_return
+ self.selecting=0
+ gtk.DrawingArea.__init__(self)
+ self.set_app_paintable(True)
+ #self.fullscreen()
+ self.connect("expose-event", self.expose_cb)
+ self.connect("button-press-event", self.button_press_cb)
+ self.connect("button-release-event", self.button_release_cb)
+ self.connect("motion-notify-event", self.motion_notify_cb)
+ #self.connect("delete-event", self.delete_cb)
+ self.connect("realize", self.realize_cb)
+ #root = gtk.gdk.get_default_root_window()
+ self.wroot = gtk.gdk.get_default_root_window()
+ (self.wwidth, self.wheight) = self.wroot.get_size()
+ ###############################################################
+
+ self.factor=1;
+ twidth=self.wwidth
+ while twidth>320 or self.factor<4:
+ twidth/=2
+ self.factor*=2
+ self.root=gtk.gdk.Image(gtk.gdk.IMAGE_NORMAL,self.wroot.get_visual(),self.wwidth/self.factor,self.wheight/self.factor)
+ #(width, height) = root.get_size()
+ sroot = self.wroot.get_image(0, 0, self.wwidth, self.wheight)
+ self.__subsample__(sroot,self.wwidth,self.wheight,self.root,self.factor)
+ #self.root = root.get_image(0, 0, width, height)
+ self.x1 = self.y1 = -1
+ self.x2 = self.y2 = -1
+ self.set_size_request(self.wwidth/self.factor,self.wheight/self.factor)
+ self.timed_id=gobject.timeout_add(update_interval,self.update_image)
+
+ def __subsample__(self,im1,w,h,im2,stride,x=0,y=0):
+ for i in xrange(y,h,stride):
+ for k in xrange(x,w,stride):
+ im2.put_pixel(k/stride,i/stride,im1.get_pixel(k,i))
+ def button_release_cb(self, widget, event):
+ if event.button == 1 and self.x1 >= 0 and widget==self:
+ self.selecting=0
+ self.x2 = event.x + 1
+ self.y2 = event.y + 1
+ # stop
+ if self.x1 <0: self.x1=0
+ if self.x2 <0: self.x2=0
+ if self.y1 <0: self.y1=0
+ if self.y2 <0: self.y2=0
+ if self.x1 >self.wwidth/self.factor: self.x1=self.wwidth/self.factor
+ if self.x2 >self.wwidth/self.factor: self.x2=self.wwidth/self.factor
+ if self.y1 >self.wheight/self.factor: self.y1=self.wheight/self.factor
+ if self.y2 >self.wheight/self.factor: self.y2=self.wheight/self.factor
+
+
+ self.area_return[0]=min(int(self.x1),int(self.x2))*self.factor
+ self.area_return[1]=min(int(self.y1),int(self.y2))*self.factor
+ self.area_return[2]=max(int(self.x1),int(self.x2))*self.factor
+ self.area_return[3]=max(int(self.y1),int(self.y2))*self.factor
+ self.x1=self.y1=self.x2=self.y2=-1
+ #print self.area_return
+ self.update_image()
+
+ def button_press_cb(self, widget, event):
+ if widget==self:
+ if event.button == 1:
+ self.selecting=1
+ self.update_image()
+ self.x1 = event.x
+ self.y1 = event.y
+ else:
+ self.x1 = self.y1=self.x2=self.y2=-1
+ self.area_return[0]=self.area_return[1]=0
+ self.area_return[2]=self.wwidth
+ self.area_return[3]=self.wheight
+ self.update_image()
+
+ def realize_cb(self, widget):
+ if widget == self:
+ gdkwindow = self.window
+ gdkwindow.set_events(gdkwindow.get_events() |
+ gtk.gdk.BUTTON_PRESS_MASK | gtk.gdk.BUTTON_RELEASE_MASK |
+ gtk.gdk.POINTER_MOTION_MASK);
+ cursor = gtk.gdk.Cursor(gtk.gdk.CROSSHAIR)
+ gdkwindow.set_cursor(cursor)
+ gdkwindow.set_back_pixmap(None, False)
+
+ def expose_cb(self, widget, event):
+ if widget==self:
+ dashes = [ 1.0, 2.0 ]
+ cr = self.window.cairo_create()
+ cr.rectangle(event.area.x, event.area.y, event.area.width,
+ event.area.height)
+ cr.clip()
+ self.window.draw_image(self.style.black_gc, self.root, event.area.x,
+ event.area.y, event.area.x, event.area.y, event.area.width,
+ event.area.height)
+ cr.set_line_width(1.0)
+ cr.set_source_rgba (1.0, 0.0, 0.0, 1.0)
+ cr.set_dash (dashes, 0.0)
+ cr.move_to (self.x1 - 0.5, 0.0)
+ cr.line_to (self.x1 - 0.5, event.area.y + event.area.height)
+ cr.move_to (0.0, self.y1 - 0.5)
+ cr.line_to (event.area.x + event.area.width, self.y1 - 0.5)
+ cr.stroke ()
+
+ if self.x1 >= 0:
+ x = min(self.x1, self.x2)
+ y = min(self.y1, self.y2)
+ w = max(self.x1, self.x2) - x
+ h = max(self.y1, self.y2) - y
+ cr.set_dash ([], 0.0)
+ cr.rectangle ( x, y, w, h)
+ cr.fill()
+ cr.set_source_rgba (0.0, 0.0, 0.5, 0.5)
+ cr.rectangle (x + 0.5, y + 0.5, w - 1, h - 1)
+ cr.stroke()
+
+ return False
+
+ def motion_notify_cb(self, widget, event):
+ if widget ==self:
+ self.queue_draw()
+
+ if self.x1 >= 0 :
+ rect = gtk.gdk.Rectangle()
+ rect.x = min(self.x1, min(self.x2, event.x + 1))
+ rect.width = max(self.x1, max(self.x2, event.x + 1)) - rect.x
+ rect.y = min(self.y1, min(self.y2, event.y + 1))
+ rect.height = max(self.y1, max(self.y2, event.y + 1)) - rect.y
+ self.queue_draw_area(rect.x, rect.y, rect.width, rect.height)
+
+ self.x2 = event.x + 1
+ self.y2 = event.y + 1
+
+ return True
+
+ def update_image(self):
+ #self.root.destroy()
+ self.queue_draw()
+ if self.hidden[0]==0 :
+ gc.collect()
+ sroot = self.wroot.get_image(0,0,self.wwidth,self.wheight)
+ self.__subsample__(sroot,self.wwidth,self.wheight,self.root,self.factor)
+ vals=[0,0, self.wwidth, self.wheight]
+ if self.area_return[0]>=0:
+ vals[0]=self.area_return[0]
+ if self.area_return[1]>=0:
+ vals[1]=self.area_return[1]
+ if self.area_return[2]>=0:
+ vals[2]=self.area_return[2]-self.area_return[0]
+ if self.area_return[3]>=0:
+ vals[3]=self.area_return[3]-self.area_return[1]
+ if vals[0] >0 or vals[1] >0 or vals[2] <self.wwidth or vals[3] <self.wheight:
+ if self.selecting==0:
+ self.__draw_lines__(self.root,vals,self.factor)
+ return True
+ def __draw_lines__(self,img,vals,factor):
+ for i in xrange(vals[0]/factor,vals[0]/factor+vals[2]/factor):
+ for k in range(2):
+ img.put_pixel(i,vals[1]/factor+k,0xff0000)
+ img.put_pixel(i,(vals[1]+vals[3]/2-k)/factor,0xff0000)
+ img.put_pixel(i,(vals[1]+vals[3]-1-k)/factor,0xff0000)
+ for i in xrange(vals[1]/factor,vals[1]/factor+vals[3]/factor):
+ for k in range(2):
+ img.put_pixel(vals[0]/factor+k,i,0xff0000)
+ img.put_pixel((vals[0]+vals[2]/2-k)/factor,i,0xff0000)
+ img.put_pixel((vals[0]+vals[2]-1-k)/factor,i,0xff0000)
+
+#area_return=[-1,-1,-1,-1]
+
+#w=GtkThumbSelector(area_return,0)
+#w.show()
+#gtk.main()
+#print area_return
+
+
+
+
diff --git a/gtk-recordmydesktop/rmdSimple.py b/gtk-recordmydesktop/rmdSimple.py
new file mode 100644
index 0000000..5d0c242
--- /dev/null
+++ b/gtk-recordmydesktop/rmdSimple.py
@@ -0,0 +1,277 @@
+#/*********************************************************************************
+#* gtk-recordMyDesktop *
+#**********************************************************************************
+#* *
+#* Copyright (C) 2006 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 *
+#**********************************************************************************/
+
+
+import pygtk
+pygtk.require('2.0')
+import gtk
+import locale, gettext
+_ = gettext.gettext
+import os
+from rmdPrefsWidget import *
+from rmdTrayIcon import *
+import gtk.gdk
+import gobject
+import gc
+import rmdPrefsWidget as pW
+import rmdSelectThumb as sT
+
+class simpleWidget(object):
+ hidden=[0]
+ labelStrings=[_('Video Quality'),_('Sound Quality')]
+ buttonStrings=[_('Advanced'),_('Select Window')]
+ options=None
+ optionsOpen=[0]
+ def __subWidgets__(self):
+ self.labelbox=gtk.VBox(homogeneous=False, spacing=20)
+ #self.labelbox.set_size_request(400,272)
+ self.NBox=gtk.HBox(homogeneous=False, spacing=20)
+ self.NEBox=gtk.VBox(homogeneous=False, spacing=0)
+ self.NEVQBox=gtk.HBox(homogeneous=False, spacing=10)
+ self.NESQBox=gtk.HBox(homogeneous=False, spacing=10)
+ self.NETABox=gtk.VBox(homogeneous=False, spacing=10)
+ self.NWBox=gtk.VBox(homogeneous=False, spacing=0)
+
+
+
+ self.NBox.pack_start(self.NWBox,expand=False,fill=False)
+ self.NBox.pack_start(self.NEBox,expand=True,fill=True)
+ self.NEBox.pack_start(self.NEVQBox,expand=False,fill=False)
+ self.NEBox.pack_start(self.NESQBox,expand=False,fill=False)
+ self.NEBox.pack_start(self.NETABox,expand=False,fill=False)
+
+ self.SBox=gtk.HBox(homogeneous=True, spacing=0)
+ self.SEBox=gtk.HBox(homogeneous=False, spacing=10)
+ self.SWBox=gtk.HBox(homogeneous=False, spacing=10)
+ self.SBox.pack_start(self.SWBox,expand=True,fill=True)
+ self.SBox.pack_start(self.SEBox,expand=True,fill=True)
+
+ self.labelbox.pack_start(self.NBox,expand=False,fill=False)
+ self.labelbox.pack_end(self.SBox,expand=False,fill=False)
+
+ self.wroot = gtk.gdk.get_default_root_window()
+ (self.wwidth, self.wheight) = self.wroot.get_size()
+
+ ###############################################################
+ #self.image = gtk.Image()
+ self.factor=1;
+ twidth=self.wwidth
+ while twidth>320 or self.factor<4:
+ twidth/=2
+ self.factor*=2
+ #self.thumb=gtk.gdk.Image(gtk.gdk.IMAGE_NORMAL,self.wroot.get_visual(),self.wwidth/self.factor,self.wheight/self.factor)
+
+
+ #sroot = self.wroot.get_image(0, 0, self.wwidth, self.wheight)
+ #self.__subsample__(sroot,self.wwidth,self.wheight,self.thumb,self.factor)
+ #self.image.set_from_image(self.thumb,None)
+
+ #self.image.set_size_request(self.wwidth/self.factor,self.wheight/self.factor)
+ ##self.NWBox.pack_start(self.image,False,False)
+ #self.image.show()
+ ###############################################################
+ self.image=sT.GtkThumbSelector(self.values[5],self.hidden,2000)
+ self.image.show()
+
+ self.NWBox.pack_start(self.image,False,False)
+ #quality
+ self.v_adj=gtk.Adjustment(value=(self.values[10]*100)/63, lower=0, upper=100, step_incr=1, page_incr=10, page_size=0)
+ self.v_quality=gtk.HScale(self.v_adj)
+ self.v_quality.set_value_pos(gtk.POS_LEFT)
+ self.v_quality.set_digits(0)
+ self.s_button= gtk.CheckButton(label=None)
+ self.s_adj=gtk.Adjustment(value=(self.values[11]*10), lower=0, upper=100, step_incr=1, page_incr=10, page_size=0)
+ #print (self.values[11]*10)
+ self.s_quality=gtk.HScale(self.s_adj)
+ self.s_quality.set_value_pos(gtk.POS_LEFT)
+ self.s_quality.set_digits(0)
+ self.v_label=gtk.Label(" "+self.labelStrings[0])
+ self.s_label=gtk.Label(self.labelStrings[1])
+
+ self.advanced_button=gtk.Button(self.buttonStrings[0])
+ self.tipLabel=gtk.Label("")
+ self.NEVQBox.pack_start(self.v_label,expand=False,fill=False)
+ self.NEVQBox.pack_start(self.v_quality,expand=True,fill=True)
+ self.NESQBox.pack_start(self.s_button,expand=False,fill=False)
+ self.NESQBox.pack_start(self.s_label,expand=False,fill=False)
+ self.NESQBox.pack_start(self.s_quality,expand=True,fill=True)
+ self.NETABox.pack_start(self.advanced_button,expand=False,fill=False)
+ self.NETABox.pack_start(self.tipLabel,expand=False,fill=False)
+
+ self.win_button=gtk.Button(self.buttonStrings[1])
+ self.start_button=gtk.Button(None,gtk.STOCK_MEDIA_RECORD)
+ self.file_button=gtk.Button(None,gtk.STOCK_SAVE_AS)
+ self.quit_button=gtk.Button(None,gtk.STOCK_QUIT)
+ self.SWBox.pack_start(self.win_button,False,False)
+ self.SWBox.pack_start(self.start_button,False,False)
+ self.SEBox.pack_end(self.quit_button,False,False)
+ self.SEBox.pack_end(self.file_button,False,False)
+
+ self.win_button.show()
+ self.start_button.show()
+ self.file_button.show()
+ self.quit_button.show()
+
+ self.v_quality.show()
+ self.s_button.show()
+ self.s_quality.show()
+ self.v_label.show()
+ self.s_label.show()
+ self.tipLabel.show()
+ self.advanced_button.show()
+ self.NEVQBox.show()
+ self.NESQBox.show()
+ self.NETABox.show()
+ self.NEBox.show()
+ self.NWBox.show()
+ self.NBox.show()
+ self.SEBox.show()
+ self.SWBox.show()
+ self.SBox.show()
+
+ self.labelbox.show()
+ self.window.add(self.labelbox)
+
+ def __subsample__(self,im1,w,h,im2,stride,x=0,y=0):
+ for i in xrange(y,h,stride):
+ for k in xrange(x,w,stride):
+ im2.put_pixel(k/stride,i/stride,im1.get_pixel(k,i))
+ #def __draw_lines__(self,img,vals,factor):
+ #for i in xrange(vals[0]/factor,vals[0]/factor+vals[2]/factor):
+ #for k in range(2):
+ #img.put_pixel(i,vals[1]/factor+k,0xff0000)
+ #img.put_pixel(i,(vals[1]+vals[3]/2-k)/factor,0xff0000)
+ #img.put_pixel(i,(vals[1]+vals[3]-1-k)/factor,0xff0000)
+ #for i in xrange(vals[1]/factor,vals[1]/factor+vals[3]/factor):
+ #for k in range(2):
+ #img.put_pixel(vals[0]/factor+k,i,0xff0000)
+ #img.put_pixel((vals[0]+vals[2]/2-k)/factor,i,0xff0000)
+ #img.put_pixel((vals[0]+vals[2]-1-k)/factor,i,0xff0000)
+
+ #def __update_image__(self):
+ ##self.root.destroy()
+ #if self.hidden[0]==0:
+ #gc.collect()
+ #sroot = self.wroot.get_image(0,0,self.wwidth,self.wheight)
+ #self.__subsample__(sroot,self.wwidth,self.wheight,self.thumb,self.factor)
+ #vals=[0,0, self.wwidth, self.wheight]
+ #if self.values[5][0]>=0:
+ #vals[0]=self.values[5][0]
+ #if self.values[5][1]>=0:
+ #vals[1]=self.values[5][1]
+ #if self.values[5][2]>=0:
+ #vals[2]=self.values[5][2]-self.values[5][0]
+ #if self.values[5][3]>=0:
+ #vals[3]=self.values[5][3]-self.values[5][1]
+ #if vals[0] >0 or vals[1] >0 or vals[2] <self.wwidth or vals[3] <self.wheight:
+ #self.__draw_lines__(self.thumb,vals,self.factor)
+ #self.image.set_from_image(self.thumb,None)
+ #return True
+ def __exit__(self,Event=None):
+ gtk.main_quit()
+ self.values[0]=-1
+ self.optionsOpen[0]=0
+ self.window.destroy()
+ def hide(self,Event=None):
+ self.window.hide()
+ self.hidden[0]=1
+ def show(self,Event=None):
+ self.window.show()
+ self.hidden[0]=0
+ def advanced(self,button=None):
+ if self.optionsOpen[0] ==0:
+ self.optionsOpen[0]=1
+ self.options=pW.prefsWidget(self.values,self.optionsOpen)
+ #self.parent.show()
+ else:
+ if self.options != None:
+ self.options.window.destroy()
+ self.optionsOpen[0]=0
+
+ def __fileSelQuit__(self,Event=None):
+ self.fileSel.destroy()
+
+ def __fileSelOk__(self,Event=None):
+ self.values[4]=self.fileSel.get_filename()
+ #self.pathEntry.set_text(self.fileSel.get_filename())
+ self.fileSel.destroy()
+
+ def __fileSelect__(self,Event=None):
+ self.fileSel = gtk.FileSelection(title=None)
+ self.fileSel.ok_button.connect("clicked", self.__fileSelOk__)
+ self.fileSel.cancel_button.connect("clicked", self.__fileSelQuit__)
+ self.fileSel.set_filename(self.values[4])
+ self.fileSel.show()
+
+ def __makeCons__(self):
+ self.advanced_button.connect("clicked",self.advanced)
+ self.file_button.connect("clicked",self.__fileSelect__)
+ self.quit_button.connect("clicked",self.__exit__)
+ self.start_button.connect("clicked",self.trayIcon.record_ext)
+ self.s_button.connect("clicked",self.__sound_check__)
+ def __sound_check__(self,widget):
+ self.s_quality.set_sensitive(widget.get_active())
+ self.values[2]=widget.get_active()
+
+ def update(self) :
+ self.values[10]=int((self.v_quality.get_value()*63)/100)
+ self.values[11]=int(self.v_quality.get_value()/10)
+
+ def __init__(self):
+ self.values= [15,0,True,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]
+ self.optionsOpen=[0]
+ self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
+ self.window.connect("destroy", self.__exit__)
+ self.window.set_border_width(10)
+ self.window.set_title("recordMyDesktop")
+ self.__subWidgets__()
+
+ #self.timed_id=gobject.timeout_add(2000,self.__update_image__)
+ #if resolution is low let it decide size on it's own
+ if self.wwidth>640:
+ self.window.set_size_request(int(self.wwidth/self.factor*2.3),-1)
+ self.window.set_resizable(False)
+
+ self.trayIcon=trayIcon(self)
+ self.__makeCons__()
+ self.s_quality.set_sensitive(self.values[2])
+ self.s_button.set_active(self.values[2])
+ self.window.show()
+ wh=self.window.size_request()
+ self.window.set_size_request(wh[0],wh[1])
+ gtk.main()
+
+
+
+
+
+
+
+
+
+
+
diff --git a/gtk-recordmydesktop/rmdTrayIcon.py b/gtk-recordmydesktop/rmdTrayIcon.py
index fe497a5..103dcdc 100644
--- a/gtk-recordmydesktop/rmdTrayIcon.py
+++ b/gtk-recordmydesktop/rmdTrayIcon.py
@@ -56,8 +56,8 @@ import os,signal
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]
+ #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.',
@@ -78,12 +78,17 @@ class trayIcon(object):
state=0#0 stopped,1 recording,2 paused
rmdPid=None
- optionsOpen=[0]
+ optionsOpen=[1]
+ reopen=0
timed_id=None
def __buttonPress__(self,widget,event=None):
- if event.button==1 and self.optionsOpen[0]==0:
+ if event.button==1 :
if self.state == 0:
+ if self.optionsOpen[0]==1:
+ self.parent.hide()
+ self.optionsOpen[0]=0
+ self.reopen=1
self.trayIcon.set_from_stock(gtk.STOCK_MEDIA_STOP,gtk.ICON_SIZE_SMALL_TOOLBAR)
self.state=1
self.__execRMD__()
@@ -108,63 +113,72 @@ class trayIcon(object):
self.trayIcon.set_from_stock(gtk.STOCK_MEDIA_STOP,gtk.ICON_SIZE_SMALL_TOOLBAR)
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.trayIcon.set_from_stock(gtk.STOCK_MEDIA_STOP,gtk.ICON_SIZE_SMALL_TOOLBAR)
+ self.state=1
+ self.__execRMD__()
+
def __execRMD__(self):
-
- execargs=["recordmydesktop","-o",'%s'%self.values[4],
- "-fps","%d"%self.values[0]]
- if self.values[2]==1 :
+ self.parent.update()
+ execargs=["recordmydesktop","-o",'%s'%self.parent.values[4],
+ "-fps","%d"%self.parent.values[0]]
+ if self.parent.values[2]==False :
execargs.append("--nosound")
- if self.values[1] == 1:
+ if self.parent.values[1] == 1:
execargs.append("-dummy-cursor")
execargs.append("white")
- elif self.values[1] == 2:
+ elif self.parent.values[1] == 2:
execargs.append("-dummy-cursor")
execargs.append("black")
- elif self.values[1] == 3:
+ elif self.parent.values[1] == 3:
execargs.append("--no-cursor")
- if self.values[3] == 0:
+ if self.parent.values[3] == 0:
execargs.append("--full-shots")
- if self.values[13] == 0:
+ if self.parent.values[13] == 0:
execargs.append("--with-shared")
- if self.values[3] == 1 and self.values[13] == 1 :
+ if self.parent.values[3] == 1 and self.parent.values[13] == 1 :
execargs.append("--no-cond-shared")
- if self.values[5][0]>0 :
+ if self.parent.values[5][0]>0 :
execargs.append('-x')
- execargs.append('%d'%self.values[5][0])
- if self.values[5][1]>0:
+ execargs.append('%d'%self.parent.values[5][0])
+ if self.parent.values[5][1]>0:
execargs.append('-y')
- execargs.append('%d'%self.values[5][1])
- if self.values[5][2]>0 and self.values[5][3]>0:
+ execargs.append('%d'%self.parent.values[5][1])
+ if self.parent.values[5][2]>0 and self.parent.values[5][3]>0:
execargs.append('-width')
- execargs.append('%d'%(self.values[5][2]-self.values[5][0]))
+ execargs.append('%d'%(self.parent.values[5][2]-self.parent.values[5][0]))
execargs.append('-height')
- execargs.append('%d'%(self.values[5][3]-self.values[5][1]))
+ execargs.append('%d'%(self.parent.values[5][3]-self.parent.values[5][1]))
for i in range(4):
- self.values[5][i]=-1
- if self.values[6]>0:
+ self.parent.values[5][i]=-1
+ if self.parent.values[6]>0:
execargs.append('-delay')
- execargs.append('%d'%self.values[6])
+ execargs.append('%d'%self.parent.values[6])
execargs.append('-channels')
- execargs.append('%d'%self.values[7])
+ execargs.append('%d'%self.parent.values[7])
execargs.append('-freq')
- execargs.append('%d'%self.values[8])
+ execargs.append('%d'%self.parent.values[8])
execargs.append('-device')
- execargs.append('%s'%self.values[9])
+ execargs.append('%s'%self.parent.values[9])
execargs.append('-v_quality')
- execargs.append('%d'%self.values[10])
+ execargs.append('%d'%self.parent.values[10])
execargs.append('-s_quality')
- execargs.append('%d'%self.values[11])
- if self.values[12] != "$DISPLAY":
+ execargs.append('%d'%self.parent.values[11])
+ if self.parent.values[12] != "$DISPLAY":
execargs.append('-display')
- execargs.append('%s'%self.values[12])
- if self.values[14] == 0:
+ execargs.append('%s'%self.parent.values[12])
+ if self.parent.values[14] == 0:
execargs.append('--drop-frames')
execargs.append('-shared-threshold')
- execargs.append('%d'%self.values[15])
- if self.values[16] == 0:
+ execargs.append('%d'%self.parent.values[15])
+ if self.parent.values[16] == 0:
execargs.append('--quick-subsampling')
@@ -195,7 +209,7 @@ class trayIcon(object):
button.show()
dialog.set_size_request(300,128)
dialog.show()
-
+
def __pauseRMD__(self):
os.kill(self.rmdPid,signal.SIGUSR1)
@@ -208,10 +222,15 @@ class trayIcon(object):
os.kill(self.rmdPid,signal.SIGTERM)
exit_ret=os.waitpid(self.rmdPid,0)
#if exit_ret[0]==self.rmdPid:
- self.__exit_status_dialog(exit_ret[1])
+ #self.__exit_status_dialog(exit_ret[1])
else:
self.__exit_status_dialog(exit_ret[1])
self.rmdPid=None
+ if self.reopen==1:
+ self.parent.show()
+ self.optionsOpen[0]=1
+ self.reopen=0
+
#print exit_ret
def __check_status__(self):
if self.rmdPid!=None:
@@ -221,6 +240,10 @@ class trayIcon(object):
self.trayIcon.set_from_stock(gtk.STOCK_MEDIA_RECORD,gtk.ICON_SIZE_SMALL_TOOLBAR)
self.__exit_status_dialog(exit_ret[1])
self.rmdPid=None
+ if self.reopen==1:
+ self.parent.show()
+ self.optionsOpen[0]=1
+ self.reopen=0
return False
else:
return True
@@ -228,17 +251,19 @@ class trayIcon(object):
return False
- def __init__(self):
+ def __init__(self,parent):
+ self.parent=parent
+ #self.parent.values=values
self.event_box = gtk.EventBox()
self.trayIcon=gtk.Image()
self.trayIcon.set_from_stock(gtk.STOCK_MEDIA_RECORD, gtk.ICON_SIZE_SMALL_TOOLBAR)
self.event_box.add(self.trayIcon)
self.tray_container = egg.trayicon.TrayIcon("recordMyDesktop")
self.tray_container.add(self.event_box)
- self.tray_popup=iTP.TrayPopupMenu(self.values,self.optionsOpen)
+ self.tray_popup=iTP.TrayPopupMenu(self.parent,self.parent.values,self.optionsOpen)
self.event_box.connect("button-press-event", self.__buttonPress__)
self.tray_container.show_all()
- gtk.main()
+ #gtk.main()
diff --git a/gtk-recordmydesktop/rmdTrayPopup.py b/gtk-recordmydesktop/rmdTrayPopup.py
index 7df1c87..b16a884 100644
--- a/gtk-recordmydesktop/rmdTrayPopup.py
+++ b/gtk-recordmydesktop/rmdTrayPopup.py
@@ -28,7 +28,8 @@ import rmdPrefsWidget as pW
class TrayPopupMenu:
options=None
- def __init__(self,values,optionsOpen):
+ def __init__(self,parent,values,optionsOpen):
+ self.parent=parent
self.optionsOpen=optionsOpen
self.values=values
self._setup_popup_menu()
@@ -44,11 +45,12 @@ class TrayPopupMenu:
def _prefs_widget(self,button):
if self.optionsOpen[0] ==0:
self.optionsOpen[0]=1
- self.options=pW.prefsWidget(self.values,self.optionsOpen)
+ #self.options=pW.prefsWidget(self.values,self.optionsOpen)
+ self.parent.show()
else:
- if self.options != None:
- self.options.window.destroy()
- self.optionsOpen[0]=0
+ #if self.options != None:
+ self.parent.hide()
+ self.optionsOpen[0]=0
def _setup_prefs_widget(self):
self.popupmenu_prefs_widget = gtk.ImageMenuItem(
gtk.STOCK_PREFERENCES)
@@ -74,7 +76,7 @@ class TrayPopupMenu:
def _setup_select_area(self):
self.popupmenu_selectarea = gtk.ImageMenuItem(
- _("_Select Area to Record"))
+ _("_Select Area On Screen"))
self.popupmenu.add(self.popupmenu_selectarea)
self.popupmenu_selectarea.connect("activate", self._select_area_cb)
© All Rights Reserved