Implement cursor set for form view

This commit is contained in:
Cédric Krier committed 2008-05-26 17:45:42 +02:00
1 parent 64d995b9f4
commit 1c4a1ccf55
22 files changed
+118 -39

No files matched your search

+9 -9
View File
@@ -237,8 +237,8 @@ class Screen(SignalEvent):
else:
if self.current_view.view_type == 'form':
self.new()
self.display()
self.current_view.set_cursor()
self.display()
# TODO: set True or False accoring to the type
def load_view_to_load(self):
@@ -346,9 +346,9 @@ class Screen(SignalEvent):
self.models.model_add(model, self.new_model_position())
self.current_model = model
self.current_model.validate_set()
self.display()
if self.current_view:
self.current_view.set_cursor(new=True)
self.display()
return self.current_model
def new_model_position(self):
@@ -376,8 +376,8 @@ class Screen(SignalEvent):
if self.current_model.validate():
obj_id = self.current_model.save(force_reload=True)
else:
self.current_view.display()
self.current_view.set_cursor()
self.current_view.display()
return False
if self.current_view.view_type == 'tree':
for model in self.models.models:
@@ -386,11 +386,11 @@ class Screen(SignalEvent):
obj_id = model.save(force_reload=True)
else:
self.current_model = model
self.display()
self.current_view.set_cursor()
self.display()
return False
self.display()
self.current_view.set_cursor()
self.display()
if self.current_model not in self.models:
self.models.model_add(self.current_model)
return obj_id
@@ -450,8 +450,8 @@ class Screen(SignalEvent):
self.current_model = None
if reload_ids:
self.models.reload(reload_ids)
self.display()
self.current_view.set_cursor()
self.display()
res = obj_id
if self.current_view.view_type == 'tree':
ids = self.current_view.sel_ids_get()
@@ -472,8 +472,8 @@ class Screen(SignalEvent):
self.current_model = None
if reload_ids:
self.models.reload(reload_ids)
self.display()
self.current_view.set_cursor()
self.display()
res = ids
return res
@@ -513,8 +513,8 @@ class Screen(SignalEvent):
and self.models.models[0]
if self.current_model:
self.current_model.validate_set()
self.display()
self.current_view.set_cursor()
self.display()
def display_prev(self):
self.current_view.set_value()
@@ -529,8 +529,8 @@ class Screen(SignalEvent):
if self.current_model:
self.current_model.validate_set()
self.display()
self.current_view.set_cursor()
self.display()
def sel_ids_get(self):
return self.current_view.sel_ids_get()
+6 -3
View File
@@ -61,9 +61,9 @@ class ViewWidget(object):
class ViewForm(ParserView):
def __init__(self, window, screen, widget, children=None,
buttons=None, toolbar=None):
buttons=None, toolbar=None, notebooks=None, cursor_widget=''):
super(ViewForm, self).__init__(window, screen, widget, children,
buttons, toolbar)
buttons, toolbar, notebooks, cursor_widget)
self.view_type = 'form'
self.model_add_new = False
@@ -198,4 +198,7 @@ class ViewForm(ParserView):
return True
def set_cursor(self, new=False):
pass
for notebook in self.notebooks:
notebook.set_current_page(0)
if self.cursor_widget in self.widgets:
self.widgets[self.cursor_widget].widget.grab_focus()
@@ -60,6 +60,9 @@ class Binary(WidgetInterface):
self.but_new.show()
self.but_remove.show()
def grab_focus(self):
return self.wid_text.grab_focus()
def sig_new(self, widget=None):
try:
filename = file_selection(_('Open...'),
@@ -56,6 +56,9 @@ class Calendar(WidgetInterface):
self.entry.set_sensitive(not value)
self.but_open.set_sensitive(not value)
def grab_focus(self):
return self.entry.grab_focus()
def get_value(self, model):
value = self.entry.get_text()
if value == '':
@@ -167,6 +170,9 @@ class DateTime(WidgetInterface):
self.entry.set_editable(not value)
self.entry.set_sensitive(not value)
def grab_focus(self):
return self.entry.grab_focus()
def get_value(self, model, timezone=True):
value = self.entry.get_text()
if value == '':
@@ -22,6 +22,9 @@ class Char(WidgetInterface):
def _color_widget(self):
return self.entry
def grab_focus(self):
return self.entry.grab_focus()
def set_value(self, model, model_field):
return model_field.set_client(model, self.entry.get_text() or False)
@@ -72,6 +72,9 @@ class Image(WidgetInterface):
self.update_img()
def grab_focus(self):
return self.image.grab_focus()
def sig_add(self, widget):
filter_all = gtk.FileFilter()
filter_all.set_name(_('All files'))
@@ -123,6 +123,9 @@ class WidgetInterface(object):
def _invisible_widget(self):
return self.widget
def grab_focus(self):
return self.widget.grab_focus()
def color_set(self, name):
widget = self._color_widget()
colormap = widget.get_colormap()
@@ -49,6 +49,9 @@ class Many2Many(WidgetInterface):
self.old = None
def grab_focus(self):
return self.wid_text.grab_focus()
def destroy(self):
self.screen.destroy()
self.widget.destroy()
@@ -153,6 +153,9 @@ class Many2One(WidgetInterface):
if ids:
self.load_completion(ids)
def grab_focus(self):
return self.wid_text.grab_focus()
def _focus_out(self):
return WidgetInterface._focus_out(self)
@@ -338,6 +338,9 @@ class One2Many(WidgetInterface):
self.screen.widget.connect('key_press_event', self.on_keypress)
def grab_focus(self):
return self.screen.widget.grab_focus()
def on_keypress(self, widget, event):
if (event.keyval == gtk.keysyms.N \
and event.state & gtk.gdk.CONTROL_MASK \
@@ -257,12 +257,14 @@ class ParserForm(ParserInterface):
tooltips=None):
dict_widget = {}
button_list = []
notebook_list = []
attrs = common.node_attributes(root_node)
on_write = attrs.get('on_write', '')
if not tooltips:
tooltips = gtk.Tooltips()
container = _container(tooltips)
container.new(col=int(attrs.get('col', 4)))
cursor_widget = attrs.get('cursor')
if not self.title:
self.title = attrs.get('string', 'Unknown')
@@ -271,6 +273,8 @@ class ParserForm(ParserInterface):
if not node.nodeType == node.ELEMENT_NODE:
continue
attrs = common.node_attributes(node)
if not cursor_widget:
cursor_widget = attrs.get('name')
if node.localName == 'image':
icon = Image(attrs)
button_list.append(icon)
@@ -356,6 +360,7 @@ class ParserForm(ParserInterface):
elif node.localName == 'notebook':
notebook = gtk.Notebook()
notebook_list.append(notebook)
if attrs and 'tabpos' in attrs:
pos = {'up':gtk.POS_TOP,
'down':gtk.POS_BOTTOM,
@@ -375,8 +380,12 @@ class ParserForm(ParserInterface):
notebook.set_border_width(3)
container.wid_add(notebook, colspan=attrs.get('colspan', 4),
expand=True, fill=True)
widget, widgets, buttons, on_write = self.parse(model, node,
fields, notebook, tooltips=tooltips)
widget, widgets, buttons, on_write, notebook_list2, cursor_widget2 = \
self.parse(model, node, fields, notebook,
tooltips=tooltips)
if not cursor_widget:
cursor_widget = cursor_widget2
notebook_list.extend(notebook_list2)
button_list += buttons
dict_widget.update(widgets)
@@ -387,8 +396,12 @@ class ParserForm(ParserInterface):
angle = int(CONFIG['client.form_tab_orientation'])
label = gtk.Label(attrs.get('string','No String Attr.'))
label.set_angle(angle)
widget, widgets, buttons, on_write = self.parse(model, node,
fields, notebook, tooltips=tooltips)
widget, widgets, buttons, on_write, notebook_list2, cursor_widget2 = \
self.parse(model, node, fields, notebook,
tooltips=tooltips)
if not cursor_widget:
cursor_widget = cursor_widget2
notebook_list.extend(notebook_list2)
button_list += buttons
dict_widget.update(widgets)
notebook.append_page(widget, label)
@@ -436,8 +449,11 @@ class ParserForm(ParserInterface):
xexpand=xexpand, xfill=xfill)
elif node.localName == 'group':
widget, widgets, buttons, on_write = self.parse(model, node,
fields, tooltips=tooltips)
widget, widgets, buttons, on_write, notebook_list2, cursor_widget2 = \
self.parse(model, node, fields, tooltips=tooltips)
if not cursor_widget:
cursor_widget = cursor_widget2
notebook_list.extend(notebook_list2)
dict_widget.update(widgets)
button_list += buttons
if attrs.get('string', None):
@@ -453,8 +469,12 @@ class ParserForm(ParserInterface):
hpaned = gtk.HPaned()
container.wid_add(hpaned, colspan=int(attrs.get('colspan', 4)),
expand=True, fill=True)
widget, widgets, buttons, on_write = self.parse(model, node,
fields, paned=hpaned, tooltips=tooltips)
widget, widgets, buttons, on_write, notebook_list2, cursor_widget2 = \
self.parse(model, node, fields, paned=hpaned,
tooltips=tooltips)
if not cursor_widget:
cursor_widget = cursor_widget2
notebook_list.extend(notebook_list2)
button_list += buttons
dict_widget.update(widgets)
if 'position' in attrs:
@@ -463,28 +483,41 @@ class ParserForm(ParserInterface):
vpaned = gtk.VPaned()
container.wid_add(vpaned, colspan=int(attrs.get('colspan', 4)),
expand=True, fill=True)
widget, widgets, buttons, on_write = self.parse(model, node,
fields, paned=vpaned, tooltips=tooltips)
widget, widgets, buttons, on_write, notebook_list, cursor_widget2 = \
self.parse(model, node, fields, paned=vpaned,
tooltips=tooltips)
if not cursor_widget:
cursor_widget = cursor_widget2
notebook_list.extend(notebook_list2)
button_list += buttons
dict_widget.update(widgets)
if 'position' in attrs:
vpaned.set_position(int(attrs['position']))
elif node.localName == 'child1':
widget, widgets, buttons, on_write = self.parse(model, node,
fields, paned=paned, tooltips=tooltips)
widget, widgets, buttons, on_write, notebook_list2, cursor_widget2 = \
self.parse(model, node, fields, paned=paned,
tooltips=tooltips)
if not cursor_widget:
cursor_widget = cursor_widget2
notebook_list.extend(notebook_list2)
button_list += buttons
dict_widget.update(widgets)
paned.pack1(widget, resize=True, shrink=True)
elif node.localName == 'child2':
widget, widgets, buttons, on_write = self.parse(model, node,
fields, paned=paned, tooltips=tooltips)
widget, widgets, buttons, on_write, notebook_list, cursor_widget2 = \
self.parse(model, node, fields, paned=paned,
tooltips=tooltips)
if not cursor_widget:
cursor_widget = cursor_widget2
notebook_list.extend(notebook_list2)
button_list += buttons
dict_widget.update(widgets)
paned.pack2(widget, resize=True, shrink=True)
for (button, src, name, widget) in container.trans_box:
button.connect('clicked', self.translate, model, name,
src, widget)
return container.pop(), dict_widget, button_list, on_write
return container.pop(), dict_widget, button_list, on_write, \
notebook_list, cursor_widget
def translate(self, widget, model, name, src, widget_entry):
obj_id = self.screen.current_model.id
@@ -87,6 +87,9 @@ class Reference(WidgetInterface):
self.last_key = (None, 0)
self.key_catalog = {}
def grab_focus(self):
return self.widget_combo.grab_focus()
def get_model(self):
child = self.widget_combo.get_child()
res = child.get_text()
@@ -44,6 +44,9 @@ class Selection(WidgetInterface):
self.set_popdown(selection)
self.last_key = (None, 0)
def grab_focus(self):
return self.entry.grab_focus()
def set_popdown(self, selection):
model = gtk.ListStore(gobject.TYPE_STRING)
self._selection = {}
@@ -25,6 +25,9 @@ class TextBox(WidgetInterface):
self.widget.pack_start(self.scrolledwindow)
def grab_focus(self):
return self.textview.grab_focus()
def _readonly_set(self, value):
super(TextBox, self)._readonly_set(value)
self.textview.set_editable(not value)
@@ -33,6 +33,8 @@ class URL(WidgetInterface):
self.button.set_property('can-focus', False)
self.widget.pack_start(self.button, expand=False, fill=False)
def grab_focus(self):
return self.entry.grab_focus()
def set_value(self, model, model_field):
return model_field.set_client(model, self.entry.get_text() or False)
+2 -2
View File
@@ -4,9 +4,9 @@ from interface import ParserView
class ViewGraph(ParserView):
def __init__(self, window, screen, widget, children=None,
buttons=None, toolbar=None):
buttons=None, toolbar=None, notebooks=None, cursor_widget=None):
super(ViewGraph, self).__init__(window, screen, widget, children,
buttons, toolbar)
buttons, toolbar, notebooks, cursor_widget)
self.view_type = 'graph'
self.model_add_new = False
self.widgets = children
@@ -136,4 +136,4 @@ class ParserGraph(ParserInterface):
event.add(widget)
event.connect('button-press-event', button_press, widget, self.window)
return event, {'root': widget}, [], ''
return event, {'root': widget}, [], '', [], None
@@ -15,7 +15,7 @@ class ParserInterface(object):
class ParserView(object):
def __init__(self, window, screen, widget, children=None, buttons=None,
toolbar=None):
toolbar=None, notebooks=None, cursor_widget=None):
self.window = window
self.screen = screen
self.widget = widget
@@ -24,3 +24,7 @@ class ParserView(object):
buttons = []
self.buttons = buttons
self.toolbar = toolbar
if notebooks is None:
notebooks = []
self.notebooks = notebooks
self.cursor_widget = cursor_widget
+2 -2
View File
@@ -136,9 +136,9 @@ class AdaptModelGroup(gtk.GenericTreeModel):
class ViewList(ParserView):
def __init__(self, window, screen, widget, children=None, buttons=None,
toolbar=None):
toolbar=None, notebooks=None, cursor_widget=None):
super(ViewList, self).__init__(window, screen, widget, children,
buttons, toolbar)
buttons, toolbar, notebooks, cursor_widget)
self.store = None
self.view_type = 'tree'
self.model_add_new = True
@@ -177,7 +177,7 @@ class ParserTree(ParserInterface):
dict_widget[i] = (fname, label, label_sum,
fields.get('digits', (16,2))[1], label_bold)
treeview.set_fixed_height_mode(True)
return treeview, dict_widget, [], on_write
return treeview, dict_widget, [], on_write, [], None
class Char(object):
@@ -33,11 +33,11 @@ class WidgetParse(ParserInterface):
if node.localName in PARSERS:
widget = PARSERS[node.localName](self.window, self.parent,
self.attrs, screen)
wid, child, buttons, on_write = widget.parse(screen.resource,
node, fields)
wid, child, buttons, on_write, notebooks, cursor_widget = \
widget.parse(screen.resource, node, fields)
screen.set_on_write(on_write)
res = PARSERS2[node.localName](self.window, screen, wid, child,
buttons, toolbar)
buttons, toolbar, notebooks, cursor_widget)
res.title = widget.title
widget = res
break
+3 -2
View File
@@ -39,9 +39,7 @@ class Dialog(object):
val[i] = fields[i]['value']
self.screen = Screen(obj_name, self.dia, view_type=[], context=context)
self.screen.new(default=False)
self.screen.add_view_custom(arch, fields, display=True)
self.screen.current_model.set(val)
width, height = self.screen.screen_container.size_get()
parent_width, parent_height = parent.get_size()
@@ -52,6 +50,9 @@ class Dialog(object):
self.dia.vbox.pack_start(self.screen.widget)
self.dia.set_title(self.dia.get_title() + ' - ' + self.screen.current_view.title)
self.dia.show()
self.screen.new(default=False)
self.screen.current_model.set(val)
self.screen.current_view.set_cursor()
def run(self, datas=None):
if datas is None: