Browse Source

added delete button; added baseline graphics

Dave Schuyler 25 years ago
parent
commit
8d3a1bfb8c
1 changed files with 66 additions and 5 deletions
  1. 66 5
      direct/src/leveleditor/LevelEditor.py

+ 66 - 5
direct/src/leveleditor/LevelEditor.py

@@ -296,6 +296,8 @@ def DNAGetBaselineString(baseline):
         child = baseline.at(i)
         if DNAClassEqual(child, DNA_SIGN_TEXT):
             s=s+child.getLetters()
+        elif DNAClassEqual(child, DNA_SIGN_GRAPHIC):
+            s=s+'['+child.getCode()+']'
     return s
 
 def DNASetBaselineString(baseline, text):
@@ -1168,12 +1170,15 @@ class LevelEditor(NodePath, PandaObject):
             elif menuMode == 'building_style' >= 0:
                 # Extract the building style from the current building
                 state = DNAFlatBuildingStyle(building = self.DNATarget)
+            elif menuMode == 'baseline_style' >= 0:
+                # Extract the baseline style
+                state = DNABaselineStyle(baseline = self.panel.currentBaselineDNA)
             elif menuMode == 'wall_style' >= 0:
                 # Extract the wall style from the current wall
                 state = DNAWallStyle(wall = self.DNATarget)
         self.activeMenu.setInitialState(state)
         
-        # Spawn active menu's tatsk
+        # Spawn active menu's task
         self.activeMenu.spawnPieMenuTask()
 
     def getLandmarkBuildingMode(self, dnaObject):
@@ -2268,7 +2273,7 @@ class LevelStyleManager:
             attribute.setDict(
                 # Create a baseline style dictionary for each neighborhood
                 self.createBaselineStyleDictionary(neighborhood))
-            # Using this dictionary, create color pie menus
+            # Using this dictionary, create style pie menus
             attribute.setMenu(
                 self.createBaselineStyleMenu(neighborhood, attribute.getDict()))
             dict[neighborhood] = attribute
@@ -2862,7 +2867,7 @@ class LevelStyleManager:
                 (dnaType == 'toon_landmark')):
                 dnaList = self.getCatalogCodes(dnaType)
             elif (dnaType == 'sign'):
-                dnaList = [None] + [''] + self.getCatalogCodes(dnaType)
+                dnaList = [''] + self.getCatalogCodes(dnaType)
             else:
                 dnaList = [None] + self.getCatalogCodesSuffix(dnaType, '_ur')
             # Add dnaCodes to attribute dictionary
@@ -3647,6 +3652,11 @@ class LevelEditorPanel(Pmw.MegaToplevel):
             text="Add Baseline", command=self.addBaseline)
         self.baselineAddButton.pack(side = 'left', expand = 1, fill = 'x')
 
+        self.baselineDeleteButton = Button(
+            signSelectedFrame, 
+            text="Del", command=self.deleteSignItem)
+        self.baselineDeleteButton.pack(side = 'left', expand = 1, fill = 'x')
+
         signSelectedFrame.grid(row=0, column=0, columnspan=6)
 
         self.baselineString=StringVar()
@@ -3665,6 +3675,15 @@ class LevelEditorPanel(Pmw.MegaToplevel):
         self.fontMenu.selectitem(0)
         self.fontMenu.grid(row=1, column=3, columnspan=3)
 
+        graphicList = self.styleManager.getCatalogCodes('door')
+        self.graphicMenu = Pmw.ComboBox(
+            gridFrame, labelpos = W,
+            label_text = 'Add Graphic:', entry_width = 24,
+            selectioncommand = self.addSignGraphic, history = 0,
+            scrolledlist_items = graphicList)
+        self.graphicMenu.selectitem(0)
+        self.graphicMenu.grid(row=2, column=0, columnspan=4)
+
         signButtonFrame = Frame(gridFrame)
         
         self.bigFirstLetterIntVar = IntVar()
@@ -4042,14 +4061,56 @@ class LevelEditorPanel(Pmw.MegaToplevel):
             self.addRollFloater.set(hpr[2])
 
             self.levelEditor.DNATarget=target
-    
+
+    def deleteSignItem(self):
+        """Delete the selected sign or sign baseline"""
+        if (self.currentBaselineDNA):
+            # Remove the baseline:
+            assert(int((self.baselineMenu.curselection())[0]) == self.currentBaselineIndex)
+            DNARemoveChildOfClass(self.currentSignDNA, DNA_SIGN_BASELINE,
+                self.currentBaselineIndex-1)
+            self.baselineMenu.delete(self.currentBaselineIndex)
+            self.baselineMenu.selectitem(0)
+            self.currentBaselineIndex=0
+            self.currentBaselineDNA=None
+            self.selectSignBaseline(0)
+            self.levelEditor.replaceSelected()
+        elif (self.currentSignDNA):
+            # Remove the sign:
+            assert(int((self.baselineMenu.curselection())[0]) == 0)
+            le = self.levelEditor
+            le.removeSign(le.DNATarget, le.DNATargetParent)
+            self.currentBaselineDNA=None
+            self.currentSignDNA=None
+            self.levelEditor.replaceSelected()
+
     def signBaselineTrace(self, a, b, mode):
         #print self, a, b, mode, self.baselineString.get()
         baseline=self.currentBaselineDNA
         if baseline:
             s=self.baselineString.get()
             self.setBaselineString(s)
-    
+
+    def addSignGraphic(self, code):
+        """
+        Create a new baseline with a graphic and 
+        add it to the current sign
+        """
+        sign=self.findSignFromDNARoot()
+        if sign:
+            graphic=DNASignGraphic()
+            graphic.setCode(code)
+            baseline=DNASignBaseline()
+            baseline.add(graphic)
+            sign.add(baseline)
+            # Show the UI to the new baseline:
+            self.levelEditor.DNATarget=baseline
+            self.baselineMenu.insert(END, '['+code+']')
+            current=self.baselineMenu.size()-1
+            self.baselineMenu.selectitem(current)
+            self.selectSignBaseline(current)
+            self.levelEditor.replaceSelected()
+
     def addBaseline(self):
         sign=self.findSignFromDNARoot()
         if sign: