[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.
|