home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 November / maximum-cd-2010-11.iso / DiscContents / calibre-0.7.13.msi / file_1282 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-08-06  |  5.4 KB  |  124 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, QListWidgetItem
  8. from calibre.gui2.dialogs.tag_list_editor_ui import Ui_TagListEditor
  9. from calibre.gui2 import question_dialog, error_dialog
  10.  
  11. class ListWidgetItem(QListWidgetItem):
  12.     
  13.     def __init__(self, txt):
  14.         QListWidgetItem.__init__(self, txt)
  15.         self.old_value = txt
  16.         self.cur_value = txt
  17.  
  18.     
  19.     def data(self, role):
  20.         if role == Qt.DisplayRole:
  21.             if self.old_value != self.cur_value:
  22.                 return _('%s (was %s)') % (self.cur_value, self.old_value)
  23.             return self.cur_value
  24.         role == Qt.DisplayRole
  25.         if role == Qt.EditRole:
  26.             return self.cur_value
  27.         return QListWidgetItem.data(self, role)
  28.  
  29.     
  30.     def setData(self, role, data):
  31.         if role == Qt.EditRole:
  32.             self.cur_value = data.toString()
  33.         
  34.         QListWidgetItem.setData(self, role, data)
  35.  
  36.     
  37.     def text(self):
  38.         return self.cur_value
  39.  
  40.     
  41.     def setText(self, txt):
  42.         self.cur_value = txt
  43.         QListWidgetItem.setText(txt)
  44.  
  45.  
  46.  
  47. class TagListEditor(QDialog, Ui_TagListEditor):
  48.     
  49.     def __init__(self, window, tag_to_match, data, compare):
  50.         QDialog.__init__(self, window)
  51.         Ui_TagListEditor.__init__(self)
  52.         self.setupUi(self)
  53.         icon = self.windowIcon()
  54.         self.setWindowFlags(self.windowFlags() & ~(Qt.WindowContextHelpButtonHint))
  55.         self.setWindowIcon(icon)
  56.         self.to_rename = { }
  57.         self.to_delete = []
  58.         self.all_tags = { }
  59.         for k, v in data:
  60.             self.all_tags[v] = k
  61.         
  62.         for tag in sorted(self.all_tags.keys(), cmp = compare):
  63.             item = ListWidgetItem(tag)
  64.             item.setData(Qt.UserRole, self.all_tags[tag])
  65.             self.available_tags.addItem(item)
  66.         
  67.         if tag_to_match is not None:
  68.             items = self.available_tags.findItems(tag_to_match, Qt.MatchExactly)
  69.             if len(items) == 1:
  70.                 self.available_tags.setCurrentItem(items[0])
  71.             
  72.         
  73.         self.connect(self.delete_button, SIGNAL('clicked()'), self.delete_tags)
  74.         self.connect(self.rename_button, SIGNAL('clicked()'), self.rename_tag)
  75.         self.connect(self.available_tags, SIGNAL('itemDoubleClicked(QListWidgetItem *)'), self._rename_tag)
  76.         self.connect(self.available_tags, SIGNAL('itemChanged(QListWidgetItem *)'), self.finish_editing)
  77.  
  78.     
  79.     def finish_editing(self, item):
  80.         if not item.text():
  81.             error_dialog(self, _('Item is blank'), _('An item cannot be set to nothing. Delete it instead.')).exec_()
  82.             item.setText(self.item_before_editing.text())
  83.             return None
  84.         if item.text() != self.item_before_editing.text():
  85.             (id, ign) = self.item_before_editing.data(Qt.UserRole).toInt()
  86.             if item.text() not in self.to_rename:
  87.                 self.to_rename[item.text()] = [
  88.                     id]
  89.             else:
  90.                 self.to_rename[item.text()].append(id)
  91.         
  92.  
  93.     
  94.     def rename_tag(self):
  95.         item = self.available_tags.currentItem()
  96.         self._rename_tag(item)
  97.  
  98.     
  99.     def _rename_tag(self, item):
  100.         if item is None:
  101.             error_dialog(self, _('No item selected'), _('You must select one item from the list of Available items.')).exec_()
  102.             return None
  103.         self.item_before_editing = item.clone()
  104.         item.setFlags(item.flags() | Qt.ItemIsEditable)
  105.         self.available_tags.editItem(item)
  106.  
  107.     
  108.     def delete_tags(self, item = None):
  109.         deletes = None if item is None else [
  110.             item]
  111.         if not deletes:
  112.             error_dialog(self, _('No items selected'), _('You must select at least one items from the list.')).exec_()
  113.             return None
  114.         ct = []([ unicode(item.text()) for item in deletes ])
  115.         if not question_dialog(self, _('Are your sure?'), '<p>' + _('Are you certain you want to delete the following items?') + '<br>' + ct):
  116.             return None
  117.         for item in deletes:
  118.             (id, ign) = item.data(Qt.UserRole).toInt()
  119.             self.to_delete.append(id)
  120.             self.available_tags.takeItem(self.available_tags.row(item))
  121.         
  122.  
  123.  
  124.