diff doodle/main/doodle.d @ 139:e33f37b14893 default tip

Port to 'no-more-make' https://github.com/GrahamStJack/no-more-make
author David Bryant <bagnose@gmail.com>
date Sun, 30 Sep 2012 15:41:25 +0930
parents doodle/main/util/doodle.d@be50d20643a1
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doodle/main/doodle.d	Sun Sep 30 15:41:25 2012 +0930
@@ -0,0 +1,114 @@
+module main.prog.doodler;
+
+// XXX bob problem, needs it to be like this...
+import doodle.core.backtrace;
+import doodle.core.logging;
+import doodle.core.backtrace;
+
+import doodle.dia.standard_tools;
+import doodle.dia.page_layer;
+import doodle.dia.grid_layer;
+import doodle.dia.tool_layer;
+
+import doodle.fig.diagram_layer;
+import doodle.fig.select_tool;
+
+import doodle.fig.tools;
+
+import doodle.gtk.palette;
+
+import doodle.gtk.cairo_canvas;
+
+private {
+    /*
+    import doodle.core.backtrace;
+    import doodle.core.logging;
+    import doodle.core.backtrace;
+
+    import doodle.dia.standard_tools;
+    import doodle.dia.page_layer;
+    import doodle.dia.grid_layer;
+    import doodle.dia.tool_layer;
+
+    import doodle.fig.diagram_layer;
+    import doodle.fig.select_tool;
+
+    import doodle.fig.tools;
+
+    import doodle.gtk.palette;
+
+    import doodle.gtk.cairo_canvas;
+    */
+
+    import gtk.Main;
+    import gtk.MainWindow;
+    import gtk.VBox;
+
+    import std.stdio;
+}
+
+final class TopLevel : /*private*/ IToolStackObserver {
+    this(string[] args) {
+        Main.init(args);
+        auto window = new MainWindow("Doodle");
+        auto vbox = new VBox(false, 0);
+
+        auto palette = new Palette!Tool;
+        _palette = palette;
+
+        vbox.packStart(palette, false, false, 0);
+
+        Tool[] tools;
+        tools ~= new PanTool;
+        tools ~= new ZoomTool;
+        tools ~= new SelectTool;
+        auto toolLayer = new ToolLayer(tools, this);
+        _toolStack = toolLayer;
+
+        auto gridLayer = new GridLayer;
+
+        auto diagramLayer = new DiagramLayer;
+        _diagram = diagramLayer;
+
+        Layer[] layers;
+        layers ~= new PageLayer;
+        layers ~= gridLayer;
+        layers ~= diagramLayer;
+        layers ~= toolLayer;
+
+        // assume the screen has PPI of 120.0
+        immutable millimetersPerInch = 25.4;
+        immutable pixelsPerMillimetre = 120.0 / millimetersPerInch;
+        auto canvas = new CairoCanvas(layers, toolLayer, gridLayer, pixelsPerMillimetre);
+
+        vbox.packStart(canvas, true, true, 0);
+
+        Palette!Tool.Item[] items = [
+        { "select.svg",    "Select",    "Select and modify elements", new SelectTool },
+        { "rectangle.svg", "Rectangle", "Create rectangle", new CreateRectangleTool(_diagram) },
+        { "ellipse.svg",   "Ellipse",   "Create ellipse", new CreateRectangleTool(_diagram) },
+        { "polyline.svg",  "Polyline",  "Create polyline", new CreateRectangleTool(_diagram) }
+        ];
+
+        palette.configure(items, &_toolStack.use);
+        window.add(vbox);
+        window.setDefaultSize(640, 580);
+        window.showAll();
+        Main.run();
+    }
+
+    void toolChanged(Tool tool) {
+        message("Tool changed %s", tool.name);
+        _palette.activate(tool);
+    }
+
+    private {
+        IToolStack _toolStack;
+        IPalette!Tool _palette;
+        IDiagram _diagram;
+    }
+}
+
+void main(string[] args) {
+    new TopLevel(args);
+}