Add fit-to-window mode and shortcut

This commit is contained in:
Mika Fischer
2011-07-12 16:08:04 +02:00
parent 733383a149
commit e5756a6654
6 changed files with 50 additions and 4 deletions
+1
View File
@@ -74,6 +74,7 @@ HOTKEYS = (
('PgUp', lambda lt: lt.gotoPrevious(), 'Previous image/frame'),
('Tab', lambda lt: lt.selectNextAnnotation(), 'Select next annotation'),
('Shift+Tab', lambda lt: lt.selectPreviousAnnotation(), 'Select previous annotation'),
('Ctrl+f', lambda lt: lt.view().fitInView(), 'Fit current image/frame into window'),
('Del', lambda lt: lt.deleteSelectedAnnotations(), 'Delete selected annotations'),
('ESC', lambda lt: lt.exitInsertMode(), 'Exit insert mode'),
('Shift+l', lambda lt: lt.currentImage().setUnlabeled(False), 'Mark current image as labeled'),
+6
View File
@@ -378,6 +378,12 @@ class LabelTool(QObject):
else:
return self._mainwindow.scene
def view(self):
if self._mainwindow is None:
return None
else:
return self._mainwindow.view
def selectNextAnnotation(self):
if self._mainwindow is not None:
return self._mainwindow.scene.selectNextItem()
+11 -3
View File
@@ -16,6 +16,7 @@ class AnnotationScene(QGraphicsScene):
self.model_ = None
self.image_item_ = None
self.inserter_ = None
self.scene_item_ = None
self.message_ = ""
self.labeltool_ = labeltool
@@ -56,6 +57,9 @@ class AnnotationScene(QGraphicsScene):
# reset caches, invalidate root
self.reset()
def sceneItem(self):
return self.scene_item_
def setCurrentImage(self, current_image):
"""
Set the index of the model which denotes the current image to be
@@ -75,10 +79,10 @@ class AnnotationScene(QGraphicsScene):
assert self.image_item_.model() == self.model_
self.image_ = self.labeltool_.getImage(self.image_item_)
self.pixmap_ = QPixmap(toQImage(self.image_))
item = QGraphicsPixmapItem(self.pixmap_)
item.setZValue(-1)
self.scene_item_ = QGraphicsPixmapItem(self.pixmap_)
self.scene_item_.setZValue(-1)
self.setSceneRect(0, 0, self.pixmap_.width(), self.pixmap_.height())
self.addItem(item)
self.addItem(self.scene_item_)
self.insertItems(0, len(self.image_item_.children())-1)
self.update()
@@ -133,6 +137,10 @@ class AnnotationScene(QGraphicsScene):
self.setCurrentImage(None)
self.clearMessage()
def clear(self):
QGraphicsScene.clear(self)
self.scene_item_ = None
def addItem(self, item):
QGraphicsScene.addItem(self, item)
# TODO emit signal itemAdded
+14
View File
@@ -28,6 +28,20 @@ class GraphicsView(QGraphicsView):
self._panStartX = -1
self._panStartY = -1
def fitInView(self):
if self.scene() is None:
return
si = self.scene().sceneItem()
if si is None:
return
old_scale = self.getScale()
QGraphicsView.fitInView(self, si, Qt.KeepAspectRatio)
new_scale = self.getScale()
if new_scale != old_scale:
self.scaleChanged.emit(new_scale)
def setScene(self, scene):
QGraphicsView.setScene(self, scene)
#self.setScaleAbsolute(1)
+11
View File
@@ -62,6 +62,8 @@ class MainWindow(QMainWindow):
def onCurrentImageChanged(self):
new_image = self.labeltool.currentImage()
self.scene.setCurrentImage(new_image)
if self.options["Fit-to-window mode"].isChecked():
self.view.fitInView()
self.treeview.scrollTo(new_image.index())
img = self.labeltool.getImage(new_image)
@@ -101,6 +103,14 @@ class MainWindow(QMainWindow):
self.ui.menuShortcuts.addAction(hk)
self.shortcuts.append(hk)
def initOptions(self):
self.options = {}
for o in ["Fit-to-window mode"]:
action = QAction(o, self)
action.setCheckable(True)
self.ui.menuOptions.addAction(action)
self.options[o] = action
###
### GUI/Application setup
###___________________________________________________________________________________________
@@ -142,6 +152,7 @@ class MainWindow(QMainWindow):
self.setCentralWidget(self.central_widget)
self.initShortcuts(config.HOTKEYS)
self.initOptions()
self.treeview = AnnotationTreeView()
self.treeview.setSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Preferred)
+7 -1
View File
@@ -20,7 +20,7 @@
<x>0</x>
<y>0</y>
<width>656</width>
<height>25</height>
<height>21</height>
</rect>
</property>
<widget class="QMenu" name="menuFile">
@@ -62,10 +62,16 @@
<string>&amp;Shortcuts</string>
</property>
</widget>
<widget class="QMenu" name="menuOptions">
<property name="title">
<string>&amp;Options</string>
</property>
</widget>
<addaction name="menuFile"/>
<addaction name="menu_Edit"/>
<addaction name="menuShortcuts"/>
<addaction name="menu_Views"/>
<addaction name="menuOptions"/>
<addaction name="menuPlugins"/>
<addaction name="menu_Help"/>
</widget>