#ifdef __GNUG__
#pragma implementation "lines.h"
+#pragma implementation "linesp.h"
#endif
// For compilers that support precompilation, includes "wx.h".
#include <wx/wx.h>
#endif
-#ifdef PROLOGIO
#include <wx/wxexpr.h>
-#endif
-#if USE_IOSTREAMH
+#if wxUSE_IOSTREAMH
#include <iostream.h>
#else
#include <iostream>
newRegion = new wxShapeRegion;
newRegion->SetName("Start");
newRegion->SetSize(150, 50);
- m_regions.Append((wxObject *)newRegion);
+ m_regions.Append((wxObject *)newRegion);
newRegion = new wxShapeRegion;
newRegion->SetName("End");
wxNode *node = m_regions.Nth(i);
if (!node)
return;
-
+
wxShapeRegion *region = (wxShapeRegion *)node->Data();
region->SetText(s);
- dc.SetFont(region->GetFont());
+ dc.SetFont(* region->GetFont());
region->GetSize(&w, &h);
// Initialize the size if zero
w = 100; h = 50;
region->SetSize(w, h);
}
-
+
wxStringList *string_list = oglFormatText(dc, s, (w-5), (h-5), region->GetFormatMode());
node = string_list->First();
while (node)
// First, clear a rectangle for the text IF there is any
if (region->GetFormattedText().Number() > 0)
{
- dc.SetPen(g_oglWhiteBackgroundPen);
- dc.SetBrush(g_oglWhiteBackgroundBrush);
+ dc.SetPen(* g_oglWhiteBackgroundPen);
+ dc.SetBrush(* g_oglWhiteBackgroundBrush);
// Now draw the text
- if (region->GetFont()) dc.SetFont(region->GetFont());
+ if (region->GetFont()) dc.SetFont(* region->GetFont());
- dc.DrawRectangle((double)(xp - w/2.0), (double)(yp - h/2.0), (double)w, (double)h);
+ dc.DrawRectangle((long)(xp - w/2.0), (long)(yp - h/2.0), (long)w, (long)h);
- if (m_pen) dc.SetPen(m_pen);
+ if (m_pen) dc.SetPen(* m_pen);
dc.SetTextForeground(* region->GetActualColourObject());
#ifdef __WXMSW__
if (region->GetFormattedText().Number() > 0)
{
- dc.SetPen(g_oglWhiteBackgroundPen);
- dc.SetBrush(g_oglWhiteBackgroundBrush);
+ dc.SetPen(* g_oglWhiteBackgroundPen);
+ dc.SetBrush(* g_oglWhiteBackgroundBrush);
- dc.DrawRectangle((double)(xp - w/2.0), (double)(yp - h/2.0), (double)w, (double)h);
+ dc.DrawRectangle((long)(xp - w/2.0), (long)(yp - h/2.0), (long)w, (long)h);
}
}
first_point->y = y1;
last_point->x = x2;
last_point->y = y2;
-
+
m_xpos = (double)((x1 + x2)/2.0);
m_ypos = (double)((y1 + y2)/2.0);
}
deltaX = x4 - positionOnLineX;
deltaY = y4 - positionOnLineY;
}
-
+
switch (arrow->_GetType())
{
case ARROW_ARROW:
&side1_x, &side1_y, &side2_x, &side2_y);
wxPoint points[4];
- points[0].x = tip_x; points[0].y = tip_y;
- points[1].x = side1_x; points[1].y = side1_y;
- points[2].x = side2_x; points[2].y = side2_y;
- points[3].x = tip_x; points[3].y = tip_y;
+ points[0].x = (int) tip_x; points[0].y = (int) tip_y;
+ points[1].x = (int) side1_x; points[1].y = (int) side1_y;
+ points[2].x = (int) side2_x; points[2].y = (int) side2_y;
+ points[3].x = (int) tip_x; points[3].y = (int) tip_y;
- dc.SetPen(m_pen);
- dc.SetBrush(m_brush);
+ dc.SetPen(* m_pen);
+ dc.SetBrush(* m_brush);
dc.DrawPolygon(4, points);
break;
}
double x1 = (double)(x - (diameter/2.0));
double y1 = (double)(y - (diameter/2.0));
- dc.SetPen(m_pen);
+ dc.SetPen(* m_pen);
if (arrow->_GetType() == ARROW_HOLLOW_CIRCLE)
- dc.SetBrush(g_oglWhiteBackgroundBrush);
+ dc.SetBrush(* g_oglWhiteBackgroundBrush);
else
- dc.SetBrush(m_brush);
+ dc.SetBrush(* m_brush);
- dc.DrawEllipse(x1, y1, diameter, diameter);
+ dc.DrawEllipse((long) x1, (long) y1, (long) diameter, (long) diameter);
break;
}
case ARROW_SINGLE_OBLIQUE:
| /
| /
| /theta
- | /(x1, y1)
+ | /(x1, y1)
|______________________
*/
double theta = 0.0;
arrow->GetMetaFile()->GetBounds(&minX, &minY, &maxX, &maxY);
// Make erasing rectangle slightly bigger or you get droppings.
int extraPixels = 4;
- dc.DrawRectangle((double)(deltaX + x + minX - (extraPixels/2.0)), (double)(deltaY + y + minY - (extraPixels/2.0)),
- (double)(maxX - minX + extraPixels), (double)(maxY - minY + extraPixels));
+ dc.DrawRectangle((long)(deltaX + x + minX - (extraPixels/2.0)), (long)(deltaY + y + minY - (extraPixels/2.0)),
+ (long)(maxX - minX + extraPixels), (long)(maxY - minY + extraPixels));
}
else
arrow->GetMetaFile()->Draw(dc, x+deltaX, y+deltaY);
double bound_x, bound_y;
GetBoundingBoxMax(&bound_x, &bound_y);
- if (m_font) dc.SetFont(m_font);
+ if (m_font) dc.SetFont(* m_font);
// Undraw text regions
for (int i = 0; i < 3; i++)
}
// Undraw line
- dc.SetPen(g_oglWhiteBackgroundPen);
- dc.SetBrush(g_oglWhiteBackgroundBrush);
+ dc.SetPen(* g_oglWhiteBackgroundPen);
+ dc.SetBrush(* g_oglWhiteBackgroundBrush);
// Drawing over the line only seems to work if the line has a thickness
// of 1.
if (old_pen && (old_pen->GetWidth() > 1))
{
- dc.DrawRectangle((double)(m_xpos - (bound_x/2.0) - 2.0), (double)(m_ypos - (bound_y/2.0) - 2.0),
- (double)(bound_x+4.0), (double)(bound_y+4.0));
+ dc.DrawRectangle((long)(m_xpos - (bound_x/2.0) - 2.0), (long)(m_ypos - (bound_y/2.0) - 2.0),
+ (long)(bound_x+4.0), (long)(bound_y+4.0));
}
else
{
{
xr = 0.0; yr = 0.0;
}
-
+
m_labelObjects[i]->Move(dc, xp+xr, yp+yr);
}
}
{
if (!m_from || !m_to)
return;
-
+
if (m_lineControlPoints->Number() > 2)
Initialise();
double other_end_x, other_end_y;
FindLineEndPoints(&end_x, &end_y, &other_end_x, &other_end_y);
-
+
wxNode *first = m_lineControlPoints->First();
wxRealPoint *first_point = (wxRealPoint *)first->Data();
wxNode *last = m_lineControlPoints->Last();
// if (moveControlPoints && m_lineControlPoints && !(x_offset == 0.0 && y_offset == 0.0))
// Only move control points if it's a self link. And only works if attachment mode is ON.
- if ((m_from == m_to) && m_from->GetAttachmentMode() && moveControlPoints && m_lineControlPoints && !(x_offset == 0.0 && y_offset == 0.0))
+ if ((m_from == m_to) && (m_from->GetAttachmentMode() != ATTACHMENT_MODE_NONE) && moveControlPoints && m_lineControlPoints && !(x_offset == 0.0 && y_offset == 0.0))
{
wxNode *node = m_lineControlPoints->First();
while (node)
{
if (!m_from || !m_to)
return;
-
+
// Do each end - nothing in the middle. User has to move other points
// manually if necessary.
double end_x, end_y;
if (m_lineControlPoints->Number() > 2)
{
- if (m_from->GetAttachmentMode())
+ if (m_from->GetAttachmentMode() != ATTACHMENT_MODE_NONE)
{
int nth, no_arcs;
FindNth(m_from, &nth, &no_arcs, FALSE); // Not incoming
(double)second_point->x, (double)second_point->y,
&end_x, &end_y);
- if (m_to->GetAttachmentMode())
+ if (m_to->GetAttachmentMode() != ATTACHMENT_MODE_NONE)
{
int nth, no_arcs;
FindNth(m_to, &nth, &no_arcs, TRUE); // Incoming
double toX = m_to->GetX();
double toY = m_to->GetY();
- if (m_from->GetAttachmentMode())
+ if (m_from->GetAttachmentMode() != ATTACHMENT_MODE_NONE)
{
int nth, no_arcs;
FindNth(m_from, &nth, &no_arcs, FALSE);
fromY = end_y;
}
- if (m_to->GetAttachmentMode())
+ if (m_to->GetAttachmentMode() != ATTACHMENT_MODE_NONE)
{
int nth, no_arcs;
FindNth(m_to, &nth, &no_arcs, TRUE);
toY = other_end_y;
}
- if (!m_from->GetAttachmentMode())
+ if (m_from->GetAttachmentMode() == ATTACHMENT_MODE_NONE)
(void) m_from->GetPerimeterPoint(m_from->GetX(), m_from->GetY(),
toX, toY,
&end_x, &end_y);
- if (!m_to->GetAttachmentMode())
+ if (m_to->GetAttachmentMode() == ATTACHMENT_MODE_NONE)
(void) m_to->GetPerimeterPoint(m_to->GetX(), m_to->GetY(),
fromX, fromY,
&other_end_x, &other_end_y);
if (m_lineControlPoints)
{
if (m_pen)
- dc.SetPen(m_pen);
+ dc.SetPen(* m_pen);
if (m_brush)
- dc.SetBrush(m_brush);
+ dc.SetBrush(* m_brush);
int n = m_lineControlPoints->Number();
wxPoint *points = new wxPoint[n];
wxPen *solid_pen =
wxThePenList->FindOrCreatePen(m_pen->GetColour(), 1, wxSOLID);
if (solid_pen)
- dc.SetPen(solid_pen);
+ dc.SetPen(* solid_pen);
}
DrawArrows(dc);
}
{
if (!m_drawHandles)
return;
-
+
// Draw temporary label rectangles if necessary
for (int i = 0; i < 3; i++)
{
wxRealPoint *first_point = (wxRealPoint *)first->Data();
wxRealPoint *last_point = (wxRealPoint *)last->Data();
- wxLineControlPoint *control = new wxLineControlPoint(m_canvas, this, CONTROL_POINT_SIZE,
+ wxLineControlPoint *control = new wxLineControlPoint(m_canvas, this, CONTROL_POINT_SIZE,
first_point->x, first_point->y,
CONTROL_POINT_ENDPOINT_FROM);
control->m_point = first_point;
{
wxRealPoint *point = (wxRealPoint *)node->Data();
- control = new wxLineControlPoint(m_canvas, this, CONTROL_POINT_SIZE,
+ control = new wxLineControlPoint(m_canvas, this, CONTROL_POINT_SIZE,
point->x, point->y,
CONTROL_POINT_LINE);
control->m_point = point;
node = node->Next();
}
- control = new wxLineControlPoint(m_canvas, this, CONTROL_POINT_SIZE,
+ control = new wxLineControlPoint(m_canvas, this, CONTROL_POINT_SIZE,
last_point->x, last_point->y,
CONTROL_POINT_ENDPOINT_TO);
control->m_point = last_point;
clause->AddAttributeValue("keep_lines_straight", (long)m_maintainStraightLines);
// Make a list of lists for the (sp)line controls
- wxExpr *list = new wxExpr(PrologList);
+ wxExpr *list = new wxExpr(wxExprList);
wxNode *node = m_lineControlPoints->First();
while (node)
{
wxRealPoint *point = (wxRealPoint *)node->Data();
- wxExpr *point_list = new wxExpr(PrologList);
+ wxExpr *point_list = new wxExpr(wxExprList);
wxExpr *x_expr = new wxExpr((double) point->x);
wxExpr *y_expr = new wxExpr((double) point->y);
point_list->Append(x_expr);
// (arrowType arrowEnd xOffset arrowSize)
if (m_arcArrows.Number() > 0)
{
- wxExpr *arrow_list = new wxExpr(PrologList);
+ wxExpr *arrow_list = new wxExpr(wxExprList);
node = m_arcArrows.First();
while (node)
{
wxArrowHead *head = (wxArrowHead *)node->Data();
- wxExpr *head_list = new wxExpr(PrologList);
+ wxExpr *head_list = new wxExpr(wxExprList);
head_list->Append(new wxExpr((long)head->_GetType()));
head_list->Append(new wxExpr((long)head->GetArrowEnd()));
head_list->Append(new wxExpr(head->GetXOffset()));
head_list->Append(new wxExpr(head->GetArrowSize()));
- head_list->Append(new wxExpr(PrologString, (head->GetName() ? head->GetName() : "")));
+ head_list->Append(new wxExpr(wxExprString, head->GetName()));
head_list->Append(new wxExpr(head->GetId()));
// New members of wxArrowHead
node = next;
}
}
-
+
newRegion = new wxShapeRegion;
newRegion->SetName("Start");
newRegion->SetSize(150, 50);
- m_regions.Append((wxObject *)newRegion);
+ m_regions.Append((wxObject *)newRegion);
newRegion = new wxShapeRegion;
newRegion->SetName("End");
double arrowSize = 0.0;
wxString arrowName("");
long arrowId = -1;
-
+
wxExpr *type_expr = node->Nth(0);
wxExpr *end_expr = node->Nth(1);
wxExpr *dist_expr = node->Nth(2);
{
m_shape->GetEventHandler()->OnSizingBeginDragLeft(this, x, y, keys, attachment);
}
-
+
void wxLineControlPoint::OnEndDragLeft(double x, double y, int keys, int attachment)
{
m_shape->GetEventHandler()->OnSizingEndDragLeft(this, x, y, keys, attachment);
wxClientDC dc(GetCanvas());
GetCanvas()->PrepareDC(dc);
- dc.SetLogicalFunction(wxXOR);
+ dc.SetLogicalFunction(OGLRBLF);
wxPen dottedPen(wxColour(0, 0, 0), 1, wxDOT);
dc.SetPen(dottedPen);
lineShape->GetTo()->OnDrawContents(dc);
this->SetDisableLabel(TRUE);
- dc.SetLogicalFunction(wxXOR);
+ dc.SetLogicalFunction(OGLRBLF);
lpt->m_xpos = x; lpt->m_ypos = y;
lpt->m_point->x = x; lpt->m_point->y = y;
if (lpt->m_type == CONTROL_POINT_ENDPOINT_FROM || lpt->m_type == CONTROL_POINT_ENDPOINT_TO)
{
- m_canvas->SetCursor(g_oglBullseyeCursor);
+ m_canvas->SetCursor(* g_oglBullseyeCursor);
lpt->m_oldCursor = wxSTANDARD_CURSOR;
}
}
if (lpt->m_type == CONTROL_POINT_ENDPOINT_FROM)
{
if (lpt->m_oldCursor)
- m_canvas->SetCursor(lpt->m_oldCursor);
+ m_canvas->SetCursor(* lpt->m_oldCursor);
// this->Erase(dc);
if (lpt->m_type == CONTROL_POINT_ENDPOINT_TO)
{
if (lpt->m_oldCursor)
- m_canvas->SetCursor(lpt->m_oldCursor);
+ m_canvas->SetCursor(* lpt->m_oldCursor);
// lpt->m_xpos = x; lpt->m_ypos = y;
m_oldCursor = wxSTANDARD_CURSOR;
}
}
-
+
void wxLineControlPoint::OnEndDragRight(double x, double y, int keys, int attachment)
{
wxClientDC dc(GetCanvas());
* Finds an arrowhead at the given position (if -1, any position)
*
*/
-
+
wxArrowHead *wxLineShape::FindArrowHead(int position, const wxString& name)
{
wxNode *node = m_arcArrows.First();
* Deletes an arrowhead at the given position (if -1, any position)
*
*/
-
+
bool wxLineShape::DeleteArrowHead(int position, const wxString& name)
{
wxNode *node = m_arcArrows.First();
{
double startX, startY, endX, endY;
GetEnds(&startX, &startY, &endX, &endY);
-
+
// Find distances from centre, start and end. The smallest wins.
double centreDistance = (double)(sqrt((x - m_xpos)*(x - m_xpos) + (y - m_ypos)*(y - m_ypos)));
double startDistance = (double)(sqrt((x - startX)*(x - startX) + (y - startY)*(y - startY)));
m_metaFile = NULL;
m_id = NewId();
}
-
+
wxArrowHead::~wxArrowHead()
{
if (m_metaFile) delete m_metaFile;
double oldWidth = m_metaFile->m_width;
if (oldWidth == 0.0)
return;
-
+
double scale = (double)(size/oldWidth);
if (scale != 1.0)
m_metaFile->Scale(scale, scale);
{
if (m_lineShape && !m_lineShape->GetDrawHandles())
return;
-
+
double x1 = (double)(m_xpos - m_width/2.0);
double y1 = (double)(m_ypos - m_height/2.0);
if (m_pen)
{
if (m_pen->GetWidth() == 0)
- dc.SetPen(g_oglTransparentPen);
+ dc.SetPen(* g_oglTransparentPen);
else
- dc.SetPen(m_pen);
+ dc.SetPen(* m_pen);
}
- dc.SetBrush(wxTRANSPARENT_BRUSH);
+ dc.SetBrush(* wxTRANSPARENT_BRUSH);
if (m_cornerRadius > 0.0)
dc.DrawRoundedRectangle(WXROUND(x1), WXROUND(y1), WXROUND(m_width), WXROUND(m_height), m_cornerRadius);