Beispiel #1
0
    def __init__(self, parent=None):
        '''docstring for __init__'''

        self.app = QtGui.QApplication(sys.argv)

        #set multilangimport locale
        import locale
        LANG = locale.getlocale()[0]
        print LANG
        if LANG:
            LANG = LANG.split('_')[0]
        else:
            LANG = 'en'
        translator = QtCore.QTranslator(self.app)

        translator.load(
                'quimge_%s.qm'%LANG,
                '/home/apkawa/Code/uimge/quimge/quimge/locale'
                ) #FIXME
        self.app.installTranslator(translator)

        #Load setting
        self.Setting = Setting()
        self.start_dir = self.Setting.get('startdir', None )
        if not self.start_dir:
            self.lastdir = self.Setting.get('lastdir', self.start_dir )
        else:
            self.lastdir = self.start_dir
        self.default_host = self.Setting.get('default_host', 'radikal.ru')
        _style = self.Setting.get('style')
        #end load setting


        QtGui.QWidget.__init__(self, parent)
        self.app.setStyle( _style)
        self.WidgetsTree = Ui_qUimge_main()
        self.WidgetsTree.setupUi( self )
        self.setWindowTitle('quimge %s'%VERSION)

        self.event_loop = QtCore.QEventLoop()

        self.clipboard = self.app.clipboard()
        self.progressBar = self.WidgetsTree.progressBar
        self.progressBar.setMinimum( 0)
        self.BoxProgress = self.WidgetsTree.BoxProgress
        self.BoxProgress.hide()

        self.upload_list = self.WidgetsTree.UploadList
        self.WidgetsTree.UploadTab.installEventFilter( self) #set key press for upload tab

        self.about_dialog = About(self)
        self.setting_dialog = qUimge_setting_dialog( self.Setting, self)

        style = self.app.style()
        self._init_SIGNALS()
        
        self.SelectHost = self.WidgetsTree.SelectHost
        make_hosts_combobox(self.SelectHost, self.default_host)

        self.WidgetsTree.ModePrint.addItem(
                "Direct url", QtCore.QVariant("Direct") )
        for k, v in self.Outprint.outprint_rules.items():
            self.WidgetsTree.ModePrint.addItem( v['desc'],
                    QtCore.QVariant( k) )
        self.WidgetsTree.Delimiter.addItem(r"\n")
