19#include "tool_connector.h"
23#include <kiconloader.h>
24#include <kstandarddirs.h>
26#include <KoZoomHandler.h>
27#include <tdeactionclasses.h>
30#include "kivio_view.h"
31#include "kivio_canvas.h"
32#include "kivio_page.h"
34#include "kivio_factory.h"
36#include "kivio_stencil_spawner_set.h"
37#include "kivio_stencil_spawner.h"
38#include "kivio_custom_drag_data.h"
39#include "kivio_layer.h"
40#include "kivio_point.h"
41#include "kivio_stencil.h"
42#include "sml_connector.h"
44SMLConnector::SMLConnector( KivioView* view )
47 m_connectorAction =
new TDEToggleAction(i18n(
"Polyline Connector"),
"", 0,
48 actionCollection(),
"sml_connector");
49 connect(m_connectorAction, TQ_SIGNAL(toggled(
bool)),
this, TQ_SLOT(setActivated(
bool)));
53 m_pConnectorCursor1 =
new TQCursor(BarIcon(
"kivio_connector_cursor1",KivioFactory::global()),2,2);
54 m_pConnectorCursor2 =
new TQCursor(BarIcon(
"kivio_connector_cursor2",KivioFactory::global()),2,2);
57SMLConnector::~SMLConnector()
59 delete m_pConnectorCursor1;
60 delete m_pConnectorCursor2;
70bool SMLConnector::processEvent( TQEvent* e )
74 case TQEvent::MouseButtonPress:
75 mousePress( (TQMouseEvent*)e );
79 case TQEvent::MouseButtonRelease:
80 mouseRelease( (TQMouseEvent*)e );
84 case TQEvent::MouseMove:
85 mouseMove( (TQMouseEvent*)e );
96void SMLConnector::setActivated(
bool a)
98 m_connectorAction->setChecked(a);
101 kdDebug(43000) <<
"SMLConnector activate" << endl;
102 view()->canvasWidget()->setCursor(*m_pConnectorCursor1);
106 emit activated(
this);
114void SMLConnector::connector(TQRect)
122 KivioDoc* doc = view()->doc();
123 KivioPage* page = view()->activePage();
125 if (m_pStencil->w() < 3.0 && m_pStencil->h() < 3.0) {
126 page->unselectAllStencils();
127 page->selectStencil(m_pStencil);
128 page->deleteSelectedStencils();
130 doc->updateView(page);
134 m_pStencil->searchForConnections(page, view()->zoomHandler()->unzoomItY(4));
135 doc->updateView(page);
138void SMLConnector::mousePress( TQMouseEvent *e )
140 if(e->button() == RightButton)
144 if( startRubberBanding( e ) )
146 m_mode = stmDrawRubber;
154bool SMLConnector::startRubberBanding( TQMouseEvent *e )
156 KivioDoc* doc = view()->doc();
157 KivioPage* pPage = view()->activePage();
158 KivioCanvas* canvas = view()->canvasWidget();
160 startPoint = canvas->snapToGrid(canvas->mapFromScreen( e->pos() ));
163 KivioStencilSpawner* ss = doc->findInternalStencilSpawner(
"SML Connector");
166 kdDebug(43000) <<
"SMLTool: Failed to find StencilSpawner!" << endl;
170 startPoint = canvas->snapToGrid(canvas->mapFromScreen( e->pos() ));
173 m_pStencil = (KivioSMLConnector*)ss->newStencil(
"basic_line");
174 m_pStencil->setTextFont(doc->defaultFont());
177 pPage->unselectAllStencils();
178 pPage->addStencil(m_pStencil);
179 pPage->selectStencil(m_pStencil);
182 m_pDragData =
new KivioCustomDragData();
183 m_pDragData->page = pPage;
184 m_pDragData->x = startPoint.x();
185 m_pDragData->y = startPoint.y();
186 m_pDragData->id = kctCustom + 2;
188 m_pStencil->setStartPoint(startPoint.x() + 10.0f, startPoint.y() + 10.0f);
189 m_pStencil->setEndPoint(startPoint.x(), startPoint.y());
190 m_pStencil->customDrag(m_pDragData);
194 canvas->setCursor(*m_pConnectorCursor2);
198void SMLConnector::mouseMove( TQMouseEvent * e )
203 continueRubberBanding(e);
211void SMLConnector::continueRubberBanding( TQMouseEvent *e )
213 KivioCanvas* canvas = view()->canvasWidget();
214 KoPoint endPoint = canvas->mapFromScreen( e->pos() );
215 endPoint = canvas->snapToGrid(endPoint);
217 m_pStencil->setStartPoint(endPoint.x(), endPoint.y());
220 m_pDragData->x = endPoint.x();
221 m_pDragData->y = endPoint.y();
222 m_pDragData->id = kctCustom + 1;
223 m_pStencil->customDrag(m_pDragData);
225 m_pStencil->updateGeometry();
229void SMLConnector::mouseRelease( TQMouseEvent *e )
238 view()->canvasWidget()->setCursor(*m_pConnectorCursor1);
242void SMLConnector::endRubberBanding(TQMouseEvent *)
244 connector(view()->canvasWidget()->rect());
248#include "tool_connector.moc"