diff -r 41be9387cb3b openerp-client/widget/view/form_gtk/one2many_list.py --- a/openerp-client/widget/view/form_gtk/one2many_list.py Thu Apr 14 12:22:13 2011 +0200 +++ b/openerp-client/widget/view/form_gtk/one2many_list.py Fri Apr 15 11:45:26 2011 +0200 @@ -78,6 +78,12 @@ self.but_save_new.set_image(icon) self.but_save_new.add_accelerator('clicked', self.accel_group, gtk.keysyms.Return, gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE) + self.but_copy_new = self.dia.add_button(_('Save & Copy'), gtk.RESPONSE_ACCEPT) + icon = gtk.Image() + icon.set_from_stock(gtk.STOCK_COPY, gtk.ICON_SIZE_BUTTON) + self.but_copy_new.set_image(icon) + self.but_copy_new.add_accelerator('clicked', self.accel_group, gtk.keysyms.KP_Add, gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE) + self.context = context scroll = gtk.ScrolledWindow() @@ -114,8 +120,10 @@ self.screen.readonly = readonly self.screen.display() - def new(self): + def new(self, values=None): model = self.screen.new(context=self.context) + if values: + model.set_default(values) self.screen.models.model_add(model) self.screen.current_model = model self.screen.make_buttons_readonly() @@ -127,12 +135,12 @@ res = self.dia.run() if res in(gtk.RESPONSE_CANCEL, gtk.RESPONSE_DELETE_EVENT): self.screen.current_model.cancel() - end = (res not in (gtk.RESPONSE_OK, gtk.RESPONSE_APPLY)) or self.screen.current_model.validate() + end = (res not in (gtk.RESPONSE_OK, gtk.RESPONSE_APPLY, gtk.RESPONSE_ACCEPT)) or self.screen.current_model.validate() if not end: self.screen.display() self.screen.current_view.set_cursor() - if res in (gtk.RESPONSE_OK, gtk.RESPONSE_APPLY) : + if res in (gtk.RESPONSE_OK, gtk.RESPONSE_APPLY, gtk.RESPONSE_ACCEPT) : self.screen.current_view.set_value() model = self.screen.current_model if res == gtk.RESPONSE_APPLY: @@ -323,7 +331,12 @@ dia = dialog(self.attrs['relation'], parent=self._view.model, attrs=self.attrs, model_ctx=self.screen.models._context, window=self._window, readonly=self._readonly, context=ctx) while ok: ok, value, res = dia.run() - if ok or res == gtk.RESPONSE_APPLY: + if res == gtk.RESPONSE_ACCEPT: + self.screen.models.model_add(value) + value.signal('record-changed', value.parent) + dia.new(value.value) + self.screen.display() + elif ok or res == gtk.RESPONSE_APPLY: self.screen.models.model_add(value) value.signal('record-changed', value.parent) self.screen.display() @@ -343,6 +356,8 @@ ok, value, res = dia.run() if res == gtk.RESPONSE_OK: dia.new() + if res == gtk.RESPONSE_ACCEPT: + dia.new(value.value) if value and value != edited_model: self.screen.models.model_add(value) value.signal('record-changed', value.parent)