Beispiel #2
0
class qUimge( QtGui.QMainWindow ):
    Uimge = uimge.Uimge()
    Outprint = uimge.Outprint()
    stop = False
    delimiter = r'\n'
    image_type = ('.png', '.jpe', '.jpg', '.jpeg', '.gif', '.bmp')
    def __init__(self, parent=None):
        '''docstring for __init__'''

        self.app = QtGui.QApplication(sys.argv)

        #set multilangimport locale
        import locale
        LANG = locale.getlocale()[0]
        print LANG
        if LANG:
            LANG = LANG.split('_')[0]
        else:
            LANG = 'en'
        translator = QtCore.QTranslator(self.app)

        translator.load(
                'quimge_%s.qm'%LANG,
                '/home/apkawa/Code/uimge/quimge/quimge/locale'
                ) #FIXME
        self.app.installTranslator(translator)

        #Load setting
        self.Setting = Setting()
        self.start_dir = self.Setting.get('startdir', None )
        if not self.start_dir:
            self.lastdir = self.Setting.get('lastdir', self.start_dir )
        else:
            self.lastdir = self.start_dir
        self.default_host = self.Setting.get('default_host', 'radikal.ru')
        _style = self.Setting.get('style')
        #end load setting


        QtGui.QWidget.__init__(self, parent)
        self.app.setStyle( _style)
        self.WidgetsTree = Ui_qUimge_main()
        self.WidgetsTree.setupUi( self )
        self.setWindowTitle('quimge %s'%VERSION)

        self.event_loop = QtCore.QEventLoop()

        self.clipboard = self.app.clipboard()
        self.progressBar = self.WidgetsTree.progressBar
        self.progressBar.setMinimum( 0)
        self.BoxProgress = self.WidgetsTree.BoxProgress
        self.BoxProgress.hide()

        self.upload_list = self.WidgetsTree.UploadList
        self.WidgetsTree.UploadTab.installEventFilter( self) #set key press for upload tab

        self.about_dialog = About(self)
        self.setting_dialog = qUimge_setting_dialog( self.Setting, self)

        style = self.app.style()
        self._init_SIGNALS()
        
        self.SelectHost = self.WidgetsTree.SelectHost
        make_hosts_combobox(self.SelectHost, self.default_host)

        self.WidgetsTree.ModePrint.addItem(
                "Direct url", QtCore.QVariant("Direct") )
        for k, v in self.Outprint.outprint_rules.items():
            self.WidgetsTree.ModePrint.addItem( v['desc'],
                    QtCore.QVariant( k) )
        self.WidgetsTree.Delimiter.addItem(r"\n")

    def run(self, files=None):
        '''docstring for run'''
        self.show()
        self._initFileListIcons(files)
        sys.exit( self.app.exec_() )

    def update_setting(self):
        self._set_current_host()
        #self.Setting.set('default_host', self.default_host)
        self.Setting.set('lastdir', self.lastdir)
        self.Setting.save()

    def exit(self):
        self.close()
        self.update_setting()
        sys.exit()

    def eventFilter(self, obj, event):
        #http://www.commandprompt.com/community/pyqt/x5469
        #http://www.nabble.com/Mayavi,-VTK-and-PyQt-td21894370.html
        #        print obj, event
        if type(event) == QtGui.QKeyEvent:
            if QtGui.QKeySequence.Delete == event:
                self._clear_selected()
        return QtGui.QWidget.eventFilter(self, obj, event)

    def keyPress_Event(self, event):
        print event
        event.ignore()

    def dragEnterEvent(self, event):
        if event.mimeData().hasUrls():
            event.acceptProposedAction()

    def dropEvent(self, event):
        self._add_files([u.path() for u in event.mimeData().urls()])

    def _init_SIGNALS(self):
        '''docstring for _init_SIGNALS'''
        connect = self.connect
        SIGNAL = QtCore.SIGNAL
        SLOT = QtCore.SLOT
        connect(self.WidgetsTree.action_Open,
                SIGNAL("activated()"), self._open_file)

        connect(self.WidgetsTree.actionExit,
                SIGNAL("activated()"), self.exit)
        connect(self.WidgetsTree.actionExit_2,
                SIGNAL("activated()"), self.exit)

        connect(self.WidgetsTree.actionLoad_images,
                SIGNAL("activated()"), self._open_file)
        connect(self.WidgetsTree.actionLoad_images_from_folder,
                SIGNAL("activated()"), self._open_folder)
        connect(self.WidgetsTree.actionUpload,
                SIGNAL("activated()"), self._upload)
        connect(self.WidgetsTree.actionUpload_2,
                SIGNAL("activated()"), self._upload)
        connect(self.WidgetsTree.actionClipboard,
                SIGNAL("activated()"), self._copy_to_clipboard)
        connect(self.WidgetsTree.actionAbout,
                SIGNAL("activated()"), self.about_dialog.exec_ )
        connect(self.WidgetsTree.actionPreferences,
                SIGNAL("activated()"), self.setting_dialog.exec_ )
        connect(self.WidgetsTree.actionPreferences_2,
                SIGNAL("activated()"), self.setting_dialog.exec_ )

        connect(self.WidgetsTree.StopButton,
                SIGNAL("clicked()"), self._stop_process )
        connect(self.WidgetsTree.ModePrint,
                SIGNAL("textChanged(QString)"), self._update_result)
        connect(self.WidgetsTree.Delimiter,
                SIGNAL("textChanged(QString)"), self._set_delim)
        connect(self.WidgetsTree.DeleteSelected,
                SIGNAL("clicked()"), self._clear_selected)

        connect( self.upload_list,
                SIGNAL("itemSelectionChanged()"), self._update_summary)
        connect( self.WidgetsTree.ClearUploadList,
                SIGNAL("clicked()"), self._update_summary)
        connect( self.WidgetsTree.DeleteSelected,
                SIGNAL("clicked()"), self._update_summary)

    def _initFileListIcons(self, filenames=None):
        '''
        Create File List
        '''
        self._update_summary()
        if filenames:
            self._add_files( filenames )

    def _add_file(self, fileinfo):
        '''docstring for _add_file'''
        thumb_size = 100
        max_length_filename = thumb_size/9

        path = fileinfo.filePath()
        px = QPixmap( path )
        if px.size().isNull():
            return
        filename = fileinfo.fileName()
        size = fileinfo.size()
        size_str = human( size )

        if len(filename) > max_length_filename:
            filename = '%s...%s'%(
                    filename[0:max_length_filename/2 ],
                    filename[-max_length_filename/2:],
                    )
        else:
            filename = '%s'%(
                    filename,
                    )

        text_item ="%(name)s \n [%(size)s]"%{'size': size_str, 'name':filename }

        icon = QIcon()
        icon.addPixmap( px.scaledToHeight( thumb_size )  )
        data = {
                QString('path'): path ,
                QString('size'): size,
                QString('human_size'): size_str,
                QString('fileinfo'):fileinfo,
                }
        item = QtGui.QListWidgetItem( icon, text_item, self.upload_list )
        item.setData( QtCore.Qt.UserRole,QtCore.QVariant( data ) )
        item.setToolTip( path)
        item.setSizeHint( QtCore.QSize( thumb_size+23,thumb_size+46) )

    def _add_files(self, _files):
        '''docstring for _add_files'''
        file_list = []
        for f in _files:
            f = QtCore.QFileInfo(f)
            if f.isFile():
                file_list.append(f)
            else:
                for filename in QtCore.QDir( f.absoluteFilePath() ).entryInfoList():
                    if filename.isFile():
                        file_list.append( filename )

        current_file_count = 0
        files_count = len(file_list)

        self.WidgetsTree.tabWidget.setCurrentIndex(0)

        self._stop_process(False)
        self.BoxProgress.show()
        self.progressBar.setMaximum( files_count )
        for f in file_list:
            self.progressBar.setValue( current_file_count )
            self._add_file( f)
            while self.app.processEvents():
                pass
            if self.stop:
                break
            self._update_summary()
            current_file_count += 1

        self.BoxProgress.hide()
        self.progressBar.setValue(0)

    def _update_summary(self):
        '''docstring for calculate_summary'''
        all_files = self.upload_list.count()
        all_size  = 0
        selected  = 0
        selected_size = 0L
        for i in xrange(all_files):
            item = self.upload_list.item(i)
            data = item.data( QtCore.Qt.UserRole).toPyObject()
            size = data.get( QString('size') )
            all_size += size
            if item.isSelected():
                selected += 1
                selected_size += size
        if selected:
            status_str = unicode(
                        self.tr("Selected %s images (%s)" )
                    )%( selected, human( selected_size))
        else:
            status_str = unicode(
                    self.tr("%s images (%s)"))%( all_files, human( all_size) )

        self.WidgetsTree.statusBar.showMessage( status_str )

    def __open_file(self):#DELETEME
        '''docstring for _open_file
        Вызывается чисто Qt диалог без предпросмотра.
        '''
        _args = ( self,
                  "Select images",
                  self.lastdir,
                  "Images (*%s)" % ' *'.join([ i for i in self.image_type])
                  )
        dialog = QtGui.QFileDialog( *_args )
        dialog.setFileMode( QtGui.QFileDialog.AnyFile)
        dialog.setViewMode( QtGui.QFileDialog.Detail)
        dialog.setOption( QtGui.QFileDialog.DontUseNativeDialog, False)
        dialog.setOption( QtGui.QFileDialog.DontUseSheet, True)
        if dialog.exec_():
            filename = dialog.selectedFiles()
            print dialog.directory().path()
            self._add_files( filename)

    def _open_file(self):
        '''docstring for _open_file'''
        _args = ( self,
                  self.tr("Select images"),
                  self.lastdir,
                  unicode(
                      self.tr("Images (*%s)")) % ' *'.join(
                          [ i for i in self.image_type]
                          )
                  )
        filenames = QtGui.QFileDialog( ).getOpenFileNames( *_args )
        if filenames:
            self.lastdir = QtCore.QFileInfo( filenames[0] ).absolutePath()
            self._add_files( filenames )

    def _open_folder(self):
        '''docstring for _open_folder'''
        dialog = QtGui.QFileDialog( )
        filename = dialog.getExistingDirectory(self,
                self.tr("Select folder"),
                self.lastdir )
        if filename:
            self.lastdir = QtCore.QFileInfo( filename ).absoluteFilePath()
            self._add_files( [filename])

    def _clear_selected(self):
        '''docstring for _clear_selected'''
        items = self.upload_list.selectedItems()
        for i in items:
            it = self.upload_list.takeItem( self.upload_list.row(i))
            it = None
        self._update_summary()
        self._update_result()

    def _set_current_host( self):
        cur_h  = self.SelectHost.currentIndex()
        host, obj = self.SelectHost.itemData(cur_h).toPyObject()
        self.Uimge.set_host(obj)

    def _upload(self):
        '''docstring for _upload'''
        def preupload():
            self._stop_process(False)
            self._set_current_host()
            self.WidgetsTree.actionUpload.setEnabled(False)
            self.WidgetsTree.actionUpload_2.setEnabled(False)
            self.BoxProgress.show()
        def postupload():
            self.BoxProgress.hide()
            self.progressBar.setValue( 0 )
            self._update_result()
            self.WidgetsTree.actionUpload.setEnabled(True)
            self.WidgetsTree.actionUpload_2.setEnabled(True)
            self.WidgetsTree.tabWidget.setCurrentIndex(1)

        upload_thread = UploadThread(self)

        count = self.upload_list.count()
        self.progressBar.setMaximum( count )
        preupload()

        for i in xrange( count ):
            item = self.upload_list.item(i)
            data = item.data( QtCore.Qt.UserRole).toPyObject()
            path = data.get( QString('path') )
            upload_thread.setup( self.Uimge, unicode(path).encode("utf-8"))
            upload_thread.start()
            while upload_thread.isRunning():
                self.app.processEvents()
            data[QString('result')]= upload_thread.result()
            item.setData( QtCore.Qt.UserRole,QtCore.QVariant( data ) )
            self.progressBar.setValue( i )
            if self.stop:
                break

        postupload()

    def _update_result(self, index_or_str=None):
        '''docstring for _update_result'''
        if index_or_str:
            mp = self.WidgetsTree.ModePrint
            ci = mp.currentIndex()
            item_data = mp.itemData( ci )
            if type( index_or_str ) == QString:
                if mp.itemData(ci).isNull():
                    self.Outprint.set_rules( usr=str(index_or_str) )
                else:
                    self.Outprint.set_rules( key=str( item_data.toString()) )

        result_list =[self.upload_list.item( i)\
                        .data(QtCore.Qt.UserRole)\
                        .toPyObject()\
                        .get( QString('result') )
                        for i in xrange(self.upload_list.count())]

        _result = self.delimiter.join(
                [ self.Outprint.get_out( *r ) for r in result_list if r ]
                )
        if _result:
            self.WidgetsTree.ResultText.setPlainText( _result)
            self._copy_to_clipboard()
            return True
        else:
            return False

    def _set_delim(self, delim):
        self.delimiter = str(self.WidgetsTree.Delimiter.currentText()).replace("\\n",'\n')
        self._update_result()

    def _copy_to_clipboard(self):
        '''docstring for copy_to_clipboard'''
        self.clipboard.clear()
        text = self.WidgetsTree.ResultText.toPlainText()
        self.clipboard.setText( text)

    def _stop_process(self, flag=True):
        '''docstring for _stop_process'''
        self.stop = flag
        pass

    def _test(self):
        def StandardIcon():
            for d in dir(QtGui.QStyle):
                if d.startswith('SP_'):
                    icon = self.app.style().standardIcon( QtGui.QStyle.__dict__[d] )
                    icon.actualSize( QtCore.QSize( 50,50) )
                    item = QtGui.QListWidgetItem( icon, d , self.upload_list)
                    item.setSizeHint( QtCore.QSize( 100+23,100+46) )
        t = UploadThread(self)
        t.setup( "Nyaaaa")
        print t.run()