~ubuntu-branches/debian/wheezy/calibre/wheezy

« back to all changes in this revision

Viewing changes to src/calibre/gui2/__init__.py

  • Committer: Bazaar Package Importer
  • Author(s): Martin Pitt
  • Date: 2009-09-18 01:18:18 UTC
  • mto: (29.1.1 sid)
  • mto: This revision was merged to the branch mainline in revision 16.
  • Revision ID: james.westby@ubuntu.com-20090918011818-2whiyzgvx59c7b7t
Tags: upstream-0.6.12+dfsg
ImportĀ upstreamĀ versionĀ 0.6.12+dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
3
3
""" The GUI """
4
4
import os
5
5
from PyQt4.QtCore import QVariant, QFileInfo, QObject, SIGNAL, QBuffer, Qt, QSize, \
6
 
                         QByteArray, QUrl, QTranslator, QCoreApplication, QThread
 
6
                         QByteArray, QTranslator, QCoreApplication, QThread
7
7
from PyQt4.QtGui import QFileDialog, QMessageBox, QPixmap, QFileIconProvider, \
8
8
                        QIcon, QTableView, QApplication, QDialog, QPushButton
9
9
 
10
10
ORG_NAME = 'KovidsBrain'
11
11
APP_UID  = 'libprs500'
12
12
from calibre import islinux, iswindows, isosx
13
 
from calibre.startup import get_lang
14
13
from calibre.utils.config import Config, ConfigProxy, dynamic
15
 
import calibre.resources as resources
 
14
from calibre.utils.localization import set_qt_translator
16
15
from calibre.ebooks.metadata.meta import get_metadata, metadata_from_formats
17
16
from calibre.ebooks.metadata import MetaInformation
18
17
 
24
23
 
25
24
def _config():
26
25
    c = Config('gui', 'preferences for the calibre GUI')
27
 
    c.add_opt('frequently_used_directories', default=[],
28
 
              help=_('Frequently used directories'))
29
26
    c.add_opt('send_to_storage_card_by_default', default=False,
30
27
              help=_('Send file to storage card instead of main memory by default'))
31
28
    c.add_opt('confirm_delete', default=False,
84
81
        help='Search history for the LRF viewer')
85
82
    c.add_opt('scheduler_search_history', default=[],
86
83
        help='Search history for the recipe scheduler')
 
84
    c.add_opt('worker_limit', default=6,
 
85
            help=_('Maximum number of waiting worker processes'))
87
86
 
88
87
    return ConfigProxy(c)
89
88
 
170
169
    d = MessageBox(QMessageBox.Warning, 'WARNING: '+title, msg, QMessageBox.Ok,
171
170
                    parent, det_msg)
172
171
    d.setEscapeButton(QMessageBox.Ok)
173
 
    d.setIconPixmap(QPixmap(':/images/dialog_warning.svg'))
 
172
    d.setIconPixmap(QPixmap(I('dialog_warning.svg')))
174
173
    if show:
175
174
        return d.exec_()
176
175
    return d
178
177
def error_dialog(parent, title, msg, det_msg='', show=False):
179
178
    d = MessageBox(QMessageBox.Critical, 'ERROR: '+title, msg, QMessageBox.Ok,
180
179
                    parent, det_msg)
181
 
    d.setIconPixmap(QPixmap(':/images/dialog_error.svg'))
 
180
    d.setIconPixmap(QPixmap(I('dialog_error.svg')))
182
181
    d.setEscapeButton(QMessageBox.Ok)
183
182
    if show:
184
183
        return d.exec_()
187
186
def question_dialog(parent, title, msg, det_msg=''):
188
187
    d = MessageBox(QMessageBox.Question, title, msg, QMessageBox.Yes|QMessageBox.No,
189
188
                    parent, det_msg)
190
 
    d.setIconPixmap(QPixmap(':/images/dialog_information.svg'))
 
189
    d.setIconPixmap(QPixmap(I('dialog_information.svg')))
191
190
    d.setEscapeButton(QMessageBox.No)
