Inheritance diagram for ScribbleCanvas::
Public Methods | |
ScribbleCanvas (int checkMode) | |
ScribbleCanvas (Dimension d, boolean fixedSize, int checkMode) | |
void | setCanvasEditUser (CanvasEditUser user) |
void | paintComponent (Graphics g) |
void | clear () |
Clear the canvas, i.e. More... | |
void | zoom (double zoomVal) |
Zoom to the given value. More... | |
int | getMode () |
Overrides ActiveCanvas interface. More... | |
int | getSubMode () |
Overrides ActiveCanvas interface. More... | |
void | setMode (int mode, int subMode) |
Overrides ActiveCanvas interface. More... | |
void | actionPerformed (ActionEvent event) |
void | handleJavaFuncDialogOK (Object target, CallableMethod method, Object[] argVals) |
void | handleMousePress (MouseEvent e) |
Interface for MouseListener events, called by LayeredCanvasPane. More... | |
void | handleMouseEnter (MouseEvent e) |
void | handleMouseExit (MouseEvent e) |
void | handleMouseMove (MouseEvent e) |
Interface for MouseMotionListener events, called by LayeredCanvasPane. More... | |
void | handleMouseDrag (MouseEvent e) |
Protected Methods | |
void | drawImages (Graphics g) |
void | drawObjects (Graphics g) |
void | zoomObjects (double zoomValue) |
ScribbleFigure | createDrawFigure (int x, int y) |
void | handleFigureDraw (MouseEvent e) |
void | handleFigureDelete (MouseEvent e) |
void | handleFigureDelPoint (MouseEvent e) |
void | handleFigureMoveCopy (MouseEvent e) |
void | handleFigureModify (MouseEvent e) |
boolean | isDrawing () |
boolean | inDrawMode (int mode) |
boolean | inFigureMode (int mode) |
boolean | inComplexSelectionMode (int mode) |
void | selectObject () |
void | unselectObject () |
void | popUpObjectMenu () |
Protected Attributes | |
DrawField | df = null |
Selector | selector = null |
ScribbleFigure | oldFigure = null |
boolean | mouseInside = false |
boolean | popUpHandling = false |
int | curMode = SELECTION |
int | selPoint = -1 |
int | selLayer = -1 |
int | selIndex = -1 |
int | oldIndex = -1 |
int | oldObjID = -1 |
int | selX = -1 |
int | selY = -1 |
CallableMethod[] | methods = null |
Static Protected Attributes | |
final int | IMAGE_LAYER = 0 |
final int | FIGURE_LAYER = 1 |
final int | NR_OF_LAYERS = 2 |
final String | CANVAS_IMAGE_CLASS = "HxJava.CanvasObject.CanvasImage" |
final String | CANVAS_FIGURE_CLASS = "HxJava.CanvasObject.ScribbleFigure" |
|
|
|
00040 { 00041 super(d, fixedSize, NR_OF_LAYERS, checkMode); 00042 00043 declareClassAt(CANVAS_IMAGE_CLASS, IMAGE_LAYER); 00044 declareClassAt(CANVAS_FIGURE_CLASS, FIGURE_LAYER); 00045 } |
|
00052 { 00053 _editUser = user; 00054 } |
|
00058 { 00059 if (DEBUG_LAYOUT) { 00060 OutputStreamArea.println("ScribbleCanvas::paint (" + getID() + ") " + g.getClipBounds()); 00061 dump(); 00062 } 00063 drawImages(g); 00064 drawObjects(g); 00065 if (isDrawing()) { 00066 df.paintComponent(g); 00067 } 00068 if (selector != null) { 00069 selector.drawSquares(g); 00070 } 00071 } |
|
Clear the canvas, i.e. remove all objects from the canvas and draw the background color on the entire canvas. Reimplemented from LayeredCanvas.
00075 { 00076 selector = null; 00077 super.clear(); 00078 } |
|
Zoom to the given value. Will adjust the canvas size by setting the CCS extent. Reimplemented from IcsCanvas.
00082 { 00083 if (zoomVal == getZoomFactor()) 00084 return; 00085 00086 super.zoom(zoomVal); 00087 zoomObjects(zoomVal); 00088 // repaint(0); 00089 } |
|
Overrides ActiveCanvas interface.
Reimplemented from ActiveCanvas.
00095 { 00096 switch (curMode) { 00097 case SELECTION: return ViewerMode.SELECT; 00098 case DRAW_POINT: return ViewerMode.DRAW; 00099 case DRAW_LINE: return ViewerMode.DRAW; 00100 case DRAW_SQUARE: return ViewerMode.DRAW; 00101 case DRAW_RECTANGLE: return ViewerMode.DRAW; 00102 case DRAW_CIRCLE: return ViewerMode.DRAW; 00103 case DRAW_OVAL: return ViewerMode.DRAW; 00104 case DRAW_POLYLINE: return ViewerMode.DRAW; 00105 case DRAW_POLYGON: return ViewerMode.DRAW; 00106 case DRAW_FREE_OPEN: return ViewerMode.DRAW; 00107 case DRAW_FREE_CLOSED: return ViewerMode.DRAW; 00108 case DRAW_ARROW: return ViewerMode.DRAW; 00109 case DRAW_STRING: return ViewerMode.DRAW; 00110 case FIG_MOVE: return ViewerMode.MOVE; 00111 case FIG_COPY: return ViewerMode.COPY; 00112 case FIG_RESIZE: return ViewerMode.RESIZE; 00113 case FIG_MOV_POINT: return ViewerMode.RESHAPE; 00114 case FIG_DEL_POINT: return ViewerMode.RESHAPE; 00115 case FIG_DELETE: return ViewerMode.DELETE; 00116 } 00117 return -1; 00118 } |
|
Overrides ActiveCanvas interface.
Reimplemented from ActiveCanvas.
00124 { 00125 switch (curMode) { 00126 case DRAW_POINT: return ViewerMode.DRAW_POINT; 00127 case DRAW_LINE: return ViewerMode.DRAW_LINE; 00128 case DRAW_SQUARE: return ViewerMode.DRAW_SQUARE; 00129 case DRAW_RECTANGLE: return ViewerMode.DRAW_RECTANGLE; 00130 case DRAW_CIRCLE: return ViewerMode.DRAW_CIRCLE; 00131 case DRAW_OVAL: return ViewerMode.DRAW_OVAL; 00132 case DRAW_POLYLINE: return ViewerMode.DRAW_POLYLINE; 00133 case DRAW_POLYGON: return ViewerMode.DRAW_POLYGON; 00134 case DRAW_FREE_OPEN: return ViewerMode.DRAW_FREE_OPEN; 00135 case DRAW_FREE_CLOSED: return ViewerMode.DRAW_FREE_CLOSED; 00136 case DRAW_ARROW: return ViewerMode.DRAW_ARROW; 00137 case DRAW_STRING: return ViewerMode.DRAW_STRING; 00138 case FIG_MOV_POINT: return ViewerMode.RESHAPE_MOVE_P; 00139 case FIG_DEL_POINT: return ViewerMode.RESHAPE_DEL_P; 00140 } 00141 return -1; 00142 } |
|
Overrides ActiveCanvas interface.
Reimplemented from ActiveCanvas.
00148 { 00149 switch (mode) { 00150 case ViewerMode.SELECT: { setCurMode(SELECTION); return; } 00151 case ViewerMode.DRAW: { 00152 switch (subMode) { 00153 case ViewerMode.DRAW_POINT: { setCurMode(DRAW_POINT); return; } 00154 case ViewerMode.DRAW_LINE: { setCurMode(DRAW_LINE); return; } 00155 case ViewerMode.DRAW_SQUARE: { setCurMode(DRAW_SQUARE); return; } 00156 case ViewerMode.DRAW_RECTANGLE: { setCurMode(DRAW_RECTANGLE); return; } 00157 case ViewerMode.DRAW_CIRCLE: { setCurMode(DRAW_CIRCLE); return; } 00158 case ViewerMode.DRAW_OVAL: { setCurMode(DRAW_OVAL); return; } 00159 case ViewerMode.DRAW_POLYLINE: { setCurMode(DRAW_POLYLINE); return; } 00160 case ViewerMode.DRAW_POLYGON: { setCurMode(DRAW_POLYGON); return; } 00161 case ViewerMode.DRAW_FREE_OPEN: { setCurMode(DRAW_FREE_OPEN); return; } 00162 case ViewerMode.DRAW_FREE_CLOSED: { setCurMode(DRAW_FREE_CLOSED); return; } 00163 case ViewerMode.DRAW_ARROW: { setCurMode(DRAW_ARROW); return; } 00164 case ViewerMode.DRAW_STRING: { setCurMode(DRAW_STRING); return; } 00165 } 00166 return; // do not know mode 00167 } 00168 case ViewerMode.MOVE: { setCurMode(FIG_MOVE); return; } 00169 case ViewerMode.COPY: { setCurMode(FIG_COPY); return; } 00170 case ViewerMode.RESIZE: { setCurMode(FIG_RESIZE); return; } 00171 case ViewerMode.RESHAPE: { 00172 switch (subMode) { 00173 case ViewerMode.RESHAPE_MOVE_P: { setCurMode(FIG_MOV_POINT); return; } 00174 case ViewerMode.RESHAPE_DEL_P: { setCurMode(FIG_DEL_POINT); return; } 00175 } 00176 return; // do not know mode 00177 } 00178 case ViewerMode.DELETE: { setCurMode(FIG_DELETE); return; } 00179 } 00180 } |
|
00231 { 00232 String command = event.getActionCommand(); 00233 MouseEvent me = new MouseEvent(this, -1, -1, -1, 00234 selX, selY, -1, false); 00235 00236 if (command.equals("Delete")) { 00237 curMode = FIG_DELETE; 00238 handleFigureDelete(me); 00239 } else { 00240 if (command.equals("Move")) { 00241 curMode = FIG_MOVE; 00242 handleFigureMoveCopy(me); 00243 } else if (command.equals("Copy")) { 00244 curMode = FIG_COPY; 00245 handleFigureMoveCopy(me); 00246 } else if (command.equals("Resize")) { 00247 curMode = FIG_RESIZE; 00248 Vector objvec = new Vector(); 00249 objvec.addElement(getObject(selLayer, selIndex)); 00250 selector = new Selector(this.getGraphics(), 00251 objvec, Selector.BOXES); 00252 } else if (command.equals("Delete Point") || 00253 command.equals("Move Point")) { 00254 Vector objvec = new Vector(); 00255 objvec.addElement(getObject(selLayer, selIndex)); 00256 selector = new Selector(this.getGraphics(), 00257 objvec, Selector.COMPLEX); 00258 if (command.equals("Delete Point")) { 00259 curMode = FIG_DEL_POINT; 00260 } else if (command.equals("Move Point")) { 00261 curMode = FIG_MOV_POINT; 00262 } 00263 } else if (command.equals("Cancel")) { 00264 popUpHandling = false; 00265 } else { 00266 if (methods == null) { 00267 return; 00268 } 00269 for (int i=0; i<methods.length; i++) { 00270 if (command.equals(methods[i].getMethodName())) { 00271 Object target = getObject(selLayer, selIndex); 00272 CallableMethod actMethod = methods[i]; 00273 if (actMethod.getNumArgs() > 0) { 00274 new JavaFuncDialog(target, actMethod, this, 00275 "handleJavaFuncDialogOK",false); 00276 } else { 00277 handleJavaFuncDialogOK(target, actMethod, null); 00278 } 00279 break; 00280 } 00281 } 00282 } 00283 } 00284 } |
|
00289 { 00290 CanvasObject cf = getObject(selLayer, selIndex); 00291 if (cf != null) { 00292 method.invoke(target, argVals); 00293 cf.setZoomFactor(getZoomFactor()); 00294 if (DEBUG_EVENTS) 00295 OutputStreamArea.println("VISUAL MODIFICATION PERFORMED"); 00296 if (_editUser != null) 00297 _editUser.objectChangedVisually(this, cf, 00298 _repository.getObjectID(selLayer, selIndex), 00299 method.getMethodName()); 00300 repaint(); 00301 } 00302 popUpHandling = false; 00303 repaint(); 00304 } |
|
Interface for MouseListener events, called by LayeredCanvasPane.
Reimplemented from ActiveCanvas.
00311 { 00312 if (DEBUG_EVENTS) 00313 OutputStreamArea.println("SC handleMousePress (" + getID() + "): " + e.getPoint()); 00314 if (!mouseInside) { 00315 return; 00316 00317 } else if (e.isMetaDown() && !isDrawing()) { // Right mouse 00318 00319 // Exit from current mode,... 00320 00321 curMode = SELECTION; 00322 popUpHandling = false; 00323 unselectObject(); 00324 selector = null; 00325 repaint(); 00326 00327 // ...see which object is selected,... 00328 00329 super.handleMousePress(e); 00330 selectObject(); 00331 00332 // ..., and pop-up appropriate menu 00333 00334 if (selIndex >= 0) { 00335 popUpObjectMenu(); 00336 } 00337 return; 00338 00339 } else if (curMode == FIG_DELETE) { 00340 handleFigureDelete(e); 00341 return; 00342 } else if (curMode == FIG_DEL_POINT) { 00343 handleFigureDelPoint(e); 00344 return; 00345 } else if (curMode == FIG_MOVE || curMode == FIG_COPY) { 00346 handleFigureMoveCopy(e); 00347 return; 00348 } else if (curMode == FIG_RESIZE || curMode == FIG_MOV_POINT) { 00349 handleFigureModify(e); 00350 return; 00351 00352 } else if (inDrawMode(curMode)) { 00353 handleFigureDraw(e); 00354 return; 00355 } 00356 00357 super.handleMousePress(e); 00358 } |
|
Reimplemented from ActiveCanvas.
00362 { 00363 if (DEBUG_EVENTS) 00364 OutputStreamArea.println("SC handleMouseEnter (" + getID() + "): " + e.getPoint()); 00365 mouseInside = true; 00366 00367 if (inDrawMode(curMode)) { 00368 return; 00369 } 00370 super.handleMouseEnter(e); 00371 } |
|
Reimplemented from ActiveCanvas.
00375 { 00376 if (DEBUG_EVENTS) 00377 OutputStreamArea.println("SC handleMouseExit (" + getID() + "): " + e.getPoint()); 00378 mouseInside = false; 00379 00380 if (inDrawMode(curMode)) { 00381 return; 00382 } 00383 super.handleMouseExit(e); 00384 } |
|
Interface for MouseMotionListener events, called by LayeredCanvasPane.
Reimplemented from ActiveCanvas.
00388 { 00389 if (DEBUG_EVENTS) 00390 OutputStreamArea.println("SC handleMouseMove (" + getID() + "): " + e.getPoint()); 00391 if (!mouseInside || curMode == FIG_DELETE || 00392 curMode == FIG_DEL_POINT) { 00393 return; 00394 } else if (curMode == FIG_MOVE || curMode == FIG_COPY) { 00395 if (isDrawing()) { 00396 df.handleFullMove(e); 00397 if (DEBUG_EVENTS) 00398 OutputStreamArea.println("MOVE / COPY CONTINUED (MOVED)"); 00399 } 00400 return; 00401 } else if (curMode == FIG_RESIZE || curMode == FIG_MOV_POINT) { 00402 if (isDrawing()) { 00403 df.handlePointMove(e); 00404 if (DEBUG_EVENTS) 00405 OutputStreamArea.println("RESIZE / RESHAPE CONTINUED (MOVED)"); 00406 } 00407 return; 00408 } else if (inDrawMode(curMode)) { 00409 if (isDrawing()) { 00410 df.handleDrawMove(e); 00411 if (DEBUG_EVENTS) 00412 OutputStreamArea.println("DRAW CONTINUED (MOVED)"); 00413 } 00414 return; 00415 } 00416 super.handleMouseMove(e); 00417 } |
|
Reimplemented from IcsCanvas.
00421 { 00422 if (DEBUG_EVENTS) 00423 OutputStreamArea.println("SC handleMouseDrag (" + getID() + "): " + e.getPoint()); 00424 if (curMode == FIG_DELETE || curMode == FIG_DEL_POINT) { 00425 return; 00426 } else if (curMode == FIG_MOVE || curMode == FIG_COPY) { 00427 if (isDrawing()) { 00428 df.handleFullMove(e); 00429 if (DEBUG_EVENTS) 00430 OutputStreamArea.println("MOVE / COPY CONTINUED (DRAGGED)"); 00431 } 00432 return; 00433 } else if (curMode == FIG_RESIZE || curMode == FIG_MOV_POINT) { 00434 if (isDrawing()) { 00435 df.handlePointMove(e); 00436 if (DEBUG_EVENTS) 00437 OutputStreamArea.println("RESIZE / RESHAPE CONTINUED (DRAGGED)"); 00438 } 00439 return; 00440 } else if (inDrawMode(curMode)) { 00441 if (isDrawing()) { 00442 df.handleDrawMove(e); 00443 if (DEBUG_EVENTS) 00444 OutputStreamArea.println("DRAW CONTINUED (DRAGGED)"); 00445 } 00446 return; 00447 } 00448 super.handleMouseDrag(e); 00449 } |
|
00460 { 00461 // clear canvas... 00462 00463 if (isOpaque()) { 00464 g.setColor(getBackgroundColor()); 00465 Dimension d = getDimensionCCS(); 00466 g.fillRect(0, 0, d.width, d.height); 00467 } 00468 00469 // ... and draw images. 00470 00471 for (int i=0; i < _repository.nrOfObjectsAt(IMAGE_LAYER); i++) { 00472 getObject(IMAGE_LAYER, i).draw(g); 00473 } 00474 } |
|
00478 { 00479 for (int i=0; i < _repository.nrOfObjectsAt(FIGURE_LAYER); i++) { 00480 getObject(FIGURE_LAYER, i).draw(g); 00481 } 00482 } |
|
00486 { 00487 for (int i=0; i < _repository.nrOfObjectsAt(IMAGE_LAYER); i++) { 00488 getObject(IMAGE_LAYER, i).setZoomFactor(zoomValue); 00489 } 00490 for (int i=0; i < _repository.nrOfObjectsAt(FIGURE_LAYER); i++) { 00491 getObject(FIGURE_LAYER, i).setZoomFactor(zoomValue); 00492 } 00493 } |
|
00497 { 00498 int mode = CanvasObject.XOR_MODE; 00499 Color col = ScribbleFigure.NO_COLOR; 00500 00501 switch (curMode) { 00502 case SELECTION : 00503 return null; 00504 case DRAW_POINT : 00505 return (new CanvasPoint(x, y, mode, col, getZoomFactor())); 00506 case DRAW_LINE : 00507 return (new CanvasLine(x, y, x, y, mode, 00508 col, getZoomFactor())); 00509 case DRAW_SQUARE : 00510 return (new CanvasRectangle(x, y, 0, 0, mode, 00511 col, true, getZoomFactor())); 00512 case DRAW_RECTANGLE : 00513 return (new CanvasRectangle(x, y, 0, 0, mode, 00514 col, false, getZoomFactor())); 00515 case DRAW_CIRCLE : 00516 return (new CanvasOval(x, y, 0, 0, mode, 00517 col, true, getZoomFactor())); 00518 case DRAW_OVAL : 00519 return (new CanvasOval(x, y, 0, 0, mode, 00520 col, false, getZoomFactor())); 00521 case DRAW_POLYLINE : 00522 case DRAW_POLYGON : 00523 case DRAW_FREE_OPEN : 00524 case DRAW_FREE_CLOSED : 00525 int[] xs = { x }; 00526 int[] ys = { y }; 00527 return (new CanvasPolyline(xs, ys, 1, mode, 00528 col, false, getZoomFactor())); 00529 case DRAW_ARROW : 00530 return (new CanvasArrow(x, y, 0, 0, mode, 00531 col, false, getZoomFactor())); 00532 case DRAW_STRING : 00533 return (new CanvasString("This is a test", x, y, mode, 00534 col, getZoomFactor())); 00535 default : return null; 00536 } 00537 } |
|
00544 { 00545 if (!isDrawing()) { // Start draw... 00546 ScribbleFigure fig = createDrawFigure(e.getX(), e.getY()); 00547 df = new DrawField(this.getGraphics(), fig); 00548 00549 if (curMode == DRAW_FREE_OPEN || 00550 curMode == DRAW_FREE_CLOSED) { 00551 df.setContinuous(true); 00552 } 00553 df.handleDrawStart(e); 00554 if (DEBUG_EVENTS) 00555 OutputStreamArea.println("DRAW STARTED"); 00556 if (curMode != DRAW_POINT) { 00557 return; 00558 } 00559 00560 } else if (e.isMetaDown()) { // Cancel draw... 00561 df.handleAbort(); 00562 df = null; 00563 if (DEBUG_EVENTS) 00564 OutputStreamArea.println("DRAW CANCELLED"); 00565 return; 00566 00567 } else if (df.getCurFigure().isComplex() && 00568 !e.isAltDown()) { // Continue draw (complex)... 00569 df.handleDrawStart(e); 00570 if (DEBUG_EVENTS) 00571 OutputStreamArea.println("DRAW CONTINUED (COMPLEX OBJECT; POINT ADDED)"); 00572 return; 00573 } 00574 // Finish draw... 00575 df.handleDrawStop(e); 00576 ScribbleFigure newFigure = df.getDrawnFigure(); 00577 df = null; 00578 if (newFigure == null) { 00579 return; 00580 } 00581 newFigure.setDrawMode(CanvasObject.COPY_MODE); 00582 if (newFigure instanceof CanvasPolyline) { 00583 ((CanvasPolyline)newFigure).removeRedundantPoints(); 00584 } 00585 if (curMode == DRAW_POLYGON || curMode == DRAW_FREE_CLOSED) { 00586 ((CanvasPolyline)newFigure).setClosed(true); 00587 } 00588 00589 if (getZoomFactor() == STD_ZOOM) { 00590 newFigure.doPixelFit(getZoomFactor()); 00591 } 00592 00593 addObject(newFigure); 00594 if (DEBUG_EVENTS) 00595 OutputStreamArea.println("DRAW FINISHED"); 00596 if (_editUser != null) 00597 _editUser.objectCreated(this, newFigure, 00598 _repository.getObjectID(newFigure)); 00599 // repaint(); 00600 } |
|
00604 { 00605 int index; 00606 00607 if (popUpHandling) { 00608 if (selIndex < 0) { 00609 return; 00610 } 00611 index = selIndex; 00612 } else if ((index = selector.handleSelection(e)) < 0) { 00613 return; 00614 } 00615 00616 if (popUpHandling) { 00617 int objID = _repository.getObjectID(selLayer, index); 00618 if (_editUser != null) 00619 _editUser.objectDeleted(this, _repository.get(selLayer, index), objID); 00620 removeObject(selLayer, index); 00621 } else { 00622 int objID = _repository.getObjectID(FIGURE_LAYER, index); 00623 if (_editUser != null) 00624 _editUser.objectDeleted(this, _repository.get(FIGURE_LAYER, index), objID); 00625 removeObject(FIGURE_LAYER, index); 00626 } 00627 00628 if (!popUpHandling) { 00629 selector.refill(_repository.getAllObjectsAt(FIGURE_LAYER)); 00630 } else { 00631 curMode = SELECTION; 00632 popUpHandling = false; 00633 unselectObject(); 00634 } 00635 if (DEBUG_EVENTS) 00636 OutputStreamArea.println("DELETE PERFORMED"); 00637 repaint(); 00638 } |
|
00642 { 00643 int point; 00644 00645 if (((oldIndex = selector.handleSelection(e)) < 0) || 00646 ((point = selector.getSelectedPoint()) < 0)) { 00647 return; 00648 } 00649 00650 if (popUpHandling) { 00651 if (selIndex < 0) { 00652 return; 00653 } 00654 oldIndex = selIndex; 00655 } 00656 00657 oldFigure = (ScribbleFigure)getObject(FIGURE_LAYER, oldIndex); 00658 if (!oldFigure.isComplex()) { 00659 return; 00660 } 00661 00662 ScribbleFigure cf = (ScribbleFigure)oldFigure.clone(); 00663 if (!cf.removePoint(point)) { 00664 return; 00665 } 00666 oldObjID = _repository.getObjectID(FIGURE_LAYER, oldIndex); 00667 removeObject(FIGURE_LAYER, oldIndex); 00668 addObject(cf, oldIndex, oldObjID); 00669 if (DEBUG_EVENTS) 00670 OutputStreamArea.println("OBJECT POINT DELETED; id = " + oldObjID + "; point = " + point); 00671 if (_editUser != null) 00672 _editUser.objectReshaped(this, cf, oldObjID, point); 00673 oldFigure = null; 00674 oldIndex = -1; 00675 oldObjID = -1; 00676 00677 if (!popUpHandling) { 00678 selector.refill(_repository.getAllObjectsAt(FIGURE_LAYER)); 00679 } else { 00680 Vector objvec = new Vector(); 00681 objvec.addElement(getObject(selLayer, selIndex)); 00682 selector.refill(objvec); 00683 } 00684 if (DEBUG_EVENTS) 00685 OutputStreamArea.println("DELETE POINT PERFORMED"); 00686 // repaint(); 00687 } |
|
00691 { 00692 if (!isDrawing()) { // Start move or copy... 00693 int index; 00694 00695 if (popUpHandling) { 00696 if (selIndex < 0) { 00697 return; 00698 } 00699 index = selIndex; 00700 } else if ((index = selector.handleSelection(e)) < 0) { 00701 return; 00702 } 00703 00704 oldFigure = (ScribbleFigure)getObject(FIGURE_LAYER, index); 00705 oldIndex = index; 00706 oldObjID = _repository.getObjectID(FIGURE_LAYER, oldIndex); 00707 ScribbleFigure cf = (ScribbleFigure)oldFigure.clone(); 00708 cf.setDrawMode(CanvasObject.XOR_MODE); 00709 if (curMode == FIG_MOVE) { 00710 removeObject(FIGURE_LAYER, index); 00711 } 00712 df = new DrawField(this.getGraphics(), cf); 00713 df.handleFullMoveStart(e); 00714 if (DEBUG_EVENTS) 00715 OutputStreamArea.println("MOVE / COPY STARTED"); 00716 00717 } else { 00718 if (e.isMetaDown()) { // Cancel move or copy (right mouse)... 00719 df.handleAbort(); 00720 if (curMode == FIG_MOVE && oldFigure != null) { 00721 addObject(oldFigure, oldIndex, oldObjID); 00722 } 00723 if (DEBUG_EVENTS) 00724 OutputStreamArea.println("MOVE / COPY CANCELLED"); 00725 00726 } else { // Finish move or copy... 00727 df.handleFullMoveStop(e); 00728 ScribbleFigure newFigure = df.getDrawnFigure(); 00729 if (newFigure != null) { 00730 if (getZoomFactor() == STD_ZOOM) { 00731 newFigure.doPixelFit(getZoomFactor()); 00732 } 00733 newFigure.setDrawMode(ScribbleFigure.COPY_MODE); 00734 if (curMode == FIG_MOVE) { 00735 addObject(newFigure, oldIndex, oldObjID); 00736 if (_editUser != null) 00737 _editUser.objectMoved(this, newFigure, oldObjID); 00738 } else { 00739 addObject(newFigure); 00740 if (_editUser != null) 00741 _editUser.objectCreated(this, newFigure, 00742 _repository.getObjectID(newFigure)); 00743 } 00744 } 00745 if (DEBUG_EVENTS) 00746 OutputStreamArea.println("MOVE / COPY FINISHED"); 00747 } 00748 df = null; 00749 oldFigure = null; 00750 oldIndex = -1; 00751 00752 if (popUpHandling) { 00753 popUpHandling = false; 00754 curMode = SELECTION; 00755 unselectObject(); 00756 } 00757 } 00758 00759 if (inFigureMode(curMode) && !popUpHandling) { 00760 selector.refill(_repository.getAllObjectsAt(FIGURE_LAYER)); 00761 } 00762 // repaint(); 00763 } |
|
00767 { 00768 if (!isDrawing()) { // Start modify... 00769 int index; 00770 00771 if (((index = selector.handleSelection(e)) < 0) || 00772 ((selPoint = selector.getSelectedPoint()) < 0)) { 00773 return; 00774 } 00775 if (popUpHandling) { 00776 if (selIndex < 0) { 00777 return; 00778 } 00779 index = selIndex; 00780 selector = null; 00781 } 00782 00783 ScribbleFigure cf; 00784 oldFigure = (ScribbleFigure)(getObject(FIGURE_LAYER, index)); 00785 oldIndex = index; 00786 oldObjID = _repository.getObjectID(FIGURE_LAYER, oldIndex); 00787 00788 if (oldFigure.isComplex() && curMode == FIG_RESIZE || 00789 oldFigure instanceof CanvasFigureAggregate) { 00790 00791 // use rectangle for aggregate / complex figure resize. 00792 00793 cf = new CanvasRectangle(oldFigure.getX1Ccs(), 00794 oldFigure.getY1Ccs(), oldFigure.getWidthCcs(), 00795 oldFigure.getHeightCcs(), oldFigure.getDrawMode(), 00796 oldFigure.getColor(), 00797 false, getZoomFactor()); 00798 } else { 00799 cf = (ScribbleFigure)oldFigure.clone(); 00800 } 00801 00802 cf.setDrawMode(CanvasObject.XOR_MODE); 00803 removeObject(FIGURE_LAYER, index); 00804 df = new DrawField(this.getGraphics(), cf); 00805 df.handlePointMoveStart(e, selPoint); 00806 if (DEBUG_EVENTS) 00807 OutputStreamArea.println("RESIZE / RESHAPE STARTED"); 00808 00809 } else { 00810 if (e.isMetaDown()) { // Cancel modify (right mouse)... 00811 df.handleAbort(); 00812 if (popUpHandling) { 00813 addObject(oldFigure, oldIndex, oldObjID); 00814 Vector objvec = new Vector(); 00815 objvec.addElement(oldFigure); 00816 if (curMode == FIG_RESIZE) { 00817 selector = new Selector(this.getGraphics(), 00818 objvec, Selector.BOXES); 00819 } else { 00820 selector = new Selector(this.getGraphics(), 00821 objvec, Selector.COMPLEX); 00822 } 00823 } else { 00824 addObject(oldFigure, oldIndex, oldObjID); 00825 } 00826 if (DEBUG_EVENTS) 00827 OutputStreamArea.println("RESIZE / RESHAPE CANCELLED"); 00828 00829 00830 } else { // Finish modify... 00831 df.handlePointMoveStop(e); 00832 ScribbleFigure newFigure = df.getDrawnFigure(); 00833 00834 if (newFigure != null) { 00835 if (oldFigure.isComplex() && curMode == FIG_RESIZE || 00836 oldFigure instanceof CanvasFigureAggregate) { 00837 oldFigure.setPosition(newFigure.getX1Ccs(), newFigure.getY1Ccs()); 00838 oldFigure.setDimension(newFigure.getWidthCcs(), newFigure.getHeightCcs()); 00839 } else { 00840 oldFigure.changePoint(selPoint, e.getX(), e.getY()); 00841 00842 if (oldFigure instanceof CanvasArrow) { 00843 oldFigure.setPosition(newFigure.getStartXCcs(), 00844 newFigure.getStartYCcs()); 00845 } else { 00846 oldFigure.setPosition(newFigure.getX1Ccs(), 00847 newFigure.getY1Ccs()); 00848 } 00849 } 00850 if (getZoomFactor() == STD_ZOOM) { 00851 oldFigure.doPixelFit(getZoomFactor()); 00852 } 00853 00854 if (popUpHandling) { 00855 Vector objvec = new Vector(); 00856 addObject(oldFigure, oldIndex, oldObjID); 00857 objvec.addElement((ScribbleFigure)oldFigure.clone()); 00858 if (curMode == FIG_RESIZE) { 00859 selector = new Selector(this.getGraphics(), 00860 objvec, Selector.BOXES); 00861 if (_editUser != null) 00862 _editUser.objectResized(this,oldFigure, oldObjID); 00863 } else { 00864 selector = new Selector(this.getGraphics(), 00865 objvec, Selector.COMPLEX); 00866 if (_editUser != null) 00867 _editUser.objectReshaped(this, oldFigure, 00868 oldObjID, selPoint); 00869 } 00870 00871 } else { 00872 addObject((ScribbleFigure)oldFigure.clone(), oldIndex, oldObjID); 00873 if (curMode == FIG_RESIZE) { 00874 if (_editUser != null) 00875 _editUser.objectResized(this, 00876 _repository.get(oldObjID), 00877 oldObjID); 00878 } else { 00879 if (_editUser != null) 00880 _editUser.objectReshaped(this, 00881 _repository.get(oldObjID), 00882 oldObjID, 00883 selPoint); 00884 } 00885 } 00886 } 00887 } 00888 df = null; 00889 oldFigure = null; 00890 oldIndex = -1; 00891 if (DEBUG_EVENTS) 00892 OutputStreamArea.println("RESIZE / RESHAPE FINISHED"); 00893 } 00894 00895 if (inFigureMode(curMode) && !popUpHandling) { 00896 selector.refill(_repository.getAllObjectsAt(FIGURE_LAYER)); 00897 } 00898 // repaint(); 00899 } |
|
00906 { 00907 return (df != null); 00908 } |
|
00912 { 00913 switch (mode) { 00914 case DRAW_POINT : 00915 case DRAW_LINE : 00916 case DRAW_SQUARE : 00917 case DRAW_RECTANGLE : 00918 case DRAW_CIRCLE : 00919 case DRAW_OVAL : 00920 case DRAW_POLYLINE : 00921 case DRAW_POLYGON : 00922 case DRAW_FREE_OPEN : 00923 case DRAW_FREE_CLOSED : 00924 case DRAW_ARROW : 00925 case DRAW_STRING : return true; 00926 default : return false; 00927 } 00928 } |
|
00932 { 00933 switch (mode) { 00934 case FIG_DELETE : 00935 case FIG_COPY : 00936 case FIG_MOVE : 00937 case FIG_RESIZE : 00938 case FIG_MOV_POINT : 00939 case FIG_ADD_POINT : 00940 case FIG_DEL_POINT : return true; 00941 default : return false; 00942 } 00943 } |
|
00947 { 00948 switch (mode) { 00949 case FIG_MOV_POINT : 00950 case FIG_ADD_POINT : 00951 case FIG_DEL_POINT : return true; 00952 default : return false; 00953 } 00954 } |
|
|
|
|
|
00981 { 00982 CanvasObject obj = getObject(selLayer, selIndex); 00983 Vector v = obj.getVisualChangeMethods(); 00984 methods = new CallableMethod[v.size()]; 00985 for (int i=0; i<v.size(); i++) { 00986 methods[i] = (CallableMethod) v.get(i); 00987 } 00988 popUpHandling = true; 00989 PopMenu pm = new PopMenu(this); 00990 00991 // Add class-name of Object 00992 00993 String name = obj.getClass().getName(); 00994 int index = name.lastIndexOf('.'); 00995 name = "< " + name.substring(index+1) + " >"; 00996 pm.addLabel(name); 00997 pm.setEnabled(false, name); 00998 pm.addSeparator(); 00999 01000 if (obj.getInputSource() == CanvasObject.INP_USER) { 01001 String[] labels = new String[] { "Copy", "Move", "Resize", 01002 "Move Point", "Delete Point" }; 01003 pm.addLabels(labels); 01004 if (!((ScribbleFigure)obj).isResizeable()) { 01005 pm.setEnabled(false, "Resize"); 01006 } 01007 if (!((ScribbleFigure)obj).isComplex()) { 01008 pm.setEnabled(false, "Move Point"); 01009 pm.setEnabled(false, "Delete Point"); 01010 } 01011 pm.insertSeparator(5); 01012 pm.addSeparator(); 01013 } 01014 01015 JMenu runmenu = new JMenu("Run"); 01016 pm.addMenu(runmenu); 01017 if (methods != null && methods.length > 0) { 01018 for (int i=0; i<methods.length; i++) { 01019 JMenuItem mi = null; 01020 if(methods[i] instanceof CallableProperty) { 01021 CallableProperty prop = (CallableProperty)methods[i]; 01022 if(prop.getArgTypes()[0] == "boolean") { 01023 boolean value = ((Boolean)prop.getPropertyValue()).booleanValue(); 01024 mi = new JCheckBoxMenuItem(prop.getPropertyName(), value); 01025 mi.addActionListener(new JavaFuncAction("", obj, 01026 prop, this, "handleJavaFuncDialogOK", 01027 new Object[] {new Boolean(!value)})); 01028 } 01029 else if(prop.getArgTypes()[0] == "Color") { 01030 JMenu subMenu = new JMenu(prop.getPropertyName()); 01031 mi = subMenu; 01032 for(int cl=0; cl<ExtMenuBar.colors.length; cl++) { 01033 JMenuItem cmi = ExtMenuBar.colorMenuItem(cl); 01034 mi.add(cmi); 01035 cmi.addActionListener(new JavaFuncAction("", obj, 01036 prop, this, "handleJavaFuncDialogOK", 01037 new Object[] { ExtMenuBar.colors[cl] })); 01038 } 01039 } 01040 } 01041 01042 if(mi == null) { 01043 mi = new JMenuItem(methods[i].getMethodName()); 01044 mi.setActionCommand(methods[i].getMethodName()); 01045 mi.addActionListener(this); 01046 } 01047 runmenu.add(mi); 01048 } 01049 } else { 01050 pm.setEnabled(false, "Run"); 01051 } 01052 pm.addSeparator(); 01053 01054 //JMenu saMM = new SaMethodMenu("HxImageRep", this); 01055 //pm.addMenu(saMM); 01056 //pm.addSeparator(); 01057 01058 pm.addLabel("Delete"); 01059 pm.addSeparator(); 01060 pm.addLabel("Cancel"); 01061 pm.show(selX, selY); 01062 } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|