@@ -112,9 +112,15 @@ def _dragMoveEvent(event):
112112
113113 def _wheelEvent (event ):
114114 self .view .setTransformationAnchor (QGraphicsView .AnchorUnderMouse )
115- factor = 1.05
116- if event .angleDelta ().y () > 0 :
115+
116+ settings = QSettings ()
117+ factor = settings .value ('/qgis/zoom_favor' , 2.0 )
118+ if (event .modifiers () == Qt .ControlModifier ):
119+ factor = 1.0 + (factor - 1.0 ) / 20.0
120+
121+ if event .angleDelta ().y () < 0 :
117122 factor = 1 / factor
123+
118124 self .view .scale (factor , factor )
119125 self .repaintModel ()
120126
@@ -130,14 +136,31 @@ def _mouseReleaseEvent(e):
130136 QGraphicsView .mouseReleaseEvent (self .view , e )
131137 self .view .viewport ().setCursor (Qt .ArrowCursor )
132138
139+ def _mousePressEvent (e ):
140+ if e .button () == Qt .MidButton :
141+ self .previousMousePos = e .pos ()
142+ else :
143+ QGraphicsView .mousePressEvent (self .view , e )
144+
145+ def _mouseMoveEvent (e ):
146+ if e .buttons () == Qt .MidButton :
147+ offset = self .previousMousePos - e .pos ()
148+ self .previousMousePos = e .pos ()
149+
150+ self .view .verticalScrollBar ().setValue (self .view .verticalScrollBar ().value () + offset .y ())
151+ self .view .horizontalScrollBar ().setValue (self .view .horizontalScrollBar ().value () + offset .x ())
152+ else :
153+ QGraphicsView .mouseMoveEvent (self .view , e )
154+
133155 self .view .setDragMode (QGraphicsView .ScrollHandDrag )
134156 self .view .dragEnterEvent = _dragEnterEvent
135157 self .view .dropEvent = _dropEvent
136158 self .view .dragMoveEvent = _dragMoveEvent
137159 self .view .wheelEvent = _wheelEvent
138160 self .view .enterEvent = _enterEvent
139161 self .view .mousePressEvent = _mousePressEvent
140- self .view .mouseReleaseEvent = _mouseReleaseEvent
162+ self .view .mousePressEvent = _mousePressEvent
163+ self .view .mouseMoveEvent = _mouseMoveEvent
141164
142165 def _mimeDataInput (items ):
143166 mimeData = QMimeData ()
@@ -217,11 +240,14 @@ def closeEvent(self, evt):
217240
218241 if self .hasChanged :
219242 ret = QMessageBox .question (
220- self , self .tr ('Unsaved changes ' ),
221- self .tr ('There are unsaved changes in model. Continue ?' ),
222- QMessageBox .Yes | QMessageBox .No , QMessageBox .No )
243+ self , self .tr ('Save? ' ),
244+ self .tr ('There are unsaved changes in this model, do you want to keep those ?' ),
245+ QMessageBox .Save | QMessageBox .Cancel | QMessageBox . Discard , QMessageBox .Cancel )
223246
224- if ret == QMessageBox .Yes :
247+ if ret == QMessageBox .Save :
248+ self .saveModel (False )
249+ evt .accept ()
250+ elif ret == QMessageBox .Discard :
225251 evt .accept ()
226252 else :
227253 evt .ignore ()
0 commit comments