/[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 638 by jonathan, Thu Apr 10 14:35:20 2003 UTC revision 671 by bh, Tue Apr 15 18:09:47 2003 UTC
# Line 31  from Thuban.UI.classgen import ClassGenD Line 31  from Thuban.UI.classgen import ClassGenD
31    
32  from dialogs import NonModalDialog  from dialogs import NonModalDialog
33    
 # widget id's  
 ID_PROPERTY_SELECT = 4010  
34  ID_CLASS_TABLE = 40011  ID_CLASS_TABLE = 40011
35    
36    
# Line 87  class ClassGrid(wxGrid): Line 85  class ClassGrid(wxGrid):
85    
86          table = self.GetTable()          table = self.GetTable()
87          if table is None:          if table is None:
88              w = self.GetDefaultColSize() * 3 + self.GetDefaultRowLabelSize()              w = self.GetDefaultColSize() * NUM_COLS \
89              h = self.GetDefaultRowSize() * 4 + self.GetDefaultColLabelSize()                  + self.GetDefaultRowLabelSize()
90                h = self.GetDefaultRowSize() * 4 \
91                    + self.GetDefaultColLabelSize()
92    
93              self.SetDimensions(-1, -1, w, h)              self.SetDimensions(-1, -1, w, h)
94              self.SetSizeHints(w, h, -1, -1)              self.SetSizeHints(w, h, -1, -1)
95              table = ClassTable(self)              table = ClassTable(self)
# Line 397  class ClassTable(wxPyGridTableBase): Line 398  class ClassTable(wxPyGridTableBase):
398              if isinstance(group, ClassGroupMap):       return _("Map")              if isinstance(group, ClassGroupMap):       return _("Map")
399    
400          assert False # shouldn't get here          assert False # shouldn't get here
401          return _("")          return ""
402    
403      def GetNumberRows(self):      def GetNumberRows(self):
404          """Return the number of rows."""          """Return the number of rows."""
# Line 515  class ClassTable(wxPyGridTableBase): Line 516  class ClassTable(wxPyGridTableBase):
516          typeName -- unused, but needed to overload wxPyGridTableBase          typeName -- unused, but needed to overload wxPyGridTableBase
517          """          """
518    
519          assert col >= 0 and col < self.GetNumberCols()          assert 0 <= col < self.GetNumberCols()
520          assert row >= 0 and row < self.GetNumberRows()          assert 0 <= row < self.GetNumberRows()
521    
522          if row == 0:          if row == 0:
523              group = self.clazz.GetDefaultGroup()              group = self.clazz.GetDefaultGroup()
# Line 649  class ClassTable(wxPyGridTableBase): Line 650  class ClassTable(wxPyGridTableBase):
650              self.__NotifyRowChanges(old_len, self.GetNumberRows())              self.__NotifyRowChanges(old_len, self.GetNumberRows())
651    
652    
653  ID_CLASSIFY_OK = 4001  ID_PROPERTY_OK = 4001
654  ID_CLASSIFY_REVERT = 4002  ID_PROPERTY_REVERT = 4002
655  ID_CLASSIFY_ADD = 4003  ID_PROPERTY_ADD = 4003
656  ID_CLASSIFY_GENCLASS = 4004  ID_PROPERTY_GENCLASS = 4004
657  ID_CLASSIFY_REMOVE = 4005  ID_PROPERTY_REMOVE = 4005
658  ID_CLASSIFY_MOVEUP = 4006  ID_PROPERTY_MOVEUP = 4006
659  ID_CLASSIFY_MOVEDOWN = 4007  ID_PROPERTY_MOVEDOWN = 4007
660  ID_CLASSIFY_TRY = 4008  ID_PROPERTY_TRY = 4008
661  ID_CLASSIFY_EDITSYM = 4009  ID_PROPERTY_EDITSYM = 4009
662  ID_CLASSIFY_CLOSE = 4010  ID_PROPERTY_CLOSE = 4010
663    ID_PROPERTY_SELECT = 4011
664    ID_PROPERTY_TITLE = 4012
665    ID_PROPERTY_FIELDTEXT = 4013
666    
667  BTN_ADD = 0  BTN_ADD = 0
668  BTN_EDIT = 1  BTN_EDIT = 1
# Line 667  BTN_UP = 3 Line 671  BTN_UP = 3
671  BTN_DOWN = 4  BTN_DOWN = 4
672  BTN_RM = 5  BTN_RM = 5
673    
674    EB_LAYER_TITLE = 0
675    EB_SELECT_FIELD = 1
676    EB_GEN_CLASS = 2
677    
678  class Classifier(NonModalDialog):  class Classifier(NonModalDialog):
679    
680      type2string = {None:             _("None"),      type2string = {None:             _("None"),
# Line 675  class Classifier(NonModalDialog): Line 683  class Classifier(NonModalDialog):
683                     FIELDTYPE_DOUBLE: _("Decimal")}                     FIELDTYPE_DOUBLE: _("Decimal")}
684    
685      def __init__(self, parent, name, layer, group = None):      def __init__(self, parent, name, layer, group = None):
686          NonModalDialog.__init__(self, parent, name,          NonModalDialog.__init__(self, parent, name, "")
                                 _("Classifier: %s") % layer.Title())  
687    
688          panel = wxPanel(self, -1, size=(100, 100))          self.__SetTitle(layer.Title())
689    
690          self.layer = layer          self.layer = layer
691    
# Line 689  class Classifier(NonModalDialog): Line 696  class Classifier(NonModalDialog):
696          self.genDlg = None          self.genDlg = None
697    
698          topBox = wxBoxSizer(wxVERTICAL)          topBox = wxBoxSizer(wxVERTICAL)
699    
700            panel = wxPanel(self, -1, size=(100, 100))
701    
702          panelBox = wxBoxSizer(wxVERTICAL)          panelBox = wxBoxSizer(wxVERTICAL)
703    
704          #panelBox.Add(wxStaticText(panel, -1, _("Layer: %s") % layer.Title()),          sizer = wxBoxSizer(wxHORIZONTAL)
705              #0, wxALIGN_LEFT | wxALL, 4)          sizer.Add(wxStaticText(panel, -1, _("Title: ")),
706                0, wxALIGN_LEFT | wxALL | wxALIGN_CENTER_VERTICAL, 4)
707            sizer.Add(wxTextCtrl(panel, ID_PROPERTY_TITLE, layer.Title()),
708                      1, wxGROW | wxALL, 4)
709            EVT_TEXT(self, ID_PROPERTY_TITLE, self._OnTitleChanged)
710    
711            panelBox.Add(sizer, 0, wxGROW, 4)
712    
713          panelBox.Add(wxStaticText(panel, -1,          panelBox.Add(wxStaticText(panel, -1,
714                                  _("Layer Type: %s") % layer.ShapeType()),                                  _("Type: %s") % layer.ShapeType()),
715              0, wxALIGN_LEFT | wxALL, 4)              0, wxALIGN_LEFT | wxALL, 4)
716    
717    
718            #####################
719    
720            #panelBox = wxBoxSizer(wxVERTICAL)
721            classBox = wxStaticBoxSizer(
722                        wxStaticBox(panel, -1, _("Classification")), wxVERTICAL)
723    
724    
725          #          #
726          # make field combo box          # make field combo box
727          #          #
# Line 710  class Classifier(NonModalDialog): Line 734  class Classifier(NonModalDialog):
734          self.__cur_field = 0          self.__cur_field = 0
735    
736          self.fields.Append("<None>")          self.fields.Append("<None>")
737          self.fields.SetClientData(0, None)  
738            if self.originalClass.GetFieldType() is None:
739                self.fields.SetClientData(0, copy.deepcopy(self.originalClass))
740            else:
741                self.fields.SetClientData(0, None)
742    
743          for i in range(self.num_cols):          for i in range(self.num_cols):
744              type, name, len, decc = layer.table.field_info(i)              type, name, len, decc = layer.table.field_info(i)
# Line 726  class Classifier(NonModalDialog): Line 754  class Classifier(NonModalDialog):
754    
755          ###########          ###########
756    
         self.fieldTypeText = wxStaticText(panel, -1, "")  
         panelBox.Add(self.fieldTypeText, 0,  
                      wxGROW | wxALIGN_LEFT | wxALL | wxADJUST_MINSIZE, 4)  
