public MainWindow(string title) : base(title) { // COMPOSITE MODEL _model = new CompositeModel(); _model.AddCompositeChangedCallback(UpdateCanvas); _model.AddLayerChangedCallback(UpdateListView); // TRANSFORM TOOL _transformTool = new TransformTool(); // MENUBAR // FILE MenuBar menuBar = new MenuBar(); MenuItem file = new MenuItem("File"); Menu fileMenu = new Menu(); file.Submenu = fileMenu; MenuItem open = new MenuItem("Open"); open.Activated += OpenImage; fileMenu.Append(open); MenuItem save = new MenuItem("Save"); save.Activated += SaveImage; fileMenu.Append(save); MenuItem quit = new MenuItem("Quit"); quit.Activated += delegate { Application.Quit(); }; fileMenu.Append(quit); menuBar.Append(file); // FILTER MenuItem filter = new MenuItem("Filter"); Menu filterMenu = new Menu(); filter.Submenu = filterMenu; MenuItem none = new MenuItem("None"); none.Activated += NoneF; filterMenu.Append(none); MenuItem grayscale = new MenuItem("Grayscale"); grayscale.Activated += GrayscaleF; filterMenu.Append(grayscale); MenuItem lighten = new MenuItem("Lighten"); lighten.Activated += LightenF; filterMenu.Append(lighten); MenuItem darken = new MenuItem("Darken"); darken.Activated += DarkenF; filterMenu.Append(darken); MenuItem jitter = new MenuItem("Jitter"); jitter.Activated += JitterF; filterMenu.Append(jitter); menuBar.Append(filter); // TOOLBAR Toolbar toolbar = new Toolbar(); toolbar.ToolbarStyle = ToolbarStyle.Icons; // Transform Tool Buttons DirectoryInfo diOp = new DirectoryInfo(@"./ops"); for (int i = 0; i < diOp.GetFiles().Length; i++) { var fi = diOp.GetFiles()[i]; Image op = new Image("./ops/" + fi.Name); string label = fi.Name.Substring(0, fi.Name.Length - 4); ToolButton addOp = new ToolButton(op, label); addOp.Clicked += ChangeTransformMode; toolbar.Insert(addOp, i); } // Accessory Buttons DirectoryInfo diAcc = new DirectoryInfo(@"./accessories"); for (int i = 0; i < diAcc.GetFiles().Length; i++) { var fi = diAcc.GetFiles()[i]; Image accessory = new Image("./accessories/" + fi.Name); accessory.Pixbuf = accessory.Pixbuf.ScaleSimple(40, 40, Gdk.InterpType.Bilinear); string label = fi.Name.Substring(0, fi.Name.Length - 4); ToolButton addAccessory = new ToolButton(accessory, label); addAccessory.Clicked += AddAccessory; toolbar.Insert(addAccessory, i + 2); } // LISTVIEW _listView = new ListView("Layer"); // DELETE LAYER Button deleteLayer = new Button("Delete Layer"); deleteLayer.Clicked += DeleteAccessory; // CANVAS _model.LoadBaseImage("./photos/kitty4.jpg"); _canvas = new Canvas(_model.CompositeImage); _canvas.ButtonPressEvent += ActivateTransformTool; _canvas.MotionNotifyEvent += TransformLayer; _canvas.ButtonReleaseEvent += DeactivateTransformTool; // DISPLAY SETUP bool isUniform = false; int margin = 5; VBox listViewAndDeleteLayer = new VBox(isUniform, margin); listViewAndDeleteLayer.Add(Align(_listView, TOP, LEFT, FIXED, FIXED)); listViewAndDeleteLayer.Add(Align(deleteLayer, BOTTOM, LEFT, FILL, FILL)); HBox assortedThings = new HBox(isUniform, margin); assortedThings.Add(Align(listViewAndDeleteLayer, TOP, MIDDLE, FIXED, FIXED)); assortedThings.Add(Align(_canvas, TOP, LEFT, FILL, FIXED)); VBox vlayout = new VBox(isUniform, margin); vlayout.Add(Align(menuBar, TOP, LEFT, FILL, FILL)); vlayout.Add(Align(toolbar, TOP, LEFT, FIXED, FIXED)); vlayout.Add(Align(assortedThings, TOP, LEFT, FILL, FILL)); Add(vlayout); BorderWidth = (uint)margin * 2; Resize(800, 600); ShowAll(); }