[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
gnue/designer/src DataSourceEditor.py
From: |
Jason Cater |
Subject: |
gnue/designer/src DataSourceEditor.py |
Date: |
Wed, 16 Jan 2002 17:19:46 -0500 |
CVSROOT: /cvsroot/gnue
Module name: gnue
Changes by: Jason Cater <address@hidden> 02/01/16 17:19:46
Modified files:
designer/src : DataSourceEditor.py
Log message:
implemented a cross-reference system for datasources
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/designer/src/DataSourceEditor.py.diff?tr1=1.8&tr2=1.9&r1=text&r2=text
Patches:
Index: gnue/designer/src/DataSourceEditor.py
diff -c gnue/designer/src/DataSourceEditor.py:1.8
gnue/designer/src/DataSourceEditor.py:1.9
*** gnue/designer/src/DataSourceEditor.py:1.8 Wed Jan 16 15:18:16 2002
--- gnue/designer/src/DataSourceEditor.py Wed Jan 16 17:19:46 2002
***************
*** 46,52 ****
self.splitter = wxSplitterWindow(self, -1, style=wxSP_3D)
self.list = wxListCtrl(self.splitter, -1, pos=wxPoint(0,0),
! style=wxLC_REPORT|wxLC_EDIT_LABELS|
wxLC_HRULES|wxLC_VRULES|wxLC_SINGLE_SEL)
self.list.InsertColumn(0,'Name')
--- 46,52 ----
self.splitter = wxSplitterWindow(self, -1, style=wxSP_3D)
self.list = wxListCtrl(self.splitter, -1, pos=wxPoint(0,0),
! style=wxLC_REPORT| # wxLC_EDIT_LABELS|
wxLC_HRULES|wxLC_VRULES|wxLC_SINGLE_SEL)
self.list.InsertColumn(0,'Name')
***************
*** 55,67 ****
self.notebook = wxNotebook(self.splitter, -1, style=wxNB_BOTTOM)
! self.properties = wxPanel(self.notebook, -1)
! self.fields = wxPanel(self.notebook, -1)
! self.schemas = SchemaViewer(self, self.notebook)
!
! self.notebook.AddPage(self.properties, 'Properties')
! self.notebook.AddPage(self.fields, 'References')
! self.notebook.AddPage(self.schemas, 'Schema')
self.splitter.SplitHorizontally(self.list, self.notebook,200)
--- 55,67 ----
self.notebook = wxNotebook(self.splitter, -1, style=wxNB_BOTTOM)
! self.propertyPanel = PropertyViewer(self, self.notebook)
! self.referencesPanel = ReferencesViewer(self, self.notebook)
! self.schemaPanel = SchemaViewer(self, self.notebook)
!
! self.notebook.AddPage(self.propertyPanel, 'Properties')
! self.notebook.AddPage(self.referencesPanel, 'References')
! self.notebook.AddPage(self.schemaPanel, 'Schema')
self.splitter.SplitHorizontally(self.list, self.notebook,200)
***************
*** 88,93 ****
--- 88,96 ----
self.datasourceMap[string.lower(object.name)] = object
self.datasourceMap[id(object)] = object
self.datasources.append(object)
+ object._fieldFkReferences = {}
+ object._blockReferences = []
+ object._datasourceReferences = []
if self.current is None:
self.current = object
***************
*** 116,121 ****
--- 119,160 ----
object.__listIndex = index
+ #
+ # Create a cross-reference list of objects referring to datasources
+ # These are used by the ReferencesViewer
+ #
+
+ if object._type == 'GFEntry' and \
+ hasattr(object,'foreign_key') and \
+ len(object.foreign_key):
+
+ ds, field = string.split(
+ string.lower(object.foreign_key),'.')
+
+ try:
+ self.datasourceMap[ds]._fieldFkReferences[field].append(object)
+ except KeyError:
+ self.datasourceMap[ds]._fieldFkReferences[field] = [object]
+
+ elif object._type == 'GFBlock' and \
+ hasattr(object,'datasource') and \
+ len(object.datasource):
+
+ ds = self.datasourceMap[string.lower(object.datasource)]
+
+ if not object in ds._blockReferences:
+ ds._blockReferences.append(object)
+
+
+ elif isinstance(object,GDataSource.GDataSource) and \
+ hasattr(object,'master') and \
+ len(object.master):
+
+ ds = self.datasourceMap[string.lower(object.master)]
+
+ if not object in ds._datasourceReferences:
+ ds._datasourceReferences.append(object)
+
def onSetCurrentObject (self, object, handler):
***************
*** 134,140 ****
self.list.EnsureVisible(object.__listIndex)
! self.schemas.onSetCurrentObject(object, handler)
def onCreateObject (self, object, handler):
--- 173,181 ----
self.list.EnsureVisible(object.__listIndex)
! self.propertyPanel.onSetCurrentObject(object, handler)
! self.referencesPanel.onSetCurrentObject(object, handler)
! self.schemaPanel.onSetCurrentObject(object, handler)
def onCreateObject (self, object, handler):
***************
*** 218,225 ****
RuntimeSettings.getint(
self.runtime_section, "col%s" % i, -2))
! for i in range(3): # Should be the number of columns in the list
! self.schemas.list.SetColumnWidth(i,
RuntimeSettings.getint(
self.runtime_section, "schemaCol%s" % i, -2))
--- 259,271 ----
RuntimeSettings.getint(
self.runtime_section, "col%s" % i, -2))
! for i in range(REF_COLUMNS):
! self.referencesPanel.list.SetColumnWidth(i,
! RuntimeSettings.getint(
! self.runtime_section, "refCol%s" % i, -2))
!
! for i in range(SCH_COLUMNS):
! self.schemaPanel.list.SetColumnWidth(i,
RuntimeSettings.getint(
self.runtime_section, "schemaCol%s" % i, -2))
***************
*** 239,247 ****
for i in range(3): # Should be the number of columns in the list
settings["col%s" % i] = self.list.GetColumnWidth(i)
# Save the schema viewer column sizes
for i in range(SCH_COLUMNS):
! settings["schemaCol%s" % i] = self.schemas.list.GetColumnWidth(i)
return ( self.runtime_section,
settings )
--- 285,297 ----
for i in range(3): # Should be the number of columns in the list
settings["col%s" % i] = self.list.GetColumnWidth(i)
+ # Save the reference viewer column sizes
+ for i in range(REF_COLUMNS):
+ settings["refCol%s" % i] = self.referencesPanel.list.GetColumnWidth(i)
+
# Save the schema viewer column sizes
for i in range(SCH_COLUMNS):
! settings["schemaCol%s" % i] = self.schemaPanel.list.GetColumnWidth(i)
return ( self.runtime_section,
settings )
***************
*** 300,305 ****
--- 350,489 ----
self.dblinks = []
+ #############################################################################
+ #
+ # Properties Tab
+ #
+
+ class PropertyViewer(wxPanel):
+ def __init__(self, editor, parentWindow):
+ wxPanel.__init__(self, parentWindow, -1)
+ self.editor = editor
+
+ EVT_SIZE(self, self.OnSize)
+
+
+ def onSetCurrentObject(self, object, controller):
+ if isinstance(object, GDataSource.GDataSource):
+ self.current = object
+
+
+ def OnSize(self, event):
+ event.Skip()
+
+
+
+ #############################################################################
+ #
+ # References Tab
+ #
+
+ REF_NAME = 0
+ REF_REFR = 1
+ REF_TYPE = 2
+ REF_COLUMNS = REF_TYPE + 1
+
+ class ReferencesViewer(wxPanel):
+ def __init__(self, editor, parentWindow):
+ wxPanel.__init__(self, parentWindow, -1)
+ self.editor = editor
+
+ self.list = wxListCtrl(self, -1, pos=wxPoint(0,0),
+ style=wxLC_REPORT|wxLC_HRULES|wxLC_VRULES)
+
+ self.list.InsertColumn(REF_NAME, 'Reference')
+ self.list.InsertColumn(REF_REFR, 'Referrer')
+ self.list.InsertColumn(REF_TYPE, 'Type', wxLIST_FORMAT_RIGHT)
+
+ EVT_SIZE(self, self.OnSize)
+
+ def onSetCurrentObject(self, object, controller):
+ if isinstance(object, GDataSource.GDataSource):
+ self.current = object
+ self.fillList()
+
+ def OnSize(self, event):
+ self.list.SetSize(self.GetSize())
+
+ def fillList(self):
+
+
+ mastertable = self.current.table
+
+ self.lines = {}
+
+ def addLine(self, name, referrer, type):
+ name = string.lower(name)
+
+ if not self.lines.has_key(name):
+ self.lines[name] = []
+
+ self.lines[name].append((name, referrer, type))
+
+
+ for item in self.current._datasourceReferences:
+
+ mfields = string.split(item.masterlink,'.')
+ dfields = string.split(item.detaillink,'.')
+
+ for i in range(len(mfields)):
+ addLine( self, "%s.%s" % (mastertable, mfields[i]),
+ "%s.%s" % (item.name, dfields[i]),
+ "Detail Datasource" )
+
+
+ for field in self.current._fieldFkReferences.keys():
+ for item in self.current._fieldFkReferences[field]:
+ addLine( self, "%s.%s" % (mastertable, field),
+ "%s.%s" % (item._parent.name, item.name),
+ "Dropdown Entry" )
+
+
+ for block in self.current._blockReferences:
+ addLine (self, mastertable, block.name, "Block")
+
+ for item in block._children:
+
+ if item._type == 'GFEntry' and \
+ hasattr(item,'field') and \
+ len(item.field):
+
+ addLine( self, "%s.%s" % (mastertable, item.field),
+ "%s.%s" % (block.name, item.name),
+ "Entry" )
+
+ index = 0
+ self.list.DeleteAllItems()
+ keys = self.lines.keys()
+ keys.sort()
+
+ index = 0
+ for key in keys:
+
+ newline = 0
+ self.list.InsertStringItem(index, key)
+
+ for line in self.lines[key]:
+ if newline:
+ self.list.InsertStringItem(index, "")
+ else:
+ newline = 1
+
+
+ name, referrer, type = line
+ self.list.SetStringItem(index, REF_REFR, referrer)
+ self.list.SetStringItem(index, REF_TYPE, type)
+ index += 1
+
+
+
+
+
+
+ #############################################################################
+ #
+ # Schema Viewer Tab
+ #
SCH_FIELD = 0
SCH_TYPE = 1
***************
*** 308,314 ****
SCH_REQ = 4
SCH_COLUMNS = SCH_REQ + 1
-
class SchemaViewer(wxPanel):
def __init__(self, editor, parentWindow):
wxPanel.__init__(self, parentWindow, -1)
--- 492,497 ----
***************
*** 400,405 ****
--- 583,589 ----
"name": "fld%s%s" % (
string.upper(object.name[0]),
string.lower(object.name[1:])),
+ "field": object.name,
"datatype": object.datatype,
"required" : object.required,
}
***************
*** 414,420 ****
do = wxCustomDataObject(wxCustomDataFormat("GNUeDesVisualElement"))
do.SetData(cPickle.dumps(data,1))
-
dropSource = wxDropSource(self)
dropSource.SetData(do)
--- 598,603 ----