757    
758          propertyBox = wxBoxSizer(wxHORIZONTAL)          sizer = wxBoxSizer(wxHORIZONTAL)
759          propertyBox.Add(wxStaticText(panel, -1, _("Field: ")),          sizer.Add(wxStaticText(panel, ID_PROPERTY_FIELDTEXT, _("Field: ")),
760              0, wxALIGN_LEFT | wxALL, 4)              0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL, 4)
761          propertyBox.Add(self.fields, 1, wxGROW|wxALL, 4)          sizer.Add(self.fields, 1, wxGROW | wxALL, 4)
762          EVT_COMBOBOX(self, ID_PROPERTY_SELECT, self._OnFieldSelect)          EVT_COMBOBOX(self, ID_PROPERTY_SELECT, self._OnFieldSelect)
763    
764          panelBox.Add(propertyBox, 0, wxGROW, 4)          classBox.Add(sizer, 0, wxGROW, 4)
765    
766            self.fieldTypeText = wxStaticText(panel, -1, "")
767            classBox.Add(self.fieldTypeText, 0,
768                         wxGROW | wxALIGN_LEFT | wxALL | wxADJUST_MINSIZE, 4)
769    
770    
771          #          #
# Line 749  class Classifier(NonModalDialog): Line 778  class Classifier(NonModalDialog):
778          #          #
779          # Control buttons:          # Control buttons:
780          #          #
         self.controlButtons = []  
   
