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 11:15:03 -0500

CVSROOT:        /cvsroot/gnue
Module name:    gnue
Changes by:     Jason Cater <address@hidden>    02/01/16 11:15:02

Modified files:
        designer/src   : DataSourceEditor.py 

Log message:
        reverting DataSourceEditor back to working version

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/designer/src/DataSourceEditor.py.diff?tr1=1.4&tr2=1.5&r1=text&r2=text

Patches:
Index: gnue/designer/src/DataSourceEditor.py
diff -c gnue/designer/src/DataSourceEditor.py:1.4 
gnue/designer/src/DataSourceEditor.py:1.5
*** gnue/designer/src/DataSourceEditor.py:1.4   Wed Jan 16 00:33:28 2002
--- gnue/designer/src/DataSourceEditor.py       Wed Jan 16 11:15:02 2002
***************
*** 27,42 ****
  # NOTES:
  #
  
! import sys, os
  from wxPython.wx import *
  from gnue.common import GDebug, GConfig, GDataSource
  import RuntimeSettings
  
  class DataSourceEditor(wxPanel):
    def __init__(self, parentWindow, instance, rootObject):
      wxPanel.__init__(self,parentWindow,-1)
      self.instance = instance
      self.rootObject = instance.rootObject
      self.runtime_section = "DataSourceEditor"
  
      self.toolBar = ToolBar(self, parentWindow)
--- 27,44 ----
  # NOTES:
  #
  
! import sys, os, cPickle
  from wxPython.wx import *
  from gnue.common import GDebug, GConfig, GDataSource
  import RuntimeSettings
+ import Incubator
  
  class DataSourceEditor(wxPanel):
    def __init__(self, parentWindow, instance, rootObject):
      wxPanel.__init__(self,parentWindow,-1)
      self.instance = instance
      self.rootObject = instance.rootObject
+     self.connections = self.instance._app.connections
      self.runtime_section = "DataSourceEditor"
  
      self.toolBar = ToolBar(self, parentWindow)
***************
*** 44,50 ****
      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)
  
      self.list.InsertColumn(0,'Name')
      self.list.InsertColumn(1,'Source')
--- 46,53 ----
      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')
      self.list.InsertColumn(1,'Source')
***************
*** 54,89 ****
  
      self.properties = wxPanel(self.notebook, -1)
      self.fields = wxPanel(self.notebook, -1)
  
      self.notebook.AddPage(self.properties, 'Properties')
      self.notebook.AddPage(self.fields, 'References')
  
      self.splitter.SplitHorizontally(self.list, self.notebook,200)
  
- 
      EVT_SIZE(self, self.OnSize)
  
!     self.datasources = {}
  
      instance.rootObject.walk (self.initialInventory)
      instance.rootObject.walk (self.inventoryObject)
  
      self.splitter.SetSize(self.GetSize())
  
      self.finalized = 0
      RuntimeSettings.registerRuntimeSettingHandler(self.instance, self)
  
  
    def initialInventory(self, object):
      if isinstance(object, GDataSource.GDataSource):
!       self.datasources[string.lower(object.name)] = object
  
  
    def inventoryObject(self, object):
      if isinstance(object, GDataSource.GDataSource):
        if hasattr(object,'master') and len(object.master):
          try:
!           object.__master = self.datasources[string.lower(object.master)]
          except KeyError:
            # TODO: Something better than this
            print "DataSource %s references non-existent master %s" % \
--- 57,103 ----
  
      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)
  
      EVT_SIZE(self, self.OnSize)
  
!     self.datasourceMap = {}
!     self.datasources = []
! 
!     self.current = None
  
      instance.rootObject.walk (self.initialInventory)
      instance.rootObject.walk (self.inventoryObject)
  
      self.splitter.SetSize(self.GetSize())
  
+     EVT_LIST_ITEM_SELECTED(self, self.list.GetId(), self.OnDSSelected)
+     self.onSetCurrentObject(self.current, "")
+ 
      self.finalized = 0
      RuntimeSettings.registerRuntimeSettingHandler(self.instance, self)
  
  
    def initialInventory(self, object):
      if isinstance(object, GDataSource.GDataSource):
!       self.datasourceMap[string.lower(object.name)] = object
!       self.datasourceMap[id(object)] = object
!       self.datasources.append(object)
!       if self.current is None:
!         self.current = object
  
  
    def inventoryObject(self, object):
      if isinstance(object, GDataSource.GDataSource):
        if hasattr(object,'master') and len(object.master):
          try:
