#/******************************************************************************
#* qt-recordMyDesktop *
#*******************************************************************************
#* *
#* Copyright (C) 2007, 2008 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 3 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, see . *
#* *
#* *
#* For further information contact me at johnvarouhakis@gmail.com *
#******************************************************************************/
from PyQt4 import QtGui,QtCore
import sys
import rmdConfig
from rmdFrame import *
class QtThumbSelector(QtGui.QLabel):
def __init__(self,parent,caller,area_return,hidden,update_interval=500):
self.area_return=area_return
self.selecting=0
self.realFrame=None
self.caller=caller
self.hidden=hidden
QtGui.QLabel.__init__(self,parent)
self.x1=self.y1=-1
self.x2 = self.y2 = -1
#self.root=QtGui.QApplication.desktop().winId()
self.root=QtGui.QX11Info().appRootWindow()
self.pix=QtGui.QPixmap.grabWindow(self.root)
siz=QtGui.QApplication.desktop().screenGeometry()
(self.wwidth, self.wheight)=(siz.width(),siz.height())
self.factor=1;
twidth=self.wwidth
while twidth>320 or self.factor<4:
twidth/=2
self.factor*=2
self.setFixedSize(self.wwidth/self.factor,self.wheight/self.factor)
self.setSizePolicy(QtGui.QSizePolicy.Preferred,QtGui.QSizePolicy.Preferred)
self.timed_id=QtCore.QTimer(None)
self.timed_id.connect(self.timed_id,QtCore.SIGNAL("timeout()"),
self.update_image)
self.timed_id.start(update_interval)
self.capPos=0
self.pixt=None
self.pixflag=0
self.fragSize=64
def update_image(self):
if self.selecting==0 and self.hidden[0]==0:
self.pixt=QtGui.QPixmap.grabWindow(self.root,0,self.capPos,self.wwidth,self.fragSize)
self.pixflag=1
self.update()
def update(self):
QtGui.QLabel.update(self)
if self.realFrame!=None:
if (((self.area_return[0]!=self.realFrame.x or
self.area_return[1]!=self.realFrame.y) and
self.caller.values[15]==1) or
self.area_return[2]-self.area_return[0]!=self.realFrame.w or
self.area_return[3]-self.area_return[1]!=self.realFrame.h or
self.caller.values[25]):
self.realFrame.destroy()
self.realFrame=None
if self.realFrame==None and self.caller.values[25]==0 :
self.__draw_frame__()
def paintEvent(self, event):
if self.pixt!=None and self.pixflag==1:
self.pixflag=0
painter2 = QtGui.QPainter(self.pix)
painter2.drawPixmap(0,self.capPos,self.wwidth,self.fragSize,self.pixt)
if self.capPosself.wheight:
self.capPos=self.wheight-self.fragSize
else:
self.capPos=0
painter = QtGui.QPainter(self)
painter.drawPixmap(0,0,self.wwidth/self.factor,self.wheight/self.factor,self.pix)
if self.selecting==1 or self.caller.values[15]==1:
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
painter.fillRect(x,y,w,h,QtGui.QBrush(QtCore.Qt.red,QtCore.Qt.CrossPattern))
elif self.area_return[0]>=0 or self.area_return[1]>=0 or self.area_return[2]>=0 or self.area_return[3]>=0:
x = max(0, self.area_return[0])/self.factor
y = max(0, self.area_return[1])/self.factor
w = min(self.wwidth, self.area_return[2])/self.factor - x
h = min(self.wheight, self.area_return[3])/self.factor - y
painter.fillRect(x,y,w,h,QtGui.QBrush(QtCore.Qt.red,QtCore.Qt.CrossPattern))
def mouseMoveEvent(self, event):
if self.x1 >= 0:
rect = QtCore.QRect()
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.x2 = event.x() + 1
self.y2 = event.y() + 1
self.update()
def mouseReleaseEvent(self, event):
if event.button() == 1:
self.selecting=0
if self.x1 >= 0:
self.x2 = event.x() + 1
self.y2 = event.y() + 1
self.area_return[0]=max(0,min(int(self.x1),int(self.x2))*self.factor)
self.area_return[1]=max(0,min(int(self.y1),int(self.y2))*self.factor)
self.area_return[2]=min(self.wwidth,max(int(self.x1),int(self.x2))*self.factor)
self.area_return[3]=min(self.wheight,max(int(self.y1),int(self.y2))*self.factor)
self.update()
def mousePressEvent(self, event):
if event.button() != 1:
self.x1 = self.y1 =-1
self.area_return[0]=-1
self.area_return[1]=-1
self.area_return[2]=-1
self.area_return[3]=-1
self.update()
elif event.button() == 1:
self.selecting=1
self.x1 = event.x()
self.y1 = event.y()
def __draw_frame__(self):
if self.area_return[0]!=-1:
self.realFrame=rmdFrame(self.area_return[0],
self.area_return[1],
self.area_return[2]-self.area_return[0],
self.area_return[3]-self.area_return[1],
self.caller)
def closeEvent(self,event):
self.realFrame.destroy()
QtGui.QLabel.close(self)
if __name__ == "__main__":
import sys
p=[[-1,-1,-1,-1]]
hidden=[0]
app=QtGui.QApplication(sys.argv)
app.values=rmdConfig.default_values
w = QtThumbSelector(None,app,p[0],hidden)
w.show()
app.exec_()
print p[0]