192
191
    return d.exec_() == QMessageBox.Yes
193
192
 
194
193
def info_dialog(parent, title, msg, det_msg='', show=False):
195
194
    d = MessageBox(QMessageBox.Information, title, msg, QMessageBox.Ok,
196
195
                    parent, det_msg)
197
 
    d.setIconPixmap(QPixmap(':/images/dialog_information.svg'))
 
196
    d.setIconPixmap(QPixmap(I('dialog_information.svg')))
198
197
    if show:
199
198
        return d.exec_()
200
199
    return d
322
321
        QFileIconProvider.__init__(self)
323
322
        self.icons = {}
324
323
        for key in self.__class__.ICONS.keys():
325
 
            self.icons[key] = ':/images/mimetypes/'+self.__class__.ICONS[key]+'.svg'
 
324
            self.icons[key] = I('mimetypes/')+self.__class__.ICONS[key]+'.svg'
326
325
        for i in ('dir', 'default', 'zero'):
327
326
            self.icons[i] = QIcon(self.icons[i])
328
327
 
378
377
    global _file_icon_provider
379
378
    return _file_icon_provider
380
379
 
381
 
_sidebar_directories = []
382
 
def set_sidebar_directories(dirs):
383
 
    global _sidebar_directories
384
 
    if dirs is None:
385
 
        dirs = config['frequently_used_directories']
386
 
    _sidebar_directories = [QUrl.fromLocalFile(i) for i in dirs]