781          controlButtonBox = wxBoxSizer(wxVERTICAL)          controlButtonBox = wxBoxSizer(wxVERTICAL)
782    
783          button = wxButton(panel, ID_CLASSIFY_GENCLASS, _("Generate Class"))          button = wxButton(panel, ID_PROPERTY_GENCLASS, _("Generate Class"))
784          controlButtonBox.Add(button, 0, wxGROW | wxALL, 4)          controlButtonBox.Add(button, 0, wxGROW | wxALL, 4)
         self.controlButtons.append(button)  
785    
786          button = wxButton(panel, ID_CLASSIFY_ADD, _("Add"))          button = wxButton(panel, ID_PROPERTY_ADD, _("Add"))
787          controlButtonBox.Add(button, 0, wxGROW | wxALL, 4)          controlButtonBox.Add(button, 0, wxGROW | wxALL, 4)
         self.controlButtons.append(button)  
788    
789          button = wxButton(panel, ID_CLASSIFY_MOVEUP, _("Move Up"))          button = wxButton(panel, ID_PROPERTY_MOVEUP, _("Move Up"))
790          controlButtonBox.Add(button, 0, wxGROW | wxALL, 4)          controlButtonBox.Add(button, 0, wxGROW | wxALL, 4)
         self.controlButtons.append(button)  
791    
792          button = wxButton(panel, ID_CLASSIFY_MOVEDOWN, _("Move Down"))          button = wxButton(panel, ID_PROPERTY_MOVEDOWN, _("Move Down"))
793          controlButtonBox.Add(button, 0, wxGROW | wxALL, 4)          controlButtonBox.Add(button, 0, wxGROW | wxALL, 4)
         self.controlButtons.append(button)  
794    
795          button = wxButton(panel, ID_CLASSIFY_EDITSYM, _("Edit Symbol"))          button = wxButton(panel, ID_PROPERTY_EDITSYM, _("Edit Symbol"))
796          controlButtonBox.Add(button, 0, wxGROW | wxALL, 4)          controlButtonBox.Add(button, 0, wxGROW | wxALL, 4)
         self.controlButtons.append(button)  
797    
798          controlButtonBox.Add(60, 20, 0, wxGROW | wxALL | wxALIGN_BOTTOM, 4)          controlButtonBox.Add(60, 20, 0, wxGROW | wxALL | wxALIGN_BOTTOM, 4)
799    
800          button = wxButton(panel, ID_CLASSIFY_REMOVE, _("Remove"))          button = wxButton(panel, ID_PROPERTY_REMOVE, _("Remove"))
801          controlButtonBox.Add(button, 0, wxGROW | wxALL | wxALIGN_BOTTOM, 4)          controlButtonBox.Add(button, 0, wxGROW | wxALL | wxALIGN_BOTTOM, 4)
         self.controlButtons.append(button)  
