Make on_write works also when deleting records

This commit is contained in:
Cédric Krier committed 2008-03-17 23:12:39 +01:00
1 parent 2c2b245854
commit 2f6e2ff937
2 files changed
+32 -15

No files matched your search

+20 -15
View File
@@ -99,31 +99,36 @@ class ModelRecordGroup(SignalEvent):
self.writen(saved)
def writen(self, edited_id):
if not self.on_write:
ids = self.on_write_ids([edited_id])
if not ids:
return
try:
new_ids = getattr(self.rpc, self.on_write)(edited_id, self.context)
except Exception, exception:
rpc.process_exception(exception, self.window)
return
model_idx = self.models.index(self[edited_id])
result = False
for new_id in new_ids:
index = self.models.index(self[edited_id])
self.reload(ids, index)
def reload(self, ids, index):
for obj_id in ids:
cont = False
for model in self.models:
if model.id == new_id:
if model.id == obj_id:
cont = True
model.reload()
if cont:
continue
newmod = ModelRecord(self.resource, new_id, self.window,
newmod = ModelRecord(self.resource, obj_id, self.window,
parent=self.parent, group=self)
newmod.reload()
if not result:
result = newmod
new_index = min(model_idx, len(self.models)-1)
new_index = min(index, len(self.models)-1)
self.model_add(newmod, new_index)
return result
def on_write_ids(self, ids):
if not self.on_write:
return False
try:
res = getattr(self.rpc, self.on_write)(ids, self.context)
except Exception, exception:
rpc.process_exception(exception, self.window)
return False
return res
def _load_for(self, values):
if len(values)>10:
@@ -417,6 +417,9 @@ class Screen(SignalEvent):
obj_id = self.current_model.id
if unlink and obj_id:
try:
reload_ids = self.models.on_write_ids(obj_id)
if reload_ids and obj_id in reload_ids:
reload_ids.remove(obj_id)
if not self.rpc.unlink([obj_id]):
return False
except Exception, exception:
@@ -429,6 +432,8 @@ class Screen(SignalEvent):
self.current_model = self.models.models[idx]
else:
self.current_model = None
if reload_ids:
self.models.reload(reload_ids, idx)
self.display()
self.current_view.set_cursor()
res = obj_id
@@ -436,6 +441,11 @@ class Screen(SignalEvent):
ids = self.current_view.sel_ids_get()
if unlink and ids:
try:
reload_ids = self.models.on_write_ids(ids)
if reload_ids:
for obj_id in ids:
if obj_id in reload_ids:
reload_ids.remove(obj_id)
if not self.rpc.unlink(ids):
return False
except Exception, exception:
@@ -444,6 +454,8 @@ class Screen(SignalEvent):
for model in self.current_view.sel_models_get():
self.models.remove(model)
self.current_model = None
if reload_ids:
self.models.reload(reload_ids, 0)
self.display()
self.current_view.set_cursor()
res = ids