#include "sharedraw.h" /* #include "bitmap.h" temporarily remove from sharedraw, since IV3.0 does not have raster(view->canvas, 0, 0, w, h) method need to find method to get raster from canvas or to use XImage ( but got In file included from /usr/include/mit/X11/Xlib.h:39, from ../bitmap.c:7: /usr/include/mit/X11/X.h:43: conflicting types for `ivWindow' /usr/local/interviews/include/InterViews/2.6/InterViews/interactor.h:54: previou s declaration of `ivWindow' */ #include "view.h" #include "quit.h" #include "clean.h" #include "conn.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 debug = 1; int main (int argc, char** argv) { World* world = new World( "sharedraw", argc, argv ); InitPPaint(); Sharedraw* m = new Sharedraw(world); world->Insert(m); m->Run(); } Interactor* Sharedraw::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* Sharedraw::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[1].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 LoadBitmapCmd("ReadBitmap", readState, view), */ new VGlue(space, 0) ), new HGlue(space, 0) ), new HBox( new VBox( new ListCmd("List", new ButtonState, view), new VGlue(space, 0), new SuspendCmd("Suspend", new ButtonState, view), new VGlue(space, 0), new ResumeCmd("Resume", new ButtonState , view), new VGlue(space, 0) ), new HGlue(space, 0), new VBox( /* new SaveBitmapCmd("SaveBitmap", saveState, view), new VGlue(space, 0), */ new ConnectCmd("Connect", connState, view), new VGlue(space, 0), new DiscCmd("Disconnect", discState, view), new VGlue(space, 0), new QuitCmd("quit", quitState, view) ), new HGlue(space, 0) ), new VGlue(space, 0) ); } Sharedraw::Sharedraw (World* world) { view = new View( this, new Picture ); socketFromUA = view->socketFromUA; 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))); fprintf(stderr, "inserted frame with view\n"); // view->SaveRaster(); Listen(view->sensor); } /* Use IOCallback in the IV3.0, void Sharedraw::Run() { Event e; int i = 0; do { Read(e); if (e.eventType == ChannelEvent) { printf("sharedraw %d: got message from channel\n", i++); if (e.channel & (1 << socketFromUA)) { printf("sockFromUA bit is set, there is message from UA\n"); view->ReadChannel(socketFromUA); } } e.target->Handle(e); } while (true); } */ Tool* Sharedraw::CurrentTool () { void* tool; curTool->GetValue(tool); return (Tool*) tool; }