802    
803    
804          ###########          ###########
# Line 786  class Classifier(NonModalDialog): Line 807  class Classifier(NonModalDialog):
807          #          #
808    
809          self.classGrid = ClassGrid(panel, self)          self.classGrid = ClassGrid(panel, self)
 #       self.classGrid = wxGrid(panel, -1)  
 #       self.classGrid.SetDefaultRenderer(wxGridCellBoolRenderer())  
 #       self.classGrid.SetDefaultEditor(wxGridCellBoolEditor())  
         #self.classGrid.CreateGrid(5, 5)  
         #self.classGrid.SetCellEditor(0, 0, wxGridCellBoolEditor())  
         #self.classGrid.SetCellRenderer(0, 0, wxGridCellBoolRenderer())  
         #print self.classGrid.GetCellEditor(0, 0)  
         #print self.classGrid.GetCellRenderer(0, 0)  
         #self.classGrid = ClassGrid(panel, self)  
   
         # need these  
         self.__SetGridTable(self.__cur_field, group)  
         self.fields.SetSelection(self.__cur_field)  
         #self.classGrid.SetCellEditor(0, 0, wxGridCellBoolEditor())  
         #self.classGrid.SetCellRenderer(0, 0, wxGridCellBoolRenderer())  
810    
811          # calling __SelectField after creating the classGrid fills in the          # calling __SelectField after creating the classGrid fills in the
812          # grid with the correct information          # grid with the correct information
813          #self.fields.SetSelection(self.__cur_field)          self.fields.SetSelection(self.__cur_field)
814          #self.__SelectField(self.__cur_field, group = group)          self.__SelectField(self.__cur_field, group = group)
   
         #self.classGrid.SelectGroup(group)  
815    
816          controlBox.Add(self.classGrid, 1, wxGROW, 0)          controlBox.Add(self.classGrid, 1, wxGROW, 0)
817            controlBox.Add(controlButtonBox, 0, wxGROW, 10)
818    
819            classBox.Add(controlBox, 1, wxGROW, 10)
820            panelBox.Add(classBox, 1, wxGROW, 0)
821    
822            EVT_BUTTON(self, ID_PROPERTY_ADD, self._OnAdd)
823            EVT_BUTTON(self, ID_PROPERTY_EDITSYM, self._OnEditSymbol)
824            EVT_BUTTON(self, ID_PROPERTY_REMOVE, self._OnRemove)
825            EVT_BUTTON(self, ID_PROPERTY_GENCLASS, self._OnGenClass)
826            EVT_BUTTON(self, ID_PROPERTY_MOVEUP, self._OnMoveUp)
827            EVT_BUTTON(self, ID_PROPERTY_MOVEDOWN, self._OnMoveDown)
828    
829          controlBox.Add(controlButtonBox, 0, wxGROW, 10)          ###########
         panelBox.Add(controlBox, 1, wxGROW, 10)  
