diff --git a/boxes/__init__.py b/boxes/__init__.py index d9f5516..ba6754b 100755 --- a/boxes/__init__.py +++ b/boxes/__init__.py @@ -178,6 +178,18 @@ class ArgparseEdgeType: e, self.names.get(e, "")) for e in self.edges)) return """\n""" % (name, options) +class BoolArg: + def __call__(self, arg): + if not arg or arg in ("None", "0", "off", "False"): + return False + return True + + def html(self, name, default): + return """ +""" % \ + (name, name, ' checked="checked"' if default else "") + +boolarg = BoolArg() ############################################################################## ### Main class @@ -207,7 +219,7 @@ class Boxes: choices=self.formats.getFormats(), help="format of resulting file") defaultgroup.add_argument( - "--debug", action="store", type=bool, default=False, + "--debug", action="store", type=boolarg, default=False, help="print surrounding boxes for some structures") defaultgroup.add_argument( "--reference", action="store", type=float, default=100, @@ -288,7 +300,7 @@ class Boxes: default="e", help="edge type for top edge") elif arg == "outside": self.argparser.add_argument( - "--outside", action="store", type=bool, default=False, + "--outside", action="store", type=boolarg, default=True, help="treat sizes as outside measurements that include the walls") else: raise ValueError("No default for argument", arg) diff --git a/boxes/generators/box2.py b/boxes/generators/box2.py index 6a548eb..a43537a 100755 --- a/boxes/generators/box2.py +++ b/boxes/generators/box2.py @@ -31,7 +31,7 @@ class Box2(Boxes): self.addSettingsArgs(edges.FlexSettings) self.buildArgParser("top_edge", "bottom_edge", "x", "y", "h") self.argparser.add_argument( - "--chestlid", action="store", type=bool, default=False, + "--chestlid", action="store", type=boolarg, default=False, help="add chest lid (needs hinges)") self.angle = 0 diff --git a/boxes/generators/trafficlight.py b/boxes/generators/trafficlight.py index 0a3f3e5..6cfb012 100644 --- a/boxes/generators/trafficlight.py +++ b/boxes/generators/trafficlight.py @@ -56,7 +56,7 @@ class TrafficLight(Boxes): # change class name here and below "--n", action="store", type=int, default=3, help="number of lights") self.argparser.add_argument( - "--upright", action="store", type=bool, default=False, + "--upright", action="store", type=boolarg, default=True, help="stack lights upright (or side by side)") def backCB(self): diff --git a/scripts/boxesserver b/scripts/boxesserver index 0e3e3b5..00e615e 100755 --- a/scripts/boxesserver +++ b/scripts/boxesserver @@ -86,15 +86,12 @@ class BServer: row = """%s%%s%s\n""" % \ (viewname, a.help or "") if (isinstance(a, argparse._StoreAction) and - isinstance(a.type, boxes.ArgparseEdgeType)): + hasattr(a.type, "html")): input = a.type.html(name, a.default) elif a.dest == "layout": val = a.default.split("\n") input = """""" % \ (name, max((len(l) for l in val))+10, len(val)+1, a.default) - elif a.type is bool: - input = """""" % \ - (name, ' checked="checked"' if a.default else "") elif a.choices: options = "\n".join( ("""""" %