comparison doodle/main/prog/doodler.d @ 60:e64baac3efb2

Attempt at a templatised palette
author David Bryant <bagnose@gmail.com>
date Tue, 10 Aug 2010 22:55:54 +0930
parents c63719604adb
children 08ffc44fc21a
comparison
equal deleted inserted replaced
59:860e18c87255 60:e64baac3efb2
10 import doodle.dia.tool_layer; 10 import doodle.dia.tool_layer;
11 11
12 import doodle.fig.tools; 12 import doodle.fig.tools;
13 13
14 import doodle.gtk.canvas; 14 import doodle.gtk.canvas;
15 import doodle.gtk.palette; 15 import doodle.gtk.palette2;
16 16
17 import gtk.Main; 17 import gtk.Main;
18 import gtk.MainWindow; 18 import gtk.MainWindow;
19 import gtk.VBox; 19 import gtk.VBox;
20 20
25 this(string[] args) { 25 this(string[] args) {
26 Main.init(args); 26 Main.init(args);
27 auto window = new MainWindow("Doodle"); 27 auto window = new MainWindow("Doodle");
28 auto vbox = new VBox(false, 0); 28 auto vbox = new VBox(false, 0);
29 29
30 auto palette = new Palette; 30 auto palette = new Palette2!Tool;
31 _palette = palette; 31 _palette = palette;
32 IPalette.Item[] items = [ 32
33 { "select.svg", "Select", "Select and modify elements", &paletteCallback },
34 { "rectangle.svg", "Rectangle", "Create rectangle", &paletteCallback },
35 { "ellipse.svg", "Ellipse", "Create ellipse", &paletteCallback },
36 { "polyline.svg", "Polyline", "Create polyline", &paletteCallback }
37 ];
38 _palette.configure(items);
39 vbox.packStart(palette, false, false, 0); 33 vbox.packStart(palette, false, false, 0);
40 34
41 Tool[] tools; 35 Tool[] tools;
42 tools ~= new PanTool; 36 tools ~= new PanTool;
43 tools ~= new ZoomTool; 37 tools ~= new ZoomTool;
44 tools ~= new SelectTool; 38 tools ~= new SelectTool;
45 auto toolLayer = new ToolLayer(tools, this); 39 auto toolLayer = new ToolLayer(tools, this);
46 _toolStack = toolLayer; 40 _toolStack = toolLayer;
47 41
42 auto gridLayer = new GridLayer;
43
48 auto diagramLayer = new DiagramLayer; 44 auto diagramLayer = new DiagramLayer;
49 _diagram = diagramLayer; 45 _diagram = diagramLayer;
50
51 auto gridLayer = new GridLayer;
52 46
53 Layer[] layers; 47 Layer[] layers;
54 layers ~= new PageLayer; 48 layers ~= new PageLayer;
55 layers ~= gridLayer; 49 layers ~= gridLayer;
56 layers ~= toolLayer; 50 layers ~= toolLayer;
57 auto canvas = new Canvas(layers, toolLayer, gridLayer, 120.0); 51 auto canvas = new Canvas(layers, toolLayer, gridLayer, 120.0);
58 52
59 vbox.packStart(canvas, true, true, 0); 53 vbox.packStart(canvas, true, true, 0);
54
55 Palette2!Tool.Item[] items = [
56 { "select.svg", "Select", "Select and modify elements", new SelectTool },
57 { "rectangle.svg", "Rectangle", "Create rectangle", new CreateRectangleTool(_diagram) },
58 { "ellipse.svg", "Ellipse", "Create ellipse", new CreateRectangleTool(_diagram) },
59 { "polyline.svg", "Polyline", "Create polyline", new CreateRectangleTool(_diagram) }
60 ];
61
62 palette.configure(items, &paletteCallback);
60 window.add(vbox); 63 window.add(vbox);
61 window.setDefaultSize(640, 580); 64 window.setDefaultSize(640, 580);
62 window.showAll(); 65 window.showAll();
63 Main.run(); 66 Main.run();
64 } 67 }
65 68
66 void toolChanged(int index) { // FIXME dmd bug? have to make this public 69 void toolChanged(Tool tool) {
67 message("Tool changed %s", index); 70 message("Tool changed %s", tool.name);
68 _palette.activate(index); 71 _palette.activate(tool);
69 } 72 }
70 73
71 private { 74 private {
72 IToolStack _toolStack; 75 IToolStack _toolStack;
73 IPalette _palette; 76 Palette2!Tool _palette; // FIXME refer to the interface?
74 IDiagram _diagram; 77 IDiagram _diagram;
75 78
76 void paletteCallback(int index) { 79 void paletteCallback(Tool tool) {
77 switch (index) { 80 _toolStack.use(tool);
78 case 0:
79 // Select
80 break;
81 case 1:
82 // Rectangle
83 _toolStack.use(new CreateRectangleTool(_diagram));
84 break;
85 case 2:
86 // Ellipse
87 break;
88 case 3:
89 // Polyline
90 break;
91 default:
92 assert(0);
93 }
94 } 81 }
95 82
96 } 83 }
97 } 84 }
98 85