!           object.__master = self.datasourceMap[string.lower(object.master)]
          except KeyError:
            # TODO: Something better than this
            print "DataSource %s references non-existent master %s" % \
***************
*** 94,100 ****
        # TODO: Implement sorting?
        index = self.list.GetItemCount()
        self.list.InsertStringItem(index, object.name)
- #      self.list.SetStringItem(index, 0, object.name)
        self.list.SetStringItem(index, 1,
               hasattr(object,'table') and object.table or '')
        self.list.SetStringItem(index, 2,
--- 108,113 ----
***************
*** 112,122 ****
      if object == None:
        return
  
-     if hasattr(object, '_widgetHandler'):
-       self.propBar.setCurrentObject(object)
- 
      if handler != __name__:
!       pass
  
  
    def onCreateObject (self, object, handler):
--- 125,141 ----
      if object == None:
        return
  
      if handler != __name__:
!       if isinstance(object, GDataSource.GDataSource):
! 
!         self.current = object
!         self.list.SetItemState ( object.__listIndex,
!                                  wxLIST_STATE_SELECTED,
!                                  wxLIST_STATE_SELECTED)
! 
!         self.list.EnsureVisible(object.__listIndex)
! 
!     self.schemas.onSetCurrentObject(object, handler)
  
  
    def onCreateObject (self, object, handler):
***************
*** 136,142 ****
      if handler != __name__:
  
        if isinstance(object, GDataSource.GDataSource):
!         # TODO: Maintain self.datasources
  
  
          index = object.__listIndex
--- 155,161 ----
      if handler != __name__:
  
        if isinstance(object, GDataSource.GDataSource):
!         # TODO: Maintain self.datasourceMap
  
  
          index = object.__listIndex
***************
*** 151,159 ****
    def onDeleteObject (self, object, handler):
      if object == None:
        return
!     if handler != __name__:
!       if isinstance(object, GDataSource.GDataSource):
!         del self.datasources[string.lower(object.name)]
  
  
    def OnSize(self, event):
--- 170,193 ----
    def onDeleteObject (self, object, handler):
      if object == None:
        return
! 
!     if isinstance(object, GDataSource.GDataSource):
! 
!       index = object.__listIndex
! 
!       i = j = 0
!       for datasource in self.datasources:
!         if datasource == object: j = i
!         if datasource.__listIndex > index:
!           datasource.__listIndex -= 1
!           i += 1
! 
! 
!       self.datasources.pop(j)
!       self.list.DeleteItem(index)
! 
!       del self.datasourceMap[string.lower(object.name)]
!       del self.datasourceMap[id(object)]
  
  
    def OnSize(self, event):
***************
*** 185,190 ****
--- 219,232 ----
          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))
+ 
+     self.list.Refresh()
+     self.Refresh()
+ 
  
    def saveRuntimeSettings(self):
      sash = self.GetPositionTuple()
***************
*** 194,206 ****
--- 236,274 ----
                'visibletab': self.notebook.GetSelection()
               }
  
+     # Save the top-level list column sizes
      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 )
  
  
+   # A Datasource was selected in the menu
+   def OnDSSelected(self, event):
+     self.current = self.datasourceMap[event.GetData()]
+     self.instance.onSetCurrentObject(self.current, __name__)
+ 
+ 
+   def OnAddDSSelected(self, event):
+ 
+     attributes = {}
+     if self.current is not None:
+       attributes['database'] = \
+           hasattr(self.current,'database') and self.current.database or ''
+ 
+     Incubator.createObject(self.instance, self.rootObject, 'datasource',
+                            parent=self.rootObject, attributes=attributes)
+ 
+ 
+   def OnDeleteDSSelected(self, event):
+ 
+     if self.current is not None:
+       self.instance.onDeleteObject(self.current, __name__)
  
  
  
***************
*** 211,228 ****
      self.editor = editor
      parent.SetToolBar(self)
  
!     self.AddSimpleTool(203,
          wxImage(os.environ['INSTALL_PREFIX']+'/'+GConfig.get('tb_insert'),
                  wxBITMAP_TYPE_PNG).ConvertToBitmap(),
          "Create Data Source",
!         "Create Data Source")
  
!     self.AddSimpleTool(203,
          wxImage(os.environ['INSTALL_PREFIX']+'/'+GConfig.get('tb_delete'),
                  wxBITMAP_TYPE_PNG).ConvertToBitmap(),
          "Delete Data Source",
!         "Delete Data Source")
  
  
  
  
--- 279,414 ----
      self.editor = editor
      parent.SetToolBar(self)
  
