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 |
# UIpythongtk.py |
# UIpythongtk.py |
49 |
|
|
50 |
# On Debian/unstable systems, you probably like to uncomment the following two |
# On Debian/unstable systems, you probably like to uncomment the following two |
51 |
# lines to use gtk2.0 instead of 1.2 |
# lines to use gtk2.0 instead of 1.2 |
52 |
#import pygtk |
# |
53 |
#pygtk.require('2.0') |
# TODO: reading the FAQs on PyGTK, this should be done |
54 |
|
# TODO: REGARDLESS of debian unstable (it has to do with |
55 |
|
# TODO: parallel installs of GTK) but it seems RedHat 8.0 |
56 |
|
# TODO: has an older, buggy version of PyGTK :( |
57 |
|
# TODO: I've enclosed in a try: block... does this work |
58 |
|
# TODO: on RH8? |
59 |
|
# |
60 |
|
#try: |
61 |
|
import pygtk |
62 |
|
pygtk.require('2.0') |
63 |
|
#except ImportError: |
64 |
|
# pass |
65 |
|
|
66 |
import gtk |
import gtk |
67 |
|
|
120 |
class GFUserInterface(GFUserInterfaceBase): |
class GFUserInterface(GFUserInterfaceBase): |
121 |
def __init__(self, eventController, disableSplash = None): |
def __init__(self, eventController, disableSplash = None): |
122 |
|
|
123 |
self._WIDGETS = WIDGETS |
GFUserInterfaceBase.__init__(self,eventController) |
124 |
|
|
125 |
|
self._WIDGETS = {'GFLabel' : UILabel, |
126 |
|
'GFBox' : UIBox, |
127 |
|
'GFPage' : UIPage, |
128 |
|
'GFForm' : UIForm, |
129 |
|
'GFEntry' : UIEntry, |
130 |
|
'GFButton' : UIButton, |
131 |
|
'GFScrollBar' : UIScrollBar, |
132 |
|
} |
133 |
|
|
134 |
self._DIALOGS = {'about' :UIAbout, |
self._DIALOGS = {'about' :UIAbout, |
135 |
'messageBox' :UIMessageBox, |
'messageBox' :UIMessageBox, |
136 |
} |
} |
137 |
|
|
|
self._aboutDialog = UIAbout |
|
|
self._messageDialog = UIMessageBox |
|
|
|
|
138 |
self._disableSplash = disableSplash |
self._disableSplash = disableSplash |
|
GFUserInterfaceBase.__init__(self,eventController) |
|
139 |
|
|
140 |
global _EVENTPROCESSOR |
global _EVENTPROCESSOR |
141 |
_EVENTPROCESSOR = self.dispatchEvent |
_EVENTPROCESSOR = self.dispatchEvent |
142 |
global _PROMPTFORRECORD |
global _PROMPTFORRECORD |
143 |
_PROMPTFORRECORD = self.promptForRecordNumber |
_PROMPTFORRECORD = self.promptForRecordNumber |
144 |
|
|
145 |
self.forms = {} |
self.init(disableSplash) |
|
self.init() |
|
146 |
|
|
147 |
# |
# |
148 |
# init |
# init |
150 |
# Routine called by wxWindows when wxApp instance is created |
# Routine called by wxWindows when wxApp instance is created |
151 |
# It is used the build the basic UI |
# It is used the build the basic UI |
152 |
# |
# |
153 |
def init(self): |
def init(self,disableSplash): |
154 |
|
|
155 |
# |
# |
156 |
# Splash screen |
# Splash screen |
157 |
# |
# |
158 |
# how to get rid of this thing??? |
# how to get rid of this thing??? |
159 |
# disabled for now... |
# disabled for now... |
160 |
if not self._disableSplash and 0: |
if not disableSplash and 0: |
161 |
self.splash = gtk.Window(gtk.TRUE) |
self.splash = gtk.Window(gtk.TRUE) |
162 |
# not the best, but working decision |
# not the best, but working decision |
163 |
self.splash.connect('destroy', lambda win: self.splash.hide()) |
self.splash.connect('destroy', lambda win: self.splash.hide()) |
651 |
|
|
652 |
if not _NOTEBOOK: |
if not _NOTEBOOK: |
653 |
self.visiblePage = self._formToUI[event.data][0] |
self.visiblePage = self._formToUI[event.data][0] |
654 |
self.visiblePage.set_size_request(self._form.width*self.widgetWidth, |
self.visiblePage.set_size_request(self._form._layout.Char__width*self.widgetWidth, |
655 |
(self._form.height+self.menu_sb_space)*self.widgetHeight) |
(self._form._layout.Char__height+self.menu_sb_space)*self.widgetHeight) |
656 |
else: |
else: |
657 |
self.visiblePage = self._formToUI[event.data][0] |
self.visiblePage = self._formToUI[event.data][0] |
658 |
|
|
826 |
|
|
827 |
|
|
828 |
|
|
829 |
class UIHelper: |
class UIHelper(UIWidget): |
830 |
def showModal(self): |
def showModal(self): |
831 |
#$self.ShowModal() |
#$self.ShowModal() |
832 |
None |
None |
914 |
# |
# |
915 |
|
|
916 |
|
|
917 |
class UILabel(UIHelper, UIWidget): |
class UILabel(UIHelper): |
918 |
alignmentStyle = { 'left' : gtk.JUSTIFY_LEFT, |
alignmentStyle = { 'left' : gtk.JUSTIFY_LEFT, |
919 |
'center': gtk.JUSTIFY_CENTER, |
'center': gtk.JUSTIFY_CENTER, |
920 |
'right' : gtk.JUSTIFY_RIGHT, |
'right' : gtk.JUSTIFY_RIGHT, |
925 |
|
|
926 |
newWidget = gtk.Label(str(object.text)) |
newWidget = gtk.Label(str(object.text)) |
927 |
newWidget.set_size_request(self.itemWidth, self.itemHeight) |
newWidget.set_size_request(self.itemWidth, self.itemHeight) |
928 |
event.container.put(newWidget, object.x * event.widgetWidth, |
event.container.put(newWidget, object.Char__x * event.widgetWidth, |
929 |
(object.y + spacer + (spacer * object._gap)) * event.widgetHeight) |
(object.Char__y + spacer + (spacer * object._gap)) * event.widgetHeight) |
930 |
newWidget.set_justify(self.alignmentStyle[object.alignment]) |
newWidget.set_justify(self.alignmentStyle[object.alignment]) |
931 |
event.container.show_all() |
event.container.show_all() |
932 |
return newWidget |
return newWidget |
942 |
# |
# |
943 |
# 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 |
944 |
# |
# |
945 |
class UIBox(UIHelper, UIWidget): |
class UIBox(UIHelper): |
946 |
def _createWidget(self, event, spacer): |
def _createWidget(self, event, spacer): |
947 |
#$print "inside UIBOX" |
#$print "inside UIBOX" |
948 |
GDebug.printMesg(1, "inside UIBOX") |
GDebug.printMesg(1, "inside UIBOX") |
955 |
# 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 |
956 |
# to navigate multiple records |
# to navigate multiple records |
957 |
# |
# |
958 |
class UIScrollBar(UIHelper, UIWidget): |
class UIScrollBar(UIHelper): |
959 |
def _createWidget(self, event, spacer): |
def _createWidget(self, event, spacer): |
960 |
object = event.object |
object = event.object |
961 |
|
|
962 |
#$print object.height*widgetHeight,(object.y+spacer)*widgetHeight |
#$print object.Char__height*widgetHeight,(object.Char__y+spacer)*widgetHeight |
963 |
GDebug.printMesg(2, "size #1: " + str(object.height * event.widgetHeight) + |
GDebug.printMesg(2, "size #1: " + str(object.Char__height * event.widgetHeight) + |
964 |
", " +str((object.y + spacer) * event.widgetHeight)) |
", " +str((object.Char__y + spacer) * event.widgetHeight)) |
965 |
adjustment = gtk.Adjustment(70,500,80,2,3,80) |
adjustment = gtk.Adjustment(70,500,80,2,3,80) |
966 |
newWidget = gtk.VScrollbar(adjustment) |
newWidget = gtk.VScrollbar(adjustment) |
967 |
newWidget.set_size_request(object.width * event.widgetWidth, |
newWidget.set_size_request(object.Char__width * event.widgetWidth, |
968 |
object.height * event.widgetHeight) |
object.Char__height * event.widgetHeight) |
969 |
event.container.put(newWidget,600,60) |
event.container.put(newWidget,600,60) |
970 |
#$print object.x*widgetWidth,(object.y+spacer)*widgetHeight |
#$print object.Char__x*widgetWidth,(object.Char__y+spacer)*widgetHeight |
971 |
GDebug.printMesg(2, "size #2: " + str(object.x * event.widgetWidth) + |
GDebug.printMesg(2, "size #2: " + str(object.Char__x * event.widgetWidth) + |
972 |
", " + str((object.y + spacer) * event.widgetHeight)) |
", " + str((object.Char__y + spacer) * event.widgetHeight)) |
973 |
event.container.show_all() |
event.container.show_all() |
974 |
#$print "i am in UIScrollBar" |
#$print "i am in UIScrollBar" |
975 |
GDebug.printMesg(1, "i am in UIScrollBar") |
GDebug.printMesg(1, "i am in UIScrollBar") |
985 |
# |
# |
986 |
# Widget set specific function that creates a single instance of a button |
# Widget set specific function that creates a single instance of a button |
987 |
# |
# |
988 |
class UIButton(UIHelper, UIWidget): |
class UIButton(UIHelper): |
989 |
def _createWidget(self, event, spacer): |
def _createWidget(self, event, spacer): |
990 |
object = event.object |
object = event.object |
991 |
|
|
992 |
newWidget = gtk.Button(str(object.label)) |
newWidget = gtk.Button(str(object.label)) |
993 |
newWidget.set_size_request(object.x * event.widgetWidth, |
newWidget.set_size_request(object.Char__x * event.widgetWidth, |
994 |
(object.y + spacer) * event.widgetHeight) |
(object.Char__y + spacer) * event.widgetHeight) |
995 |
event.container.put(newWidget, object.x * event.widgetWidth, |
event.container.put(newWidget, object.Char__x * event.widgetWidth, |
996 |
(object.y + spacer) * event.widgetHeight) |
(object.Char__y + spacer) * event.widgetHeight) |
997 |
if event.initialize: |
if event.initialize: |
998 |
newWidget.connect('clicked', self.buttonHandler, newWidget) |
newWidget.connect('clicked', self.buttonHandler, newWidget) |
999 |
#_setDefaultEventHandlers(newWidget,initialize) |
#_setDefaultEventHandlers(newWidget,initialize) |
1003 |
def buttonHandler(self,event,newWidget): |
def buttonHandler(self,event,newWidget): |
1004 |
action = None |
action = None |
1005 |
gfObject = _WidgetToGFObj[newWidget] |
gfObject = _WidgetToGFObj[newWidget] |
1006 |
action = events.Event('fireTRIGGER',gfObject.trigger) |
action = events.Event('buttonActivated',gfObject) |
1007 |
|
|
1008 |
if action: |
if action: |
1009 |
_EVENTPROCESSOR(action) |
_EVENTPROCESSOR(action) |
1020 |
# |
# |
1021 |
# 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 |
1022 |
# |
# |
1023 |
class UIPage(UIHelper, UIWidget): |
class UIPage(UIHelper): |
1024 |
def _createWidget(self, event, spacer): |
def _createWidget(self, event, spacer): |
1025 |
if _NOTEBOOK: |
if _NOTEBOOK: |
1026 |
newWidget = gtk.Fixed() |
newWidget = gtk.Fixed() |
1048 |
# 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 |
1049 |
# |
# |
1050 |
|
|
1051 |
class UIEntry(UIHelper, UIWidget): |
class UIEntry(UIHelper): |
1052 |
def _createWidget(self, event, spacer): |
def _createWidget(self, event, spacer): |
1053 |
object = event.object |
object = event.object |
1054 |
style = object.style |
style = object.style |
1055 |
|
|
1056 |
if style == 'dropdown': |
if style == 'dropdown': |
1057 |
if event.initialize: |
if event.initialize: |
1058 |
self.choices = object.allowedValues()[1] |
self.choices = object._field.allowedValues()[1] |
1059 |
else: |
else: |
1060 |
self.choices = [""] |
self.choices = [""] |
1061 |
|
|
1063 |
newWidget = gtk.Combo() |
newWidget = gtk.Combo() |
1064 |
newWidget.set_popdown_strings(self.choices) |
newWidget.set_popdown_strings(self.choices) |
1065 |
newWidget.set_size_request(self.itemWidth, self.itemHeight) |
newWidget.set_size_request(self.itemWidth, self.itemHeight) |
1066 |
event.container.put(newWidget, object.x * event.widgetWidth, |
event.container.put(newWidget, object.Char__x * event.widgetWidth, |
1067 |
(object.y + spacer + (object._gap * spacer)) * event.widgetHeight) |
(object.Char__y + spacer + (object._gap * spacer)) * event.widgetHeight) |
1068 |
newWidget.list.connect('select-child', self.comboHandler, newWidget) |
newWidget.list.connect('select-child', self.comboHandler, newWidget) |
1069 |
|
|
1070 |
#$print self.comboHandlerID |
#$print self.comboHandlerID |
1074 |
elif style == 'label': |
elif style == 'label': |
1075 |
newWidget = gtk.Label("") |
newWidget = gtk.Label("") |
1076 |
newWidget.set_size_request(self.itemWidth, self.itemHeight + 1) |
newWidget.set_size_request(self.itemWidth, self.itemHeight + 1) |
1077 |
event.container.put(newWidget, object.x * event.widgetWidth, |
event.container.put(newWidget, object.Char__x * event.widgetWidth, |
1078 |
(object.y + spacer + (object._gap * spacer)) * event.widgetHeight) |
(object.Char__y + spacer + (object._gap * spacer)) * event.widgetHeight) |
1079 |
_setDefaultEventHandlers(newWidget, event.initialize, newWidget) |
_setDefaultEventHandlers(newWidget, event.initialize, newWidget) |
1080 |
|
|
1081 |
elif style == 'checkbox': |
elif style == 'checkbox': |
1082 |
newWidget = gtk.CheckButton() |
newWidget = gtk.CheckButton() |
1083 |
newWidget.set_size_request(2 * event.textWidth, event.textHeight) |
newWidget.set_size_request(2 * event.textWidth, event.textHeight) |
1084 |
event.container.put(newWidget, object.x * event.widgetWidth, |
event.container.put(newWidget, object.Char__x * event.widgetWidth, |
1085 |
(object.y + spacer + (object._gap * spacer)) * event.widgetHeight) |
(object.Char__y + spacer + (object._gap * spacer)) * event.widgetHeight) |
1086 |
newWidget.connect('toggled', self.checkboxHandler, newWidget) |
newWidget.connect('toggled', self.checkboxHandler, newWidget) |
1087 |
|
|
1088 |
#$_setDefaultEventHandlers(newWidget,initialize,newWidget) |
#$_setDefaultEventHandlers(newWidget,initialize,newWidget) |
1096 |
#$textBuffer.set_text(value) |
#$textBuffer.set_text(value) |
1097 |
newWidget=gtk.Entry() |
newWidget=gtk.Entry() |
1098 |
newWidget.set_size_request(self.itemWidth, self.itemHeight+1) |
newWidget.set_size_request(self.itemWidth, self.itemHeight+1) |
1099 |
event.container.put(newWidget, object.x * event.widgetWidth, |
event.container.put(newWidget, object.Char__x * event.widgetWidth, |
1100 |
(object.y + spacer + (object._gap * spacer)) * event.widgetHeight) |
(object.Char__y + spacer + (object._gap * spacer)) * event.widgetHeight) |
1101 |
_setDefaultEventHandlers(newWidget, event.initialize, newWidget) |
_setDefaultEventHandlers(newWidget, event.initialize, newWidget) |
1102 |
|
|
1103 |
event.container.show_all() |
event.container.show_all() |
1135 |
# |
# |
1136 |
# 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 |
1137 |
# |
# |
1138 |
class UIForm(UIHelper, UIWidget): |
class UIForm(UIHelper): |
1139 |
tabStyles = {'left':gtk.POS_LEFT, |
tabStyles = {'left':gtk.POS_LEFT, |
1140 |
'right':gtk.POS_RIGHT, |
'right':gtk.POS_RIGHT, |
1141 |
'bottom':gtk.POS_BOTTOM, |
'bottom':gtk.POS_BOTTOM, |
1145 |
def _createWidget(self, event, spacer): |
def _createWidget(self, event, spacer): |
1146 |
global _NOTEBOOK, _SINGLEPAGE |
global _NOTEBOOK, _SINGLEPAGE |
1147 |
|
|
1148 |
if event.object.tabbed: |
if event.object._layout: |
1149 |
tabstyle = self.tabStyles[event.object.tabbed] |
tabstyle = self.tabStyles[event.object._layout.tabbed] |
1150 |
newWidget = gtk.Notebook() |
newWidget = gtk.Notebook() |
1151 |
newWidget.set_tab_pos(tabstyle) |
newWidget.set_tab_pos(tabstyle) |
1152 |
event.interface.currentWidget[0].add(newWidget) |
event.interface.currentWidget[0].add(newWidget) |
1591 |
#$else: |
#$else: |
1592 |
#$event.Skip() |
#$event.Skip() |
1593 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Needed by Designer |
|
|
WIDGETS = {'GFLabel' : UILabel, |
|
|
'GFBox' : UIBox, |
|
|
'GFPage' : UIPage, |
|
|
'GFForm' : UIForm, |
|
|
'GFEntry' : UIEntry, |
|
|
'GFButton' : UIButton, |
|
|
'GFScrollBar' : UIScrollBar, |
|
|
} |
|
|
|
|
|
|
|
1594 |
# Shortcut |
# Shortcut |
1595 |
images_dir = GConfig.getInstalledBase('forms_images','common_images') + '/' |
images_dir = GConfig.getInstalledBase('forms_images','common_images') + '/' |
1596 |
|
|