home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 November / maximum-cd-2010-11.iso / DiscContents / calibre-0.7.13.msi / file_1280 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-08-06  |  4.9 KB  |  122 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. __license__ = 'GPL v3'
  5. __copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>'
  6. from PyQt4.QtCore import SIGNAL, Qt
  7. from PyQt4.QtGui import QDialog
  8. from calibre.gui2.dialogs.tag_editor_ui import Ui_TagEditor
  9. from calibre.gui2 import question_dialog, error_dialog
  10. from calibre.constants import islinux
  11.  
  12. class TagEditor(QDialog, Ui_TagEditor):
  13.     
  14.     def tag_cmp(self, x, y):
  15.         return cmp(x.lower(), y.lower())
  16.  
  17.     
  18.     def __init__(self, window, db, index = None):
  19.         QDialog.__init__(self, window)
  20.         Ui_TagEditor.__init__(self)
  21.         self.setupUi(self)
  22.         self.db = db
  23.         self.index = index
  24.         if self.index is not None:
  25.             tags = self.db.tags(self.index)
  26.         else:
  27.             tags = []
  28.         self.tags = tags
  29.         all_tags = [ tag for tag in self.db.all_tags() ]
  30.         all_tags = list(set(all_tags))
  31.         all_tags.sort(cmp = self.tag_cmp)
  32.         for tag in all_tags:
  33.             if tag not in tags:
  34.                 self.available_tags.addItem(tag)
  35.                 continue
  36.             []
  37.         
  38.         self.connect(self.apply_button, SIGNAL('clicked()'), self.apply_tags)
  39.         self.connect(self.unapply_button, SIGNAL('clicked()'), self.unapply_tags)
  40.         self.connect(self.add_tag_button, SIGNAL('clicked()'), self.add_tag)
  41.         self.connect(self.delete_button, SIGNAL('clicked()'), self.delete_tags)
  42.         self.connect(self.add_tag_input, SIGNAL('returnPressed()'), self.add_tag)
  43.         self.connect(self.applied_tags, SIGNAL('itemActivated(QListWidgetItem*)'), self.unapply_tags)
  44.  
  45.     
  46.     def delete_tags(self, item = None):
  47.         confirms = []
  48.         deletes = []
  49.         items = None if item is None else [
  50.             item]
  51.         if not items:
  52.             error_dialog(self, 'No tags selected', 'You must select at least one tag from the list of Available tags.').exec_()
  53.             return None
  54.         for item in items:
  55.             if self.db.is_tag_used(unicode(item.text())):
  56.                 confirms.append(item)
  57.                 continue
  58.             items
  59.             deletes.append(item)
  60.         
  61.         for item in deletes:
  62.             self.db.delete_tag(unicode(item.text()))
  63.             self.available_tags.takeItem(self.available_tags.row(item))
  64.         
  65.  
  66.     
  67.     def apply_tags(self, item = None):
  68.         items = None if item is None else [
  69.             item]
  70.         for item in items:
  71.             tag = unicode(item.text())
  72.             self.tags.append(tag)
  73.             self.available_tags.takeItem(self.available_tags.row(item))
  74.         
  75.         self.tags.sort(cmp = self.tag_cmp)
  76.         self.applied_tags.clear()
  77.         for tag in self.tags:
  78.             self.applied_tags.addItem(tag)
  79.         
  80.  
  81.     
  82.     def unapply_tags(self, item = None):
  83.         items = None if item is None else [
  84.             item]
  85.         for item in items:
  86.             tag = unicode(item.text())
  87.             self.tags.remove(tag)
  88.             self.available_tags.addItem(tag)
  89.         
  90.         self.tags.sort(cmp = self.tag_cmp)
  91.         self.applied_tags.clear()
  92.         for tag in self.tags:
  93.             self.applied_tags.addItem(tag)
  94.         
  95.         items = [ unicode(self.available_tags.item(x).text()) for x in range(self.available_tags.count()) ]
  96.         items.sort(cmp = self.tag_cmp)
  97.         self.available_tags.clear()
  98.         for item in items:
  99.             self.available_tags.addItem(item)
  100.         
  101.  
  102.     
  103.     def add_tag(self):
  104.         tags = unicode(self.add_tag_input.text()).split(',')
  105.         for tag in tags:
  106.             tag = tag.strip()
  107.             for item in self.available_tags.findItems(tag, Qt.MatchFixedString):
  108.                 self.available_tags.takeItem(self.available_tags.row(item))
  109.             
  110.             if tag not in self.tags:
  111.                 self.tags.append(tag)
  112.                 continue
  113.         
  114.         self.tags.sort(cmp = self.tag_cmp)
  115.         self.applied_tags.clear()
  116.         for tag in self.tags:
  117.             self.applied_tags.addItem(tag)
  118.         
  119.         self.add_tag_input.setText('')
  120.  
  121.  
  122.