diff --git a/boxes/__init__.py b/boxes/__init__.py index fcd5a70..7795e94 100755 --- a/boxes/__init__.py +++ b/boxes/__init__.py @@ -199,6 +199,7 @@ class Boxes: """Main class -- Generator should sub class this """ webinterface = True + ui_group = "Misc" def __init__(self): self.formats = formats.Formats() diff --git a/boxes/generators/angledbox.py b/boxes/generators/angledbox.py index 5cf8d22..2a3ad9f 100644 --- a/boxes/generators/angledbox.py +++ b/boxes/generators/angledbox.py @@ -20,6 +20,8 @@ import math class AngledBox(Boxes): """Box with both ends cornered""" + ui_group = "Box" + def __init__(self): Boxes.__init__(self) self.addSettingsArgs(edges.FingerJointSettings) diff --git a/boxes/generators/bintray.py b/boxes/generators/bintray.py index 8eeb152..d5ac40c 100644 --- a/boxes/generators/bintray.py +++ b/boxes/generators/bintray.py @@ -46,6 +46,8 @@ class BinFrontSideEdge(BinFrontEdge): class BinTray(Boxes): """A Type tray variant to be used up right with sloped walls in front""" + ui_group = "Shelf" + def __init__(self): Boxes.__init__(self) self.buildArgParser("sx", "sy", "h", "outside") diff --git a/boxes/generators/box.py b/boxes/generators/box.py index 7626eac..b2d06d3 100755 --- a/boxes/generators/box.py +++ b/boxes/generators/box.py @@ -20,6 +20,8 @@ from boxes import * class Box(Boxes): """Fully closed box""" + ui_group = "Box" + def __init__(self): Boxes.__init__(self) self.addSettingsArgs(edges.FingerJointSettings) diff --git a/boxes/generators/box2.py b/boxes/generators/box2.py index 6c1afda..9c07871 100755 --- a/boxes/generators/box2.py +++ b/boxes/generators/box2.py @@ -21,6 +21,8 @@ from boxes.lids import _TopEdge, _ChestLid class Box2(_TopEdge, _ChestLid): """Box various options for different stypes and lids""" + ui_group = "Box" + def __init__(self): Boxes.__init__(self) self.addTopEdgeSettings() diff --git a/boxes/generators/box3.py b/boxes/generators/box3.py index 2ae94f5..3ca242f 100755 --- a/boxes/generators/box3.py +++ b/boxes/generators/box3.py @@ -19,6 +19,8 @@ from boxes import * class Box3(Boxes): """Box with just 3 walls""" + ui_group = "Box" + def __init__(self): Boxes.__init__(self) self.buildArgParser("x", "y", "h", "outside") diff --git a/boxes/generators/box4.py b/boxes/generators/box4.py index 68a32b6..defc936 100644 --- a/boxes/generators/box4.py +++ b/boxes/generators/box4.py @@ -20,6 +20,8 @@ from boxes import * class Box4(Boxes): """Box with lid and integraded hinge""" + ui_group = "Box" + def __init__(self): Boxes.__init__(self) self.addSettingsArgs(edges.FingerJointSettings) diff --git a/boxes/generators/box5.py b/boxes/generators/box5.py index 3976fde..dd4f3cc 100644 --- a/boxes/generators/box5.py +++ b/boxes/generators/box5.py @@ -19,6 +19,8 @@ from boxes import * class Box5(Boxes): """Box with lid attached by cabinet hinges""" + ui_group = "Box" + def __init__(self): Boxes.__init__(self) self.addSettingsArgs(edges.FingerJointSettings) diff --git a/boxes/generators/displayshelf.py b/boxes/generators/displayshelf.py index a77d22c..8ec571d 100644 --- a/boxes/generators/displayshelf.py +++ b/boxes/generators/displayshelf.py @@ -19,6 +19,8 @@ from boxes import * class DisplayShelf(Boxes): # change class name here and below """Shelf with forward slanted floors""" + ui_group = "Shelf" + def __init__(self): Boxes.__init__(self) diff --git a/boxes/generators/flexbox.py b/boxes/generators/flexbox.py index bbd5619..64665c9 100755 --- a/boxes/generators/flexbox.py +++ b/boxes/generators/flexbox.py @@ -21,6 +21,8 @@ import math class FlexBox(boxes.Boxes): """Box with living hinge and round corners""" + ui_group = "FlexBox" + def __init__(self): boxes.Boxes.__init__(self) self.addSettingsArgs(boxes.edges.FingerJointSettings) diff --git a/boxes/generators/flexbox2.py b/boxes/generators/flexbox2.py index add6dbb..4328420 100755 --- a/boxes/generators/flexbox2.py +++ b/boxes/generators/flexbox2.py @@ -21,6 +21,8 @@ import math class FlexBox2(Boxes): """Box with living hinge and top corners rounded""" + ui_group = "FlexBox" + def __init__(self): Boxes.__init__(self) self.addSettingsArgs(edges.FingerJointSettings) diff --git a/boxes/generators/flexbox3.py b/boxes/generators/flexbox3.py index bf00036..1e998b9 100755 --- a/boxes/generators/flexbox3.py +++ b/boxes/generators/flexbox3.py @@ -21,6 +21,8 @@ import math class FlexBox3(Boxes): """Box with living hinge""" + ui_group = "FlexBox" + def __init__(self): Boxes.__init__(self) self.addSettingsArgs(edges.FingerJointSettings) diff --git a/boxes/generators/flexbox4.py b/boxes/generators/flexbox4.py index d143378..a95d6f6 100644 --- a/boxes/generators/flexbox4.py +++ b/boxes/generators/flexbox4.py @@ -21,6 +21,8 @@ import math class FlexBox4(Boxes): """Box with living hinge and left corners rounded""" + ui_group = "FlexBox" + def __init__(self): Boxes.__init__(self) self.addSettingsArgs(edges.FingerJointSettings) diff --git a/boxes/generators/flextest.py b/boxes/generators/flextest.py index bc37c5d..4640011 100755 --- a/boxes/generators/flextest.py +++ b/boxes/generators/flextest.py @@ -20,6 +20,8 @@ from boxes import * class FlexTest(Boxes): "Piece for testing different flex settings" + ui_group = "Part" + def __init__(self): Boxes.__init__(self) self.addSettingsArgs(edges.FlexSettings) diff --git a/boxes/generators/flextest2.py b/boxes/generators/flextest2.py index 95dfd32..1de5e36 100644 --- a/boxes/generators/flextest2.py +++ b/boxes/generators/flextest2.py @@ -20,6 +20,8 @@ from boxes import * class FlexTest2(Boxes): "Piece for testing 2D flex settings" + ui_group = "Part" + def __init__(self): Boxes.__init__(self) self.buildArgParser("x", "y") diff --git a/boxes/generators/gearbox.py b/boxes/generators/gearbox.py index 5df29d5..022979d 100644 --- a/boxes/generators/gearbox.py +++ b/boxes/generators/gearbox.py @@ -20,6 +20,8 @@ from boxes import * class GearBox(Boxes): """Gearbox with multiple identical stages""" + ui_group = "Part" + def __init__(self): Boxes.__init__(self) self.addSettingsArgs(edges.FingerJointSettings) diff --git a/boxes/generators/planetary.py b/boxes/generators/planetary.py index c31ae51..b340e41 100644 --- a/boxes/generators/planetary.py +++ b/boxes/generators/planetary.py @@ -22,6 +22,8 @@ class Planetary(Boxes): """Planetary Gear with possibly multiple identical stages""" + ui_group = "Part" + def __init__(self): Boxes.__init__(self) self.argparser.add_argument( diff --git a/boxes/generators/pulley.py b/boxes/generators/pulley.py index fff6dbf..ce42089 100644 --- a/boxes/generators/pulley.py +++ b/boxes/generators/pulley.py @@ -22,6 +22,8 @@ import math class Pulley(Boxes): """Timing belt pulleys for different profiles""" + ui_group = "Part" + def __init__(self): Boxes.__init__(self) # remove cli params you do not need diff --git a/boxes/generators/regularbox.py b/boxes/generators/regularbox.py index 387e4b3..0bdff0c 100644 --- a/boxes/generators/regularbox.py +++ b/boxes/generators/regularbox.py @@ -20,6 +20,8 @@ from boxes import * class RegularBox(Boxes): """Regular box""" + ui_group = "Box" + def __init__(self): Boxes.__init__(self) self.addSettingsArgs(edges.FingerJointSettings) diff --git a/boxes/generators/roundedbox.py b/boxes/generators/roundedbox.py index 9b3545b..b54d1d4 100644 --- a/boxes/generators/roundedbox.py +++ b/boxes/generators/roundedbox.py @@ -20,6 +20,8 @@ from boxes import * class RoundedBox(Boxes): """Box with rounded corners""" + ui_group = "FlexBox" + def __init__(self): Boxes.__init__(self) self.addSettingsArgs(edges.FingerJointSettings) diff --git a/boxes/generators/silverwarebox.py b/boxes/generators/silverwarebox.py index 27a8e61..22fbea7 100755 --- a/boxes/generators/silverwarebox.py +++ b/boxes/generators/silverwarebox.py @@ -21,6 +21,8 @@ class Silverware(Boxes): """Not yet parametrized cuttlery stand with carrying grip using flex for rounded corners""" + ui_group = "FlexBox" + #################################################################### ### Parts #################################################################### diff --git a/boxes/generators/trayinsert.py b/boxes/generators/trayinsert.py index 9bb779d..89e0a06 100755 --- a/boxes/generators/trayinsert.py +++ b/boxes/generators/trayinsert.py @@ -20,6 +20,8 @@ from boxes import * class TrayInsert(Boxes): """Tray insert without floor and outer walls - allows only continuous walls""" + ui_group = "Tray" + def __init__(self): Boxes.__init__(self) self.buildArgParser("sx", "sy", "h", "outside") diff --git a/boxes/generators/traylayout.py b/boxes/generators/traylayout.py index 3941dc0..966c5d4 100755 --- a/boxes/generators/traylayout.py +++ b/boxes/generators/traylayout.py @@ -384,6 +384,8 @@ class TrayLayout(Layout): webinterface = True + ui_group = "Tray" + def __init__(self): Boxes.__init__(self) self.argparser = boxes.ArgumentParser() diff --git a/boxes/generators/typetray.py b/boxes/generators/typetray.py index 567a395..f99702d 100755 --- a/boxes/generators/typetray.py +++ b/boxes/generators/typetray.py @@ -20,6 +20,8 @@ from boxes import * class TypeTray(Boxes): """Type tray - allows only continuous walls""" + ui_group = "Tray" + def __init__(self): Boxes.__init__(self) self.buildArgParser("sx", "sy", "h", "hi", "outside") diff --git a/boxes/generators/ubox.py b/boxes/generators/ubox.py index ab89b1a..55f4d72 100644 --- a/boxes/generators/ubox.py +++ b/boxes/generators/ubox.py @@ -21,6 +21,8 @@ import math class UBox(_TopEdge, _ChestLid): """Box various options for different stypes and lids""" + ui_group = "FlexBox" + def __init__(self): Boxes.__init__(self) self.addTopEdgeSettings() diff --git a/scripts/boxesserver b/scripts/boxesserver index 00e615e..05ac9f2 100755 --- a/scripts/boxesserver +++ b/scripts/boxesserver @@ -74,6 +74,12 @@ boxes.ArgumentParser = ThrowingArgumentParser # Evil hack class BServer: def __init__(self): self.boxes = {b.__name__ : b() for b in boxes.generators.getAllBoxGenerators().values() if b.webinterface} + self.groups = boxes.generators.ui_groups + self.groups_by_name = boxes.generators.ui_groups_by_name + + for name, box in self.boxes.items(): + self.groups_by_name.get(box.ui_group, + self.groups_by_name["Misc"]).add(box) def arg2html(self, a, prefix): name = a.option_strings[0].replace("-", "") @@ -103,20 +109,10 @@ class BServer: (name, a.default) return row % input - - def args2html(self, name, box, action=""): - result = ["""Boxes - """, name, """ - - - - + scripts = """ +""" + + def args2html(self, name, box, action=""): + result = ["""Boxes - """, name, """ + + """, self.scripts % (len(box.argparser._action_groups)-3), """ + @@ -156,16 +164,16 @@ class BServer: """ % (action)] groupid = 0 for group in box.argparser._action_groups[3:] + box.argparser._action_groups[:3]: - groupid += 1 if not group._group_actions: continue prefix = getattr(group, "prefix", None) - result.append('

%s

\n\n' % (groupid, group.title, groupid)) + result.append('''

%s

\n
\n''' % (groupid, group.title, groupid)) for a in group._group_actions: if a.dest in ("input", "output"): continue result.append(self.arg2html(a, prefix)) result.append("
") + groupid += 1 result.append("""

@@ -224,9 +232,9 @@ class BServer: function changeback(img_link){ document.getElementById("sample").src= "examples/" + img + ".svg"; } - + """, self.scripts % len(self.groups), """ - +

Boxes.py

@@ -250,21 +258,20 @@ flex cuts, holes and slots for screws and more high level functions.

These are the available generators:

- - - - + for nr, group in enumerate(self.groups): + result.append('''

%s

\n
\n
    \n''' % (nr, group.title, nr)) + for box in group.generators: + name = box.__class__.__name__ + if name in ("TrayLayout2", ): + continue + docs = "" + if box.__doc__: + docs = " - " + box.__doc__ + result.append("""
  • %s%s
  • \n""" % ( + name, name, docs)) + result.append("
\n
\n") + result.append("""