From 9abca9d60feb6896ef11c0da04a755fd24feb867 Mon Sep 17 00:00:00 2001 From: John Schember Date: Mon, 23 Mar 2009 19:07:14 -0400 Subject: [PATCH] Do not enable edit rows in device tab for devices that do not support editing ebook metadata. --- src/calibre/devices/interface.py | 2 ++ src/calibre/devices/usbms/driver.py | 1 + src/calibre/gui2/library.py | 12 +++++++++--- src/calibre/gui2/main.py | 2 ++ 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/calibre/devices/interface.py b/src/calibre/devices/interface.py index ed51962236..21790e3c46 100644 --- a/src/calibre/devices/interface.py +++ b/src/calibre/devices/interface.py @@ -24,6 +24,8 @@ class Device(object): # it can be a list of the BCD numbers of all devices supported by this driver. BCD = None THUMBNAIL_HEIGHT = 68 # Height for thumbnails on device + # Whether the metadata on books can be set via the GUI. + CAN_SET_METADATA = True def __init__(self, key='-1', log_packets=False, report_progress=None) : """ diff --git a/src/calibre/devices/usbms/driver.py b/src/calibre/devices/usbms/driver.py index 4285881447..68041a19cd 100644 --- a/src/calibre/devices/usbms/driver.py +++ b/src/calibre/devices/usbms/driver.py @@ -35,6 +35,7 @@ class USBMS(Device): EBOOK_DIR_MAIN = '' EBOOK_DIR_CARD = '' SUPPORTS_SUB_DIRS = False + CAN_SET_METADATA = False def __init__(self, key='-1', log_packets=False, report_progress=None): Device.__init__(self, key=key, log_packets=log_packets, diff --git a/src/calibre/gui2/library.py b/src/calibre/gui2/library.py index d7581bf458..9f82b3b318 100644 --- a/src/calibre/gui2/library.py +++ b/src/calibre/gui2/library.py @@ -708,6 +708,9 @@ class BooksView(TableView): def close(self): self._model.close() + + def set_editable(self, editable): + self._model.set_editable(editable) def connect_to_search_box(self, sb): QObject.connect(sb, SIGNAL('search(PyQt_PyObject, PyQt_PyObject)'), @@ -785,7 +788,7 @@ class DeviceBooksModel(BooksModel): self.unknown = str(self.trUtf8('Unknown')) self.marked_for_deletion = {} self.search_engine = OnDeviceSearch(self) - + self.editable = True def mark_for_deletion(self, job, rows): self.marked_for_deletion[job] = self.indices(rows) @@ -793,7 +796,6 @@ class DeviceBooksModel(BooksModel): indices = self.row_indices(row) self.emit(SIGNAL('dataChanged(QModelIndex, QModelIndex)'), indices[0], indices[-1]) - def deletion_done(self, job, succeeded=True): if not self.marked_for_deletion.has_key(job): return @@ -818,7 +820,7 @@ class DeviceBooksModel(BooksModel): if self.map[index.row()] in self.indices_to_be_deleted(): return Qt.ItemIsUserCheckable # Can't figure out how to get the disabled flag in python flags = QAbstractTableModel.flags(self, index) - if index.isValid(): + if index.isValid() and self.editable: if index.column() in [0, 1] or (index.column() == 4 and self.db.supports_tags()): flags |= Qt.ItemIsEditable return flags @@ -999,6 +1001,10 @@ class DeviceBooksModel(BooksModel): self.sort(col, self.sorted_on[1]) done = True return done + + def set_editable(self, editable): + self.editable = editable + class SearchBox(QLineEdit): diff --git a/src/calibre/gui2/main.py b/src/calibre/gui2/main.py index 76775ae9bf..f297d1465c 100644 --- a/src/calibre/gui2/main.py +++ b/src/calibre/gui2/main.py @@ -585,7 +585,9 @@ class Main(MainWindow, Ui_MainWindow): return mainlist, cardlist = job.result self.memory_view.set_database(mainlist) + self.memory_view.set_editable(self.device_manager.device_class.CAN_SET_METADATA) self.card_view.set_database(cardlist) + self.card_view.set_editable(self.device_manager.device_class.CAN_SET_METADATA) for view in (self.memory_view, self.card_view): view.sortByColumn(3, Qt.DescendingOrder) if not view.restore_column_widths():