!     self.addButtonId = wxNewId()
!     self.deleteButtonId = wxNewId()
! 
!     self.AddSimpleTool(self.addButtonId,
          wxImage(os.environ['INSTALL_PREFIX']+'/'+GConfig.get('tb_insert'),
                  wxBITMAP_TYPE_PNG).ConvertToBitmap(),
          "Create Data Source",
!         "Create a new data source")
  
!     self.AddSimpleTool(self.deleteButtonId,
          wxImage(os.environ['INSTALL_PREFIX']+'/'+GConfig.get('tb_delete'),
                  wxBITMAP_TYPE_PNG).ConvertToBitmap(),
          "Delete Data Source",
!         "Delete the currently selected data source")
! 
!     EVT_TOOL(self, self.addButtonId, editor.OnAddDSSelected)
!     EVT_TOOL(self, self.deleteButtonId, editor.OnDeleteDSSelected)
! 
! 
!     self.dblinks = []
! 
! 
! 
! SCH_FIELD = 0
! SCH_TYPE = 1
! SCH_SIZE = 2
! SCH_NATIVE = 3
! SCH_REQ = 4
! SCH_COLUMNS = SCH_REQ + 1
! 
! 
! class SchemaViewer(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(SCH_FIELD, 'Field')
!     self.list.InsertColumn(SCH_TYPE,  'Base Type')
!     self.list.InsertColumn(SCH_SIZE,  'Size', wxLIST_FORMAT_RIGHT)
!     self.list.InsertColumn(SCH_NATIVE,'Native Type')
!     self.list.InsertColumn(SCH_REQ,   'Required')
! 
!     self.schemaMap = []
! 
!     EVT_SIZE(self, self.OnSize)
!     EVT_LIST_BEGIN_DRAG(self, self.list.GetId(), self.OnBeginDrag)
! 
! 
!   def fillList(self):
! 
!    try:
!     conn = self.editor.current.database
! 
!     # TODO: This is very, very temporary...
!     # TODO: Designer shouldn't care about gconnection's internal
!     # TODO: attributes.  AS SOON AS common goes to 0.3.0, create
!     # TODO: an isConnectionActive(conn_name) method in GConnections
!     # TODO: and reuse here.
! 
!     if not self.editor.connections._openConnections.has_key(conn) and \
!        not int(GConfig.get("AutoConnect","0")):
! 
!       # TODO: Some other form of feedback
!       if not hasattr(self.editor,'_schemaMessageDisplayed'):
!         print "You are not logged in to %s... not retrieving schema" % (conn)
!         self.editor._schemaMessageDisplayed = 1
! 
!       return
! 
!     # TODO: Much error catching... any DB errors should be
!     # TODO: trapped so the designing session can continue,
!     # TODO: albeit without schema support.
! 
!     dataObject = self.editor.connections.getDataObject(conn, "object")
! 
!     self.editor.connections.requestConnection(dataObject, conn)
! 
!     schema = dataObject.getSchemaByName(self.editor.current.table)
! 
!     index = 0
!     self.list.DeleteAllItems()
!     if schema:
!       for field in schema.getChildSchema(schema):
!         self.list.InsertStringItem(index, field.name)
!         self.list.SetStringItem(index, SCH_TYPE,
!            string.upper(field.datatype[0]) + field.datatype[1:])
!         self.list.SetStringItem(index, SCH_NATIVE,
!            hasattr(field, 'nativetype') and field.nativetype or '(unknown)')
!         self.list.SetStringItem(index, SCH_REQ,
!            field.required and "Yes" or "No")
!         self.list.SetStringItem(index, SCH_SIZE,
!            hasattr(field, 'length') and ("%s"%field.length) or '-')
!         self.list.SetItemData(index, index)
!         self.schemaMap.append(field)
!         index += 1
! 
!    except:
!      # TODO: actually filter connection errors
!      pass
! 
! 
!   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 OnBeginDrag(self, event):
! 
!     object = self.schemaMap[event.GetData()]
! 
!     data = { "Type" : "entry",
!              "Attributes": {
!                "datasource": self.current.name,
!                "name": "fld%s__%s" % (self.current.name,
!                        string.lower(object.name))
!              }
!            }
  
+     do = wxCustomDataObject(wxCustomDataFormat("GNUeDesVisualElement"))
+     do.SetData(cPickle.dumps(data,1))
  
  
+     dropSource = wxDropSource(self)
+     dropSource.SetData(do)
+     result = dropSource.DoDragDrop(false)
  



reply via email to

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