1 /* Dia -- an diagram creation/manipulation program 2 * Copyright (C) 1998 Alexander Larsson 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License as published by 6 * the Free Software Foundation; either version 2 of the License, or 7 * (at your option) any later version. 8 * 9 * This program is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this program; if not, write to the Free Software 16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 */ 18 19 /*! \file handle.h - describing the different behavious of handles, used e.g. to resize objects */ 20 #ifndef HANDLE_H 21 #define HANDLE_H 22 23 #include "diatypes.h" 24 #include "geometry.h" 25 26 /*! Some object resizing depends on the placement of the handle */ 27 typedef enum { 28 HANDLE_RESIZE_NW, /*!< north/west or top/left */ 29 HANDLE_RESIZE_N, /*!< north or top */ 30 HANDLE_RESIZE_NE, /*!< north/east or top/right */ 31 HANDLE_RESIZE_W, /*!< west or left */ 32 HANDLE_RESIZE_E, /*!< east or right */ 33 HANDLE_RESIZE_SW, /*!< south/west or bottom/left */ 34 HANDLE_RESIZE_S, /*!< south or bottom */ 35 HANDLE_RESIZE_SE, /*!< south/east or bottom/right */ 36 HANDLE_MOVE_STARTPOINT, /*!< for lines: the beginning */ 37 HANDLE_MOVE_ENDPOINT, /*!< for lines: the ending */ 38 39 /*! These handles can be used privately by objects: */ 40 HANDLE_CUSTOM1=200, 41 HANDLE_CUSTOM2, 42 HANDLE_CUSTOM3, 43 HANDLE_CUSTOM4, 44 HANDLE_CUSTOM5, 45 HANDLE_CUSTOM6, 46 HANDLE_CUSTOM7, 47 HANDLE_CUSTOM8, 48 HANDLE_CUSTOM9 49 } HandleId; 50 51 /*! HandleType is used for color coding the different handles */ 52 typedef enum { 53 HANDLE_NON_MOVABLE, 54 HANDLE_MAJOR_CONTROL, 55 HANDLE_MINOR_CONTROL, 56 57 NUM_HANDLE_TYPES /* Must be last */ 58 } HandleType; 59 60 /*! When an objects move_handle() function is called this is passed in */ 61 typedef enum { 62 HANDLE_MOVE_USER, 63 HANDLE_MOVE_USER_FINAL, 64 HANDLE_MOVE_CONNECTED, 65 HANDLE_MOVE_CREATE, /*!< the initial drag during object placement */ 66 HANDLE_MOVE_CREATE_FINAL /*!< finish of initial drag */ 67 } HandleMoveReason; 68 69 /*! If the handle is connectable or not */ 70 typedef enum { 71 HANDLE_NONCONNECTABLE, /*!< not connectable */ 72 HANDLE_CONNECTABLE, /*!< connectable */ 73 HANDLE_CONNECTABLE_NOBREAK /*!< (unused) Don't break connection on object move */ 74 } HandleConnectType; 75 76 /*! 77 * \brief A handle is used to resize objects or to connet to them. 78 */ 79 struct _Handle { 80 HandleId id; /*!< gives (mostly) the placement relative to the object */ 81 HandleType type; /*!< color coding */ 82 Point pos; /*! where the handle currently is in diagram coordinates */ 83 84 HandleConnectType connect_type; /*!< how to connect if at all */ 85 ConnectionPoint *connected_to; /*!< NULL if not connected */ 86 }; 87 88 89 #endif /* HANDLE_H */ 90