本文整理汇总了Python中tryton.gui.window.view_form.screen.Screen.new_group方法的典型用法代码示例。如果您正苦于以下问题:Python Screen.new_group方法的具体用法?Python Screen.new_group怎么用?Python Screen.new_group使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类tryton.gui.window.view_form.screen.Screen
的用法示例。
在下文中一共展示了Screen.new_group方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: One2Many
# 需要导入模块: from tryton.gui.window.view_form.screen import Screen [as 别名]
# 或者: from tryton.gui.window.view_form.screen.Screen import new_group [as 别名]
#.........这里部分代码省略.........
continue
record = current_record
if not is_compatbile(widget.screen, record):
record = None
if not widget._validate():
def go_previous():
record = widget.screen.current_record
if not is_compatbile(screen, record):
record = None
screen.current_record = record
screen.display()
gobject.idle_add(go_previous)
return
to_sync.append((widget, record))
for widget, record in to_sync:
if (
widget.screen.current_view.view_type == "form"
and record is not None
and widget.screen.group.model_name == record.group.model_name
):
fields = dict((name, field.attrs) for name, field in widget.screen.group.fields.iteritems())
record.group.load_fields(fields)
widget.screen.current_record = record
widget.display(widget.record, widget.field)
def display(self, record, field):
super(One2Many, self).display(record, field)
self._set_button_sensitive()
if field is None:
self.screen.new_group()
self.screen.current_record = None
self.screen.parent = None
self.screen.display()
return False
new_group = field.get_client(record)
if self.attrs.get("group") and self.attrs.get("mode") == "form":
if self.screen.current_record is None:
self.invisible_set(True)
elif id(self.screen.group) != id(new_group):
self.screen.group = new_group
if (self.screen.current_view.view_type == "tree") and self.screen.current_view.editable:
self.screen.current_record = None
readonly = False
domain = []
size_limit = None
if record:
readonly = field.get_state_attrs(record).get("readonly", False)
domain = field.domain_get(record)
size_limit = record.expr_eval(self.attrs.get("size"))
if self.screen.get_domain() != domain:
self.screen.domain = domain
self.screen.group.readonly = readonly
self.screen.size_limit = size_limit
self.screen.display()
return True
def set_value(self, record, field):
if (
self.screen.current_view.view_type == "form"
and self.attrs.get("group")
and self.screen.model_name != record.model_name
示例2: Many2Many
# 需要导入模块: from tryton.gui.window.view_form.screen import Screen [as 别名]
# 或者: from tryton.gui.window.view_form.screen.Screen import new_group [as 别名]
#.........这里部分代码省略.........
def callback(result):
if result:
screen.current_record.save()
# Force a reload on next display
self.screen.current_record.cancel()
# Force a display to clear the CellCache
self.screen.display()
WinForm(screen, callback)
def _sig_new(self):
domain = self.field.domain_get(self.record)
add_remove = self.record.expr_eval(self.attrs.get('add_remove'))
if add_remove:
domain = [domain, add_remove]
context = self.field.context_get(self.record)
screen = Screen(self.attrs['relation'], domain=domain,
view_ids=self.attrs.get('view_ids', '').split(','),
mode=['form'], views_preload=self.attrs.get('views', {}),
context=context)
def callback(result):
self.focus_out = True
if result:
record = screen.current_record
self.screen.load([record.id], modified=True)
self.wid_text.set_text('')
self.wid_text.grab_focus()
self.focus_out = False
WinForm(screen, callback, new=True, save_current=True)
def _readonly_set(self, value):
self._readonly = value
self._set_button_sensitive()
self.wid_text.set_sensitive(not value)
def _set_button_sensitive(self):
if self.record and self.field:
field_size = self.record.expr_eval(self.attrs.get('size'))
m2m_size = len(self.field.get_eval(self.record))
size_limit = (field_size is not None
and m2m_size >= field_size >= 0)
else:
size_limit = False
self.but_add.set_sensitive(bool(
not self._readonly
and not size_limit))
self.but_remove.set_sensitive(bool(
not self._readonly
and self._position))
def _sig_label(self, screen, signal_data):
self._position = signal_data[0]
self._set_button_sensitive()
def display(self, record, field):
super(Many2Many, self).display(record, field)
if field is None:
self.screen.new_group()
self.screen.current_record = None
self.screen.parent = None
self.screen.display()
return False
new_group = field.get_client(record)
if id(self.screen.group) != id(new_group):
self.screen.group = new_group
self.screen.display()
return True
def set_value(self, record, field):
self.screen.current_view.set_value()
return True
def _completion_match_selected(self, completion, model, iter_):
record_id, = model.get(iter_, 1)
self.screen.load([record_id], modified=True)
self.wid_text.set_text('')
self.wid_text.grab_focus()
completion_model = self.wid_completion.get_model()
completion_model.clear()
completion_model.search_text = self.wid_text.get_text()
return True
def _update_completion(self, widget):
if self._readonly:
return
if not self.record:
return
model = self.attrs['relation']
update_completion(self.wid_text, self.record, self.field, model)
def _completion_action_activated(self, completion, index):
if index == 0:
self._sig_add()
self.wid_text.grab_focus()
elif index == 1:
self._sig_new()
示例3: Many2Many
# 需要导入模块: from tryton.gui.window.view_form.screen import Screen [as 别名]
# 或者: from tryton.gui.window.view_form.screen.Screen import new_group [as 别名]
#.........这里部分代码省略.........
def _sig_remove(self, *args):
self.screen.remove(remove=True)
def _on_activate(self):
self._sig_edit()
def _sig_edit(self):
if self.screen.current_record:
def callback(result):
if result:
self.screen.current_record.save()
else:
self.screen.current_record.cancel()
WinForm(self.screen, callback)
def _readonly_set(self, value):
self._readonly = value
self._set_button_sensitive()
def _set_button_sensitive(self):
if self.record and self.field:
field_size = self.record.expr_eval(self.attrs.get('size'))
m2m_size = len(self.field.get_eval(self.record))
size_limit = (field_size is not None
and m2m_size >= field_size >= 0)
else:
size_limit = False
self.wid_text.set_sensitive(not self._readonly)
self.but_add.set_sensitive(bool(
not self._readonly
and not size_limit))
self.but_remove.set_sensitive(bool(
not self._readonly
and self._position))
def _sig_label(self, screen, signal_data):
self._position = signal_data[0]
self._set_button_sensitive()
def display(self, record, field):
super(Many2Many, self).display(record, field)
if field is None:
self.screen.new_group()
self.screen.current_record = None
self.screen.parent = True
self.screen.display()
return False
new_group = field.get_client(record)
if id(self.screen.group) != id(new_group):
self.screen.group = new_group
self.screen.display()
return True
def set_value(self, record, field):
self.screen.save_tree_state()
self.screen.current_view.set_value()
return True
def _completion_match_selected(self, completion, model, iter_):
record_id, = model.get(iter_, 1)
self.screen.load([record_id], modified=True)
self.wid_text.set_text('')
self.wid_text.grab_focus()
completion_model = self.wid_completion.get_model()
completion_model.clear()
completion_model.search_text = self.wid_text.get_text()
return True
def _update_completion(self, widget):
if self._readonly:
return
if not self.record:
return
model = self.attrs['relation']
update_completion(self.wid_text, self.record, self.field, model)
def _completion_action_activated(self, completion, index):
if index == 0:
self._sig_add(win_search=True)
self.wid_text.grab_focus()
elif index == 1:
model = self.attrs['relation']
domain = self.field.domain_get(self.record)
context = self.field.context_get(self.record)
screen = Screen(model, domain, context=context, mode=['form'])
def callback(result):
self.focus_out = True
if result:
record = screen.current_record
self.screen.load([record.id], modified=True)
self.wid_text.set_text('')
self.wid_text.grab_focus()
self.focus_out = False
WinForm(screen, callback, new=True, save_current=True)
示例4: One2Many
# 需要导入模块: from tryton.gui.window.view_form.screen import Screen [as 别名]
# 或者: from tryton.gui.window.view_form.screen.Screen import new_group [as 别名]
#.........这里部分代码省略.........
def _focus_out(self, *args):
if self.wid_text.get_text():
self._sig_add()
def _sig_add(self, *args):
self.view.set_value()
domain = self.field.domain_get(self.record)
context = self.field.context_get(self.record)
domain = domain[:]
domain.extend(self.record.expr_eval(self.attrs.get('add_remove')))
removed_ids = self.field.get_removed_ids(self.record)
try:
if self.wid_text.get_text():
dom = [('rec_name', 'ilike',
'%' + self.wid_text.get_text() + '%'),
['OR', domain, ('id', 'in', removed_ids)]]
else:
dom = ['OR', domain, ('id', 'in', removed_ids)]
ids = RPCExecute('model', self.attrs['relation'], 'search', dom,
0, CONFIG['client.limit'], None, context=context)
except RPCException:
return False
def callback(result):
if result:
ids = [x[0] for x in result]
self.screen.load(ids, modified=True)
self.screen.display(res_id=ids[0])
self.screen.set_cursor()
self.wid_text.set_text('')
if len(ids) != 1:
WinSearch(self.attrs['relation'], callback, sel_multi=True,
ids=ids, context=context, domain=domain,
view_ids=self.attrs.get('view_ids', '').split(','),
views_preload=self.attrs.get('views', {}))
else:
callback([(i, None) for i in ids])
def _sig_label(self, screen, signal_data):
name = '_'
if signal_data[0] >= 1:
name = str(signal_data[0])
self.but_open.set_sensitive(True)
self.but_del.set_sensitive(not self._readonly)
if self.attrs.get('add_remove'):
self.but_remove.set_sensitive(not self._readonly)
if signal_data[0] < signal_data[1]:
self.but_next.set_sensitive(True)
else:
self.but_next.set_sensitive(False)
if signal_data[0] > 1:
self.but_pre.set_sensitive(True)
else:
self.but_pre.set_sensitive(False)
self.but_del.set_sensitive(not self._readonly)
self.but_undel.set_sensitive(not self._readonly)
else:
self.but_open.set_sensitive(False)
self.but_del.set_sensitive(False)
self.but_undel.set_sensitive(False)
self.but_next.set_sensitive(False)
self.but_pre.set_sensitive(False)
if self.attrs.get('add_remove'):
self.but_remove.set_sensitive(False)
line = '(%s/%s)' % (name, signal_data[1])
self.label.set_text(line)
def display(self, record, field):
super(One2Many, self).display(record, field)
if field is None:
self.screen.new_group()
self.screen.current_record = None
self.screen.parent = True
self.screen.display()
return False
new_group = field.get_client(record)
if id(self.screen.group) != id(new_group):
self.screen.group = new_group
if (self.screen.current_view.view_type == 'tree') \
and self.screen.editable_get():
self.screen.current_record = None
readonly = False
domain = []
if record:
readonly = field.get_state_attrs(record).get('readonly', False)
domain = field.domain_get(record)
if self.screen.domain != domain:
self.screen.domain = domain
self.screen.group.readonly = readonly
self.screen.display()
return True
def set_value(self, record, field):
self.screen.save_tree_state()
self.screen.current_view.set_value()
if self.screen.modified(): # TODO check if required
record.modified_fields.setdefault(field.name)
record.signal('record-modified')
return True
示例5: Many2ManySelection
# 需要导入模块: from tryton.gui.window.view_form.screen import Screen [as 别名]
# 或者: from tryton.gui.window.view_form.screen.Screen import new_group [as 别名]
class Many2ManySelection(Widget, SelectionMixin):
expand = True
def __init__(self, view, attrs):
super(Many2ManySelection, self).__init__(view, attrs)
self.widget = gtk.VBox(homogeneous=False, spacing=5)
hbox = gtk.HBox(homogeneous=False, spacing=0)
hbox.set_border_width(2)
label = gtk.Label(attrs.get("string", ""))
label.set_alignment(0.0, 0.5)
hbox.pack_start(label, expand=True, fill=True)
frame = gtk.Frame()
frame.add(hbox)
frame.set_shadow_type(gtk.SHADOW_OUT)
self.widget.pack_start(frame, expand=False, fill=True)
self.screen = Screen(
attrs["relation"],
view_ids=attrs.get("view_ids", "").split(","),
mode=["tree"],
views_preload=attrs.get("views", {}),
)
self.screen.new_group()
self.treeview = self.screen.current_view.treeview
self.treeview.get_selection().connect("changed", self.changed)
self.treeview.connect("focus-out-event", lambda *a: self._focus_out())
self.treeview.connect("button-press-event", self.button_press_event)
self.treeview.connect("key-press-event", self.key_press_event)
self.widget.pack_start(self.screen.widget, expand=True, fill=True)
self.nullable_widget = False
self.init_selection()
@property
def modified(self):
if self.record and self.field:
group = set(r.id for r in self.field.get_client(self.record))
value = set(self.get_value())
return value != group
return False
def changed(self, selection):
def focus_out():
if self.widget.props.window:
self._focus_out()
# Must be deferred because it triggers a display of the form
gobject.idle_add(focus_out)
def button_press_event(self, treeview, event):
# grab focus because it doesn't whith CONTROL MASK
treeview.grab_focus()
if event.button == 1:
event.state ^= gtk.gdk.CONTROL_MASK
def key_press_event(self, treeview, event):
if event.keyval in MOVEMENT_KEYS:
event.state ^= gtk.gdk.CONTROL_MASK
def get_value(self):
return [r.id for r in self.screen.selected_records]
def set_value(self, record, field):
field.set_client(record, self.get_value())
def display(self, record, field):
selection = self.treeview.get_selection()
selection.handler_block_by_func(self.changed)
try:
self.update_selection(record, field)
super(Many2ManySelection, self).display(record, field)
if field is None:
self.screen.clear()
self.screen.current_record = None
self.screen.parent = None
else:
self.screen.parent = record
current_ids = [r.id for r in self.screen.group]
new_ids = [s[0] for s in self.selection]
if current_ids != new_ids:
self.screen.clear()
self.screen.load(new_ids)
group = field.get_client(record)
nodes = [[r.id] for r in group if r not in group.record_removed and r not in group.record_deleted]
selection.unselect_all()
self.screen.current_view.select_nodes(nodes)
self.screen.display()
finally:
selection.handler_unblock_by_func(self.changed)
示例6: One2Many
# 需要导入模块: from tryton.gui.window.view_form.screen import Screen [as 别名]
# 或者: from tryton.gui.window.view_form.screen.Screen import new_group [as 别名]
#.........这里部分代码省略.........
def callback(result):
self.focus_out = True
if result:
ids = [x[0] for x in result]
self.screen.load(ids, modified=True)
self.screen.display(res_id=ids[0])
if sequence:
self.screen.group.set_sequence(field=sequence)
self.screen.set_cursor()
self.wid_text.set_text('')
win = WinSearch(self.attrs['relation'], callback, sel_multi=True,
context=context, domain=domain,
view_ids=self.attrs.get('view_ids', '').split(','),
views_preload=self.attrs.get('views', {}),
new=self.but_new.get_property('sensitive'))
win.screen.search_filter(quote(text))
win.show()
def _sig_label(self, screen, signal_data):
self._position = signal_data[0]
self._length = signal_data[1]
if self._position >= 1:
name = str(self._position)
else:
name = '_'
line = '(%s/%s)' % (name, self._length)
self.label.set_text(line)
self._set_button_sensitive()
def display(self, record, field):
super(One2Many, self).display(record, field)
self._set_button_sensitive()
if field is None:
self.screen.new_group()
self.screen.current_record = None
self.screen.parent = None
self.screen.display()
return False
new_group = field.get_client(record)
if id(self.screen.group) != id(new_group):
self.screen.group = new_group
if (self.screen.current_view.view_type == 'tree') \
and self.screen.current_view.editable:
self.screen.current_record = None
readonly = False
domain = []
size_limit = None
if record:
readonly = field.get_state_attrs(record).get('readonly', False)
domain = field.domain_get(record)
size_limit = record.expr_eval(self.attrs.get('size'))
if self.screen.domain != domain:
self.screen.domain = domain
self.screen.group.readonly = readonly
self.screen.size_limit = size_limit
self.screen.display()
return True
def set_value(self, record, field):
self.screen.current_view.set_value()
if self.screen.modified(): # TODO check if required
record.modified_fields.setdefault(field.name)
record.signal('record-modified')
return True
def _completion_match_selected(self, completion, model, iter_):
record_id, = model.get(iter_, 1)
self.screen.load([record_id], modified=True)
self.wid_text.set_text('')
self.wid_text.grab_focus()
completion_model = self.wid_completion.get_model()
completion_model.clear()
completion_model.search_text = self.wid_text.get_text()
return True
def _update_completion(self, widget):
if self._readonly:
return
if not self.record:
return
model = self.attrs['relation']
domain = self.field.domain_get(self.record)
domain = [domain, self.record.expr_eval(self.attrs.get('add_remove'))]
removed_ids = self.field.get_removed_ids(self.record)
domain = ['OR', domain, ('id', 'in', removed_ids)]
update_completion(self.wid_text, self.record, self.field, model,
domain=domain)
def _completion_action_activated(self, completion, index):
if index == 0:
self._sig_add()
self.wid_text.grab_focus()
elif index == 1:
self._sig_new()
示例7: Many2Many
# 需要导入模块: from tryton.gui.window.view_form.screen import Screen [as 别名]
# 或者: from tryton.gui.window.view_form.screen.Screen import new_group [as 别名]
#.........这里部分代码省略.........
del self.widget
def color_set(self, name):
super(Many2Many, self).color_set(name)
widget = self._color_widget()
# if the style to apply is different from readonly then insensitive
# cellrenderers should use the default insensitive color
if name != 'readonly':
widget.modify_text(gtk.STATE_INSENSITIVE,
self.colors['text_color_insensitive'])
def _focus_out(self, *args):
if self.wid_text.get_text():
self._sig_add()
def _sig_add(self, *args):
if not self.focus_out:
return
domain = self.field.domain_get(self.record)
context = self.field.context_get(self.record)
value = self.wid_text.get_text()
self.focus_out = False
try:
if value:
dom = [('rec_name', 'ilike', '%' + value + '%'), domain]
else:
dom = domain
ids = RPCExecute('model', self.attrs['relation'], 'search',
dom, 0, CONFIG['client.limit'], None, context=context)
except RPCException:
self.focus_out = True
return False
def callback(result):
self.focus_out = True
if result:
ids = [x[0] for x in result]
self.screen.load(ids, modified=True)
self.screen.display(res_id=ids[0])
self.screen.set_cursor()
self.wid_text.set_text('')
if len(ids) != 1 or not value:
WinSearch(self.attrs['relation'], callback, sel_multi=True,
ids=ids, context=context, domain=domain,
view_ids=self.attrs.get('view_ids', '').split(','),
views_preload=self.attrs.get('views', {}))
else:
callback([(i, None) for i in ids])
def _sig_remove(self, *args):
self.screen.remove(remove=True)
def _sig_activate(self, *args):
self._sig_add()
self.wid_text.grab_focus()
def _on_activate(self):
self._sig_edit()
def _sig_edit(self):
if self.screen.current_record:
def callback(result):
if result:
self.screen.current_record.save()
else:
self.screen.current_record.cancel()
WinForm(self.screen, callback)
def _readonly_set(self, value):
self._readonly = value
self.wid_text.set_editable(not value)
self.wid_text.set_sensitive(not value)
self.but_remove.set_sensitive(not value)
self.but_add.set_sensitive(not value)
def _sig_label(self, screen, signal_data):
if signal_data[0] >= 1:
self.but_remove.set_sensitive(not self._readonly)
else:
self.but_remove.set_sensitive(False)
def display(self, record, field):
super(Many2Many, self).display(record, field)
if field is None:
self.screen.new_group()
self.screen.current_record = None
self.screen.parent = True
self.screen.display()
return False
new_group = field.get_client(record)
if id(self.screen.group) != id(new_group):
self.screen.group = new_group
self.screen.display()
return True
def set_value(self, record, field):
self.screen.save_tree_state()
self.screen.current_view.set_value()
return True