#include "minidraw.h" #include "view.h" #include "tool.h" #include "quit.h" #include "clean.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include "cyclebutton.h" static CycleButtonChoice SizeChoices[] = { { "32x32 square", "32" }, { "16x16 square", "16" }, { "8x8 square", "8" }, { "4x4 square", "4" }, { "2x2 square", "2" }, { "1x1 square", "1" }, { nil } }; int main (int argc, char** argv) { World* world = new World( "minidraw", argc, argv ); InitPPaint(); world->Insert(new Minidraw); world->Run(); } Interactor* Minidraw::Interior ( View* view ) { VBox* controls = new VBox( ToolButtons(view), new VGlue, new HBorder /* new Panner(view) */ ); controls->Propagate(false); return new HBox( view, new VBorder, controls ); } Interactor* Minidraw::ToolButtons ( View* view ) { int space = round(.5*cm); PenTool* penTool = new PenTool( view, curTool, paintSize ); curTool->SetValue(penTool); EraserTool* eraserTool = new EraserTool( view, curTool, eraserSize ); CycleButton* paintSizeButton = new CycleButton("paint size", paintSize, SizeChoices); CycleButton* eraserSizeButton = new CycleButton("eraser size", eraserSize, SizeChoices); penTool->Attach(paintSizeButton); eraserTool->Attach(eraserSizeButton); paintSize->SetValue(SizeChoices[2].value); eraserSize->SetValue(SizeChoices[3].value); return new VBox ( new VGlue(space, 0), new HBox( new HGlue(space, 0), new VBox( new VGlue(space, 0), new HBox( penTool, new HGlue(space, 0), paintSizeButton ), new VGlue(space, 0), new HBox( eraserTool, new HGlue(space, 0), eraserSizeButton ), new VGlue(space, 0), new TextTool(view, curTool), new VGlue(space, 0) ), new HGlue(space, 0) ), new HBox( new HGlue(space, 0), new VBox( new CursorTool(view, curTool), new VGlue(space, 0), new CleanCmd("Clean Screen", new ButtonState, view), new VGlue(space, 0), new PushButton("ReadBitmap", readState, true), new VGlue(space, 0) ), new HGlue(space, 0) ), new HBox( new HGlue(space, 0), new VBox( new PushButton("SaveBitmap", saveState, true), new VGlue(space, 0), new PushButton("Connect", connState, true), new VGlue(space, 0), new PushButton("Disconnect", discState, true), new VGlue(space, 0), new QuitCmd("quit", quitState) ), new HGlue(space, 0) ), new VGlue(space, 0) ); } Minidraw::Minidraw () { View* view = new View( this, new Picture ); curTool = new ButtonState; quitState = new ButtonState; discState = new ButtonState; connState = new ButtonState; readState = new ButtonState; saveState = new ButtonState; paintSize = new ButtonState; eraserSize = new ButtonState; Insert(new Frame(Interior(view))); } Tool* Minidraw::CurrentTool () { void* tool; curTool->GetValue(tool); return (Tool*) tool; }