#include <wx/wx.h>
#endif
-#ifdef PROLOGIO
#include <wx/wxexpr.h>
-#endif
#include "basic.h"
#include "basicp.h"
// construct themselves.
wxExprDatabase *GlobalwxExprDatabase = NULL;
-// Popup menu for editing divisions
-wxMenu *oglPopupDivisionMenu = NULL;
/*
* Division control point
*/
-
+
class wxDivisionControlPoint: public wxControlPoint
{
DECLARE_DYNAMIC_CLASS(wxDivisionControlPoint)
if (m_shadowMode != SHADOW_NONE)
{
if (m_shadowBrush)
- dc.SetBrush(m_shadowBrush);
- dc.SetPen(g_oglTransparentPen);
+ dc.SetBrush(* m_shadowBrush);
+ dc.SetPen(* g_oglTransparentPen);
if (m_cornerRadius != 0.0)
dc.DrawRoundedRectangle(WXROUND(x1 + m_shadowOffsetX), WXROUND(y1 + m_shadowOffsetY),
wxClientDC dc(GetCanvas());
GetCanvas()->PrepareDC(dc);
- dc.SetLogicalFunction(wxXOR);
+ dc.SetLogicalFunction(OGLRBLF);
wxPen dottedPen(wxColour(0, 0, 0), 1, wxDOT);
dc.SetPen(dottedPen);
dc.SetBrush((* wxTRANSPARENT_BRUSH));
Erase(dc);
- dc.SetLogicalFunction(wxXOR);
+ dc.SetLogicalFunction(OGLRBLF);
wxPen dottedPen(wxColour(0, 0, 0), 1, wxDOT);
dc.SetPen(dottedPen);
double offsetY = yy - objectStartY;
Move(dc, GetX() + offsetX, GetY() + offsetY);
-
+
if (m_canvas && !m_canvas->GetQuickEditMode()) m_canvas->Redraw(dc);
}
object->Show(FALSE);
object->Move(dc, newX, newY);
object->Show(TRUE);
-
+
// Now set the scaled size
object->GetBoundingBoxMin(&xBound, &yBound);
object->SetSize(object->GetFixedWidth() ? xBound : xScale*xBound,
wxShape *newObject = object->CreateNewCopy(FALSE, FALSE);
if (newObject->GetId() == 0)
newObject->SetId(NewId());
-
+
newObject->SetParent(&compositeCopy);
compositeCopy.m_children.Append(newObject);
wxShape *constrainedObject = (wxShape *)node2->Data();
wxShape *newConstrained = (wxShape *)(oglObjectCopyMapping.Find((long)constrainedObject)->Data());
newConstrainedList.Append(newConstrained);
- node2 = node2->Next();
+ node2 = node2->Next();
}
wxOGLConstraint *newConstraint = new wxOGLConstraint(constraint->m_constraintType, newConstraining,
m_constrainingObject = (wxShape *)objExpr1->GetClientData();
else
wxFatalError("Couldn't find constraining image of composite.", "Object graphics error");
-
+
int i = 0;
wxExpr *currentIdExpr = constrainedExpr->Nth(i);
while (currentIdExpr)
void wxDivisionShape::OnDraw(wxDC& dc)
{
- dc.SetBrush(wxTRANSPARENT_BRUSH);
+ dc.SetBrush(* wxTRANSPARENT_BRUSH);
dc.SetBackgroundMode(wxTRANSPARENT);
double x1 = (double)(GetX() - (GetWidth()/2.0));
if (m_leftSide)
{
- dc.SetPen(m_leftSidePen);
+ dc.SetPen(* m_leftSidePen);
dc.DrawLine(WXROUND(x1), WXROUND(y2), WXROUND(x1), WXROUND(y1));
}
if (m_topSide)
{
- dc.SetPen(m_topSidePen);
+ dc.SetPen(* m_topSidePen);
dc.DrawLine(WXROUND(x1), WXROUND(y1), WXROUND(x2), WXROUND(y1));
}
// For testing purposes, draw a rectangle so we know
// how big the division is.
-// SetBrush(wxCYAN_BRUSH);
+// SetBrush(* wxCYAN_BRUSH);
// wxRectangleShape::OnDraw(dc);
}
}
return;
}
-
+
wxClientDC dc(GetCanvas());
GetCanvas()->PrepareDC(dc);
double newYPos2 = (double)(y1 + (3.0*GetHeight()/4.0));
wxDivisionShape *newDivision = compositeParent->OnCreateDivision();
newDivision->Show(TRUE);
-
+
Erase(dc);
// Anything adjoining the bottom of this division now adjoins the
// Division is now receiving mouse events _before_ the contained object,
// because it was added last (on top of all others)
- // Add after the image that visualizes the container
+ // Add after the image that visualizes the container
compositeParent->AddChild(newDivision, compositeParent->FindContainerImage());
m_handleSide = DIVISION_SIDE_BOTTOM;
double newYPos2 = GetY();
wxDivisionShape *newDivision = compositeParent->OnCreateDivision();
newDivision->Show(TRUE);
-
+
Erase(dc);
// Anything adjoining the left of this division now adjoins the
GetCanvas()->PrepareDC(dc);
Move(dc, newX, GetY());
-
+
return TRUE;
}
GetCanvas()->PrepareDC(dc);
Move(dc, GetX(), newY);
-
+
return TRUE;
}
GetCanvas()->PrepareDC(dc);
Move(dc, newX, GetY());
-
+
return TRUE;
}
GetCanvas()->PrepareDC(dc);
Move(dc, GetX(), newY);
-
+
return TRUE;
}
originalY = division->GetY();
originalW = division->GetWidth();
originalH = division->GetHeight();
-
+
wxControlPoint::OnBeginDragLeft(x, y, keys, attachment);
}
success = FALSE;
else
division->ResizeAdjoining(DIVISION_SIDE_LEFT, x, FALSE);
-
+
break;
}
case DIVISION_SIDE_TOP:
success = FALSE;
else
division->ResizeAdjoining(DIVISION_SIDE_TOP, y, FALSE);
-
+
break;
}
case DIVISION_SIDE_RIGHT:
success = FALSE;
else
division->ResizeAdjoining(DIVISION_SIDE_RIGHT, x, FALSE);
-
+
break;
}
case DIVISION_SIDE_BOTTOM:
success = FALSE;
else
division->ResizeAdjoining(DIVISION_SIDE_BOTTOM, y, FALSE);
-
+
break;
}
}
}
node = node->Next();
}
-
+
return TRUE;
}
* Popup menu for editing divisions
*
*/
-
-void oglGraphicsDivisionMenuProc(wxMenu& menu, wxCommandEvent& event)
+class OGLPopupDivisionMenu : public wxMenu {
+public:
+ OGLPopupDivisionMenu() : wxMenu() {
+ Append(DIVISION_MENU_SPLIT_HORIZONTALLY, "Split horizontally");
+ Append(DIVISION_MENU_SPLIT_VERTICALLY, "Split vertically");
+ AppendSeparator();
+ Append(DIVISION_MENU_EDIT_LEFT_EDGE, "Edit left edge");
+ Append(DIVISION_MENU_EDIT_TOP_EDGE, "Edit top edge");
+ }
+
+ void OnMenu(wxCommandEvent& event);
+
+ DECLARE_EVENT_TABLE();
+};
+
+BEGIN_EVENT_TABLE(OGLPopupDivisionMenu, wxMenu)
+ EVT_CUSTOM_RANGE(wxEVT_COMMAND_MENU_SELECTED,
+ DIVISION_MENU_SPLIT_HORIZONTALLY,
+ DIVISION_MENU_EDIT_BOTTOM_EDGE,
+ OGLPopupDivisionMenu::OnMenu)
+END_EVENT_TABLE()
+
+
+void OGLPopupDivisionMenu::OnMenu(wxCommandEvent& event)
{
- wxDivisionShape *division = (wxDivisionShape *)menu.GetClientData();
+ wxDivisionShape *division = (wxDivisionShape *)GetClientData();
switch (event.GetInt())
{
case DIVISION_MENU_SPLIT_HORIZONTALLY:
GraphicsForm *form = new GraphicsForm("Containers");
int lineWidth = currentPen->GetWidth();
-
+
form->Add(wxMakeFormShort("Width", &lineWidth, wxFORM_DEFAULT, NULL, NULL, wxVERTICAL,
150));
form->Add(wxMakeFormString("Colour", pColour, wxFORM_CHOICE,
else if (strcmp(*pStyle, "Dot Dash") == 0)
lineStyle = wxDOT_DASH;
}
-
+
wxPen *newPen = wxThePenList->FindOrCreatePen(*pColour, lineWidth, lineStyle);
if (!pen)
pen = wxBLACK_PEN;
// Popup menu
void wxDivisionShape::PopupMenu(double x, double y)
{
- oglPopupDivisionMenu->SetClientData((char *)this);
+ wxMenu* oglPopupDivisionMenu = new OGLPopupDivisionMenu;
+
+ oglPopupDivisionMenu->SetClientData((void *)this);
if (m_leftSide)
oglPopupDivisionMenu->Enable(DIVISION_MENU_EDIT_LEFT_EDGE, TRUE);
else
oglPopupDivisionMenu->Enable(DIVISION_MENU_EDIT_TOP_EDGE, TRUE);
else
oglPopupDivisionMenu->Enable(DIVISION_MENU_EDIT_TOP_EDGE, FALSE);
-
+
int x1, y1;
m_canvas->ViewStart(&x1, &y1);
wxClientDC dc(GetCanvas());
GetCanvas()->PrepareDC(dc);
- int mouse_x = (int)(dc.LogicalToDeviceX(x - x1*unit_x));
- int mouse_y = (int)(dc.LogicalToDeviceY(y - y1*unit_y));
+ int mouse_x = (int)(dc.LogicalToDeviceX((long)(x - x1*unit_x)));
+ int mouse_y = (int)(dc.LogicalToDeviceY((long)(y - y1*unit_y)));
m_canvas->PopupMenu(oglPopupDivisionMenu, mouse_x, mouse_y);
+ delete oglPopupDivisionMenu;
}
void wxDivisionShape::SetLeftSideColour(const wxString& colour)