1/* 2 * Copyright (c) 1999-2000, Eric Moon. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions, and the following disclaimer. 11 * 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions, and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * 3. The name of the author may not be used to endorse or promote products 17 * derived from this software without specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR 20 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 21 * OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 23 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 26 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 27 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 31 32// DiagramItem.cpp 33 34#include "DiagramItem.h" 35#include "DiagramView.h" 36 37__USE_CORTEX_NAMESPACE 38 39#include <Debug.h> 40#define D_METHOD(x) //PRINT(x) 41 42// -------------------------------------------------------- // 43// *** static member initialization 44// -------------------------------------------------------- // 45 46bigtime_t DiagramItem::m_lastSelectionTime = 0; 47int32 DiagramItem::m_countSelected = 0; 48 49// -------------------------------------------------------- // 50// *** ctor/dtor (public) 51// -------------------------------------------------------- // 52 53DiagramItem::DiagramItem( 54 uint32 itemType) 55 : m_type(itemType), 56 m_view(0), 57 m_group(0), 58 m_draggable(false), 59 m_selectable(true), 60 m_selected(false), 61 m_selectionTime(system_time()) 62{ 63 D_METHOD(("DiagramItem::DiagramItem()\n")); 64} 65 66DiagramItem::~DiagramItem() 67{ 68 D_METHOD(("DiagramItem::~DiagramItem()\n")); 69} 70 71// -------------------------------------------------------- // 72// *** operations (public) 73// -------------------------------------------------------- // 74 75void DiagramItem::select() 76{ 77 D_METHOD(("DiagramItem::select()\n")); 78 if (!m_selected) 79 { 80 m_selected = true; 81 m_lastSelectionTime = m_selectionTime = system_time(); 82 m_countSelected = 1; 83 selected(); 84 view()->Invalidate(Frame()); 85 } 86} 87 88void DiagramItem::selectAdding() 89{ 90 D_METHOD(("DiagramItem::selectAdding()\n")); 91 if (!m_selected) 92 { 93 m_selected = true; 94 m_selectionTime = m_lastSelectionTime - m_countSelected++; 95 selected(); 96 view()->Invalidate(Frame()); 97 } 98} 99 100void DiagramItem::deselect() 101{ 102 D_METHOD(("DiagramItem::deselect()\n")); 103 if (m_selected) 104 { 105 m_selected = false; 106 deselected(); 107 view()->Invalidate(Frame()); 108 } 109} 110 111// -------------------------------------------------------- // 112// *** hook functions (public) 113// -------------------------------------------------------- // 114 115float DiagramItem::howCloseTo( 116 BPoint point) const 117{ 118 D_METHOD(("DiagramItem::howCloseTo()\n")); 119 if (Frame().Contains(point)) 120 { 121 return 1.0; 122 } 123 return 0.0; 124} 125 126// -------------------------------------------------------- // 127// *** compare functions (friend) 128// -------------------------------------------------------- // 129 130int __CORTEX_NAMESPACE__ compareSelectionTime( 131 const void *lValue, 132 const void *rValue) 133{ 134 D_METHOD(("compareSelectionTime()\n")); 135 int returnValue = 0; 136 const DiagramItem *lItem = *(reinterpret_cast<const DiagramItem* const*>(reinterpret_cast<const void* const*>(lValue))); 137 const DiagramItem *rItem = *(reinterpret_cast<const DiagramItem* const*>(reinterpret_cast<const void* const*>(rValue))); 138 if (lItem->m_selectionTime < rItem->m_selectionTime) 139 { 140 returnValue = 1; 141 } 142 else if (lItem->m_selectionTime > rItem->m_selectionTime) 143 { 144 returnValue = -1; 145 } 146 return returnValue; 147} 148 149// END -- DiagramItem.cpp -- 150