瀏覽代碼

*** empty log message ***

David Rose 25 年之前
父節點
當前提交
cf178c1e18
共有 5 個文件被更改,包括 171 次插入25 次删除
  1. 20 2
      direct/src/gui/Button.py
  2. 11 5
      direct/src/gui/Label.py
  3. 122 0
      direct/src/gui/ListBox.py
  4. 9 9
      panda/src/linmath/dblnames.I
  5. 9 9
      panda/src/linmath/fltnames.I

+ 20 - 2
direct/src/gui/Button.py

@@ -12,7 +12,12 @@ class Button(DirectObject):
                  scale = 0.1,
                  scale = 0.1,
                  width = None,
                  width = None,
                  drawOrder = getDefaultDrawOrder(),
                  drawOrder = getDefaultDrawOrder(),
-                 font = getDefaultFont()):
+                 font = getDefaultFont(),
+                 height = None,
+                 left = None,
+                 right = None,
+                 bottom = None,
+                 top = None):
         self.name = name
         self.name = name
         # if no label given, use the button name
         # if no label given, use the button name
         if (label == None):
         if (label == None):
@@ -32,7 +37,20 @@ class Button(DirectObject):
 
 
         elif (isinstance(label, NodePath)):
         elif (isinstance(label, NodePath)):
             # If it's a NodePath, assume it's a little texture card.
             # If it's a NodePath, assume it's a little texture card.
-            self.l1 = Label.modelLabel(label, 1, 1, scale, drawOrder)
+            if height != None and width != None:
+                self.l1 = Label.modelLabel(label, height, width,
+                                           scale = scale,
+                                           drawOrder = drawOrder)
+            elif left != None and right != None and \
+                 bottom != None and top != None:
+                self.l1 = Label.modelLabel(label, left, right, bottom, top,
+                                           scale = scale,
+                                           drawOrder = drawOrder)
+            else:
+                self.l1 = Label.modelLabel(label, 1, 1,
+                                           scale = scale,
+                                           drawOrder = drawOrder)
+            
             self.l2 = self.l1
             self.l2 = self.l1
             self.l3 = self.l1
             self.l3 = self.l1
             
             

+ 11 - 5
direct/src/gui/Label.py

