Skip to content

Commit a3e5c44

Browse files
author
Christian Holl
committed
Merge branch 'feature/Wheel_Zooming' into dev
2 parents 2b6d44a + 31465f5 commit a3e5c44

File tree

3 files changed

+96
-20
lines changed

3 files changed

+96
-20
lines changed

.pydevproject

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@
44
<path>/${PROJECT_DIR_NAME}/src</path>
55
</pydev_pathproperty>
66
<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 3.0</pydev_property>
7-
<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
7+
<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Python3</pydev_property>
88
</pydev_project>

src/FlashAir/ImageViewer.py

+81-16
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,41 @@
4747
from FlashAir import card
4848
import threading
4949
import time
50-
50+
from QtGui import QScrollArea
51+
52+
53+
54+
55+
56+
class MyLabel(QtGui.QLabel):
57+
58+
image=QtGui.QImage();
59+
def __init__(self, parent=None):
60+
QtGui.QLabel.__init__(self, parent)
61+
62+
def setImage(self, image):
63+
self.image=image;
64+
self.setPixmap(QtGui.QPixmap.fromImage(self.image).scaled(self.size(), QtCore.Qt.KeepAspectRatio))
65+
pass
66+
67+
def resizeEvent(self, event):
68+
self.setPixmap(QtGui.QPixmap.fromImage(self.image).scaled(event.size(), QtCore.Qt.KeepAspectRatio))
69+
pass
70+
71+
def imageSize(self):
72+
return self.image.size()
73+
74+
75+
76+
class ScrollAreaEventHandler:
77+
def handler(self, event, scrollarea):
78+
modifiers = QtGui.QApplication.keyboardModifiers()
79+
if modifiers != QtCore.Qt.ControlModifier:
80+
QScrollArea.wheelEvent(scrollarea, event)
81+
else:
82+
event.ignore()
83+
pass
84+
5185
class ImageViewer(QtGui.QMainWindow):
5286
run=False;
5387
ReceiveThread=0
@@ -59,8 +93,11 @@ class ImageViewer(QtGui.QMainWindow):
5993
folder_local='.'
6094
recursive=False
6195

96+
saeh=ScrollAreaEventHandler();
97+
98+
6299
def __init__(self,ip='192.168.0.1',port=80,timeout=1000,folder_local='.',
63-
folder_remote='/', instant_run=False, recursive=False):
100+
folder_remote='/', instant_run=False, recursive=False, debug_image=None):
64101
super(ImageViewer, self).__init__()
65102

66103
self.folder_local=folder_local
@@ -74,13 +111,15 @@ def __init__(self,ip='192.168.0.1',port=80,timeout=1000,folder_local='.',
74111

75112
self.scaleFactor = 0.0
76113

77-
self.imageLabel = QtGui.QLabel()
114+
self.imageLabel = MyLabel()
78115
self.imageLabel.setBackgroundRole(QtGui.QPalette.Base)
79116
self.imageLabel.setSizePolicy(QtGui.QSizePolicy.Ignored,
80117
QtGui.QSizePolicy.Ignored)
81-
self.imageLabel.setScaledContents(True)
118+
82119

83120
self.scrollArea = QtGui.QScrollArea()
121+
122+
self.scrollArea.wheelEvent = lambda event: self.saeh.handler(event, self.scrollArea)
84123
self.scrollArea.setBackgroundRole(QtGui.QPalette.Dark)
85124
self.scrollArea.setWidget(self.imageLabel)
86125
self.setCentralWidget(self.scrollArea)
@@ -97,6 +136,12 @@ def __init__(self,ip='192.168.0.1',port=80,timeout=1000,folder_local='.',
97136
self.fitToWindowAct.setEnabled(True)
98137
self.fitToWindowAct.setChecked(True)
99138

139+
if(debug_image!=None):
140+
image=QtGui.QImage(debug_image)
141+
self.emit(QtCore.SIGNAL('load_image(QImage)'), image)
142+
return
143+
144+
100145
if(instant_run):
101146
print("Intant running...")
102147
threading.Thread(target=self.image_get).start()
@@ -129,6 +174,7 @@ def open(self):
129174
"Cannot load %s." % fileName)
130175
return
131176

177+
132178
self.imageLabel.setPixmap(QtGui.QPixmap.fromImage(image))
133179
self.scaleFactor = 1.0
134180

@@ -142,7 +188,9 @@ def open(self):
142188
def load_image(self, image):
143189
print("loading image ... ")
144190
if not image.isNull():
145-
self.imageLabel.setPixmap(QtGui.QPixmap.fromImage(image))
191+
self.printAct.setEnabled(True)
192+
self.imageLabel.setImage(image)
193+
146194
self.fitToWindow()
147195
pass
148196

@@ -170,6 +218,8 @@ def normalSize(self):
170218
def fitToWindow(self):
171219
fitToWindow = self.fitToWindowAct.isChecked()
172220
self.scrollArea.setWidgetResizable(fitToWindow)
221+
222+
173223
if not fitToWindow:
174224
self.normalSize()
175225

@@ -222,7 +272,7 @@ def createActions(self):
222272
def createMenus(self):
223273
self.fileMenu = QtGui.QMenu("&File", self)
224274
#self.fileMenu.addAction(self.openAct)
225-
#self.fileMenu.addAction(self.printAct)
275+
self.fileMenu.addAction(self.printAct)
226276
self.fileMenu.addSeparator()
227277
self.fileMenu.addAction(self.exitAct)
228278

@@ -247,15 +297,17 @@ def updateActions(self):
247297
self.normalSizeAct.setEnabled(not self.fitToWindowAct.isChecked())
248298

249299
def scaleImage(self, factor):
250-
self.scaleFactor *= factor
251-
self.imageLabel.resize(self.scaleFactor * self.imageLabel.pixmap().size())
252-
253-
self.adjustScrollBar(self.scrollArea.horizontalScrollBar(), factor)
254-
self.adjustScrollBar(self.scrollArea.verticalScrollBar(), factor)
255-
256-
self.zoomInAct.setEnabled(self.scaleFactor < 3.0)
257-
self.zoomOutAct.setEnabled(self.scaleFactor > 0.333)
258-
300+
if not self.fitToWindowAct.isChecked():
301+
self.scaleFactor *= factor
302+
303+
self.imageLabel.resize(self.scaleFactor * self.imageLabel.imageSize())
304+
305+
self.adjustScrollBar(self.scrollArea.horizontalScrollBar(), factor)
306+
self.adjustScrollBar(self.scrollArea.verticalScrollBar(), factor)
307+
308+
self.zoomInAct.setEnabled(self.scaleFactor < 3.0)
309+
self.zoomOutAct.setEnabled(self.scaleFactor > 0.333)
310+
259311
def adjustScrollBar(self, scrollBar, factor):
260312
scrollBar.setValue(int(factor * scrollBar.value()
261313
+ ((factor - 1) * scrollBar.pageStep()/2)))
@@ -265,4 +317,17 @@ def closeEvent(self, event):
265317
print("Close")
266318
self.runLock.release()
267319
self.run=0
268-
pass
320+
pass
321+
322+
323+
def wheelEvent(self,event):
324+
modifiers = QtGui.QApplication.keyboardModifiers()
325+
if modifiers == QtCore.Qt.ControlModifier:
326+
if(event.delta() >0):
327+
self.zoomOut()
328+
else:
329+
self.zoomIn()
330+
event.accept()
331+
else:
332+
event.ignore()
333+

src/PyFlashAero.py

+14-3
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def ImageView(args):
2020
print("imageView")
2121

2222
try:
23-
from PyQt4x import QtGui
23+
from PyQt4 import QtGui
2424
except ImportError:
2525
sys.exit("Using --imageViewer requires PyQt4, which is not installed.")
2626

@@ -30,7 +30,7 @@ def ImageView(args):
3030
port=args.card_uri.port
3131
if(port == None):
3232
port = 80
33-
imageViewer = ImageViewer.ImageViewer(socket.gethostbyname(args.card_uri.hostname), port, args.timeout, args.folder_local, args.folder_remote, args.instant, args.recursive)
33+
imageViewer = ImageViewer.ImageViewer(socket.gethostbyname(args.card_uri.hostname), port, args.timeout, args.folder_local, args.folder_remote, args.instant, args.recursive, args.debug_image)
3434
imageViewer.show()
3535
sys.exit(app.exec_())
3636

@@ -69,15 +69,26 @@ def SyncFolder(args):
6969
const=True, default=False,
7070
help='GUI will start looking for images directly')
7171

72+
parser.add_argument('--GUIDebugImage', dest='debug_image', help='path for picture to debug the GUI')
73+
7274

7375

7476
args = parser.parse_args()
7577
ip = socket.gethostbyname(args.card_uri.hostname)
7678

7779
if(not os.path.isdir(args.folder_local)):
78-
print("Given folder(local) does not exist or isn't a folder!")
80+
print("Given folder(local) does not exist or isn't a folder!", end='\n', file=sys.stderr)
81+
exit(1)
82+
83+
if((args.instant or args.debug_image!=None) and not args.processing==ImageView):
84+
print("Selected GUI option without selecting GUI!", end='\n', file=sys.stderr)
7985
exit(1)
8086

87+
if(args.debug_image != None):
88+
if(not os.path.isfile(args.debug_image)):
89+
print("Debug image file does not exist!", end='\n', file=sys.stderr)
90+
exit(1)
91+
8192
args.processing(args)
8293

8394

0 commit comments

Comments
 (0)