mirror of
https://github.com/wassname/sloth.git
synced 2026-07-24 13:20:12 +08:00
add more efficient update method (doesn't send model updates for every item)
This commit is contained in:
@@ -327,9 +327,9 @@ class KeyValueModelItem(ModelItem, MutableMapping):
|
||||
def __getitem__(self, key):
|
||||
return self._dict[key]
|
||||
|
||||
def _emitDataChanged(self, key):
|
||||
def _emitDataChanged(self, key=None):
|
||||
if self.model() is not None:
|
||||
if key in self._items:
|
||||
if key is not None and key in self._items:
|
||||
index_tl = self._items[key].index()
|
||||
index_br = self._items[key].index(1)
|
||||
else:
|
||||
@@ -337,23 +337,30 @@ class KeyValueModelItem(ModelItem, MutableMapping):
|
||||
index_br = self.index(1)
|
||||
self.model().dataChanged.emit(index_tl, index_br)
|
||||
|
||||
def __setitem__(self, key, value):
|
||||
def __setitem__(self, key, value, signalModel=True):
|
||||
if key not in self._dict:
|
||||
self._dict[key] = value
|
||||
if key not in self._hidden:
|
||||
self._items[key] = KeyValueRowModelItem(key)
|
||||
self.addChildSorted(self._items[key])
|
||||
self._emitDataChanged(key)
|
||||
self.addChildSorted(self._items[key], signalModel=signalModel)
|
||||
if signalModel:
|
||||
self._emitDataChanged(key)
|
||||
elif self._dict[key] != value:
|
||||
self._dict[key] = value
|
||||
# TODO: Emit for hidden key/values?
|
||||
self._emitDataChanged(key)
|
||||
if signalModel:
|
||||
self._emitDataChanged(key)
|
||||
|
||||
def __delitem__(self, key):
|
||||
del self._dict[key]
|
||||
if key in self._items:
|
||||
self.deleteChild(self._items[key])
|
||||
|
||||
def update(self, kvs):
|
||||
for key, value in kvs.iteritems():
|
||||
self.__setitem__(key, value, False)
|
||||
self._emitDataChanged()
|
||||
|
||||
def has_key(self, key):
|
||||
return key in self._dict
|
||||
|
||||
|
||||
Reference in New Issue
Block a user