@@ -113,18 +113,24 @@ def textLabelAndText(string, style,
     return (label, text)
     return (label, text)
 
 
 
 
-def modelLabel(model, height, width,
+def modelLabel(model, height, width, bottom = None, top = None,
                scale = 0.1,
                scale = 0.1,
                drawOrder = getDefaultDrawOrder()):
                drawOrder = getDefaultDrawOrder()):
 
 
     # Preserve transitions on the arc by creating an intervening node.
     # Preserve transitions on the arc by creating an intervening node.
     topnode = NamedNode('model')
     topnode = NamedNode('model')
-    top = NodePath(topnode)
-    mi = model.instanceTo(top)
+    topnp = NodePath(topnode)
+    mi = model.instanceTo(topnp)
     mi.setScale(scale)
     mi.setScale(scale)
     mi.setBin('fixed', drawOrder)
     mi.setBin('fixed', drawOrder)
-            
-    label = GuiLabel.makeModelLabel(topnode, height * scale, width * scale)
+
+    if top == None or bottom == None:
+        # If we got only two parameters, it's height and width.
+        label = GuiLabel.makeModelLabel(topnode, height * scale, width * scale)
+    else:
+        # If we got four, they're left, right, bottom, top.
+        label = GuiLabel.makeModelLabel(topnode, height * scale, width * scale,
+                                        bottom * scale, top * scale)
     label.setDrawOrder(drawOrder)
     label.setDrawOrder(drawOrder)
     return label
     return label
                                     
                                     

+ 122 - 0
direct/src/gui/ListBox.py

@@ -0,0 +1,122 @@
+from ShowBaseGlobal import *
+from DirectObject import *
+from GuiGlobals import *
+import Button
+import Label
+import types
+
+
+class ListBox(DirectObject):
+
+    def __init__(self, name, numSlots,
+                 scale = 0.1,
+                 width = None,
+                 drawOrder = getDefaultDrawOrder(),
+                 font = getDefaultFont()):
+
+        self.name = name
+        self.numSlots = numSlots
+
+        self.scale = scale
+        self.width = width
+        self.drawOrder = drawOrder
+        self.font = font
+
+        #arrow = loader.loadModelOnce('phase_3/models/props/scroll-arrow')
+        arrow = None
+        
+        if arrow == None:
+            self.up = Button.Button(name + '-up', '*',
+                                    scale = self.scale,
+                                    width = 2,
+                                    drawOrder = self.drawOrder,
+                                    font = self.font)
+            self.down = Button.Button(name + '-down', '*',
+                                      scale = self.scale,
+                                      width = 2,
+                                      drawOrder = self.drawOrder,
+                                      font = self.font)
+        else:
+            arrowScale = 0.1
+            self.up = Button.Button(name + '-up', arrow,
+                                    left = -1, right = 1,
+                                    bottom = 0, top = 0.5,
+                                    scale = arrowScale,
+                                    drawOrder = drawOrder)
+            arrow.setR(180)
+            self.down = Button.Button(name + '-down', arrow,
+                                      left = -1, right = 1,
+                                      bottom = -0.5, top = 0,
+                                      scale = arrowScale,
+                                      drawOrder = drawOrder)
+            arrow.removeNode()
+
+
+        self.listBox = GuiListBox(self.name, self.numSlots,
+                                  self.up.button, self.down.button)
+
+        self.managed = 0
+
+        self.items = []
+
+	return None
+
+    def addItem(self, item, label):
+        button = Button.Button(item, label,
+                               scale = self.scale,
+                               width = self.width,
+                               drawOrder = self.drawOrder,
+                               font = self.font)
+        
+        self.items.append(item)
+        self.listBox.addItem(button.button)
+
+    def addItems(self, items):
+        for i in items:
+            if isinstance(i, types.StringType):
+                self.addItem(i, i)
+            else:
+                self.addItem(i[0], i[1])
+
+    def cleanup(self):
+        if (self.managed):
+            self.listBox.unmanage()
+        self.up = None
+        self.down = None
+        self.listBox = None
+	return None
+        
+    def __str__(self):
+        return "ListBox: %s" % (self.name)
+
+    def getName(self):
+        return self.name
+
+    def getNumSlots(self):
+        return self.numSlots
+    
+    def getGuiItem(self):
+        return self.listBox
+
+    def freeze(self):
+        self.listBox.freeze()
+
+    def thaw(self):
+        self.listBox.thaw()
+        
+    def manage(self, nodepath = aspect2d):
+        if nodepath:
+            self.listBox.manage(guiMgr, base.eventMgr.eventHandler,
+                                nodepath.node())
+        else:
+            self.listBox.manage(guiMgr, base.eventMgr.eventHandler)
+        self.listBox.startBehavior()
+        self.managed = 1
+
+    def unmanage(self):
+        self.listBox.unmanage()
+        self.listBox.stopBehavior()
+        self.managed = 0
+    
+    def setPos(self, x, y):
+        self.listBox.setPos(Vec3(x, 0., y))

+ 9 - 9
panda/src/linmath/dblnames.I

@@ -1,9 +1,9 @@
-#undef FLOATTYPE1
-#undef FLOATTYPE2
-#undef FLOATNAME
-#undef FLOATNAME2
-
-#define FLOATTYPE1 double
-#define FLOATTYPE2 float
-#define FLOATNAME(ARG)  ARG##d
-#define FLOATNAME2(ARG) ARG##f
+#undef FLOATTYPE1
+#undef FLOATTYPE2
+#undef FLOATNAME
+#undef FLOATNAME2
+
+#define FLOATTYPE1 double
+#define FLOATTYPE2 float
+#define FLOATNAME(ARG)  ARG##d
+#define FLOATNAME2(ARG) ARG##f

+ 9 - 9
panda/src/linmath/fltnames.I

@@ -1,9 +1,9 @@
-#undef FLOATTYPE1
-#undef FLOATTYPE2
-#undef FLOATNAME
-#undef FLOATNAME2
-
-#define FLOATTYPE1 float
-#define FLOATTYPE2 double
-#define FLOATNAME(ARG)  ARG##f
-#define FLOATNAME2(ARG) ARG##d
+#undef FLOATTYPE1
+#undef FLOATTYPE2
+#undef FLOATNAME
+#undef FLOATNAME2
+
+#define FLOATTYPE1 float
+#define FLOATTYPE2 double
+#define FLOATNAME(ARG)  ARG##f
+#define FLOATNAME2(ARG) ARG##d