home *** CD-ROM | disk | FTP | other *** search
/ Freelog 116 / FreelogNo116-JuilletSeptembre2013.iso / Bureautique / gImageReader / gimagereader_0.9-1_win32.exe / bin / gimagereader / filelist.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2011-03-24  |  9KB  |  196 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.7)
  3.  
  4. import os
  5. import sys
  6. import gtk
  7. import gobject
  8. import gettext
  9. import dialogs
  10. import re
  11. import tempfile
  12. import shutil
  13. import subprocess
  14. import glob
  15. import urllib
  16. import platform
  17. _ = gettext.gettext
  18. import dialogs
  19. import threadtools
  20.  
  21. class FileList:
  22.     
  23.     def __init__(self, builder, main):
  24.         self.main = main
  25.         self.drawingarea = main.get_drawingarea()
  26.         self.conf = main.get_config()
  27.         self.files = []
  28.         self.currentfile = None
  29.         self.curdir = os.path.expanduser('~')
  30.         self.timeouttag = None
  31.         self.builder = builder
  32.         self.vbox_filelist = builder.get_object('vbox_filelist')
  33.         self.FileList = builder.get_object('fileList')
  34.         self.tb_remove_image = builder.get_object('tb_remove_image')
  35.         self.tb_clear_filelist = builder.get_object('tb_clear_filelist')
  36.         self.window = self.builder.get_object('main')
  37.         self.status = self.builder.get_object('status_msg')
  38.         self.image_open_dialog = dialogs.image_open_dialog(self.window)
  39.         self.menu_toggle_sources = builder.get_object('menu_toggle_sources')
  40.         self.notebook_sources = builder.get_object('notebook_sources')
  41.         self.FileStore = gtk.ListStore(str, str)
  42.         self.FileList.set_model(self.FileStore)
  43.         column = gtk.TreeViewColumn(_('Images'), gtk.CellRendererText(), text = 0)
  44.         column.set_sizing(gtk.TREE_VIEW_COLUMN_GROW_ONLY)
  45.         column.set_sort_column_id(0)
  46.         self.FileList.append_column(column)
  47.         self.FileStore.set_sort_column_id(0, gtk.SORT_ASCENDING)
  48.         self.FileList.set_headers_clickable(True)
  49.         self.FileList.set_property('rules-hint', True)
  50.         self.tb_remove_image.set_sensitive(False)
  51.         self.tb_clear_filelist.set_sensitive(False)
  52.         recentfilter = gtk.RecentFilter()
  53.         recentfilter.add_pixbuf_formats()
  54.         recentfilter.add_mime_type('application/pdf')
  55.         recentfilter.add_pattern('*.pdf')
  56.         recentchooser = gtk.RecentChooserMenu()
  57.         recentchooser.set_local_only(False)
  58.         recentchooser.set_show_not_found(False)
  59.         recentchooser.set_show_tips(True)
  60.         recentchooser.set_sort_type(gtk.RECENT_SORT_MRU)
  61.         recentchooser.set_show_icons(platform.system() != 'Windows')
  62.         recentchooser.add_filter(recentfilter)
  63.         self.builder.get_object('menu_recent').set_submenu(recentchooser)
  64.         builder.get_object('tb_openimg').connect('clicked', self.open_images)
  65.         builder.get_object('menu_open').connect('activate', self.open_images)
  66.         builder.get_object('tb_add_image').connect('clicked', self.open_images)
  67.         self.FileList.get_selection().connect('changed', self._FileList__on_entry_selected)
  68.         self.tb_remove_image.connect('clicked', self.remove_image)
  69.         self.tb_clear_filelist.connect('clicked', self.clear)
  70.         recentchooser.connect(('item-activated',), (lambda w: self.open_images(None, [
  71. urllib.url2pathname(w.get_current_uri()[7:])])))
  72.  
  73.     
  74.     def __on_entry_selected(self, widget):
  75.         ''' Called when an entry in the list is selected. '''
  76.         selection = self.FileList.get_selection()
  77.         (model, iter) = selection.get_selected()
  78.         if iter == None or not self.FileStore.iter_is_valid(iter):
  79.             return None
  80.         if None.FileStore.get_value(iter, 1) != self.currentfile:
  81.             self._FileList__load_image(self.FileStore.get_value(iter, 1))
  82.         self.tb_remove_image.set_sensitive(True)
  83.  
  84.     
  85.     def suggest_output(self):
  86.         ''' Suggest an output file for the recognized text based on the current file. '''
  87.         return os.path.splitext(self.currentfile)[0] + '.txt'
  88.  
  89.     
  90.     def show(self):
  91.         ''' Shows the filelist in the left pane. '''
  92.         self.menu_toggle_sources.set_active(True)
  93.         self.notebook_sources.set_current_page(0)
  94.  
  95.     
  96.     def clear(self, widget = None):
  97.         ''' Clears the filelist. '''
  98.         self.FileStore.clear()
  99.         self.tb_remove_image.set_sensitive(False)
  100.         self.tb_clear_filelist.set_sensitive(False)
  101.         self.main.set_status(_('Select an image to begin...'))
  102.         self.window.set_title('gImageReader')
  103.         for obj in ('tb_zoomin', 'tb_zoomout', 'tb_resetzoom', 'tb_rrotate', 'tb_lrotate', 'menu_zoomin', 'menu_zoomout', 'menu_resetzoom', 'menu_rrotate', 'menu_lrotate', 'tb_doocr', 'toolbar_controls'):
  104.             self.builder.get_object(obj).set_sensitive(False)
  105.         
  106.         self.drawingarea.clear_image()
  107.         self.currentfile = None
  108.         self.files = []
  109.  
  110.     
  111.     def remove_image(self, widget = None):
  112.         ''' Removes the currently selected item from the filelist. '''
  113.         selection = self.FileList.get_selection()
  114.         (model, iter) = selection.get_selected()
  115.         path = int(model.get_string_from_iter(iter))
  116.         if path - 1 >= 0:
  117.             i = model.get_iter_from_string(str(path - 1))
  118.             self._FileList__load_image(self.FileStore.get_value(i, 1))
  119.             selection.select_path(path - 1)
  120.         elif path + 1 < len(model):
  121.             i = model.get_iter_from_string(str(path + 1))
  122.             self._FileList__load_image(self.FileStore.get_value(i, 1))
  123.             selection.select_path(path + 1)
  124.         else:
  125.             self.clear()
  126.             return None
  127.         None.files.remove(self.FileStore.get_value(iter, 1))
  128.         self.FileStore.remove(iter)
  129.  
  130.     
  131.     def open_images(self, widget = None, files = None):
  132.         ''' Opens the specified files. '''
  133.         if files == None:
  134.             files = self.image_open_dialog.run(self.curdir)
  135.         if not files:
  136.             return None
  137.         files = [ os.path.abspath(file) for file in files ]
  138.         newfiles = []
  139.         badfiles = []
  140.         for item in files:
  141.             if not os.path.isfile(item):
  142.                 badfiles.append(item)
  143.                 continue
  144.             if item not in self.files:
  145.                 newfiles.append(item)
  146.                 continue
  147.         if badfiles:
  148.             dialogs.error_dialog(_('Unable to open files'), _('Following files could not be opened:\n%s') % '\n'.join(badfiles))
  149.         for item in newfiles:
  150.             gtk.recent_manager_get_default().add_item('file:' + urllib.pathname2url(item))
  151.         
  152.         if not newfiles:
  153.             if self.currentfile in files:
  154.                 self._FileList__load_image(self.currentfile)
  155.             return None
  156.         None.files += newfiles
  157.         self.FileList.get_selection().select_iter(self.FileStore.append((newfiles[0].rsplit(os.sep)[-1], newfiles[0])))
  158.         for file in newfiles[1:]:
  159.             self.FileStore.append((file.rsplit(os.sep)[-1], file))
  160.         
  161.         self.tb_clear_filelist.set_sensitive(True)
  162.         if len(self.files) > 1:
  163.             self.show()
  164.  
  165.     
  166.     def __load_image(self, filename):
  167.         ''' Loads the specified file in the drawingarea. '''
  168.         if self.timeouttag != None:
  169.             return None
  170.         self.currentfile = None
  171.         threadtools.SubprocessThread(self.drawingarea.set_image, self._FileList__load_image_done, self.currentfile).start()
  172.         self.timeouttag = gobject.timeout_add(500, self.main.set_busy, True, _("Loading '%s'...") % self.currentfile)
  173.  
  174.     
  175.     def __load_image_done(self, result):
  176.         ''' Called when the image has finished loading. '''
  177.         
  178.         try:
  179.             gobject.source_remove(self.timeouttag)
  180.         except:
  181.             pass
  182.  
  183.         self.timeouttag = None
  184.         self.main.set_busy(False)
  185.         if result == False:
  186.             dialogs.error_dialog(_('Failed to load image'), _('The file might not be an image or be corrupted.'), self.window)
  187.             return None
  188.         self.curdir = None.path.dirname(self.currentfile)
  189.         self.window.set_title(os.path.basename(self.currentfile) + ' - gImageReader')
  190.         for obj in ('tb_zoomin', 'tb_zoomout', 'tb_resetzoom', 'tb_rrotate', 'tb_lrotate', 'menu_zoomin', 'menu_zoomout', 'menu_resetzoom', 'menu_rrotate', 'menu_lrotate', 'tb_doocr', 'toolbar_controls'):
  191.             self.builder.get_object(obj).set_sensitive(True)
  192.         
  193.         self.main.set_status(_('To recognize a specific area, drag a rectangle over it.'))
  194.  
  195.  
  196.