commit-gnue
[Top][All Lists]
Advanced

[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 ----



reply via email to

[Prev in Thread] Current Thread [Next in Thread]