comparison 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
comparison
equal deleted inserted replaced
138:a1c2b56cb44d 139:e33f37b14893
1 module main.prog.doodler;
2
3 // XXX bob problem, needs it to be like this...
4 import doodle.core.backtrace;
5 import doodle.core.logging;
6 import doodle.core.backtrace;
7
8 import doodle.dia.standard_tools;
9 import doodle.dia.page_layer;
10 import doodle.dia.grid_layer;
11 import doodle.dia.tool_layer;
12
13 import doodle.fig.diagram_layer;
14 import doodle.fig.select_tool;
15
16 import doodle.fig.tools;
17
18 import doodle.gtk.palette;
19
20 import doodle.gtk.cairo_canvas;
21
22 private {
23 /*
24 import doodle.core.backtrace;
25 import doodle.core.logging;
26 import doodle.core.backtrace;
27
28 import doodle.dia.standard_tools;
29 import doodle.dia.page_layer;
30 import doodle.dia.grid_layer;
31 import doodle.dia.tool_layer;
32
33 import doodle.fig.diagram_layer;
34 import doodle.fig.select_tool;
35
36 import doodle.fig.tools;
37
38 import doodle.gtk.palette;
39
40 import doodle.gtk.cairo_canvas;
41 */
42
43 import gtk.Main;
44 import gtk.MainWindow;
45 import gtk.VBox;
46
47 import std.stdio;
48 }
49
50 final class TopLevel : /*private*/ IToolStackObserver {
51 this(string[] args) {
52 Main.init(args);
53 auto window = new MainWindow("Doodle");
54 auto vbox = new VBox(false, 0);
55
56 auto palette = new Palette!Tool;
57 _palette = palette;
58
59 vbox.packStart(palette, false, false, 0);
60
61 Tool[] tools;
62 tools ~= new PanTool;
63 tools ~= new ZoomTool;
64 tools ~= new SelectTool;
65 auto toolLayer = new ToolLayer(tools, this);
66 _toolStack = toolLayer;
67
68 auto gridLayer = new GridLayer;
69
70 auto diagramLayer = new DiagramLayer;
71 _diagram = diagramLayer;
72
73 Layer[] layers;
74 layers ~= new PageLayer;
75 layers ~= gridLayer;
76 layers ~= diagramLayer;
77 layers ~= toolLayer;
78
79 // assume the screen has PPI of 120.0
80 immutable millimetersPerInch = 25.4;
81 immutable pixelsPerMillimetre = 120.0 / millimetersPerInch;
82 auto canvas = new CairoCanvas(layers, toolLayer, gridLayer, pixelsPerMillimetre);
83
84 vbox.packStart(canvas, true, true, 0);
85
86 Palette!Tool.Item[] items = [
87 { "select.svg", "Select", "Select and modify elements", new SelectTool },
88 { "rectangle.svg", "Rectangle", "Create rectangle", new CreateRectangleTool(_diagram) },
89 { "ellipse.svg", "Ellipse", "Create ellipse", new CreateRectangleTool(_diagram) },
90 { "polyline.svg", "Polyline", "Create polyline", new CreateRectangleTool(_diagram) }
91 ];
92
93 palette.configure(items, &_toolStack.use);
94 window.add(vbox);
95 window.setDefaultSize(640, 580);
96 window.showAll();
97 Main.run();
98 }
99
100 void toolChanged(Tool tool) {
101 message("Tool changed %s", tool.name);
102 _palette.activate(tool);
103 }
104
105 private {
106 IToolStack _toolStack;
107 IPalette!Tool _palette;
108 IDiagram _diagram;
109 }
110 }
111
112 void main(string[] args) {
113 new TopLevel(args);
114 }