Use 3 buttons for form popup dialog

This commit is contained in:
Cédric Krier
2011-04-09 13:59:24 +02:00
parent 1d94c23bae
commit dd29b548cf
9 changed files with 51 additions and 67 deletions
+1
View File
@@ -1,3 +1,4 @@
* Popup form dialog has 3 buttons (close, ok, new)
* New UI layout
* Add DnD on tree view
* Merge tree and list views
@@ -224,7 +224,6 @@ class Record(SignalEvent):
def cancel(self):
self._loaded.clear()
self.reload()
def get_timestamp(self):
result = {self.model_name + ',' + str(self.id): self._timestamp}
@@ -149,6 +149,8 @@ class Many2Many(WidgetInterface):
win = WinForm(self.screen, self.window)
if win.run():
self.screen.current_record.save()
else:
self.screen.current_record.cancel()
win.destroy()
def _readonly_set(self, value):
@@ -154,14 +154,11 @@ class Many2One(WidgetInterface):
self.focus_out = False
screen = self.get_screen()
win = WinForm(screen, self.window, new=True)
while win.run():
if win.run():
if screen.save_current():
value = (screen.current_record.id,
screen.current_record.rec_name())
self.field.set_client(self.record, value)
break
else:
screen.display()
win.destroy()
self.focus_out = True
@@ -239,12 +239,8 @@ class One2Many(WidgetInterface):
self.screen.current_view.widget.set_sensitive(True)
else:
win = WinForm(self.screen, self.window, new=True,
context=ctx)
while True:
if win.run():
win.new()
else:
break
many=True, context=ctx)
win.run()
win.destroy()
if sequence:
self.screen.group.set_sequence(field=sequence)
@@ -156,15 +156,12 @@ class Reference(WidgetInterface):
screen = Screen(model, self.window, mode=['form'])
screen.load([obj_id])
win = WinForm(screen, self.window)
while win.run():
if win.run():
if screen.save_current():
value = (screen.current_record.id,
screen.current_record.rec_name())
self.field.set_client(self.record, (model, value),
force_change=True)
break
else:
screen.display()
win.destroy()
elif model:
if not self._readonly and ( self.wid_text.get_text() or not leave):
@@ -209,14 +206,11 @@ class Reference(WidgetInterface):
return
screen = Screen(model, self.window, mode=['form'])
win = WinForm(screen, self.window, new=True)
while win.run():
if win.run():
if screen.save_current():
value = (screen.current_record.id,
screen.current_record.rec_name())
self.field.set_client(self.record, (model, value))
break
else:
screen.display()
win.destroy()
def sig_key_press(self, widget, event):
@@ -570,13 +570,10 @@ class M2O(Char):
else:
win = WinForm(screen, self.window, new=True)
value = False
while win.run():
if win.run():
if screen.save_current():
value = (screen.current_record.id,
screen.current_record.rec_name())
break
else:
screen.display()
win.destroy()
if value:
return True, value
+41 -40
View File
@@ -14,7 +14,7 @@ class WinForm(object):
"Form window"
def __init__(self, screen, parent, view_type='form', new=False,
context=None):
many=False, context=None):
self.parent = parent
self.screen = screen
@@ -33,7 +33,6 @@ class WinForm(object):
self.screen.new(context=self.context)
self.win = gtk.Dialog(_('Link'), parent,
gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT)
self.win.connect('close', self._sig_close)
self.win.set_property('default-width', 760)
self.win.set_property('default-height', 500)
self.win.set_position(gtk.WIN_POS_CENTER_ON_PARENT)
@@ -44,16 +43,32 @@ class WinForm(object):
self.win.add_accel_group(self.accel_group)
self.but_cancel = None
self.but_ok = None
self.but_new = None
if new:
icon_cancel = gtk.STOCK_CANCEL
self.but_cancel = self.win.add_button(icon_cancel,
gtk.RESPONSE_CANCEL)
self.but_ok = self.win.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK)
self.but_ok.add_accelerator('clicked', self.accel_group,
gtk.keysyms.Return, gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE)
self.but_ok = self.win.add_button(gtk.STOCK_OK,
gtk.RESPONSE_OK)
if new and many:
self.but_ok.add_accelerator('clicked',
self.accel_group, gtk.keysyms.Return,
gtk.gdk.CONTROL_MASK|gtk.gdk.SHIFT_MASK,
gtk.ACCEL_VISIBLE)
self.win.set_default_response(gtk.RESPONSE_OK)
self.but_new = self.win.add_button(gtk.STOCK_NEW,
gtk.RESPONSE_ACCEPT)
self.but_new.add_accelerator('clicked', self.accel_group,
gtk.keysyms.Return, gtk.gdk.CONTROL_MASK,
gtk.ACCEL_VISIBLE)
self.win.set_default_response(gtk.RESPONSE_ACCEPT)
else:
self.but_ok.add_accelerator('clicked', self.accel_group,
gtk.keysyms.Return, gtk.gdk.CONTROL_MASK,
gtk.ACCEL_VISIBLE)
self.win.set_default_response(gtk.RESPONSE_OK)
self.win.set_title(self.screen.current_view.title)
@@ -272,39 +287,30 @@ class WinForm(object):
line = '(%s/%s)' % (name, signal_data[1])
self.label.set_text(line)
def _sig_close(self, widget):
if self.screen.current_view:
self.screen.current_view.set_value()
if self.but_cancel:
self.screen.remove(delete=True)
elif self.screen.current_record and \
not self.screen.current_record.validate(
self.screen.current_view.get_fields()):
if self.screen.current_view:
self.screen.current_view.set_cursor()
self.screen.current_view.display()
widget.emit_stop_by_name('close')
def run(self):
end = False
while not end:
res = self.win.run()
validate = False
cancel_responses = (gtk.RESPONSE_CANCEL, gtk.RESPONSE_DELETE_EVENT)
while not validate:
response = self.win.run()
self.screen.current_view.set_value()
end = (res != gtk.RESPONSE_OK) \
or (not self.screen.current_record \
or self.screen.current_record.validate(
self.screen.current_view.get_fields()))
if not end:
if (response in cancel_responses
or self.screen.current_record is None):
break
validate = self.screen.current_record.validate(
self.screen.current_view.get_fields())
if not validate:
self.screen.current_view.set_cursor()
self.screen.display()
if self.but_cancel:
self.but_cancel.set_label(gtk.STOCK_CLOSE)
if res == gtk.RESPONSE_OK:
return True
elif res == gtk.RESPONSE_CANCEL:
self.screen.remove()
return False
continue
if response == gtk.RESPONSE_ACCEPT:
self.new()
validate = False
if (self.but_cancel
and self.screen.current_record
and response in cancel_responses):
self.screen.group.remove(self.screen.current_record, remove=True)
return False
return response not in cancel_responses
def new(self):
self.screen.new(context=self.context)
@@ -312,11 +318,6 @@ class WinForm(object):
self.screen.current_view.set_cursor(new=True)
def destroy(self):
if self.screen.current_record and \
self.screen.current_record.id < 0 and \
not self.screen.current_record.validate(
self.screen.current_view.get_fields()):
self.screen.remove(delete=True)
self.screen.screen_container.alternate_view = False
viewport = self.screen.screen_container.alternate_viewport
if viewport.get_child():
+1 -4
View File
@@ -106,12 +106,9 @@ class WinSearch(object):
screen = Screen(self.model_name, self.win, domain=self.domain,
context=self.context, mode=['form'])
win = WinForm(screen, self.win, new=True)
while win.run():
if win.run():
if screen.save_current():
res = [screen.current_record.id]
break
else:
screen.display()
win.destroy()
end = True
else: