// Created: 12/07/98
// RCS-ID: $Id$
// Copyright: (c) Julian Smart
-// Licence: wxWindows licence
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-#ifdef __GNUG__
-#pragma implementation "basic.h"
-#endif
-
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#endif
#ifndef WX_PRECOMP
-#include <wx/wx.h>
+#include "wx/wx.h"
#endif
#if wxUSE_PROLOGIO
-#include <wx/deprecated/wxexpr.h>
+#include "wx/deprecated/wxexpr.h"
#endif
#ifdef new
#include <stdio.h>
#include <ctype.h>
-#include <math.h>
#include "wx/ogl/ogl.h"
if (m_previousHandler)
return m_previousHandler->OnMovePre(dc, x, y, old_x, old_y, display);
else
- return TRUE;
+ return true;
}
void wxShapeEvtHandler::OnMovePost(wxDC& dc, double x, double y, double old_x, double old_y, bool display)
m_eventHandler = this;
SetShape(this);
m_id = 0;
- m_formatted = FALSE;
+ m_formatted = false;
m_canvas = can;
m_xpos = 0.0; m_ypos = 0.0;
m_pen = g_oglBlackPen;
m_font = g_oglNormalFont;
m_textColour = wxT("BLACK");
m_textColourName = wxT("BLACK");
- m_visible = FALSE;
- m_selected = FALSE;
+ m_visible = false;
+ m_selected = false;
m_attachmentMode = ATTACHMENT_MODE_NONE;
- m_spaceAttachments = TRUE;
- m_disableLabel = FALSE;
- m_fixedWidth = FALSE;
- m_fixedHeight = FALSE;
- m_drawHandles = TRUE;
+ m_spaceAttachments = true;
+ m_disableLabel = false;
+ m_fixedWidth = false;
+ m_fixedHeight = false;
+ m_drawHandles = true;
m_sensitivity = OP_ALL;
- m_draggable = TRUE;
+ m_draggable = true;
m_parent = NULL;
m_formatMode = FORMAT_CENTRE_HORIZ | FORMAT_CENTRE_VERT;
m_shadowMode = SHADOW_NONE;
m_textMarginX = 5;
m_textMarginY = 5;
m_regionName = wxT("0");
- m_centreResize = TRUE;
- m_maintainAspectRatio = FALSE;
- m_highlighted = FALSE;
+ m_centreResize = true;
+ m_maintainAspectRatio = false;
+ m_highlighted = false;
m_rotation = 0.0;
m_branchNeckLength = 10;
m_branchStemLength = 10;
void wxShape::SetSensitivityFilter(int sens, bool recursive)
{
if (sens & OP_DRAG_LEFT)
- m_draggable = TRUE;
+ m_draggable = true;
else
- m_draggable = FALSE;
+ m_draggable = false;
m_sensitivity = sens;
if (recursive)
while (node)
{
wxShape *obj = (wxShape *)node->GetData();
- obj->SetSensitivityFilter(sens, TRUE);
+ obj->SetSensitivityFilter(sens, true);
node = node->GetNext();
}
}
while (node)
{
wxShape *obj = (wxShape *)node->GetData();
- obj->SetDraggable(drag, TRUE);
+ obj->SetDraggable(drag, true);
node = node->GetNext();
}
}
void wxShape::RemoveFromCanvas(wxShapeCanvas *theCanvas)
{
if (Selected())
- Select(FALSE);
+ Select(false);
theCanvas->RemoveShape(this);
wxNode *node = m_children.GetFirst();
while (node)
{
if (regionId == 0)
{
- m_text.DeleteContents(TRUE);
+ m_text.DeleteContents(true);
m_text.Clear();
- m_text.DeleteContents(FALSE);
+ m_text.DeleteContents(false);
}
wxNode *node = m_regions.Item(regionId);
if (!node)
bool wxShape::HitTest(double x, double y, int *attachment, double *distance)
{
// if (!sensitive)
-// return FALSE;
+// return false;
double width = 0.0, height = 0.0;
GetBoundingBoxMin(&width, &height);
}
*attachment = nearest_attachment;
*distance = nearest;
- return TRUE;
+ return true;
}
- else return FALSE;
+ else return false;
}
// Format a text string according to the region size, adding
// strings with positions to region text list
-static bool GraphicsInSizeToContents = FALSE; // Infinite recursion elimination
+static bool GraphicsInSizeToContents = false; // Infinite recursion elimination
void wxShape::FormatText(wxDC& dc, const wxString& s, int i)
{
double w, h;
region->GetSize(&w, &h);
- wxStringList *stringList = oglFormatText(dc, s, (w-5), (h-5), region->GetFormatMode());
+ wxStringList *stringList = oglFormatText(dc, s, (w-2*m_textMarginX), (h-2*m_textMarginY), region->GetFormatMode());
node = (wxNode*)stringList->GetFirst();
while (node)
{
(m_regions.GetCount() == 1) && !GraphicsInSizeToContents)
{
oglGetCentredTextExtent(dc, &(region->GetFormattedText()), m_xpos, m_ypos, w, h, &actualW, &actualH);
- if ((actualW+m_textMarginX != w ) || (actualH+m_textMarginY != h))
+ if ((actualW+2*m_textMarginX != w ) || (actualH+2*m_textMarginY != h))
{
// If we are a descendant of a composite, must make sure the composite gets
// resized properly
if (topAncestor != this)
{
// Make sure we don't recurse infinitely
- GraphicsInSizeToContents = TRUE;
+ GraphicsInSizeToContents = true;
wxCompositeShape *composite = (wxCompositeShape *)topAncestor;
composite->Erase(dc);
- SetSize(actualW+m_textMarginX, actualH+m_textMarginY);
+ SetSize(actualW+2*m_textMarginX, actualH+2*m_textMarginY);
Move(dc, m_xpos, m_ypos);
composite->CalculateSize();
if (composite->Selected())
// Where infinite recursion might happen if we didn't stop it
composite->Draw(dc);
- GraphicsInSizeToContents = FALSE;
+ GraphicsInSizeToContents = false;
}
else
{
Erase(dc);
- SetSize(actualW+m_textMarginX, actualH+m_textMarginY);
+ SetSize(actualW+2*m_textMarginX, actualH+2*m_textMarginY);
Move(dc, m_xpos, m_ypos);
}
- SetSize(actualW+m_textMarginX, actualH+m_textMarginY);
+ SetSize(actualW+2*m_textMarginX, actualH+2*m_textMarginY);
Move(dc, m_xpos, m_ypos);
EraseContents(dc);
}
}
- oglCentreText(dc, &(region->GetFormattedText()), m_xpos, m_ypos, actualW, actualH, region->GetFormatMode());
- m_formatted = TRUE;
+ oglCentreText(dc, &(region->GetFormattedText()), m_xpos, m_ypos, actualW-2*m_textMarginX, actualH-2*m_textMarginY, region->GetFormatMode());
+ m_formatted = true;
}
void wxShape::Recentre(wxDC& dc)
if (node)
{
wxShapeRegion *region = (wxShapeRegion *)node->GetData();
- oglCentreText(dc, &(region->GetFormattedText()), m_xpos, m_ypos, w, h, region->GetFormatMode());
+ oglCentreText(dc, &(region->GetFormattedText()), m_xpos, m_ypos, w-2*m_textMarginX, h-2*m_textMarginY, region->GetFormatMode());
}
}
}
double WXUNUSED(x2), double WXUNUSED(y2),
double *WXUNUSED(x3), double *WXUNUSED(y3))
{
- return FALSE;
+ return false;
}
void wxShape::SetPen(wxPen *the_pen)
dc.SetBackgroundMode(wxTRANSPARENT);
if (!m_formatted)
{
- oglCentreText(dc, &(region->GetFormattedText()), m_xpos, m_ypos, bound_x, bound_y, region->GetFormatMode());
- m_formatted = TRUE;
+ oglCentreText(dc, &(region->GetFormattedText()), m_xpos, m_ypos, bound_x-2*m_textMarginX, bound_y-2*m_textMarginY, region->GetFormatMode());
+ m_formatted = true;
}
if (!GetDisableLabel())
{
- oglDrawFormattedText(dc, &(region->GetFormattedText()), m_xpos, m_ypos, bound_x, bound_y, region->GetFormatMode());
+ oglDrawFormattedText(dc, &(region->GetFormattedText()), m_xpos, m_ypos, bound_x-2*m_textMarginX, bound_y-2*m_textMarginY, region->GetFormatMode());
}
}
bool wxShape::OnMovePre(wxDC& WXUNUSED(dc), double WXUNUSED(x), double WXUNUSED(y), double WXUNUSED(old_x), double WXUNUSED(old_y), bool WXUNUSED(display))
{
- return TRUE;
+ return true;
}
void wxShape::OnMovePost(wxDC& WXUNUSED(dc), double WXUNUSED(x), double WXUNUSED(y), double WXUNUSED(old_x), double WXUNUSED(old_y), bool WXUNUSED(display))
}
}
-// Returns TRUE if pt1 <= pt2 in the sense that one point comes before another on an
+// Returns true if pt1 <= pt2 in the sense that one point comes before another on an
// edge of the shape.
// attachmentPoint is the attachment point (= side) in question.
}
}
- return FALSE;
+ return false;
}
bool wxShape::MoveLineToNewAttachment(wxDC& dc, wxLineShape *to_move,
double x, double y)
{
if (GetAttachmentMode() == ATTACHMENT_MODE_NONE)
- return FALSE;
+ return false;
int newAttachment, oldAttachment;
double distance;
// the user has moved the point to
bool hit = HitTest(x, y, &newAttachment, &distance);
if (!hit)
- return FALSE;
+ return false;
EraseLinks(dc);
double old_y = (double) -99999.9;
node = newOrdering.GetFirst();
- bool found = FALSE;
+ bool found = false;
while (!found && node)
{
if (AttachmentSortTest(newAttachment, newPoint, thisPoint) && AttachmentSortTest(newAttachment, lastPoint, newPoint))
{
- found = TRUE;
+ found = true;
newOrdering.Insert(node, to_move);
}
GetEventHandler()->OnChangeAttachment(newAttachment, to_move, newOrdering);
- return TRUE;
+ return true;
}
void wxShape::OnChangeAttachment(int attachment, wxLineShape* line, wxList& ordering)
dc.SetLogicalFunction(OGLRBLF);
- wxPen dottedPen(wxColour(0, 0, 0), 1, wxDOT);
+ wxPen dottedPen(*wxBLACK, 1, wxDOT);
dc.SetPen(dottedPen);
dc.SetBrush(* wxTRANSPARENT_BRUSH);
// m_xpos = xx; m_ypos = yy;
dc.SetLogicalFunction(OGLRBLF);
- wxPen dottedPen(wxColour(0, 0, 0), 1, wxDOT);
+ wxPen dottedPen(*wxBLACK, 1, wxDOT);
dc.SetPen(dottedPen);
dc.SetBrush((* wxTRANSPARENT_BRUSH));
void wxShape::OnEndDragLeft(double x, double y, int keys, int attachment)
{
+ if (!m_draggable)
+ return;
m_canvas->ReleaseMouse();
if ((m_sensitivity & OP_DRAG_LEFT) != OP_DRAG_LEFT)
{
{
GetEventHandler()->OnErase(dc);
GetEventHandler()->OnEraseControlPoints(dc);
- GetEventHandler()->OnDrawBranches(dc, TRUE);
+ GetEventHandler()->OnDrawBranches(dc, true);
}
void wxShape::EraseContents(wxDC& dc)
new wxShapeTextLine(0.0, 0.0, string);
region->GetFormattedText().Append(new_line);
- m_formatted = FALSE;
+ m_formatted = false;
}
void wxShape::SetSize(double x, double y, bool WXUNUSED(recursive))
clause->AddAttributeValue(_T("fixed_height"), (long)m_fixedHeight);
if (m_shadowMode != SHADOW_NONE)
clause->AddAttributeValue(_T("shadow_mode"), (long)m_shadowMode);
- if (m_centreResize != TRUE)
+ if (m_centreResize != true)
clause->AddAttributeValue(_T("centre_resize"), (long)0);
clause->AddAttributeValue(_T("maintain_aspect_ratio"), (long) m_maintainAspectRatio);
- if (m_highlighted != FALSE)
+ if (m_highlighted != false)
clause->AddAttributeValue(_T("hilite"), (long)m_highlighted);
if (m_parent) // For composite objects
wxExpr *strings = clause->AttributeValue(_T("text"));
if (strings && strings->Type() == wxExprList)
{
- m_formatted = TRUE; // Assume text is formatted unless we prove otherwise
+ m_formatted = true; // Assume text is formatted unless we prove otherwise
wxExpr *node = strings->value.first;
while (node)
{
if (string_expr->Type() == wxExprString)
{
the_string = string_expr->StringValue();
- m_formatted = FALSE;
+ m_formatted = false;
}
else if (string_expr->Type() == wxExprList)
{
wxSprintf(regionNameBuf, _T("region%d"), regionNo);
wxSprintf(textNameBuf, _T("text%d"), regionNo);
- m_formatted = TRUE; // Assume text is formatted unless we prove otherwise
+ m_formatted = true; // Assume text is formatted unless we prove otherwise
while ((regionExpr = clause->AttributeValue(regionNameBuf)) != NULL)
{
if (string_expr->Type() == wxExprString)
{
the_string = string_expr->StringValue();
- m_formatted = FALSE;
+ m_formatted = false;
}
else if (string_expr->Type() == wxExprList)
{
bool wxShape::AncestorSelected() const
{
- if (m_selected) return TRUE;
+ if (m_selected) return true;
if (!GetParent())
- return FALSE;
+ return false;
else
return GetParent()->AncestorSelected();
}
{
wxAttachmentPoint *point = (wxAttachmentPoint *)node->GetData();
if (point->m_id == attachment)
- return TRUE;
+ return true;
node = node->GetNext();
}
- return FALSE;
+ return false;
}
bool wxShape::GetAttachmentPosition(int attachment, double *x, double *y,
if (m_attachmentMode == ATTACHMENT_MODE_NONE)
{
*x = m_xpos; *y = m_ypos;
- return TRUE;
+ return true;
}
else if (m_attachmentMode == ATTACHMENT_MODE_BRANCHING)
{
GetBranchingAttachmentPoint(attachment, nth, pt, stemPt);
*x = pt.x;
*y = pt.y;
- return TRUE;
+ return true;
}
else if (m_attachmentMode == ATTACHMENT_MODE_EDGE)
{
{
*x = (double)(m_xpos + point->m_x);
*y = (double)(m_ypos + point->m_y);
- return TRUE;
+ return true;
}
node = node->GetNext();
}
*x = m_xpos; *y = m_ypos;
- return FALSE;
+ return false;
}
else
{
double left = (double)(m_xpos - w/2.0);
double right = (double)(m_xpos + w/2.0);
+#if 0
/* bool isEnd = */ (line && line->IsEnd(this));
+#endif
int physicalAttachment = LogicalToPhysicalAttachment(attachment);
}
default:
{
- return FALSE;
+ return false;
}
}
- return TRUE;
+ return true;
}
}
- return FALSE;
+ return false;
}
void wxShape::GetBoundingBoxMax(double *w, double *h)
*h = hh;
}
-// Returns TRUE if image is a descendant of this composite
+// Returns true if image is a descendant of this composite
bool wxShape::HasDescendant(wxShape *image)
{
if (image == this)
- return TRUE;
+ return true;
wxNode *node = m_children.GetFirst();
while (node)
{
wxShape *child = (wxShape *)node->GetData();
bool ans = child->HasDescendant(image);
if (ans)
- return TRUE;
+ return true;
node = node->GetNext();
}
- return FALSE;
+ return false;
}
// Clears points from a list of wxRealPoints, and clears list
bool isEnd = (line && line->IsEnd(this));
// Are we horizontal or vertical?
- bool isHorizontal = (oglRoughlyEqual(pt1.y, pt2.y) == TRUE);
+ bool isHorizontal = (oglRoughlyEqual(pt1.y, pt2.y) == true);
double x, y;
}
else
{
- wxASSERT( oglRoughlyEqual(pt1.x, pt2.x) == TRUE );
+ wxASSERT( oglRoughlyEqual(pt1.x, pt2.x) == true );
wxRealPoint firstPoint, secondPoint;
if (pt1.y > pt2.y)
// <- branching attachment point N-1
// This function gets information about where branching connections go.
-// Returns FALSE if there are no lines at this attachment.
+// Returns false if there are no lines at this attachment.
bool wxShape::GetBranchingAttachmentInfo(int attachment, wxRealPoint& root, wxRealPoint& neck,
wxRealPoint& shoulder1, wxRealPoint& shoulder2)
{
int lineCount = GetAttachmentLineCount(attachment);
if (lineCount == 0)
- return FALSE;
+ return false;
int totalBranchLength = m_branchSpacing * (lineCount - 1);
break;
}
}
- return TRUE;
+ return true;
}
// n is the number of the adjoining line, from 0 to N-1 where N is the number of lines
}
}
- return TRUE;
+ return true;
}
// Get the number of lines at this attachment position.
// to logical (0 -> 1 if rotated by 90 degrees)
int wxShape::PhysicalToLogicalAttachment(int physicalAttachment) const
{
- const double pi = 3.1415926535897932384626433832795 ;
+ const double pi = M_PI ;
int i;
if (oglRoughlyEqual(GetRotation(), 0.0))
{
// to physical (0 is always North)
int wxShape::LogicalToPhysicalAttachment(int logicalAttachment) const
{
- const double pi = 3.1415926535897932384626433832795 ;
+ const double pi = M_PI ;
int i;
if (oglRoughlyEqual(GetRotation(), 0.0))
{
void wxShape::Rotate(double WXUNUSED(x), double WXUNUSED(y), double theta)
{
- const double pi = 3.1415926535897932384626433832795 ;
+ const double pi = M_PI ;
m_rotation = theta;
if (m_rotation < 0.0)
{