Fix the issue # 136 and add constants.py

This commit is contained in:
tzutalin 2017-08-04 14:45:42 +08:00
parent f6c27b0c10
commit 6958e69851
3 changed files with 93 additions and 61 deletions

View File

@ -26,6 +26,7 @@ except ImportError:
import resources import resources
# Add internal libs # Add internal libs
from libs.constants import *
from libs.lib import struct, newAction, newIcon, addActions, fmtShortcut from libs.lib import struct, newAction, newIcon, addActions, fmtShortcut
from libs.shape import Shape, DEFAULT_LINE_COLOR, DEFAULT_FILL_COLOR from libs.shape import Shape, DEFAULT_LINE_COLOR, DEFAULT_FILL_COLOR
from libs.canvas import Canvas from libs.canvas import Canvas
@ -400,43 +401,51 @@ class MainWindow(QMainWindow, WindowMixin):
# Restore application settings. # Restore application settings.
if have_qstring(): if have_qstring():
types = { types = {
'filename': QString, SETTING_FILENAME: QString,
'recentFiles': QStringList, SETTING_RECENT_FILES: QStringList,
'window/size': QSize, SETTING_WIN_SIZE: QSize,
'window/position': QPoint, SETTING_WIN_POSE: QPoint,
'window/geometry': QByteArray, SETTING_WIN_GEOMETRY: QByteArray,
'line/color': QColor, SETTING_LINE_COLOR: QColor,
'fill/color': QColor, SETTING_FILL_COLOR: QColor,
'advanced': bool, SETTING_ADVANCE_MODE: bool,
# Docks and toolbars: # Docks and toolbars:
'window/state': QByteArray, SETTING_WIN_STATE: QByteArray,
'savedir': QString, SETTING_SAVE_DIR: QString,
'lastOpenDir': QString, SETTING_LAST_OPEN_DIR: QString,
} }
else: else:
types = { types = {
'filename': str, SETTING_FILENAME: str,
'recentFiles': list, SETTING_RECENT_FILES: list,
'window/size': QSize, SETTING_WIN_SIZE: QSize,
'window/position': QPoint, SETTING_WIN_POSE: QPoint,
'window/geometry': QByteArray, SETTING_WIN_GEOMETRY: QByteArray,
'line/color': QColor, SETTING_LINE_COLOR: QColor,
'fill/color': QColor, SETTING_FILL_COLOR: QColor,
'advanced': bool, SETTING_ADVANCE_MODE: bool,
# Docks and toolbars: # Docks and toolbars:
'window/state': QByteArray, SETTING_WIN_STATE: QByteArray,
'savedir': str, SETTING_SAVE_DIR: str,
'lastOpenDir': str, SETTING_LAST_OPEN_DIR: str,
} }
self.settings = settings = Settings(types) self.settings = settings = Settings(types)
self.recentFiles = settings.get('recentFiles') if settings.get('recentFiles') is not None else []
size = settings.get('window/size', QSize(600, 500)) ## Fix the compatible issue for qt4 and qt5. Convert the QStringList to python list
position = settings.get('window/position', QPoint(0, 0)) if settings.get(SETTING_RECENT_FILES):
if have_qstring():
recentFileQStringList = settings.get(SETTING_RECENT_FILES)
self.recentFiles = [ustr(i) for i in recentFileQStringList]
else:
self.recentFiles = recentFileQStringList = settings.get(SETTING_RECENT_FILES)
size = settings.get(SETTING_WIN_SIZE, QSize(600, 500))
position = settings.get(SETTING_WIN_POSE, QPoint(0, 0))
self.resize(size) self.resize(size)
self.move(position) self.move(position)
saveDir = ustr(settings.get('savedir', None)) saveDir = ustr(settings.get(SETTING_SAVE_DIR, None))
self.lastOpenDir = ustr(settings.get('lastOpenDir', None)) self.lastOpenDir = ustr(settings.get(SETTING_LAST_OPEN_DIR, None))
if saveDir is not None and os.path.exists(saveDir): if saveDir is not None and os.path.exists(saveDir):
self.defaultSaveDir = saveDir self.defaultSaveDir = saveDir
self.statusBar().showMessage('%s started. Annotation will be saved to %s' % self.statusBar().showMessage('%s started. Annotation will be saved to %s' %
@ -444,10 +453,10 @@ class MainWindow(QMainWindow, WindowMixin):
self.statusBar().show() self.statusBar().show()
# or simply: # or simply:
# self.restoreGeometry(settings['window/geometry'] # self.restoreGeometry(settings[SETTING_WIN_GEOMETRY]
self.restoreState(settings.get('window/state', QByteArray())) self.restoreState(settings.get(SETTING_WIN_STATE, QByteArray()))
self.lineColor = QColor(settings.get('line/color', Shape.line_color)) self.lineColor = QColor(settings.get(SETTING_LINE_COLOR, Shape.line_color))
self.fillColor = QColor(settings.get('fill/color', Shape.fill_color)) self.fillColor = QColor(settings.get(SETTING_FILL_COLOR, Shape.fill_color))
Shape.line_color = self.lineColor Shape.line_color = self.lineColor
Shape.fill_color = self.fillColor Shape.fill_color = self.fillColor
# Add chris # Add chris
@ -458,7 +467,7 @@ class MainWindow(QMainWindow, WindowMixin):
return x.toBool() return x.toBool()
return bool(x) return bool(x)
if xbool(settings.get('advanced', False)): if xbool(settings.get(SETTING_ADVANCE_MODE, False)):
self.actions.advancedMode.setChecked(True) self.actions.advancedMode.setChecked(True)
self.toggleAdvancedMode() self.toggleAdvancedMode()
@ -889,7 +898,7 @@ class MainWindow(QMainWindow, WindowMixin):
self.resetState() self.resetState()
self.canvas.setEnabled(False) self.canvas.setEnabled(False)
if filePath is None: if filePath is None:
filePath = self.settings.get('filename') filePath = self.settings.get(SETTING_FILENAME)
unicodeFilePath = ustr(filePath) unicodeFilePath = ustr(filePath)
# Tzutalin 20160906 : Add file list and dock to move faster # Tzutalin 20160906 : Add file list and dock to move faster
@ -999,26 +1008,26 @@ class MainWindow(QMainWindow, WindowMixin):
s = self.settings s = self.settings
# If it loads images from dir, don't load it at the begining # If it loads images from dir, don't load it at the begining
if self.dirname is None: if self.dirname is None:
s['filename'] = self.filePath if self.filePath else '' s[SETTING_FILENAME] = self.filePath if self.filePath else ''
else: else:
s['filename'] = '' s[SETTING_FILENAME] = ''
s['window/size'] = self.size() s[SETTING_WIN_SIZE] = self.size()
s['window/position'] = self.pos() s[SETTING_WIN_POSE] = self.pos()
s['window/state'] = self.saveState() s[SETTING_WIN_STATE] = self.saveState()
s['line/color'] = self.lineColor s[SETTING_LINE_COLOR] = self.lineColor
s['fill/color'] = self.fillColor s[SETTING_FILL_COLOR] = self.fillColor
s['recentFiles'] = self.recentFiles s[SETTING_RECENT_FILES] = self.recentFiles
s['advanced'] = not self._beginner s[SETTING_ADVANCE_MODE] = not self._beginner
if self.defaultSaveDir is not None and len(self.defaultSaveDir) > 1: if self.defaultSaveDir is not None and len(self.defaultSaveDir) > 1:
s['savedir'] = ustr(self.defaultSaveDir) s[SETTING_SAVE_DIR] = ustr(self.defaultSaveDir)
else: else:
s['savedir'] = "" s[SETTING_SAVE_DIR] = ""
if self.lastOpenDir is not None and len(self.lastOpenDir) > 1: if self.lastOpenDir is not None and len(self.lastOpenDir) > 1:
s['lastOpenDir'] = self.lastOpenDir s[SETTING_LAST_OPEN_DIR] = self.lastOpenDir
else: else:
s['lastOpenDir'] = "" s[SETTING_LAST_OPEN_DIR] = ""
## User Dialogs ## ## User Dialogs ##

11
libs/constants.py Normal file
View File

@ -0,0 +1,11 @@
SETTING_FILENAME = 'filename'
SETTING_RECENT_FILES = 'recentFiles'
SETTING_WIN_SIZE = 'window/size'
SETTING_WIN_POSE = 'window/position'
SETTING_WIN_GEOMETRY = 'window/geometry'
SETTING_LINE_COLOR = 'line/color'
SETTING_FILL_COLOR = 'fill/color'
SETTING_ADVANCE_MODE = 'advanced'
SETTING_WIN_STATE = 'window/state'
SETTING_SAVE_DIR = 'savedir'
SETTING_LAST_OPEN_DIR = 'lastOpenDir'

View File

@ -1,20 +1,32 @@
from unittest import TestCase from unittest import TestCase
import sys import sys
import os import os
dir_name = os.path.abspath(os.path.dirname(__file__))
libs_path = os.path.join(dir_name, '..', 'libs')
sys.path.insert(0, libs_path)
from pascal_voc_io import PascalVocWriter
from pascal_voc_io import PascalVocReader
# Test Write/Read class TestPascalVocRW(TestCase):
writer = PascalVocWriter('tests', 'test', (512, 512, 1), localImgPath='tests/test.bmp')
difficult = 1
writer.addBndBox(60, 40, 430, 504, 'person', difficult)
writer.addBndBox(113, 40, 450, 403, 'face', difficult)
writer.save('tests/test.xml')
reader = PascalVocReader('tests/test.xml') def test_upper(self):
shapes = reader.getShapes() dir_name = os.path.abspath(os.path.dirname(__file__))
libs_path = os.path.join(dir_name, '..', 'libs')
sys.path.insert(0, libs_path)
from pascal_voc_io import PascalVocWriter
from pascal_voc_io import PascalVocReader
# Test Write/Read
writer = PascalVocWriter('tests', 'test', (512, 512, 1), localImgPath='tests/test.bmp')
difficult = 1
writer.addBndBox(60, 40, 430, 504, 'person', difficult)
writer.addBndBox(113, 40, 450, 403, 'face', difficult)
writer.save('tests/test.xml')
reader = PascalVocReader('tests/test.xml')
shapes = reader.getShapes()
personBndBox = shapes[0]
face = shapes[1]
self.assertEqual(personBndBox[0], 'person')
self.assertEqual(personBndBox[1], [(60, 40), (430, 40), (430, 504), (60, 504)])
self.assertEqual(face[0], 'face')
self.assertEqual(face[1], [(113, 40), (450, 40), (450, 403), (113, 403)])
if __name__ == '__main__':
unittest.main()