16 |
# write to the Free Software Foundation, Inc., 59 Temple Place |
# write to the Free Software Foundation, Inc., 59 Temple Place |
17 |
# - Suite 330, Boston, MA 02111-1307, USA. |
# - Suite 330, Boston, MA 02111-1307, USA. |
18 |
# |
# |
19 |
# Copyright 2000-2002 Free Software Foundation |
# Copyright 2000-2003 Free Software Foundation |
20 |
# |
# |
21 |
# FILE: |
# FILE: |
22 |
# UIdriver.py |
# UIdriver.py |
74 |
# |
# |
75 |
class GFUserInterface(GFUserInterfaceBase): |
class GFUserInterface(GFUserInterfaceBase): |
76 |
def __init__(self, eventController, disableSplash = None): |
def __init__(self, eventController, disableSplash = None): |
77 |
|
GFUserInterfaceBase.__init__(self,eventController) |
78 |
|
|
79 |
self._WIDGETS = {'GFLabel' : UILabel, |
self._WIDGETS = {'GFLabel' : UILabel, |
80 |
'GFBox' : UIBox, |
'GFBox' : UIBox, |
81 |
'GFPage' : UIPage, |
'GFPage' : UIPage, |
89 |
'messageBox' :UIMessageBox, |
'messageBox' :UIMessageBox, |
90 |
} |
} |
91 |
|
|
|
self._aboutDialog = UIAbout |
|
|
self._messageDialog = UIMessageBox |
|
|
|
|
92 |
self._disableSplash = disableSplash |
self._disableSplash = disableSplash |
93 |
GFUserInterfaceBase.__init__(self,eventController) |
|
94 |
|
self._objectMapping = {} |
95 |
|
|
96 |
global _EVENTPROCESSOR |
global _EVENTPROCESSOR |
97 |
_EVENTPROCESSOR = self.dispatchEvent |
_EVENTPROCESSOR = self.dispatchEvent |
98 |
|
|
99 |
self.forms = {} |
self.init(disableSplash) |
|
|
|
|
self.init() |
|
100 |
|
|
101 |
|
|
102 |
# |
# |
103 |
# init |
# init |
104 |
# |
# |
105 |
# |
# |
106 |
def init(self): |
def init(self,disableSplash): |
107 |
# |
# |
108 |
# Create the main window |
# Create the main window |
109 |
# |
# |
116 |
# |
# |
117 |
# SplashScreen |
# SplashScreen |
118 |
# |
# |
119 |
if not self._disableSplash: |
if disableSplash: |
120 |
text = 'GNU Enterprise Forms\n' \ |
text = 'GNU Enterprise Forms\n' \ |
121 |
+ 'Version %s\n' % VERSION \ |
+ 'Version %s\n' % VERSION \ |
122 |
+ '(c)2000-2002 Free Software Foundation\n' \ |
+ '(c)2000-2002 Free Software Foundation\n' \ |
237 |
return 1 |
return 1 |
238 |
|
|
239 |
def activateForm(self, form): |
def activateForm(self, form): |
240 |
width = int(self._form.width) |
width = self._form._layout.Char__width |
241 |
height = int(self._form.height) |
height = self._form._layout.Char__height |
242 |
|
|
243 |
## formSize = wxSize(width*int(self.widgetWidth), |
## formSize = wxSize(width*int(self.widgetWidth), |
244 |
## int(height+self.menu_sb_space)*int(self.widgetHeight)) |
## int(height+self.menu_sb_space)*int(self.widgetHeight)) |
250 |
## self.mainWindow.panel.SetSize(formSize) |
## self.mainWindow.panel.SetSize(formSize) |
251 |
## self._pageList[0].Show(1) |
## self._pageList[0].Show(1) |
252 |
|
|
253 |
## # Only one page at a time can be visible |
# Only one page at a time can be visible |
254 |
## self.visiblePage = self._pageList[0] |
self.visiblePage = self._pageList[0] |
255 |
|
|
256 |
## if _NOTEBOOK: # Adjust sizes |
## if _NOTEBOOK: # Adjust sizes |
257 |
## _NOTEBOOK.SetSize(formSize) |
## _NOTEBOOK.SetSize(formSize) |
263 |
|
|
264 |
## self.mainWindow.CenterOnScreen() |
## self.mainWindow.CenterOnScreen() |
265 |
|
|
266 |
|
self.mainWindow.KeystrokeHook = keyboardEvtHandler(_EVENTPROCESSOR)._processEvent |
267 |
|
|
268 |
|
|
269 |
############################################################################# |
############################################################################# |
270 |
# |
# |
291 |
def _updateCreateEvent(self, event): |
def _updateCreateEvent(self, event): |
292 |
event.eventHandler = self.dispatchEvent |
event.eventHandler = self.dispatchEvent |
293 |
event.ui = self |
event.ui = self |
294 |
event.formWidth = int(self._form.width) |
event.formWidth = int(self._form._layout.Char__width) |
295 |
event.formHeight = int(self._form.height) |
event.formHeight = int(self._form._layout.Char__height) |
296 |
event.screenHeight = self._screen.MAXROW - 3 |
event.screenHeight = self._screen.MAXROW - 3 |
297 |
event.screenWidth = self._screen.MAXCOL |
event.screenWidth = self._screen.MAXCOL |
298 |
return event |
return event |
312 |
# fully activated |
# fully activated |
313 |
# |
# |
314 |
def mainLoop(self): |
def mainLoop(self): |
315 |
|
pass |
316 |
self.mainWindow.Run() |
self.mainWindow.Run() |
317 |
|
|
318 |
def _setStatusBar(self,tip, statusValue, insertValue, currentRecord, maxRecord, currentPage, maxPage): |
def _setStatusBar(self,tip, statusValue, insertValue, currentRecord, maxRecord, currentPage, maxPage): |
329 |
|
|
330 |
if currentPage and maxPage: |
if currentPage and maxPage: |
331 |
self.statusBar.SetText(4,string.strip("%s/%s" % (currentPage,maxPage))) |
self.statusBar.SetText(4,string.strip("%s/%s" % (currentPage,maxPage))) |
332 |
|
|
333 |
|
|
334 |
# |
# |
335 |
# gotoPage |
# gotoPage |
336 |
# |
# |
337 |
# makes the requested page visible on the screen |
# makes the requested page visible on the screen |
338 |
# |
# |
339 |
def gotoPage(self, event): |
def gotoPage(self, event): |
340 |
pass |
self.visiblePage.Hide() |
341 |
|
self.visiblePage = self._objectMapping[event.data] |
342 |
|
self.visiblePage.Show() |
343 |
|
|
344 |
## if not _NOTEBOOK: |
## if not _NOTEBOOK: |
345 |
## self.visiblePage.Show(FALSE) |
## self.visiblePage.Show(FALSE) |
346 |
## self.visiblePage = self._formToUI[event.data][0] |
## self.visiblePage = self._formToUI[event.data][0] |
437 |
# |
# |
438 |
# Provides a UI widget set of std functions to reduce the number of functions |
# Provides a UI widget set of std functions to reduce the number of functions |
439 |
# require in each UIclass listed below |
# require in each UIclass listed below |
440 |
class UIHelper: |
class UIHelper(UIWidget): |
441 |
def showModal(self): |
def showModal(self): |
442 |
pass # self.ShowModal() |
pass # self.ShowModal() |
443 |
|
|
488 |
# |
# |
489 |
# Widget set specific function that creates a single instance of a label |
# Widget set specific function that creates a single instance of a label |
490 |
# |
# |
491 |
class UILabel(UIHelper, UIWidget): |
class UILabel(UIHelper): |
492 |
alignmentStyle = { 'left' : 0, |
alignmentStyle = { 'left' : 0, |
493 |
'center': 0, |
'center': 0, |
494 |
'right' : 0, |
'right' : 0, |
497 |
def _createWidget(self, event, spacer): |
def _createWidget(self, event, spacer): |
498 |
object = event.object |
object = event.object |
499 |
style = self.alignmentStyle[object.alignment] |
style = self.alignmentStyle[object.alignment] |
500 |
GDebug.printMesg(0,"*****Label Alert!!! (x,y)=(%s,%s) %s" % (object.x, object.y,event.container)) |
GDebug.printMesg(0,"*****Label Alert!!! (x,y)=(%s,%s) %s" % (object.Char__x, object.Char__y,event.container)) |
501 |
newWidget = Label(event.container,str(self),object.y+spacer,object.x,str(object.text)) |
newWidget = Label(event.container,str(self),object.Char__y+spacer,object.Char__x,str(object.text)) |
502 |
event.container.AddControl(newWidget) |
event.container.AddControl(newWidget) |
503 |
return newWidget |
return newWidget |
504 |
|
|
507 |
# |
# |
508 |
# Widget set specific function that creates a single instance of a border box |
# Widget set specific function that creates a single instance of a border box |
509 |
# |
# |
510 |
class UIBox(UIHelper, UIWidget): |
class UIBox(UIHelper): |
511 |
def _createWidget(self, event, spacer): |
def _createWidget(self, event, spacer): |
512 |
object = event.object |
object = event.object |
513 |
newWidget = GroupBox(event.container,'name',object.y,object.x, |
newWidget = GroupBox(event.container,'name',object.Char__y,object.Char__x, |
514 |
object.width, object.height,str(object.label)) |
object.Char__width, object.Char__height,str(object.label)) |
515 |
event.container.AddControl(newWidget) |
event.container.AddControl(newWidget) |
516 |
return newWidget |
return newWidget |
517 |
|
|
521 |
# Widget set specific function that creates a single instance of a scroll bar used |
# Widget set specific function that creates a single instance of a scroll bar used |
522 |
# to navigate multiple records |
# to navigate multiple records |
523 |
# |
# |
524 |
class UIScrollBar(UIHelper, UIWidget): |
class UIScrollBar(UIHelper): |
525 |
def _createWidget(self, event, spacer): |
def _createWidget(self, event, spacer): |
526 |
object = event.object |
object = event.object |
527 |
|
|
528 |
if object.width > 1: |
if object.Char__width > 1: |
529 |
newWidget = ScrollBar(event.container,'name',object.y,object.x,object.width) |
newWidget = ScrollBar(event.container,'name',object.Char__y,object.Char__x,object.Char__width) |
530 |
else: |
else: |
531 |
newWidget = VScrollBar(event.container,'name',object.y,object.x,object.height) |
newWidget = VScrollBar(event.container,'name',object.Char__y,object.Char__x,object.Char__height) |
532 |
event.container.AddControl(newWidget) |
event.container.AddControl(newWidget) |
533 |
|
newWidget.Init(10) ## TODO: This should be the number of rows |
534 |
return newWidget |
return newWidget |
535 |
|
|
536 |
# |
# |
538 |
# |
# |
539 |
# Widget set specific function that creates a single instance of a button |
# Widget set specific function that creates a single instance of a button |
540 |
# |
# |
541 |
class UIButton(UIHelper, UIWidget): |
class UIButton(UIHelper): |
542 |
def _createWidget(self, event, spacer): |
def _createWidget(self, event, spacer): |
543 |
object = event.object |
object = event.object |
544 |
newWidget = Button(event.container,'name',object.y+spacer,object.x,object.width,str(object.label)) |
newWidget = Button(event.container,'name',object.Char__y+spacer,object.Char__x,object.Char__width,str(object.label)) |
545 |
event.container.AddControl(newWidget) |
event.container.AddControl(newWidget) |
546 |
self.__trigger = object.trigger |
self.__gf = object |
547 |
newWidget.SetMethod("CLICK", self.buttonHandler) |
newWidget.SetMethod("CLICK", self.buttonHandler) |
548 |
return newWidget |
return newWidget |
549 |
|
|
550 |
def buttonHandler(self, a1, a2, a3): |
def buttonHandler(self, a1, a2, a3): |
551 |
|
GDebug.printMesg(1,"Click!") |
552 |
## if event.GetEventType() == wxEVT_COMMAND_BUTTON_CLICKED: |
## if event.GetEventType() == wxEVT_COMMAND_BUTTON_CLICKED: |
553 |
## action = None |
## action = None |
554 |
## object = _eventObjTowxWindow(event) |
## object = _eventObjTowxWindow(event) |
555 |
## id = object.GetId() |
## id = object.GetId() |
556 |
## gfObject = _IdToGFObj[id] |
## gfObject = _IdToGFObj[id] |
557 |
|
|
558 |
_EVENTPROCESSOR(events.Event('fireTRIGGER',self.__trigger)) |
_EVENTPROCESSOR(events.Event('buttonActivated',self.__gf)) |
559 |
|
|
560 |
## if action: |
## if action: |
561 |
## _EVENTPROCESSOR(action) |
## _EVENTPROCESSOR(action) |
567 |
# |
# |
568 |
# Note: The event trap for changing notebook pages is attached to the UIForm |
# Note: The event trap for changing notebook pages is attached to the UIForm |
569 |
# |
# |
570 |
class UIPage(UIHelper, UIWidget): |
class UIPage(UIHelper): |
571 |
def _createWidget(self, event, spacer): |
def _createWidget(self, event, spacer): |
572 |
object = event.object |
object = event.object |
573 |
|
|
588 |
width = event.screenWidth |
width = event.screenWidth |
589 |
|
|
590 |
|
|
591 |
newWidget = Frame(event.container, y, x, y+height-1, x+width-1 , object._parent.title) |
newWidget = Frame(event.container, y, x, y+height-1, x+width-1) # , object._parent.title) |
592 |
###newWidget.DeActivate(0) |
###newWidget.DeActivate(0) |
593 |
event.interface._pageList.append(newWidget) |
event.interface._pageList.append(newWidget) |
594 |
|
event.interface._objectMapping[object] = newWidget |
595 |
|
event.interface._objectMapping[newWidget] = object |
596 |
|
|
597 |
#### newWidget.KeystrokeHook = keyboardEvtHandler(_EVENTPROCESSOR)._processEvent |
#### |
598 |
|
newWidget.KeystrokeHook = keyboardEvtHandler(_EVENTPROCESSOR)._processEvent |
599 |
|
|
600 |
return newWidget |
return newWidget |
601 |
|
|
604 |
# |
# |
605 |
# Widget set specific function that creates a single instance of a data entry widget |
# Widget set specific function that creates a single instance of a data entry widget |
606 |
# |
# |
607 |
class UIEntry(UIHelper, UIWidget): |
class UIEntry(UIHelper): |
608 |
def _createWidget(self, event, spacer): |
def _createWidget(self, event, spacer): |
609 |
object = event.object |
object = event.object |
610 |
|
|
611 |
style = object.style |
style = object.style |
612 |
if style == 'dropdown': |
if style == 'dropdown': |
613 |
if event.initialize: |
if event.initialize: |
614 |
choices = object.allowedValues()[1] |
choices = object._field.allowedValues()[1] |
615 |
else: |
else: |
616 |
choices = [""] |
choices = [""] |
617 |
newWidget = ComboBox(event.container, 'name',object.y+spacer,object.x, object.width) |
newWidget = ComboBox(event.container, 'name',object.Char__y+spacer,object.Char__x, object.Char__width) |
618 |
for index in range(len(choices)): |
for index in range(len(choices)): |
619 |
newWidget.AddItem(index,choices[index]) |
newWidget.AddItem(index,choices[index]) |
620 |
elif style == 'label': |
elif style == 'label': |
621 |
newWidget = TextBox(event.container, 'name', object.y+spacer, object.x, object.width) |
newWidget = TextBox(event.container, 'name', object.Char__y+spacer, object.Char__x, object.Char__width) |
622 |
elif style == 'checkbox': |
elif style == 'checkbox': |
623 |
newWidget = CheckBox(event.container, 'name',object.y+spacer,object.x,'',0) |
newWidget = CheckBox(event.container, 'name',object.Char__y+spacer,object.Char__x,'',0) |
624 |
elif object.height > 1: # Normal text box/Multiline |
elif hasattr(object,'Char__height') and object.Char__height > 1: # Normal text box/Multiline |
625 |
newWidget = TextArea(event.container, 'name', object.y+spacer, object.x, object.width, object.height) |
newWidget = TextArea(event.container, 'name', object.Char__y+spacer, object.Char__x, object.Char__width, object.Char__height) |
626 |
else: # Normal text box |
else: # Normal text box |
627 |
newWidget = TextBox(event.container, 'name', object.y+spacer, object.x, object.width) |
newWidget = TextBox(event.container, 'name', object.Char__y+spacer, object.Char__x, object.Char__width) |
628 |
|
|
629 |
event.container.AddControl(newWidget) |
event.container.AddControl(newWidget) |
630 |
|
|
635 |
# |
# |
636 |
# Widget set specific function that creates a single instance of a Form widget |
# Widget set specific function that creates a single instance of a Form widget |
637 |
# |
# |
638 |
class UIForm(UIHelper, UIWidget): |
class UIForm(UIHelper): |
639 |
tabStyles = {'top':0, |
tabStyles = {'top':0, |
640 |
'left':1, |
'left':1, |
641 |
'right':2, |
'right':2, |
644 |
|
|
645 |
def _createWidget(self, event, spacer): |
def _createWidget(self, event, spacer): |
646 |
object = event.object |
object = event.object |
647 |
newWidget = Dialog(event.container, 0, 0, event.interface._screen.MAXROW, event.interface._screen.MAXCOL ) |
## newWidget = Dialog(event.container, 0, 0, event.interface._screen.MAXROW, event.interface._screen.MAXCOL ) |
648 |
|
|
649 |
return newWidget |
## return newWidget |
650 |
|
|
651 |
|
|
652 |
##################################################################### |
##################################################################### |
690 |
vk.F11 : curses.KEY_F11, vk.F12 : curses.KEY_F12, |
vk.F11 : curses.KEY_F11, vk.F12 : curses.KEY_F12, |
691 |
vk.INSERT : curses.KEY_IC, vk.DELETE : curses.KEY_DC, |
vk.INSERT : curses.KEY_IC, vk.DELETE : curses.KEY_DC, |
692 |
vk.HOME : curses.KEY_HOME, vk.END : curses.KEY_END, |
vk.HOME : curses.KEY_HOME, vk.END : curses.KEY_END, |
693 |
vk.PAGEUP : curses.KEY_NPAGE, vk.PAGEDOWN : curses.KEY_NPAGE, |
vk.PAGEUP : curses.KEY_PPAGE, vk.PAGEDOWN : curses.KEY_NPAGE, |
694 |
vk.UP : curses.KEY_UP, vk.DOWN : curses.KEY_DOWN, |
vk.UP : curses.KEY_UP, vk.DOWN : curses.KEY_DOWN, |
695 |
vk.LEFT : curses.KEY_LEFT, vk.RIGHT : curses.KEY_RIGHT, |
vk.LEFT : curses.KEY_LEFT, vk.RIGHT : curses.KEY_RIGHT, |
696 |
vk.TAB : 9, vk.ENTER : 10, |
vk.TAB : 9, vk.ENTER : 10, |
753 |
uiBaseEvtHandler.__init__(self, [], eventProcessor) |
uiBaseEvtHandler.__init__(self, [], eventProcessor) |
754 |
|
|
755 |
def _processEvent(self, keystroke): |
def _processEvent(self, keystroke): |
756 |
return keystroke |
####return keystroke |
757 |
action = None |
action = None |
758 |
|
|
759 |
##object = _eventObjTowxWindow(event) |
##object = _eventObjTowxWindow(event) |
760 |
|
|
761 |
|
|
762 |
|
GDebug.printMesg(0,"key====== %s" % keystroke) |
763 |
command = GFKeyMapper.KeyMapper.getEvent( |
command = GFKeyMapper.KeyMapper.getEvent( |
764 |
keystroke, |
keystroke, |
765 |
0, #event.ShiftDown(), |
0, #event.ShiftDown(), |
787 |
pass |
pass |
788 |
|
|
789 |
if action: |
if action: |
790 |
|
# Add the object's _form to the outgoing event |
791 |
|
# rather than every event in the function |
792 |
|
action.__dict__.update({'_form':self._form}) |
793 |
|
|
794 |
|
|
795 |
self._eventProcessor(action) |
self._eventProcessor(action) |
796 |
|
|
797 |
return None |
return None |