/[thuban]/trunk/thuban/Thuban/UI/classifier.py
ViewVC logotype

Diff of /trunk/thuban/Thuban/UI/classifier.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2386 by jan, Thu Oct 7 14:43:45 2004 UTC revision 2561 by bh, Tue Feb 8 20:34:29 2005 UTC
# Line 35  from Thuban.Model.classification import Line 35  from Thuban.Model.classification import
35    
36  from Thuban.Model.color import Transparent  from Thuban.Model.color import Transparent
37    
38  from Thuban.Model.layer import Layer, RasterLayer  from Thuban.Model.layer import Layer
39  from Thuban.Model.data import SHAPETYPE_ARC, SHAPETYPE_POLYGON, SHAPETYPE_POINT  from Thuban.Model.data import SHAPETYPE_ARC, SHAPETYPE_POLYGON, SHAPETYPE_POINT
40    
41  from Thuban.UI.classgen import ClassGenDialog  from Thuban.UI.classgen import ClassGenDialog
42  from Thuban.UI.colordialog import ColorDialog  from Thuban.UI.colordialog import ColorDialog
43    
44  from dialogs import NonModalNonParentDialog  from Thuban.UI.layerproperties import LayerProperties
45  from messages import MAP_REPLACED  from messages import MAP_REPLACED
46    
47  ID_CLASS_TABLE = 40011  ID_CLASS_TABLE = 40011
# Line 161  class ClassGrid(wxGrid): Line 161  class ClassGrid(wxGrid):
161              group = self.GetTable().GetClassGroup(sel[0])              group = self.GetTable().GetClassGroup(sel[0])
162              if isinstance(group, ClassGroupDefault):              if isinstance(group, ClassGroupDefault):
163                  wxMessageDialog(self,                  wxMessageDialog(self,
164                                  "The Default group cannot be removed.",                                  _("The Default group cannot be removed."),
165                                  style = wxOK | wxICON_EXCLAMATION).ShowModal()                                  style = wxOK | wxICON_EXCLAMATION).ShowModal()
166                  return                  return
167                    
# Line 684  EB_LAYER_TITLE = 0 Line 684  EB_LAYER_TITLE = 0
684  EB_SELECT_FIELD = 1  EB_SELECT_FIELD = 1
685  EB_GEN_CLASS = 2  EB_GEN_CLASS = 2
686    
687  class Classifier(NonModalNonParentDialog):  class Classifier(LayerProperties):
688    
689      type2string = {None:             _("None"),      type2string = {None:             _("None"),
690                     FIELDTYPE_STRING: _("Text"),                     FIELDTYPE_STRING: _("Text"),
# Line 697  class Classifier(NonModalNonParentDialog Line 697  class Classifier(NonModalNonParentDialog
697          group in the classification table.          group in the classification table.
698          """          """
699    
700          NonModalNonParentDialog.__init__(self, parent, name, "")          LayerProperties.__init__(self, parent, name, layer)
701    
         self.__SetTitle(layer.Title())  
   
         self.parent.Subscribe(MAP_REPLACED, self.map_replaced)  
         self.layer = layer  
         self.map = parent.Map()  
   
         self.map.Subscribe(MAP_LAYERS_REMOVED, self.map_layers_removed)  
702          self.layer.Subscribe(LAYER_SHAPESTORE_REPLACED,          self.layer.Subscribe(LAYER_SHAPESTORE_REPLACED,
703                               self.layer_shapestore_replaced)                               self.layer_shapestore_replaced)
704    
705          self.genDlg = None          self.genDlg = None
706            self.group = group
707    
708          ############################          LayerProperties.dialog_layout(self)
         # Create the controls  
         #  
709    
710          panel = wxPanel(self, -1)      def dialog_layout(self, panel, panelBox):
711    
712          text_title = wxTextCtrl(panel, ID_PROPERTY_TITLE, layer.Title())          if self.layer.HasClassification():
713          self.fieldTypeText = wxStaticText(panel, -1, "")  
714                self.fieldTypeText = wxStaticText(panel, -1, "")
715    
         if layer.HasClassification():  
716              self.originalClass = self.layer.GetClassification()              self.originalClass = self.layer.GetClassification()
717              self.originalClassField = self.layer.GetClassificationColumn()              self.originalClassField = self.layer.GetClassificationColumn()
718              field = self.originalClassField              field = self.originalClassField
719              fieldType = self.layer.GetFieldType(field)              fieldType = self.layer.GetFieldType(field)
720    
721              table = layer.ShapeStore().Table()              table = self.layer.ShapeStore().Table()
722              #              #
723              # make field choice box              # make field choice box
724              #              #
# Line 773  class Classifier(NonModalNonParentDialog Line 765  class Classifier(NonModalNonParentDialog
765              # calling __SelectField after creating the classGrid fills in the              # calling __SelectField after creating the classGrid fills in the
766              # grid with the correct information              # grid with the correct information
767              self.fields.SetSelection(self.__cur_field)              self.fields.SetSelection(self.__cur_field)
768              self.__SelectField(self.__cur_field, group = group)              self.__SelectField(self.__cur_field, group = self.group)
   
         button_try = wxButton(self, ID_PROPERTY_TRY, _("Try"))  
         button_revert = wxButton(self, ID_PROPERTY_REVERT, _("Revert"))  
         button_ok = wxButton(self, wxID_OK, _("OK"))  
         button_close = wxButton(self, wxID_CANCEL, _("Close"))  
         button_ok.SetDefault()  
   
         ############################  
         # Layout the controls  
         #  
   
         topBox = wxBoxSizer(wxVERTICAL)  
         panelBox = wxBoxSizer(wxVERTICAL)  
   
         sizer = wxBoxSizer(wxHORIZONTAL)  
         sizer.Add(wxStaticText(panel, -1, _("Title: ")),  
             0, wxALIGN_LEFT | wxALL | wxALIGN_CENTER_VERTICAL, 4)  
         sizer.Add(text_title, 1, wxGROW, 0)  
   
         panelBox.Add(sizer, 0, wxGROW, 4)  
   
         if isinstance(layer, RasterLayer):  
             type = "Image"  
         else:  
             type = layer.ShapeType()  
   
         panelBox.Add(wxStaticText(panel, -1, _("Type: %s") % type),  
             0, wxALIGN_LEFT | wxALL, 4)  
769    
         if layer.HasClassification():  
770    
771              classBox = wxStaticBoxSizer(              classBox = wxStaticBoxSizer(
772                          wxStaticBox(panel, -1, _("Classification")), wxVERTICAL)                          wxStaticBox(panel, -1, _("Classification")), wxVERTICAL)
# Line 827  class Classifier(NonModalNonParentDialog Line 790  class Classifier(NonModalNonParentDialog
790              controlButtonBox.Add(button_moveup, 0, wxGROW|wxALL, 4)              controlButtonBox.Add(button_moveup, 0, wxGROW|wxALL, 4)
791              controlButtonBox.Add(button_movedown, 0, wxGROW|wxALL, 4)              controlButtonBox.Add(button_movedown, 0, wxGROW|wxALL, 4)
792              controlButtonBox.Add(button_edit, 0, wxGROW|wxALL, 4)              controlButtonBox.Add(button_edit, 0, wxGROW|wxALL, 4)
793              controlButtonBox.Add(60, 20, 0, wxGROW|wxALL|wxALIGN_BOTTOM, 4)              controlButtonBox.Add( (60, 20), 0, wxGROW|wxALL|wxALIGN_BOTTOM, 4)
794              controlButtonBox.Add(button_remove, 0,              controlButtonBox.Add(button_remove, 0,
795                                   wxGROW|wxALL|wxALIGN_BOTTOM, 4)                                   wxGROW|wxALL|wxALIGN_BOTTOM, 4)
796    
# Line 838  class Classifier(NonModalNonParentDialog Line 801  class Classifier(NonModalNonParentDialog
801              panelBox.Add(classBox, 1, wxGROW, 0)              panelBox.Add(classBox, 1, wxGROW, 0)
802    
803    
         buttonBox = wxBoxSizer(wxHORIZONTAL)  
         buttonBox.Add(button_try, 0, wxRIGHT|wxEXPAND, 10)  
         buttonBox.Add(button_revert, 0, wxRIGHT|wxEXPAND, 10)  
         buttonBox.Add(button_ok, 0, wxRIGHT|wxEXPAND, 10)  
         buttonBox.Add(button_close, 0, wxRIGHT|wxEXPAND, 10)  
   
         panel.SetAutoLayout(True)  
         panel.SetSizer(panelBox)  
         panelBox.Fit(panel)  
         panelBox.SetSizeHints(panel)  
   
         topBox.Add(panel, 1, wxGROW | wxALL, 4)  
         topBox.Add(buttonBox, 0, wxALIGN_RIGHT|wxBOTTOM|wxTOP, 10)  
   
         self.SetAutoLayout(True)  
         self.SetSizer(topBox)  
         topBox.Fit(self)  
         topBox.SetSizeHints(self)  
         self.Layout()  
   
         ###########  
   
804          EVT_CHOICE(self, ID_PROPERTY_SELECT, self._OnFieldSelect)          EVT_CHOICE(self, ID_PROPERTY_SELECT, self._OnFieldSelect)
         EVT_TEXT(self, ID_PROPERTY_TITLE, self._OnTitleChanged)  
         EVT_BUTTON(self, wxID_OK, self._OnOK)  
         EVT_BUTTON(self, ID_PROPERTY_TRY, self._OnTry)  
         EVT_BUTTON(self, wxID_CANCEL, self._OnCloseBtn)  
         EVT_BUTTON(self, ID_PROPERTY_REVERT, self._OnRevert)  
   
805          EVT_BUTTON(self, ID_PROPERTY_ADD, self._OnAdd)          EVT_BUTTON(self, ID_PROPERTY_ADD, self._OnAdd)
806          EVT_BUTTON(self, ID_PROPERTY_EDITSYM, self._OnEditSymbol)          EVT_BUTTON(self, ID_PROPERTY_EDITSYM, self._OnEditSymbol)
807          EVT_BUTTON(self, ID_PROPERTY_REMOVE, self._OnRemove)          EVT_BUTTON(self, ID_PROPERTY_REMOVE, self._OnRemove)
# Line 874  class Classifier(NonModalNonParentDialog Line 809  class Classifier(NonModalNonParentDialog
809          EVT_BUTTON(self, ID_PROPERTY_MOVEUP, self._OnMoveUp)          EVT_BUTTON(self, ID_PROPERTY_MOVEUP, self._OnMoveUp)
810          EVT_BUTTON(self, ID_PROPERTY_MOVEDOWN, self._OnMoveDown)          EVT_BUTTON(self, ID_PROPERTY_MOVEDOWN, self._OnMoveDown)
811    
         ######################  
   
         text_title.SetFocus()  
         self.haveApplied = False  
   
812      def unsubscribe_messages(self):      def unsubscribe_messages(self):
813          """Unsubscribe from all messages."""          """Unsubscribe from all messages."""
814          self.parent.Unsubscribe(MAP_REPLACED, self.map_replaced)          LayerProperties.unsubscribe_messages(self)
         self.map.Unsubscribe(MAP_LAYERS_REMOVED, self.map_layers_removed)  
815          self.layer.Unsubscribe(LAYER_SHAPESTORE_REPLACED,          self.layer.Unsubscribe(LAYER_SHAPESTORE_REPLACED,
816                                 self.layer_shapestore_replaced)                                 self.layer_shapestore_replaced)
817    
     def map_layers_removed(self, map):  
         """Subscribed to MAP_LAYERS_REMOVED. If this layer was removed,  
         Close self.  
         """  
         if self.layer not in self.map.Layers():  
             self.Close()  
   
818      def layer_shapestore_replaced(self, *args):      def layer_shapestore_replaced(self, *args):
819          """Subscribed to the map's LAYER_SHAPESTORE_REPLACED message.          """Subscribed to the map's LAYER_SHAPESTORE_REPLACED message.
   
820          Close self.          Close self.
821          """          """
822          self.Close()          self.Close()
823    
     def map_replaced(self, *args):  
         """Subscribed to the mainwindow's MAP_REPLACED message. Close self."""  
         self.Close()  
   
824      def EditSymbol(self, row):      def EditSymbol(self, row):
825          """Open up a dialog where the user can select the properties          """Open up a dialog where the user can select the properties
826          for a group.          for a group.
# Line 1025  class Classifier(NonModalNonParentDialog Line 942  class Classifier(NonModalNonParentDialog
942          self.__SelectField(index, self.__cur_field)          self.__SelectField(index, self.__cur_field)
943          self.__cur_field = index          self.__cur_field = index
944    
945      def _OnTry(self, event):      def OnTry(self, event):
946          """Put the data from the table into a new Classification and hand          """Put the data from the table into a new Classification and hand
947             it to the layer.             it to the layer.
948          """          """
# Line 1045  class Classifier(NonModalNonParentDialog Line 962  class Classifier(NonModalNonParentDialog
962    
963          self.haveApplied = True          self.haveApplied = True
964    
965      def _OnOK(self, event):      def OnOK(self, event):
966          self._OnTry(event)          self.OnTry(event)
         self.Close()  
   
     def OnClose(self, event):  
         self.unsubscribe_messages()  
         NonModalNonParentDialog.OnClose(self, event)  
   
     def _OnCloseBtn(self, event):  
         """Close is similar to Cancel except that any changes that were  
         made and applied remain applied, but the currently displayed  
         classification is discarded.  
         """  
   
967          self.Close()          self.Close()
968    
969      def _OnRevert(self, event):      def OnRevert(self, event):
970          """The layer's current classification stays the same."""          """The layer's current classification stays the same."""
971          if self.haveApplied:          if self.haveApplied and self.layer.HasClassification():
972              self.layer.SetClassificationColumn(self.originalClassField)              self.layer.SetClassificationColumn(self.originalClassField)
973              self.layer.SetClassification(self.originalClass)              self.layer.SetClassification(self.originalClass)
974    
# Line 1502  class ClassRenderer(wxPyGridCellRenderer Line 1407  class ClassRenderer(wxPyGridCellRenderer
1407          dc.DestroyClippingRegion()          dc.DestroyClippingRegion()
1408    
1409    
1410  class ClassGroupPropertiesCtrl(wxWindow, wxControl):  class ClassGroupPropertiesCtrl(wxControl):
1411      """A custom window and control that draw a preview of group properties      """A custom window and control that draw a preview of group properties
1412      and can open a dialog to modify the properties if the user double-clicks      and can open a dialog to modify the properties if the user double-clicks
1413      it.      it.
# Line 1510  class ClassGroupPropertiesCtrl(wxWindow, Line 1415  class ClassGroupPropertiesCtrl(wxWindow,
1415    
1416      def __init__(self, parent, id, props, shapeType,      def __init__(self, parent, id, props, shapeType,
1417                   size = wxDefaultSize, style = 0):                   size = wxDefaultSize, style = 0):
1418            wxControl.__init__(self, parent, id, size = size, style = style)
         wxWindow.__init__(self, parent, id, size = size, style = style)  
1419    
1420          self.parent = parent          self.parent = parent
1421    
# Line 1575  class ClassGroupPropertiesCtrl(wxWindow, Line 1479  class ClassGroupPropertiesCtrl(wxWindow,
1479      def _OnLeftDClick(self, event):      def _OnLeftDClick(self, event):
1480          self.DoEdit()          self.DoEdit()
1481    
 from Thuban.UI.mainwindow import layer_properties_dialogs  
 layer_properties_dialogs.add(Layer, Classifier)  
 layer_properties_dialogs.add(RasterLayer, Classifier)  

Legend:
Removed from v.2386  
changed lines
  Added in v.2561

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26