From da74046eb62302298c67e58cfcc070d7986e5b2c Mon Sep 17 00:00:00 2001 From: "beville@gmail.com" Date: Tue, 20 Nov 2012 06:34:09 +0000 Subject: [PATCH] Added some automatic settings for window size, last folder, tag style git-svn-id: http://comictagger.googlecode.com/svn/trunk@67 6c5673fe-1810-88d6-992b-cd32ca31540c --- settings.py | 33 ++++++++++++++++++++++++++++++--- tagger.py | 12 ++++++++---- taggerwindow.py | 38 +++++++++++++++++++++++++++++--------- utils.py | 31 +++++++------------------------ 4 files changed, 74 insertions(+), 40 deletions(-) diff --git a/settings.py b/settings.py index a4bad7c..50d02be 100644 --- a/settings.py +++ b/settings.py @@ -35,6 +35,14 @@ class ComicTaggerSettings: unrar_exe_path = "" cv_api_key = "" + # automatic settings + last_selected_data_style = 0 + last_opened_folder = None + last_main_window_width = 0 + last_main_window_height = 0 + last_main_window_x = 0 + last_main_window_y = 0 + @staticmethod def getSettingsFolder(): if platform.system() == "Windows": @@ -93,23 +101,42 @@ class ComicTaggerSettings: def load(self): - #print "reading", self.path self.config.read( self.settings_file ) self.rar_exe_path = self.config.get( 'settings', 'rar_exe_path' ) self.unrar_exe_path = self.config.get( 'settings', 'unrar_exe_path' ) - self.cv_api_key = self.config.get( 'settings', 'cv_api_key' ) + #self.cv_api_key = self.config.get( 'settings', 'cv_api_key' ) + self.last_selected_data_style = self.config.getint( 'auto', 'last_selected_data_style' ) + self.last_opened_folder = self.config.get( 'auto', 'last_opened_folder' ) + if self.config.has_option('auto', 'last_main_window_width'): + self.last_main_window_width = self.config.getint( 'auto', 'last_main_window_width' ) + if self.config.has_option('auto', 'last_main_window_height'): + self.last_main_window_height = self.config.getint( 'auto', 'last_main_window_height' ) + if self.config.has_option('auto', 'last_main_window_x'): + self.last_main_window_x = self.config.getint( 'auto', 'last_main_window_x' ) + if self.config.has_option('auto', 'last_main_window_y'): + self.last_main_window_y = self.config.getint( 'auto', 'last_main_window_y' ) def save( self ): if not self.config.has_section( 'settings' ): self.config.add_section( 'settings' ) - self.config.set( 'settings', 'cv_api_key', self.cv_api_key ) + #self.config.set( 'settings', 'cv_api_key', self.cv_api_key ) self.config.set( 'settings', 'rar_exe_path', self.rar_exe_path ) self.config.set( 'settings', 'unrar_exe_path', self.unrar_exe_path ) + if not self.config.has_section( 'auto' ): + self.config.add_section( 'auto' ) + + self.config.set( 'auto', 'last_selected_data_style', self.last_selected_data_style ) + self.config.set( 'auto', 'last_opened_folder', self.last_opened_folder ) + self.config.set( 'auto', 'last_main_window_width', self.last_main_window_width ) + self.config.set( 'auto', 'last_main_window_height', self.last_main_window_height ) + self.config.set( 'auto', 'last_main_window_x', self.last_main_window_x ) + self.config.set( 'auto', 'last_main_window_y', self.last_main_window_y ) + with open( self.settings_file, 'wb') as configfile: self.config.write(configfile) diff --git a/tagger.py b/tagger.py index f722c60..e4420f0 100755 --- a/tagger.py +++ b/tagger.py @@ -39,7 +39,7 @@ from genericmetadata import GenericMetadata from comicvinetalker import ComicVineTalker import utils - +import codecs #----------------------------- def cli_mode( opts, settings ): @@ -98,9 +98,9 @@ def process_file_cli( filename, opts, settings ): if cix: print "------ComicRack tags--------" if opts.raw: - print u"{0}".format(ca.readRawCIX()).encode("utf-8") + print u"{0}".format(ca.readRawCIX()) else: - print u"{0}".format(ca.readCIX()).encode("utf-8") + print u"{0}".format(ca.readCIX()) if opts.data_style is None or opts.data_style == MetaDataStyle.CBI: if cbi: @@ -108,7 +108,7 @@ def process_file_cli( filename, opts, settings ): if opts.raw: pprint(json.loads(ca.readRawCBI())) else: - print u"{0}".format(ca.readCBI()).encode("utf-8") + print u"{0}".format(ca.readCBI()) elif opts.delete_tags: @@ -229,6 +229,10 @@ def process_file_cli( filename, opts, settings ): #----------------------------- def main(): + + # try to make stdout encodings happy for unicode + sys.stdout = codecs.getwriter('utf8')(sys.stdout) + opts = Options() opts.parseCmdLineArgs() diff --git a/taggerwindow.py b/taggerwindow.py index e4600fc..6b6d586 100644 --- a/taggerwindow.py +++ b/taggerwindow.py @@ -81,15 +81,21 @@ class TaggerWindow( QtGui.QMainWindow): self.setWindowIcon(QtGui.QIcon(os.path.join(ComicTaggerSettings.baseDir(), 'graphics/app.png' ))) self.lblCover.setPixmap(QtGui.QPixmap(os.path.join(ComicTaggerSettings.baseDir(), 'graphics/nocover.png' ))) - self.center() - self.show() - self.raise_() #print platform.system(), platform.release() self.dirtyFlag = False self.settings = settings - self.data_style = MetaDataStyle.CIX - + self.data_style = settings.last_selected_data_style + + if self.settings.last_main_window_width != 0: + geo = QtCore.QRect( self.settings.last_main_window_x, + self.settings.last_main_window_y, + self.settings.last_main_window_width, + self.settings.last_main_window_height ) + self.setGeometry( geo ) + else: + self.center() + #set up a default metadata object self.metadata = GenericMetadata() self.comic_archive = None @@ -99,7 +105,7 @@ class TaggerWindow( QtGui.QMainWindow): self.updateAppTitle() self.setAcceptDrops(True) self.updateSaveMenu() - self.droppedFile=None + self.droppedFile = None self.page_browser = None @@ -116,9 +122,13 @@ class TaggerWindow( QtGui.QMainWindow): self.updateStyleTweaks() + self.show() + self.raise_() + if filename is not None: self.openArchive( filename ) + def updateAppTitle( self ): if self.comic_archive is None: @@ -222,9 +232,7 @@ class TaggerWindow( QtGui.QMainWindow): self.toolBar.addAction( self.actionAutoSearch ) self.toolBar.addAction( self.actionClearEntryForm ) self.toolBar.addAction( self.actionPageBrowser ) - #self.toolBar.addAction( self.actionRemoveCBLTags ) - #self.toolBar.addAction( self.actionRemoveCRTags ) - + def repackageArchive( self ): QtGui.QMessageBox.information(self, self.tr("Repackage Comic Archive"), self.tr("TBD")) @@ -274,6 +282,8 @@ class TaggerWindow( QtGui.QMainWindow): if ca is not None and ca.seemsToBeAComicArchive(): + self.settings.last_opened_folder = os.path.dirname( path ) + # clear form and current metadata, we're all in! if clear_form: self.clearForm() @@ -665,6 +675,8 @@ class TaggerWindow( QtGui.QMainWindow): dialog = QtGui.QFileDialog(self) dialog.setFileMode(QtGui.QFileDialog.ExistingFile) + if self.settings.last_opened_folder is not None: + dialog.setDirectory( self.settings.last_opened_folder ) #dialog.setFileMode(QtGui.QFileDialog.Directory ) if platform.system() != "Windows" and utils.which("unrar") is None: @@ -768,6 +780,8 @@ class TaggerWindow( QtGui.QMainWindow): def setDataStyle(self, s): self.data_style, b = self.cbDataStyle.itemData(s).toInt() + + self.settings.last_selected_data_style = self.data_style self.updateStyleTweaks() self.updateSaveMenu() @@ -1103,6 +1117,12 @@ class TaggerWindow( QtGui.QMainWindow): if self.dirtyFlagVerification( "Exit " + self.appName, "If you quit now, data in the form will be lost. Are you sure?"): + geo = self.geometry() + self.settings.last_main_window_width = geo.width() + self.settings.last_main_window_height = geo.height() + self.settings.last_main_window_x = geo.x() + self.settings.last_main_window_y = geo.y() + self.settings.save() event.accept() else: event.ignore() diff --git a/utils.py b/utils.py index f8cdf07..a022af1 100644 --- a/utils.py +++ b/utils.py @@ -31,8 +31,14 @@ def listToString( l ): string += item return string +def addtopath( dir ): + # TODO only add if not there already + if dir is not None and dir != "": + os.environ['PATH'] = dir + os.pathsep + os.environ['PATH'] + +# returns executable path, if it exists def which(program): - import os + def is_exe(fpath): return os.path.isfile(fpath) and os.access(fpath, os.X_OK) @@ -48,29 +54,6 @@ def which(program): return None -def addtopath( dir ): - # TODO only add if not there already - if dir is not None and dir != "": - os.environ['PATH'] = dir + os.pathsep + os.environ['PATH'] - -# returns executable path, if it exists -def which(program): - import os - def is_exe(fpath): - return os.path.isfile(fpath) and os.access(fpath, os.X_OK) - - fpath, fname = os.path.split(program) - if fpath: - if is_exe(program): - return program - else: - for path in os.environ["PATH"].split(os.pathsep): - exe_file = os.path.join(path, program) - if is_exe(exe_file): - return exe_file - - return None - def removearticles( text ): text = text.lower() articles = ['and', 'the', 'a', '&', 'issue' ]