[Pycodeocr-main] SF.net SVN: pycodeocr:[24] PyCodeOCR.py
Status: Beta
Brought to you by:
drtrigon
From: <la...@us...> - 2010-09-11 07:34:43
|
Revision: 24 http://pycodeocr.svn.sourceforge.net/pycodeocr/?rev=24&view=rev Author: laserb Date: 2010-09-11 07:34:37 +0000 (Sat, 11 Sep 2010) Log Message: ----------- init sane after GUI is loaded. this way we can give feedback what we are doing. / first try to allow a graphical possibility to select a device if more than one is found. (maybe not so nice, but simple) Modified Paths: -------------- PyCodeOCR.py Modified: PyCodeOCR.py =================================================================== --- PyCodeOCR.py 2010-09-11 07:31:54 UTC (rev 23) +++ PyCodeOCR.py 2010-09-11 07:34:37 UTC (rev 24) @@ -3,8 +3,9 @@ # python standard modules -import os, re, sys, subprocess, time +import os, re, sys, subprocess, time, gobject + # GTK, PyGTK, GLADE (GNOME) modules import pygtk pygtk.require('2.0') @@ -89,6 +90,7 @@ def __init__(self): """ ... """ # retrieve widgets + # window1 - main window self.gladefile = raw_path + ".glade" self.xml = gtk.glade.XML(self.gladefile) self.window1 = self.xml.get_widget('window1') @@ -109,6 +111,10 @@ self.radiobutton1 = self.xml.get_widget('radiobutton1') self.radiobutton2 = self.xml.get_widget('radiobutton2') self.filechooserbutton1 = self.xml.get_widget('filechooserbutton1') + # window2 - sane + self.window2 = self.xml.get_widget('window2') + self.treeview1 = self.xml.get_widget('treeview1') + self.button3 = self.xml.get_widget('button3') # initiate orientation and position self.combobox1.set_active(0) @@ -132,17 +138,57 @@ # connect signal handlers self.xml.signal_autoconnect( self ) + # take some time to init sane - self.init_sane() + #self.init_sane() + # init sane when idle, hopefully this is right after GUI is loaded + gobject.idle_add(self.init_sane) + + # display window self.window1.show() return def init_sane(self, source=None): - self.run_sane = RunSANE() + # lock window + self.window1.set_sensitive(False) + # init sane + self.run_sane = RunSANE(self.progress, self.window2, self.treeview1) + # try to set sensitivity, fails if no scanner is initialized yet + try: + self.init_sensitivity() + except: + # set default row to first + self.treeview1.set_cursor(0) + + # show window with device list + # choose device and press ok to initialize scanner + self.window2.show() + + return False + + + def run(self): + """ Run gtk mainloop and with it THIS APP. """ + gtk.main() + + # signals / glade callbacks + # + def on_button3_clicked(self, source=None): + # get selection from treeview + devnr = self.treeview1.get_cursor()[0][0] + # hide window + self.window2.destroy() + # init scanner + self.run_sane.init_scanner(self.progress, self.window2, self.treeview1, devnr) + # set sensitivity + self.init_sensitivity() + + def init_sensitivity(self): + # set sensitivity if self.run_sane.found_scanner: self.radiobutton2.set_active(True) self.radiobutton2.set_sensitive(True) @@ -150,20 +196,16 @@ self.radiobutton1.set_active(True) self.radiobutton2.set_sensitive(False) self.on_radiobutton1_toggled() - self.progressbar1.set_text("No sane device found.") + self.progress(0.,"No SANE device found. Use file input instead.") self.button1.set_visible(True) - - #Try to set orientation and placement sensitive. Will fail if no device is found + + # unlock window + self.window1.set_sensitive(True) + + # Try to set orientation and placement sensitive. Will fail if no device is found self.toggle_orientation_sensitive(True) self.toggle_placement_sensitive(True) - - - def run(self): - """ Run gtk mainloop and with it THIS APP. """ - gtk.main() - - # signals / glade callbacks - # + def on_spinbutton_value_changed(self, source=None, event=None): """ Spinbutton value changed signal handler. """ self.scan_koords = (self.spinbutton1.get_value(),self.spinbutton2.get_value(), @@ -237,6 +279,16 @@ def on_window1_destroy(self, source=None, event=None): """ Window closed signal handler. """ gtk.main_quit() + + def on_window2_destroy(self, source=None): + # when windows is closed by pressing the x-button + # choose first device + if source != None: + devnr = 0 + # init scanner + self.run_sane.init_scanner(self.progress, self.window2, self.treeview1, devnr) + # set sensitivity + self.init_sensitivity() def on_radiobutton1_toggled(self, source=None, event=None): #self.filechooserbutton1.set_sensitive( self.radiobutton1.get_active() ) @@ -244,14 +296,13 @@ def on_radiobutton2_toggled(self, source=None, event=None): self.on_combobox2_changed() - + def on_filechooserbutton1_file_set(self, source=None): self.radiobutton1.set_active(True) self.inp_file = self.filechooserbutton1.get_filename() if not os.path.exists(self.inp_file): self.progress(0., "File not found!") return None - def toggle_orientation_sensitive(self, value): self.label5.set_sensitive(value) @@ -351,6 +402,12 @@ # (2/?) self.progress(2./max_steps, "Adjusting image/picture data...") mode = self.mode + try: + self.inp_file + except: + print "No input file. Please select input file or SANE Interface." + #self.progress(0., "No input file. Please select input file or SANE Interface.") + return None self.run_convert = RunExternal(self.cmd_convert % (self.inp_file, mode, self.temp+opt['tmp_file']), error_msg=[ "convert: unable to open image" ]) # self.run_convert = RunMagickWand(inp_file, mode*90, self.temp+opt['tmp_file']) # improve quality by using imagemagicks filter and conversion capabilities... @@ -724,39 +781,79 @@ resolution = 600 - def __init__(self): + def __init__(self, progress, window2, treeview): """ Init of sane and scanner. """ print "init sane python interface ...", sys.stdout.flush() # Get the path set up properly #sys.path.append('.') + + # create treeview things + list_store = gtk.ListStore(gobject.TYPE_STRING) + treeview.set_model(list_store) + col = gtk.TreeViewColumn("Devices", gtk.CellRendererText(),text=0) + treeview.append_column(col) # init SANE + self.n=4. + progress(0.,"init sane python interface ...") try: - devnr = 0 self.version = sane.init() + progress(1./self.n,"init sane python interface ... search devices") self.devices = sane.get_devices() print "\n" + # add found devices to treeview for i in range(len(self.devices)): print str(i)+": "+self.devices[i][1]+" "+self.devices[i][2] - if len(self.devices) > 1 and sys.argv[1:]: - devnr = raw_input("Choose device: ") + list_store.append([self.devices[i][1]+" "+self.devices[i][2]]) + + # check how many devices we found + if len(self.devices) > 1: + # more than one device, choose one. + progress(2./self.n,"More than one device found.") + if sys.argv[1:]: + # choose one by command line + devnr = raw_input("Choose device: ") + progress(2./self.n,"More than one device found. Choose device number %i" % devnr) + # continue to init scanner + self.init_scanner(progress, window2, treeview, devnr) + else: + # simply continue and select device in GUI ( look in init_sane ) + progress(2./self.n,"More than one device found.") + else: + # only one device found + progress(2./self.n,"Device: %s" % self.devices[0][1]+" "+self.devices[0][2]) + # continue to init scanner + self.init_scanner(progress, window2, treeview, 0) + + except: + # No device found at all + self.found_scanner = False + print "No sane device found. Restart to try it again." + + def init_scanner(self, progress, window2, treeview, devnr): + + try: + # finish init device self.dev = sane.get_devices()[devnr][0] # choose first device - + progress(3./self.n,"Device initialized. Open scanner...") + # open scanner device self.scanner = sane.open(self.dev) self.params = self.scanner.get_parameters() self.opts = self.scanner.get_options() - + self.found_scanner = True - + + progress(4./self.n,"Ready.") print "done." - + except: + # init scanner failed. maybe device has no scanner self.found_scanner = False - print "No sane device found." + print "Loading sane device failed. Restart to try it again." def post_init(self, coords, out_filename): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |