[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
gnue/forms/src GFDisplayHandler.py GFInstance.p...
From: |
Jan Ischebeck |
Subject: |
gnue/forms/src GFDisplayHandler.py GFInstance.p... |
Date: |
Mon, 16 Jun 2003 17:32:30 -0400 |
CVSROOT: /cvsroot/gnue
Module name: gnue
Branch:
Changes by: Jan Ischebeck <address@hidden> 03/06/16 17:32:30
Modified files:
forms/src : GFDisplayHandler.py GFInstance.py
forms/src/uidrivers/gtk2: UILoginHandler.py common.py
forms/src/uidrivers/gtk2/widgets: box.py button.py entry.py
_base.py
forms/src/uidrivers/gtk2/widgets/form: widget.py wrappers.py
Log message:
gtk2 uidriver updates:
* add copyright header to common.py
* Switch event system from key pressed/mouse clicked events to
higher level (insert text/delete text) events.
- add requestDELETERANGE and requestINSERTAT event types
- move focus handling to _base.py
- move insert/delete handling into entry.py
- just leave basic keyboard overrides (connect_after) in common.py
(TODO: add accelerator maps to allow use of global accelerators)
* add unicode/textencoding fixes for 0.5.1
(unicode is not internal encoding)
* fix size of "Box" widget.
* show login error messages in red (as in wx uidrv)
* code cleanup + other minor fixes
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/forms/src/GFDisplayHandler.py.diff?tr1=1.57&tr2=1.58&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/forms/src/GFInstance.py.diff?tr1=1.113&tr2=1.114&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/forms/src/uidrivers/gtk2/UILoginHandler.py.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/forms/src/uidrivers/gtk2/common.py.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/forms/src/uidrivers/gtk2/widgets/box.py.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/forms/src/uidrivers/gtk2/widgets/button.py.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/forms/src/uidrivers/gtk2/widgets/entry.py.diff?tr1=1.3&tr2=1.4&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/forms/src/uidrivers/gtk2/widgets/_base.py.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/forms/src/uidrivers/gtk2/widgets/form/widget.py.diff?tr1=1.3&tr2=1.4&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/forms/src/uidrivers/gtk2/widgets/form/wrappers.py.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
Patches:
Index: gnue/forms/src/GFDisplayHandler.py
diff -c gnue/forms/src/GFDisplayHandler.py:1.57
gnue/forms/src/GFDisplayHandler.py:1.58
*** gnue/forms/src/GFDisplayHandler.py:1.57 Wed Jun 11 21:00:09 2003
--- gnue/forms/src/GFDisplayHandler.py Mon Jun 16 17:32:29 2003
***************
*** 243,249 ****
--- 243,263 ----
self.modified = 1
self._buildDisplay()
+ # Insert text at defined position
+ def insertTextAt(self, event):
+ # set cursor position
+ self.cursor = event.position
+ # add the event text
+ self.addText(event)
+
+ # Delete Text Range
+ def deleteRange(self, event):
+ self.selection1 = event.start_pos
+ self.selection2 = event.end_pos
+ self.cursor = event.position
+ self.delete(event)
+
# Delete backwards one character
def backspace(self, event):
***************
*** 474,479 ****
--- 488,497 ----
'requestCOPY' : self.clipboardCopy,
'requestCUT' : self.clipboardCut,
'requestPASTE' : self.clipboardPaste,
+
+ # Request for direct buffer manipulation
+ 'requestINSERTAT' : self.insertTextAt,
+ 'requestDELETERANGE' : self.deleteRange,
})
***************
*** 951,957 ****
return im
! ############################################################################
#
# ComponentDiplayHandler
#
--- 969,975 ----
return im
! #############################################################################
#
# ComponentDiplayHandler
#
***************
*** 960,964 ****
FieldDisplayHandler.__init__(self, entry, eventHandler, None)
def _buildDisplayHelper(self, value, editing):
! if string.lower(self.entry.type) == 'url':
return value
--- 978,982 ----
FieldDisplayHandler.__init__(self, entry, eventHandler, None)
def _buildDisplayHelper(self, value, editing):
! if string.lower(self.entry.type) == 'url':
return value
Index: gnue/forms/src/GFInstance.py
diff -c gnue/forms/src/GFInstance.py:1.113 gnue/forms/src/GFInstance.py:1.114
*** gnue/forms/src/GFInstance.py:1.113 Thu May 22 16:11:02 2003
--- gnue/forms/src/GFInstance.py Mon Jun 16 17:32:29 2003
***************
*** 119,124 ****
--- 119,126 ----
'requestTOGGLECHKBOX' : self.proxyEntryEvent,
'beginEDITMODE' : self.proxyEntryEvent,
'endEDITMODE' : self.proxyEntryEvent,
+ 'requestINSERTAT' : self.proxyEntryEvent,
+ 'requestDELETERANGE' : self.proxyEntryEvent,
# Selection/clipboard events (proxied)
'requestSELECTWITHMOUSE' : self.proxyEntryEvent,
Index: gnue/forms/src/uidrivers/gtk2/UILoginHandler.py
diff -c gnue/forms/src/uidrivers/gtk2/UILoginHandler.py:1.2
gnue/forms/src/uidrivers/gtk2/UILoginHandler.py:1.3
*** gnue/forms/src/uidrivers/gtk2/UILoginHandler.py:1.2 Sun Jun 1 13:02:37 2003
--- gnue/forms/src/uidrivers/gtk2/UILoginHandler.py Mon Jun 16 17:32:29 2003
***************
*** 114,119 ****
--- 114,123 ----
if errortext:
errorField = gtk.Label(str(errortext))
+ errorField.set_line_wrap(gtk.TRUE)
+ # Write in errortext in red
+ errorField.modify_fg(gtk.STATE_NORMAL,gtk.gdk.color_parse('red'))
+
t = len(self.textEntryList)
table1.attach_defaults(errorField,1,3,t+4,t+5)
***************
*** 125,130 ****
--- 129,136 ----
self.dlg.show_all()
response=self.dlg.run()
+
+ self.dlg.destroy()
if response==gtk.RESPONSE_OK:
self.loginCompleted(1)
***************
*** 163,166 ****
except IndexError:
# for the last event in the list, trigger OK button
self.dlg.response(gtk.RESPONSE_OK)
- self.dlg.destroy()
--- 169,171 ----
Index: gnue/forms/src/uidrivers/gtk2/common.py
diff -c gnue/forms/src/uidrivers/gtk2/common.py:1.2
gnue/forms/src/uidrivers/gtk2/common.py:1.3
*** gnue/forms/src/uidrivers/gtk2/common.py:1.2 Mon May 19 20:06:35 2003
--- gnue/forms/src/uidrivers/gtk2/common.py Mon Jun 16 17:32:29 2003
***************
*** 1,3 ****
--- 1,34 ----
+ #
+ # This file is part of GNU Enterprise.
+ #
+ # GNU Enterprise is free software; you can redistribute it
+ # and/or modify it under the terms of the GNU General Public
+ # License as published by the Free Software Foundation; either
+ # version 2, or (at your option) any later version.
+ #
+ # GNU Enterprise is distributed in the hope that it will be
+ # useful, but WITHOUT ANY WARRANTY; without even the implied
+ # warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ # PURPOSE. See the GNU General Public License for more details.
+ #
+ # You should have received a copy of the GNU General Public
+ # License along with program; see the file COPYING. If not,
+ # write to the Free Software Foundation, Inc., 59 Temple Place
+ # - Suite 330, Boston, MA 02111-1307, USA.
+ #
+ # Copyright 2000-2003 Free Software Foundation
+ #
+ # FILE:
+ # gtk2/common.py
+ #
+ # DESCRIPTION:
+ # A part of the gtk2 based user interface driver for GNUe forms.
+ #
+ # NOTES:
+ #
+ # TODO:
+ # * add global accelerator maps
+ # * cleanup event stuff
import string
***************
*** 14,32 ****
def _setDefaultEventHandlers(newWidget, eventHandler, initialize, uiDriver):
if initialize:
! # care for focus-in-eventfocus-out-event etc.?
! # need to set event MASK with newWidget.add_events() ?
! newWidget.connect("key-press-event", _keyPressHandler,\
! uiDriver, eventHandler)
!
! # Just care for focus in events, because focus out events
! # (user switches to other applications are irrelevant for us
! ## newWidget.connect("focus-in-event", _focusInHandler,\
! ## uiDriver, eventHandler)
! ## newWidget.connect("focus-out-event", _focusOutHandler,\
! ## uiDriver, eventHandler)
! newWidget.connect("button-press-event", _buttonPressHandler,\
! uiDriver, eventHandler)
return
--- 45,57 ----
def _setDefaultEventHandlers(newWidget, eventHandler, initialize, uiDriver):
if initialize:
! # Just care for keypresses which get not handled
! newWidget.connect_after("key-press-event", _keyPressHandler,\
! uiDriver, eventHandler)
!
! #OLD: Mouse event stuff
! #newWidget.connect("button-press-event", _buttonPressHandler,\
! # uiDriver, eventHandler)
return
***************
*** 38,43 ****
--- 63,70 ----
# GNUe events passed back to the form
#
+ # should be replaced by accelerators ONLY
+
def _keyPressHandler(widget, event, uiDriver, eventHandler):
# just care for keypresses
if event.type!=gtk.gdk.KEY_PRESS:
***************
*** 50,56 ****
isCtrl = event.state and gtk.gdk.CONTROL_MASK
isMod1 = event.state and gtk.gdk.MOD1_MASK
! object = uiDriver._WidgetToGFObj[widget]
#
# Sigh... a hack for using <enter> in multiline entries
--- 77,86 ----
isCtrl = event.state and gtk.gdk.CONTROL_MASK
isMod1 = event.state and gtk.gdk.MOD1_MASK
! try:
! object = uiDriver._WidgetToGFObj[widget]
! except:
! return
#
# Sigh... a hack for using <enter> in multiline entries
***************
*** 97,112 ****
else:
# maybe some background error message here
pass
! elif not event.state: # no special modifier keys pressed
! try:
! char = chr(keycode)
! if char in string.printable or char == "\n" or \
! 128 <= keycode <= 255:
! action = events.Event('requestKEYPRESS', char,
! text=char,
! code=keycode)
! except ValueError:
! pass
if action:
# Add the object's _form to the outgoing event
--- 127,150 ----
else:
# maybe some background error message here
pass
! ## elif not event.state: # no special modifier keys pressed
! ## try:
! ## char = chr(keycode)
! ## if char in string.printable or char == "\n" or \
! ## 128 <= keycode <= 255:
! ## action = events.Event('requestKEYPRESS', char,
! ## text=char,
! ## code=keycode)
! ## except ValueError:
! ## pass
!
!
! # print "'%s'" % command
! ## if command in ('CURSORLEFT', 'CURSORRIGHT','NEXTRECORD', 'PREVRECORD',
! ## 'BACKSPACE','DELETE','SELECTLEFT','SELECTRIGHT') and \
! ## isinstance(widget,gtk.Entry):
! ## print 'stopped'
! ## action=0
if action:
# Add the object's _form to the outgoing event
***************
*** 121,137 ****
# Traps most mouse events and translates them into
# GNUe events passed back to the form
#
- # TODO: fix focus change events raised by page change
- # through clicking on notebook tabs
-
- def _focusInHandler(widget, event, uiDriver, eventHandler):
- print "focus in: widget",widget
- object = uiDriver._WidgetToGFObj[widget]
- eventHandler('requestFOCUS',object,_form=object._form)
- # return gtk.TRUE
- def _focusOutHandler(widget, event, uiDriver, eventHandler):
- print "focus out: widget",widget
- # return gtk.TRUE # can make gtk.application segfault
def _buttonPressHandler(widget, event, uiDriver, eventHandler):
if (event.type!=gtk.gdk.BUTTON_PRESS and \
--- 159,164 ----
***************
*** 144,150 ****
isCtrl = event.state and gtk.gdk.CONTROL_MASK
isMod1 = event.state and gtk.gdk.MOD1_MASK
! object = uiDriver._WidgetToGFObj[widget]
#
# Focus
--- 171,180 ----
isCtrl = event.state and gtk.gdk.CONTROL_MASK
isMod1 = event.state and gtk.gdk.MOD1_MASK
! try:
! object = uiDriver._WidgetToGFObj[widget]
! except:
! object = uiDriver._WidgetToGFObj[widget._parent]
#
# Focus
Index: gnue/forms/src/uidrivers/gtk2/widgets/_base.py
diff -c gnue/forms/src/uidrivers/gtk2/widgets/_base.py:1.2
gnue/forms/src/uidrivers/gtk2/widgets/_base.py:1.3
*** gnue/forms/src/uidrivers/gtk2/widgets/_base.py:1.2 Mon May 19 20:06:35 2003
--- gnue/forms/src/uidrivers/gtk2/widgets/_base.py Mon Jun 16 17:32:30 2003
***************
*** 22,38 ****
# gtk2/widgets/_base.py
#
# DESCRIPTION:
! # Part of a gtk2 based user interface driver for GNUe forms.
#
# NOTES:
#
! from gtk import *
from gnue.common import events
from gnue.forms.GFForm import *
! from gnue.forms.uidrivers._base.widgets._base import *
! from gnue.forms.uidrivers.gtk2.common import *
#############################################################################
--- 22,39 ----
# gtk2/widgets/_base.py
#
# DESCRIPTION:
! # Part of a gtk2 based user interface driver for GNUe forms: Base Widget
#
# NOTES:
#
!
! import gtk
from gnue.common import events
from gnue.forms.GFForm import *
! from gnue.forms.uidrivers._base.widgets._base import UIWidget
! from gnue.forms.uidrivers.gtk2.common import _setDefaultEventHandlers
#############################################################################
***************
*** 60,147 ****
def _addToCrossRef(self, widget,gfobject, uiobject):
self._uiDriver._WidgetToGFObj[widget]=gfobject
self._uiDriver._WidgetToUIObj[widget]=uiobject
- #widget.__origBackgroundColor = widget.GetBackgroundColour()
def _deleteFromCrossRef(self, widget, object):
try:
- #del self._uiDriver._WidgetToTkObj[widget]
del self._uiDriver._WidgetToGFObj[widget]
del self._uiDriver._WidgetToUIObj[widget]
except:
pass
#
# Override the base UIWidget functions
#
def show(self):
for widget in self.widgets:
! widget.Show(1)
! # widget.Raise()
def hide(self):
for widget in self.widgets:
! widget.Show(0)
def showModal(self):
print "showModal not implemented for gtk2 driver"
for widget in self.widgets:
- # widget.ShowModal()
pass
def destroy(self):
print "destroy not implemented for gtk2 driver"
for widget in self.widgets:
- # self.Destroy()
pass
def indexedFocus(self, index):
! if self.widgets[index].get_name()=='GtkCombo':
! self.widgets[index].entry.grab_focus()
! else:
! self.widgets[index].grab_focus()
def setValue(self, value, index=0, enabled=1):
widget = self.widgets[index]
if widget.get_name()=='GtkCombo':
- # Check if foreign key changed
object = self._uiDriver._WidgetToGFObj[widget]
! try:
! if object.style == "dropdown" and \
! not object._field._allowedValues == widget._origAllowedValues:
! # These must be here or dropdown style controls
! # will get events they shouldn't and break.
! ## widget.SetEvtHandlerEnabled(FALSE)
! try:
! # Not in gtk2 2.2.x
! widget.Freeze()
! except AttributeError:
! pass
! widget._origAllowedValues = object._field._allowedValues
! widget.Clear()
! for value in object._field._allowedValuesDescr:
! widget.Append(value)
! widget.SetValue("")
! try:
! # Not in wx 2.2.x
! widget.Thaw()
! except AttributeError:
! pass
! ## widget.SetEvtHandlerEnabled(TRUE)
! except AttributeError:
! pass
! except:
! pass
widget.entry.set_text(value)
! elif widget.get_name()=='GtkTextView':
! widget.get_buffer().set_text(value)
elif widget.get_name()=='GtkCheckButton':
widget.set_active(value)
else:
widget.set_text(value)
if enabled:
widget.set_sensitive(1)
--- 61,168 ----
def _addToCrossRef(self, widget,gfobject, uiobject):
self._uiDriver._WidgetToGFObj[widget]=gfobject
self._uiDriver._WidgetToUIObj[widget]=uiobject
def _deleteFromCrossRef(self, widget, object):
try:
del self._uiDriver._WidgetToGFObj[widget]
del self._uiDriver._WidgetToUIObj[widget]
except:
pass
+ def _addDefaultEventHandler(self,widget,eventHandler,uiDriver):
+ widget._focus_sig_handler = widget.connect("focus-in-event",
+ self._focusInHandler,\
+ uiDriver,
+ eventHandler)
+ # add key press handlers from ../common.py
+ _setDefaultEventHandlers(widget, eventHandler, 1, uiDriver)
+
+
#
# Override the base UIWidget functions
#
def show(self):
for widget in self.widgets:
! widget.show()
def hide(self):
for widget in self.widgets:
! widget.hide()
def showModal(self):
print "showModal not implemented for gtk2 driver"
for widget in self.widgets:
pass
def destroy(self):
print "destroy not implemented for gtk2 driver"
for widget in self.widgets:
pass
def indexedFocus(self, index):
! widget = self.widgets[index]
!
! if widget.get_name()=='GtkCombo':
! widget=widget.entry
!
! # Block focus events
! try:
! widget.handler_block(widget._focus_sig_handler)
! except:
! pass
!
! #focus
! widget.grab_focus()
!
! # unblock focus events
! try:
! widget.handler_unblock(widget._focus_sig_handler)
! except:
! pass
def setValue(self, value, index=0, enabled=1):
+ # fix for 0.5.1 (Unicode is not internal encoding)
+ value = value.decode(gConfig('textEncoding'))
+
widget = self.widgets[index]
if widget.get_name()=='GtkCombo':
object = self._uiDriver._WidgetToGFObj[widget]
!
! # Check if foreign key changed
! if object.style == "dropdown" and \
! not object._field._allowedValues == widget._origAllowedValues:
!
! widget._origAllowedValues = object._field._allowedValues
! widget.Clear()
! for value in object._field._allowedValuesDescr:
! widget.Append(value)
! widget.SetValue("")
! # set the value
widget.entry.set_text(value)
!
elif widget.get_name()=='GtkCheckButton':
widget.set_active(value)
+
+ elif widget.get_name()=='MultiLineEdit':
+ widget.set_text(value)
+
else:
+ try:
+ widget.handler_block(widget._insert_handler)
+ widget.handler_block(widget._delete_handler)
+ except:
+ pass
+ # print "set to '%s'" % value
widget.set_text(value)
+ try:
+ widget.handler_unblock(widget._insert_handler)
+ widget.handler_unblock(widget._delete_handler)
+ except:
+ pass
if enabled:
widget.set_sensitive(1)
***************
*** 169,174 ****
--- 190,196 ----
pass
if event.initialize:
self._addToCrossRef(newWidget,event.object,self)
+
return newWidget
def cleanup(self, object):
***************
*** 180,182 ****
--- 202,235 ----
pass
self.widgets.pop(0)
self._deleteFromCrossRef(widget, object)
+
+
+ ###########################################################
+ #
+ # Internal Event Handler
+ #
+ #
+
+ def _focusInHandler(self, widget, event, uiDriver, eventHandler):
+ #print "focus in: widget",widget
+ try:
+ object = uiDriver._WidgetToGFObj[widget]
+ except:
+ try:
+ # for the entry in a dropdown widget
+ object = uiDriver._WidgetToGFObj[widget.get_parent()]
+ except:
+ # for the gtk.TextView widget in a MultiLineEdit Object
+ object = uiDriver._WidgetToGFObj[widget._parent]
+
+
+ action = events.Event('requestFOCUS',object,_form=object._form)
+ # TODO: fix VETO
+ # widget.emit_stop_by_name('focus-in-event')
+ gtk.idle_add(eventHandler,action)
+ # return gtk.TRUE
+
+
+ def _focusOutHandler(self,widget, event, uiDriver, eventHandler):
+ print "focus out: widget",widget
+ # return gtk.TRUE # can make gtk.application segfault
Index: gnue/forms/src/uidrivers/gtk2/widgets/box.py
diff -c gnue/forms/src/uidrivers/gtk2/widgets/box.py:1.2
gnue/forms/src/uidrivers/gtk2/widgets/box.py:1.3
*** gnue/forms/src/uidrivers/gtk2/widgets/box.py:1.2 Sun Jun 1 11:58:52 2003
--- gnue/forms/src/uidrivers/gtk2/widgets/box.py Mon Jun 16 17:32:29 2003
***************
*** 40,53 ****
object = event.object
newWidget = gtk.Frame()
! newWidget.set_size_request(self.itemWidth - 1 * event.widgetWidth,
! self.itemHeight)
- newWidget.modify_font(self._uiDriver.mono_font)
newWidget.set_label(str(object.label))
event.container.put(newWidget, (object.Char__x+0.5) * event.widgetWidth,
! (object.Char__y + spacer) * event.widgetHeight)
return newWidget
--- 40,53 ----
object = event.object
newWidget = gtk.Frame()
! newWidget.set_size_request(self.itemWidth - (1 * event.widgetWidth),
! self.itemHeight - (0.5 * event.widgetHeight))
newWidget.set_label(str(object.label))
+ newWidget.get_label_widget().modify_font(self._uiDriver.mono_font)
event.container.put(newWidget, (object.Char__x+0.5) * event.widgetWidth,
! (object.Char__y + spacer + 0.5) * event.widgetHeight)
return newWidget
Index: gnue/forms/src/uidrivers/gtk2/widgets/button.py
diff -c gnue/forms/src/uidrivers/gtk2/widgets/button.py:1.2
gnue/forms/src/uidrivers/gtk2/widgets/button.py:1.3
*** gnue/forms/src/uidrivers/gtk2/widgets/button.py:1.2 Mon May 19 20:06:35 2003
--- gnue/forms/src/uidrivers/gtk2/widgets/button.py Mon Jun 16 17:32:30 2003
***************
*** 19,35 ****
# Copyright 2000-2003 Free Software Foundation
#
# FILE:
! # UIwxpython.py
#
# DESCRIPTION:
! # A wxPython based user interface driver for GNUe forms.
#
# NOTES:
#
import gtk
from gnue.common import events
- from gnue.forms.uidrivers.gtk2.common import _setDefaultEventHandlers
from gnue.forms.uidrivers.gtk2.widgets._base import UIHelper
#
--- 19,34 ----
# Copyright 2000-2003 Free Software Foundation
#
# FILE:
! # gtk2/widgets/button.py
#
# DESCRIPTION:
! # A part of a gtk2 based user interface driver for GNUe forms: Button Widget
#
# NOTES:
#
import gtk
from gnue.common import events
from gnue.forms.uidrivers.gtk2.widgets._base import UIHelper
#
***************
*** 46,58 ****
newWidget.get_child().modify_font(self._uiDriver.mono_font)
event.container.put(newWidget, object.Char__x * event.widgetWidth,
! (object.Char__y + spacer) * event.widgetHeight)
if event.initialize:
self._eventHandler = event.eventHandler
newWidget.connect('clicked', self.buttonHandler, newWidget)
! _setDefaultEventHandlers(newWidget, event.eventHandler, \
! event.initialize, self._uiDriver)
return newWidget
--- 45,57 ----
newWidget.get_child().modify_font(self._uiDriver.mono_font)
event.container.put(newWidget, object.Char__x * event.widgetWidth,
! (object.Char__y + spacer) * event.widgetHeight)
if event.initialize:
self._eventHandler = event.eventHandler
newWidget.connect('clicked', self.buttonHandler, newWidget)
! self._addDefaultEventHandler(newWidget, event.eventHandler, \
! self._uiDriver)
return newWidget
Index: gnue/forms/src/uidrivers/gtk2/widgets/entry.py
diff -c gnue/forms/src/uidrivers/gtk2/widgets/entry.py:1.3
gnue/forms/src/uidrivers/gtk2/widgets/entry.py:1.4
*** gnue/forms/src/uidrivers/gtk2/widgets/entry.py:1.3 Mon May 26 03:07:21 2003
--- gnue/forms/src/uidrivers/gtk2/widgets/entry.py Mon Jun 16 17:32:30 2003
***************
*** 26,36 ****
#
# NOTES:
#
import gtk
from gnue.common import events
-
from gnue.forms.uidrivers.gtk2.widgets._base import UIHelper
- from gnue.forms.uidrivers.gtk2.common import _setDefaultEventHandlers
#
# UIEntry
--- 26,42 ----
#
# NOTES:
#
+ # TODO:
+ # * fix "selection" for gtk.entry
+ # * fix position to byteindex conversion (UTF-8)
+ # Update: working for Unicode Strings, i.e. when using Unicode as
+ # internal data representation has to be unicode, which is
+ # postponed for > ver. 0.5.1
+ #
+
import gtk
from gnue.common import events
from gnue.forms.uidrivers.gtk2.widgets._base import UIHelper
#
# UIEntry
***************
*** 49,113 ****
self.choices = [""]
self.choices.sort()
newWidget = gtk.Combo()
newWidget.set_popdown_strings(self.choices)
newWidget.set_size_request(self.itemWidth, self.itemHeight)
event.container.put(newWidget, object.Char__x * event.widgetWidth,
! (object.Char__y + spacer + (object._gap * spacer)) *
event.widgetHeight)
newWidget.list.connect('select-child', self.comboHandler, newWidget)
! #$print self.comboHandlerID
! _setDefaultEventHandlers(newWidget.entry, event.initialize,
newWidget,self._uiDriver)
! _setDefaultEventHandlers(newWidget.list, event.initialize,
newWidget,self._uiDriver)
elif style == 'label':
! newWidget = gtk.Label("")
newWidget.set_size_request(self.itemWidth, self.itemHeight + 1)
event.container.put(newWidget, object.Char__x * event.widgetWidth,
! (object.Char__y + spacer + (object._gap * spacer)) *
event.widgetHeight)
elif style == 'checkbox':
newWidget = gtk.CheckButton()
newWidget.set_size_request(2 * event.textWidth, event.textHeight)
event.container.put(newWidget, object.Char__x * event.widgetWidth,
(object.Char__y + spacer + (object._gap * spacer)) *
event.widgetHeight)
! newWidget.connect('toggled', self.checkboxHandler, newWidget)
! else: # Normal text box
value=""
if hasattr(object,'Char__height') and object.Char__height>1:
! textTagTable=gtk.TextTagTable()
! textBuffer=gtk.TextBuffer(textTagTable)
! newWidget=gtk.TextView()
! newWidget.set_buffer(textBuffer)
! newWidget.set_wrap_mode(gtk.WRAP_CHAR)
! textBuffer.set_text(value)
! viewport=gtk.ScrolledWindow()
! viewport.add_with_viewport(newWidget)
! viewport.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
else:
newWidget=viewport=gtk.Entry()
viewport.set_size_request(self.itemWidth, self.itemHeight+1)
event.container.put(viewport, object.Char__x * event.widgetWidth,
(object.Char__y + spacer + (object._gap * spacer))\
* event.widgetHeight)
! self._eventHandler = event.eventHandler
!
! if event.initialize:
! _setDefaultEventHandlers(newWidget, event.eventHandler,
event.initialize,self._uiDriver)
!
! event.container.show_all()
return newWidget
def setCursorPosition(self, position, index=0):
widget=self.widgets[index]
! if isinstance(widget,gtk.Entry):
widget.set_position(position)
! elif isinstance(widget,gtk.TextView):
! buffer = widget.get_buffer()
! iter = buffer.get_iter_at_offset(position)
! buffer.place_cursor(iter)
def setSelectedArea(self, selection1, selection2, index=0):
widget=self.widgets[index]
--- 55,130 ----
self.choices = [""]
self.choices.sort()
+
newWidget = gtk.Combo()
newWidget.set_popdown_strings(self.choices)
+
newWidget.set_size_request(self.itemWidth, self.itemHeight)
event.container.put(newWidget, object.Char__x * event.widgetWidth,
! (object.Char__y + spacer + (object._gap * spacer)) \
! * event.widgetHeight)
!
newWidget.list.connect('select-child', self.comboHandler, newWidget)
! if event.initialize:
! self._addDefaultEventHandler(newWidget.entry, event.eventHandler, \
! self._uiDriver)
! self._addDefaultEventHandler(newWidget.list, event.eventHandler, \
! self._uiDriver)
elif style == 'label':
! newWidget = gtk.Label("")
newWidget.set_size_request(self.itemWidth, self.itemHeight + 1)
event.container.put(newWidget, object.Char__x * event.widgetWidth,
! (object.Char__y + spacer + (object._gap * spacer))\
! * event.widgetHeight)
!
elif style == 'checkbox':
newWidget = gtk.CheckButton()
newWidget.set_size_request(2 * event.textWidth, event.textHeight)
event.container.put(newWidget, object.Char__x * event.widgetWidth,
(object.Char__y + spacer + (object._gap * spacer)) *
event.widgetHeight)
! newWidget.connect('toggled', self.checkboxHandler, newWidget)
! if event.initialize:
! self._addDefaultEventHandler(newWidget, event.eventHandler,\
! self._uiDriver)
! else:
value=""
if hasattr(object,'Char__height') and object.Char__height>1:
! newWidget = MultiLineEdit(value, event.eventHandler,self._uiDriver)
! viewport = newWidget.viewport
else:
newWidget=viewport=gtk.Entry()
+ newWidget._insert_handler = newWidget.connect('insert-text', \
+ self.insertTextHandler,\
+ event.eventHandler, \
+ self._uiDriver)
+ newWidget._delete_handler = newWidget.connect('delete-text',\
+ self.deleteTextHandler,\
+ event.eventHandler,\
+ self._uiDriver)
+
viewport.set_size_request(self.itemWidth, self.itemHeight+1)
event.container.put(viewport, object.Char__x * event.widgetWidth,
(object.Char__y + spacer + (object._gap * spacer))\
* event.widgetHeight)
+ if event.initialize:
+ self._addDefaultEventHandler(newWidget, event.eventHandler,\
+ self._uiDriver)
! self._eventHandler = event.eventHandler
! event.container.show_all()
return newWidget
+
def setCursorPosition(self, position, index=0):
widget=self.widgets[index]
! if isinstance(widget,gtk.Entry) or isinstance(widget,MultiLineEdit):
widget.set_position(position)
! else:
! print "Wrong Place to execute set CursorPosition"
def setSelectedArea(self, selection1, selection2, index=0):
widget=self.widgets[index]
***************
*** 116,121 ****
--- 133,207 ----
elif isinstance(widget,gtk.TextView):
widget.get_buffer().select_region(position)
+ ###########################################################
+ #
+ # Internal Event Handler
+ #
+ #
+
+ #
+ # eventHandler for gtk.Entry, interrupts default insertText procedure and
+ # passes the text to the normal displayhandler
+ #
+
+ def
insertTextHandler(self,widget,newtext,length,position,eventHandler,uiDriver):
+ #print "insert '%s' at %s" % (newtext,widget.get_position())
+ if isinstance(widget,gtk.TextBuffer):
+ object=uiDriver._WidgetToGFObj[widget._textview]
+ object._displayHandler.cursor = widget.get_insert()
+
+ else:
+ object=uiDriver._WidgetToGFObj[widget]
+ object._displayHandler.cursor = widget.get_position()
+ # HACK: set the cursor position for display handler
+ # this should be passed with the event
+
+ # Compatibility layer for 0.5.1
+ #text = newtext.decode('utf-8')
+ text = newtext.decode('utf-8').encode(gConfig('textEncoding'))
+
+ action = events.Event('requestKEYPRESS', text, text=text,
+ code=0, _form=object._form)
+
+ # don't process event further
+ widget.emit_stop_by_name('insert-text')
+
+ gtk.idle_add(eventHandler,action) # our eventHandler will be called later
+
+ #
+ # eventHandler for gtk.Entry, interrupts default deleteText procedure,
+ # passes event to displayhandler in two parts (1. selection, 2. delete)
+ #
+
+ def deleteTextHandler(self,widget,start_pos,end_pos,eventHandler,uiDriver):
+ #print "delete (%s..%s)" % (start_pos,end_pos)
+ object=uiDriver._WidgetToGFObj[widget]
+
+ # HACK:
+ # it should be possible to possible to pass the area to be deleted
+ # with the gnue internal event.
+ #object._displayHandler.selection1=start_pos
+ #object._displayHandler.selection2=end_pos
+ #object._displayHandler.cursor = widget.get_position()
+ #action = events.Event('requestDELETE',
+ try:
+ CursorPos = widget.get_position()
+ except:
+ CursorPos = widget.get_insert()
+
+ action = events.Event('requestDELETERANGE',
+ start_pos=start_pos,
+ end_pos=end_pos,
+ position=CursorPos,
+ _form=object._form)
+
+ widget.emit_stop_by_name('delete-text')
+ gtk.idle_add(eventHandler,action)
+
+ #
+ # eventHandler for gtk.Combo, no interruption, etc.
+ #
+
def comboHandler(self, combo_list, list_child, combo):
selection = combo_list.child_position(list_child)
selected_text = self.choices[selection]
***************
*** 125,134 ****
--- 211,225 ----
action = events.Event('requestREPLACEVALUE',object=gfObject,
index=selection, text=selected_text,
_form=gfObject._form)
+
+ # TODO: allow veto
self._eventHandler(action)
return gtk.TRUE
+ #
+ # eventHandler for gtk.CheckBox, no interruption, etc.
+ #
def checkboxHandler(self,event,widget):
buttonStatus=newWidget.get_active()
***************
*** 136,144 ****
gfObject = self._uiDriver._WidgetToGFObj[widget]
eventdata = [gfObject, buttonStatus]
action = events.Event('requestTOGGLECHKBOX', _form=gfObject._form)
self._eventHandler(action)
! return 1
--- 227,325 ----
gfObject = self._uiDriver._WidgetToGFObj[widget]
eventdata = [gfObject, buttonStatus]
action = events.Event('requestTOGGLECHKBOX', _form=gfObject._form)
+ # TODO: allow veto
self._eventHandler(action)
! return gtk.TRUE
!
!
+ class MultiLineEdit:
+ def __init__(self,value,eventHandler,uiDriver):
+ self.textTagTable=gtk.TextTagTable()
+ self.textBuffer=gtk.TextBuffer(self.textTagTable)
+ self.baseWidget=gtk.TextView()
+ self.baseWidget.set_buffer(self.textBuffer)
+ self.baseWidget.set_wrap_mode(gtk.WRAP_CHAR)
+ self.baseWidget._parent=self
+ self.textBuffer.set_text(value)
+ self.viewport=gtk.ScrolledWindow()
+ self.viewport.add_with_viewport(self.baseWidget)
+ self.viewport.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+
+ self.insert_handler = self.textBuffer.connect('insert-text', \
+ self.insertTextHandler,\
+ eventHandler, \
+ uiDriver)
+
+ self.delete_handler = self.textBuffer.connect('delete-range',\
+ self.deleteTextHandler,\
+ eventHandler,\
+ uiDriver)
+
+ # Return own name to let other objects identify this obj.
+ def get_name(self):
+ return 'MultiLineEdit'
+
+ def set_position(self,position):
+ pos_iter = self.textBuffer.get_iter_at_offset(position)
+ self.textBuffer.place_cursor(pos_iter)
+
+ def set_text(self,value):
+ try:
+ self.textBuffer.handler_block(self.insert_handler)
+ self.textBuffer.handler_block(self.delete_handler)
+ except:
+ pass
+ self.textBuffer.set_text(value)
+ try:
+ self.textBuffer.handler_unblock(self.insert_handler)
+ self.textBuffer.handler_unblock(self.delete_handler)
+ except:
+ pass
+
+ # pass through function calls
+ def __getattr__(self, attr):
+ if self.baseWidget and attr[1] != '_' and hasattr(self.baseWidget,attr):
+ return getattr(self.baseWidget,attr)
+ else:
+ raise AttributeError, attr
+
+
+ def
insertTextHandler(self,widget,textiter,newtext,position,eventHandler,uiDriver):
+ #print "insertText %s " % newtext
+ object=uiDriver._WidgetToGFObj[self]
+ # object._displayHandler.cursor = widget.get_insert()
+ object._displayHandler.cursor = textiter.get_offset()
+
+ # Compatibility layer for 0.5.1
+ #text = newtext.decode('utf-8')
+ text = newtext.decode('utf-8').encode(gConfig('textEncoding'))
+
+ action = events.Event('requestKEYPRESS', text, text=text,
+ code=0, _form=object._form)
+
+ # don't process event further
+ widget.emit_stop_by_name('insert-text')
+
+ gtk.idle_add(eventHandler,action) # our eventHandler will be called later
+
+
+ def deleteTextHandler(self,widget,start_pos,end_pos,eventHandler,uiDriver):
+ #print "delete (%s..%s)" % (start_pos.get_offset(),end_pos.get_offset())
+
+ object=uiDriver._WidgetToGFObj[self]
+
+ cursor_iter = widget.get_iter_at_mark(widget.get_insert())
+
+
+ action = events.Event('requestDELETERANGE',
+ start_pos=start_pos.get_offset(),
+ end_pos=end_pos.get_offset(),
+ position=cursor_iter.get_offset(),
+ _form=object._form)
+
+ widget.emit_stop_by_name('delete-range')
+ gtk.idle_add(eventHandler,action)
Index: gnue/forms/src/uidrivers/gtk2/widgets/form/widget.py
diff -c gnue/forms/src/uidrivers/gtk2/widgets/form/widget.py:1.3
gnue/forms/src/uidrivers/gtk2/widgets/form/widget.py:1.4
*** gnue/forms/src/uidrivers/gtk2/widgets/form/widget.py:1.3 Fri Jun 6
20:51:41 2003
--- gnue/forms/src/uidrivers/gtk2/widgets/form/widget.py Mon Jun 16
17:32:30 2003
***************
*** 84,89 ****
--- 84,90 ----
gtk.EXPAND | gtk.FILL, gtk.EXPAND | gtk.FILL,
0, 0)
self.createStatusBar()
+
else:
self.mainWindow = gtk.Window()
***************
*** 120,125 ****
--- 121,138 ----
if not self._form._features['GUI:TOOLBAR:SUPPRESS']:
ToolBar(self._uiDriver, self, self._form)
+
+ # compute default window size
+ #
+ #paneSize=self.containerFrame.get_allocation()
+ #winSize=self.mainWindow.get_allocation()
+ #offsetX=winSize.width-paneSize.width
+ #offsetY=winSize.height-paneSize.height
+ #print "Size %s,%s" % (offsetX,offsetY)
+ #(w,h)=self.containerFrame.get_size_request()
+ #print 'size: %s,%s' %(w,h)
+ #(w,h)=self.mainWindow.get_size_request()
+ #print 'size: %s,%s' %(w,h)
self._eventHandler = event.eventHandler
self._wrapper.finalize()
***************
*** 227,232 ****
--- 240,246 ----
def show(self):
+ self.containerFrame.show()
self.mainWindow.show_all()
self._visible = 1
***************
*** 255,260 ****
#
def windowExitEvent(self,*args):
self._uiDriver.dispatchEvent('requestEXIT',_form=self._form)
- # self.dispatchEvent(events.Event('requestEXIT'))
return gtk.TRUE
--- 269,273 ----
Index: gnue/forms/src/uidrivers/gtk2/widgets/form/wrappers.py
diff -c gnue/forms/src/uidrivers/gtk2/widgets/form/wrappers.py:1.2
gnue/forms/src/uidrivers/gtk2/widgets/form/wrappers.py:1.3
*** gnue/forms/src/uidrivers/gtk2/widgets/form/wrappers.py:1.2 Mon May 19
20:06:35 2003
--- gnue/forms/src/uidrivers/gtk2/widgets/form/wrappers.py Mon Jun 16
17:32:30 2003
***************
*** 67,73 ****
self.pane = self
self.margin = 2
gtk.Notebook.__init__(self)
- #self.set_border_width(self.margin)
try:
tabstyle = _tabStyles[self.form._layout.tabbed]
self.set_tab_pos(tabstyle)
--- 67,72 ----
***************
*** 111,127 ****
def notebookTabHandler(self,notebook,notebookpage,page_number):
- # print "change %s (%s) to %s " % (self._oldpage,
- # self.get_current_page(),
- # page_number)
if self._oldpage!=page_number:
action = events.Event('requestPAGE',page_number, _form=self.form)
self.uiform._eventHandler(action)
! # care for not 'vetoed' page changes
! # TODO: check why vetoes don't work
! if self._oldpage!=page_number:
! self.set_current_page(self._oldpage)
def setPage(self, page):
# get Scroll Window for page
--- 110,121 ----
def notebookTabHandler(self,notebook,notebookpage,page_number):
if self._oldpage!=page_number:
action = events.Event('requestPAGE',page_number, _form=self.form)
self.uiform._eventHandler(action)
!
! notebook.emit_stop_by_name('switch-page')
def setPage(self, page):
# get Scroll Window for page
***************
*** 140,175 ****
ScrollableWrapper.__init__(self, *args, **parms)
self.pane = gtk.Fixed()
self.add_with_viewport(self.pane)
! self.pane.show_all()
def createPage(self, object):
newWidget = gtk.Fixed()
self.pane.add(newWidget)
- # , -1, size=self.layoutSize)
# Only show first page
! if not self._fitted:
newWidget.show_all()
! else:
! newWidget.show(0)
!
self._pageList.append(newWidget)
return newWidget
! def setPage(self, page):
for p in self._pageList:
if p != page:
! p.Show(0)
else:
! p.Show(1)
!
! self.visiblePage = self._formToUI[event.data][0]
!
self.visiblePage.set_size_request(self._form._layout.Char__width*self.widgetWidth,
!
(self._form._layout.Char__height+self.menu_sb_space)*self.widgetHeight)
!
!
! self.visiblePage.show_all()
_tabStyles = {'left':gtk.POS_LEFT,
--- 134,161 ----
ScrollableWrapper.__init__(self, *args, **parms)
self.pane = gtk.Fixed()
self.add_with_viewport(self.pane)
+ self.set_size_request(self.layoutXSize,self.layoutYSize)
! def finalize(self):
! self.pane.set_size_request(self.layoutXSize,self.layoutYSize)
def createPage(self, object):
newWidget = gtk.Fixed()
self.pane.add(newWidget)
# Only show first page
! if len(self._pageList)<1:
newWidget.show_all()
!
self._pageList.append(newWidget)
return newWidget
! def setPage(self, page):
for p in self._pageList:
if p != page:
! p.show_all()
else:
! p.hide()
_tabStyles = {'left':gtk.POS_LEFT,
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- gnue/forms/src GFDisplayHandler.py GFInstance.p...,
Jan Ischebeck <=