387
 
 
388
380
class FileDialog(QObject):
389
 
    def __init__(self, title='Choose Files',
 
381
    def __init__(self, title=_('Choose Files'),
390
382
                       filters=[],
391
383
                       add_all_files_filter=True,
392
384
                       parent=None,
395
387
                       mode = QFileDialog.ExistingFiles,
396
388
                       ):
397
389
        QObject.__init__(self)
398
 
        initialize_file_icon_provider()
399
390
        ftext = ''
400
391
        if filters:
401
392
            for filter in filters:
411
402
        self.selected_files = None
412
403
        self.fd = None
413
404
 
414
 
        if islinux:
415
 
            self.fd = QFileDialog(parent)
416
 
            self.fd.setFileMode(mode)
417
 
            self.fd.setIconProvider(_file_icon_provider)
418
 
            self.fd.setModal(modal)
419
 
            self.fd.setNameFilter(ftext)
420
 
            self.fd.setWindowTitle(title)
421
 
            state = dynamic[self.dialog_name]
422
 
            if not state or not self.fd.restoreState(state):
423
 
                self.fd.setDirectory(os.path.expanduser('~'))
424
 
            osu = [i for i in self.fd.sidebarUrls()]
425
 
            self.fd.setSidebarUrls(osu + _sidebar_directories)
426
 
            QObject.connect(self.fd, SIGNAL('accepted()'), self.save_dir)
427
 
            self.accepted = self.fd.exec_() == QFileDialog.Accepted
 
405
        initial_dir = dynamic.get(self.dialog_name, os.path.expanduser('~'))
 
406
        if not isinstance(initial_dir, basestring):
 
407
            initial_dir = os.path.expanduser('~')
 
408
        self.selected_files = []
 
409
        if mode == QFileDialog.AnyFile:
 
410
            f = unicode(QFileDialog.getSaveFileName(parent, title, initial_dir, ftext, ""))
 
411
            if f and os.path.exists(f):
 
412
                self.selected_files.append(f)
 
413
        elif mode == QFileDialog.ExistingFile:
 
414
            f = unicode(QFileDialog.getOpenFileName(parent, title, initial_dir, ftext, ""))
 
415
            if f and os.path.exists(f):
 
416
                self.selected_files.append(f)
 
417
        elif mode == QFileDialog.ExistingFiles:
 
418
            fs = QFileDialog.getOpenFileNames(parent, title, initial_dir, ftext, "")
 
419
            for f in fs:
 
420
                f = unicode(f)
 
421
                if f and os.path.exists(f):
 
422
                    self.selected_files.append(f)
428
423
        else:
429
 
            dir = dynamic.get(self.dialog_name, os.path.expanduser('~'))
430
 
            self.selected_files = []
431
 
            if mode == QFileDialog.AnyFile:
432
 
                f = qstring_to_unicode(
433
 
                    QFileDialog.getSaveFileName(parent, title, dir, ftext, ""))
434
 
                if os.path.exists(f):
435
 
                    self.selected_files.append(f)
436
 
            elif mode == QFileDialog.ExistingFile:
437
 
                f = qstring_to_unicode(
438
 
                    QFileDialog.getOpenFileName(parent, title, dir, ftext, ""))
439
 
                if os.path.exists(f):
440
 
                    self.selected_files.append(f)
441
 
            elif mode == QFileDialog.ExistingFiles:
442
 
                fs = QFileDialog.getOpenFileNames(parent, title, dir, ftext, "")
443
 
                for f in fs:
444
 
                    if os.path.exists(qstring_to_unicode(f)):
445
 
                        self.selected_files.append(f)
446
 
            else:
447
 
                opts = QFileDialog.ShowDirsOnly if mode == QFileDialog.DirectoryOnly else QFileDialog.Option()
448
 
                f = qstring_to_unicode(
449
 
                        QFileDialog.getExistingDirectory(parent, title, dir, opts))
450
 
                if os.path.exists(f):
451
 
                    self.selected_files.append(f)
452
 
            if self.selected_files:
453
 
                self.selected_files = [unicode(q) for q in self.selected_files]
454
 
                saved_loc = self.selected_files[0]
455
 
                if os.path.isfile(saved_loc):
456
 
                    saved_loc = os.path.dirname(saved_loc)
457
 
                dynamic[self.dialog_name] = saved_loc
458
 
            self.accepted = bool(self.selected_files)
 
424
            opts = QFileDialog.ShowDirsOnly if mode == QFileDialog.DirectoryOnly else QFileDialog.Option()
 
425
            f = unicode(QFileDialog.getExistingDirectory(parent, title, initial_dir, opts))
 
426
            if os.path.exists(f):
 
427
                self.selected_files.append(f)
 
428
        if self.selected_files:
 
429
            self.selected_files = [unicode(q) for q in self.selected_files]
 
430
            saved_loc = self.selected_files[0]
 
431
            if os.path.isfile(saved_loc):
 
432
                saved_loc = os.path.dirname(saved_loc)
 
433
            dynamic[self.dialog_name] = saved_loc
 
434
        self.accepted = bool(self.selected_files)
459
435
 
460
436
    def get_files(self):
461
 
        if islinux and self.fd.result() != self.fd.Accepted:
462
 
            return tuple()
463
437
        if self.selected_files is None:
464
438
            return tuple(os.path.abspath(qstring_to_unicode(i)) for i in self.fd.selectedFiles())
465
439
        return tuple(self.selected_files)
466
440
 
467
 
    def save_dir(self):
468
 
        if self.fd:
469
 
            dynamic[self.dialog_name] =  self.fd.saveState()
470
 
 
471
441
 
472
442
def choose_dir(window, name, title):
473
443
    fd = FileDialog(title, [], False, window, name=name,
533
503
 
534
504
gui_thread = None
535
505
 
 
506
 
536
507
class Application(QApplication):
537
508
 
538
509
    def __init__(self, args):
540
511
        QApplication.__init__(self, qargs)
541
512
        global gui_thread
542
513
        gui_thread = QThread.currentThread()
543
 
        self.translator = QTranslator(self)
544
 
        lang = get_lang()
545
 
        if lang:
546
 
            data = getattr(resources, 'qt_'+lang, None)
547
 
            if data:
548
 
                self.translator.loadFromData(data)
549
 
                self.installTranslator(self.translator)
 
514
        self._translator = QTranslator(self)
 
515
        if set_qt_translator(self._translator):
 
516
            self.installTranslator(self._translator)
550
517
 
551
518
def is_ok_to_use_qt():
552
519
    global gui_thread