Browse Source

Added class for text pie menu

Mark Mine 23 years ago
parent
commit
222845f50b
1 changed files with 44 additions and 0 deletions
  1. 44 0
      direct/src/leveleditor/PieMenu.py

+ 44 - 0
direct/src/leveleditor/PieMenu.py

@@ -115,3 +115,47 @@ class PieMenu(NodePath, PandaObject):
     def setUpdateOnlyOnChange(self,flag):
     def setUpdateOnlyOnChange(self,flag):
         self.fUpdateOnlyOnChange = flag
         self.fUpdateOnlyOnChange = flag
 
 
+
+class TextPieMenu(PieMenu):
+    def __init__(self, textList, radius = 0.5, sf = 1,
+                 action = None, fUpdateOnlyOnChange = 1):
+        numItems = len(textList)
+        # Create top level node for new menu
+        newMenu = hidden.attachNewNode('TextMenu')
+        # Compute angle per item
+        angle = deg2Rad(360.0/numItems)
+        aspectRatio = direct.dr.getWidth()/float(direct.dr.getHeight())
+        # Add items
+        for i in range (numItems):
+            # Create text node for each item
+            if (textList[i] != None):
+                tn = TextNode('TextItem')
+                tn.freeze()
+                tn.setFont(getDefaultFont())
+                tn.setTransform(Mat4.scaleMat(0.07, 0.07, 0.07 * aspectRatio))
+                tn.setTextColor(0, 0, 0, 1)
+                tn.setCardColor(1, 1, 1, 1)
+                tn.setCardAsMargin(0.1, 0.1, 0.1, 0.1)
+                tn.setText(str(textList[i]))
+                tn.thaw()
+
+                # Reposition it
+                card = tn.getCardTransformed()
+                center = (card[1] - card[0], card[3] - card[2])
+
+                node = newMenu.attachNewNode(tn)
+                node.setScale(sf)
+                node.setPos(radius * math.cos(i * angle) - center[0], 0.0,
+                            ((radius * aspectRatio * math.sin(i * angle)) -
+                            center[1]))
+        # Create and return a pie menu
+        PieMenu.__init__(self, newMenu, textList)
+        self.accept('mouse3', self.spawnPieMenuTask)
+        self.accept('mouse3-up', self.removePieMenuTask)
+    def destroy(self):
+        self.ignore('mouse3')
+        self.ignore('mouse3-up')
+        self.removeNode()
+
+
+