830    
831          EVT_BUTTON(self, ID_CLASSIFY_ADD, self._OnAdd)  
832          EVT_BUTTON(self, ID_CLASSIFY_EDITSYM, self._OnEditSymbol)          panel.SetAutoLayout(True)
833          EVT_BUTTON(self, ID_CLASSIFY_REMOVE, self._OnRemove)          panel.SetSizer(panelBox)
834          EVT_BUTTON(self, ID_CLASSIFY_GENCLASS, self._OnGenClass)          panelBox.SetSizeHints(panel)
835          EVT_BUTTON(self, ID_CLASSIFY_MOVEUP, self._OnMoveUp)  
836          EVT_BUTTON(self, ID_CLASSIFY_MOVEDOWN, self._OnMoveDown)          topBox.Add(panel, 1, wxGROW | wxALL, 4)
837    
838          ###########          ###########
839    
840          buttonBox = wxBoxSizer(wxHORIZONTAL)          buttonBox = wxBoxSizer(wxHORIZONTAL)
841          buttonBox.Add(wxButton(panel, ID_CLASSIFY_TRY, _("Try")),          buttonBox.Add(wxButton(self, ID_PROPERTY_TRY, _("Try")),
842                        0, wxALL, 4)                        0, wxALL, 4)
843          buttonBox.Add(60, 20, 0, wxALL, 4)          buttonBox.Add(60, 20, 0, wxALL, 4)
844          buttonBox.Add(wxButton(panel, ID_CLASSIFY_REVERT, _("Revert")),          buttonBox.Add(wxButton(self, ID_PROPERTY_REVERT, _("Revert")),
845                        0, wxALL, 4)                        0, wxALL, 4)
846          buttonBox.Add(60, 20, 0, wxALL, 4)          buttonBox.Add(60, 20, 0, wxALL, 4)
847          buttonBox.Add(wxButton(panel, ID_CLASSIFY_OK, _("OK")),          buttonBox.Add(wxButton(self, ID_PROPERTY_OK, _("OK")),
848                        0, wxALL, 4)                        0, wxALL, 4)
849          buttonBox.Add(60, 20, 0, wxALL, 4)          buttonBox.Add(60, 20, 0, wxALL, 4)
850          buttonBox.Add(wxButton(panel, ID_CLASSIFY_CLOSE, _("Close")),          buttonBox.Add(wxButton(self, ID_PROPERTY_CLOSE, _("Close")),
851                        0, wxALL, 4)                        0, wxALL, 4)
852          panelBox.Add(buttonBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_BOTTOM, 0)          topBox.Add(buttonBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_BOTTOM, 0)
853    
854          EVT_BUTTON(self, ID_CLASSIFY_OK, self._OnOK)          EVT_BUTTON(self, ID_PROPERTY_OK, self._OnOK)
855          EVT_BUTTON(self, ID_CLASSIFY_TRY, self._OnTry)          EVT_BUTTON(self, ID_PROPERTY_TRY, self._OnTry)
856          EVT_BUTTON(self, ID_CLASSIFY_CLOSE, self._OnCloseBtn)          EVT_BUTTON(self, ID_PROPERTY_CLOSE, self._OnCloseBtn)
857          EVT_BUTTON(self, ID_CLASSIFY_REVERT, self._OnRevert)          EVT_BUTTON(self, ID_PROPERTY_REVERT, self._OnRevert)
858    
859          ###########          ###########
860    
861            topBox.SetSizeHints(self)
         panel.SetAutoLayout(True)  
         panel.SetSizer(panelBox)  
         panelBox.SetSizeHints(panel)  
   
         topBox.Add(panel, 1, wxGROW, 0)  
         panelBox.SetSizeHints(self)  
862          self.SetAutoLayout(True)          self.SetAutoLayout(True)
863          self.SetSizer(topBox)          self.SetSizer(topBox)
864    
# Line 936  class Classifier(NonModalDialog): Line 942  class Classifier(NonModalDialog):
942    
943          text = Classifier.type2string[fieldType]          text = Classifier.type2string[fieldType]
944    
945          self.fieldTypeText.SetLabel(_("Field Type: %s") % text)          self.fieldTypeText.SetLabel(_("Data Type: %s") % text)
946    
947      def __SelectField(self, newIndex, oldIndex = -1, group = None):      def __SelectField(self, newIndex, oldIndex = -1, group = None):
948          """This method assumes that the current selection for the          """This method assumes that the current selection for the
# Line 951  class Classifier(NonModalDialog): Line 957  class Classifier(NonModalDialog):
957    
958          self.__SetGridTable(newIndex, group)          self.__SetGridTable(newIndex, group)
959    
960          enabled = newIndex != 0          self.__EnableButtons(EB_SELECT_FIELD, newIndex != 0)
   
         for b in self.controlButtons:  
             b.Enable(enabled)  
961    
962          self.__SetFieldTypeText(newIndex)          self.__SetFieldTypeText(newIndex)
963    
964        def __SetTitle(self, title):
965            if title != "":
966                title = ": " + title
967    
968            self.SetTitle(_("Layer Properties") + title)
969    
970      def _OnEditSymbol(self, event):      def _OnEditSymbol(self, event):
971          sel = self.classGrid.GetCurrentSelection()          sel = self.classGrid.GetCurrentSelection()
# Line 1015  class Classifier(NonModalDialog): Line 1023  class Classifier(NonModalDialog):
1023    
1024      def _OnGenClass(self, event):      def _OnGenClass(self, event):
1025    
         #if self.genDlg is None:  
1026          self.genDlg = ClassGenDialog(self, self.layer,          self.genDlg = ClassGenDialog(self, self.layer,
1027                            self.fields.GetString(self.__cur_field))                            self.fields.GetString(self.__cur_field))
1028    
1029          EVT_CLOSE(self.genDlg, self._OnGenDialogClose)          EVT_CLOSE(self.genDlg, self._OnGenDialogClose)
1030    
1031          self.fields.Enable(False)          self.__EnableButtons(EB_GEN_CLASS, False)
         self.controlButtons[BTN_EDIT].Enable(False)  
         self.controlButtons[BTN_GEN].Enable(False)  
1032    
1033          self.genDlg.Show()          self.genDlg.Show()
         #if self.genDlg.ShowModal() == wxID_OK:  
         #    clazz = self.genDlg.GetClassification()  
         #    self.fields.SetClientData(self.__cur_field, clazz)  
         #    self.classGrid.GetTable().SetClassification(clazz)  
         #self.Enable(True)  
         #self.genDlg.Destroy()  
1034    
1035      def _OnGenDialogClose(self, event):      def _OnGenDialogClose(self, event):
1036          self.genDlg.Destroy()          self.genDlg.Destroy()
1037            self.__EnableButtons(EB_GEN_CLASS, True)
         self.fields.Enable(True)  
         self.controlButtons[BTN_EDIT].Enable(True)  
         self.controlButtons[BTN_GEN].Enable(True)  
1038    
1039      def _OnMoveUp(self, event):      def _OnMoveUp(self, event):
1040          sel = self.classGrid.GetCurrentSelection()          sel = self.classGrid.GetCurrentSelection()
# Line 1070  class Classifier(NonModalDialog): Line 1066  class Classifier(NonModalDialog):
1066                  self.classGrid.SelectRow(i + 1)                  self.classGrid.SelectRow(i + 1)
1067                  self.classGrid.MakeCellVisible(i + 1, 0)                  self.classGrid.MakeCellVisible(i + 1, 0)
1068    
1069        def _OnTitleChanged(self, event):
1070            obj = event.GetEventObject()
1071    
1072            self.layer.SetTitle(obj.GetValue())
1073            self.__SetTitle(self.layer.Title())
1074    
1075            self.__EnableButtons(EB_LAYER_TITLE, self.layer.Title() != "")
1076    
1077        def __EnableButtons(self, case, enable):
1078    
1079            if case == EB_LAYER_TITLE:  
1080                list = (ID_PROPERTY_OK,
1081                        ID_PROPERTY_CLOSE)
1082    
1083            elif case == EB_SELECT_FIELD:
1084                list = (ID_PROPERTY_GENCLASS,
1085                        ID_PROPERTY_ADD,
1086                        ID_PROPERTY_MOVEUP,
1087                        ID_PROPERTY_MOVEDOWN,
1088                        ID_PROPERTY_EDITSYM,
1089                        ID_PROPERTY_REMOVE)
1090    
1091            elif case == EB_GEN_CLASS:
1092                list = (ID_PROPERTY_SELECT,
1093                        ID_PROPERTY_FIELDTEXT,
1094                        ID_PROPERTY_GENCLASS,
1095                        ID_PROPERTY_EDITSYM)
1096    
1097            for id in list:
1098                self.FindWindowById(id).Enable(enable)
1099    
1100  ID_SELPROP_OK = 4001  ID_SELPROP_OK = 4001
1101  ID_SELPROP_CANCEL = 4002  ID_SELPROP_CANCEL = 4002

Legend:
Removed from v.638  
changed lines
  Added in v.671

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26