Use symbolic constants instead of hardcoded numbers in svn sample

It would arguably be even better to use different derived classes for
different operations instead of doing everything inside a single class with a
big "switch", but this would require more time, so for now at least make the
code slightly more understandable and maintainable.

This also results in using useful names for the files being saved by default
instead of just "SVG Test #" used before.
This commit is contained in:
Vadim Zeitlin
2017-04-01 18:26:16 +02:00
parent 5fb77c4c78
commit 4325472e97

View File

@@ -45,6 +45,51 @@ public:
bool OnInit() wxOVERRIDE; bool OnInit() wxOVERRIDE;
}; };
// Existing pages:
enum Page
{
Page_Lines,
Page_Polygons,
Page_Text,
Page_Arcs,
Page_Checkmarks,
Page_ScaledText,
Page_Bitmaps,
Page_Clipping,
Page_TextPos,
Page_Max
};
static const char* pageNames[] =
{
"Lines",
"Polygons",
"Text",
"Arcs",
"Checkmarks",
"Scaled text",
"Bitmaps",
"Clipping",
"Text position",
};
wxCOMPILE_TIME_ASSERT( WXSIZEOF(pageNames) == Page_Max, PageNamesMismatch );
static const char* pageDescriptions[] =
{
"Green Cross, Cyan Line and spline",
"Blue rectangle, red edge, clear rounded rectangle, gold ellipse, gold and clear stars",
"Swiss, Times text; red text, rotated and colored orange",
"This is an arc test page",
"Two check marks",
"Scaling test page",
"Icon and Bitmap ",
"Clipping region",
"Text position test page",
};
wxCOMPILE_TIME_ASSERT( WXSIZEOF(pageDescriptions) == Page_Max, PageDescriptionsMismatch );
class MyPage : public wxScrolledWindow class MyPage : public wxScrolledWindow
{ {
public: public:
@@ -141,11 +186,9 @@ MyFrame::MyFrame(wxWindow *parent, const wxWindowID id, const wxString& title,
m_notebook = new wxNotebook(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBK_TOP); m_notebook = new wxNotebook(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBK_TOP);
//Add SVG Windows to a notebook //Add SVG Windows to a notebook
for (int i = 0; i <= 8; ++i) for (int i = 0; i < Page_Max; ++i)
{ {
wxString svgTitle; m_notebook->AddPage(new MyPage(m_notebook, i), pageNames[i]);
svgTitle.Printf(wxT("SVG Test %d"), i);
m_notebook->AddPage(new MyPage(m_notebook, i), svgTitle);
} }
} }
@@ -210,7 +253,6 @@ bool MyPage::OnSave(wxString filename)
void MyPage::OnDraw(wxDC& dc) void MyPage::OnDraw(wxDC& dc)
{ {
// vars to use ... // vars to use ...
wxString s;
wxPen wP; wxPen wP;
wxBrush wB; wxBrush wB;
wxPoint points[6]; wxPoint points[6];
@@ -221,8 +263,7 @@ void MyPage::OnDraw(wxDC& dc)
switch (m_index) switch (m_index)
{ {
default: case Page_Lines:
case 0:
// draw lines to make a cross // draw lines to make a cross
dc.DrawLine(0, 0, 200, 200); dc.DrawLine(0, 0, 200, 200);
dc.DrawLine(200, 0, 0, 200); dc.DrawLine(200, 0, 0, 200);
@@ -234,10 +275,9 @@ void MyPage::OnDraw(wxDC& dc)
dc.DrawPoint (25,15); dc.DrawPoint (25,15);
dc.DrawLine(50, 30, 200, 30); dc.DrawLine(50, 30, 200, 30);
dc.DrawSpline(50, 200, 50, 100, 200, 10); dc.DrawSpline(50, 200, 50, 100, 200, 10);
s = wxT("Green Cross, Cyan Line and spline");
break; break;
case 1: case Page_Polygons:
// draw standard shapes // draw standard shapes
dc.SetBrush(*wxCYAN_BRUSH); dc.SetBrush(*wxCYAN_BRUSH);
dc.SetPen(*wxRED_PEN); dc.SetPen(*wxRED_PEN);
@@ -257,10 +297,9 @@ void MyPage::OnDraw(wxDC& dc)
dc.DrawPolygon(5, points); dc.DrawPolygon(5, points);
dc.DrawLines (6, points, 160); dc.DrawLines (6, points, 160);
s = wxT("Blue rectangle, red edge, clear rounded rectangle, gold ellipse, gold and clear stars");
break; break;
case 2: case Page_Text:
// draw text in Arial or similar font // draw text in Arial or similar font
dc.DrawLine(50,25,50,35); dc.DrawLine(50,25,50,35);
dc.DrawLine(45,30,55,30); dc.DrawLine(45,30,55,30);
@@ -279,10 +318,9 @@ void MyPage::OnDraw(wxDC& dc)
.Italic().Bold()); .Italic().Bold());
dc.SetTextForeground (wC); dc.SetTextForeground (wC);
dc.DrawText(wxT("This is a Times-style string"), 50, 60); dc.DrawText(wxT("This is a Times-style string"), 50, 60);
s = wxT("Swiss, Times text; red text, rotated and colored orange");
break; break;
case 3 : case Page_Arcs:
// four arcs start and end points, center // four arcs start and end points, center
dc.SetBrush(*wxGREEN_BRUSH); dc.SetBrush(*wxGREEN_BRUSH);
dc.DrawArc ( 200,300, 370,230, 300,300 ); dc.DrawArc ( 200,300, 370,230, 300,300 );
@@ -313,18 +351,16 @@ void MyPage::OnDraw(wxDC& dc)
dc.DrawEllipticArc(300, 50,200,100,90.0,145.0); dc.DrawEllipticArc(300, 50,200,100,90.0,145.0);
dc.DrawEllipticArc(300,100,200,100,90.0,345.0); dc.DrawEllipticArc(300,100,200,100,90.0,345.0);
s = wxT("This is an arc test page");
break; break;
case 4: case Page_Checkmarks:
dc.DrawCheckMark ( 30,30,25,25); dc.DrawCheckMark ( 30,30,25,25);
dc.SetBrush (wxBrush (wxT("SALMON"),wxBRUSHSTYLE_TRANSPARENT)); dc.SetBrush (wxBrush (wxT("SALMON"),wxBRUSHSTYLE_TRANSPARENT));
dc.DrawCheckMark ( 80,50,75,75); dc.DrawCheckMark ( 80,50,75,75);
dc.DrawRectangle ( 80,50,75,75); dc.DrawRectangle ( 80,50,75,75);
s = wxT("Two check marks");
break; break;
case 5: case Page_ScaledText:
dc.SetFont(wxFontInfo(18) dc.SetFont(wxFontInfo(18)
.FaceName("Times New Roman") .FaceName("Times New Roman")
.Family(wxFONTFAMILY_ROMAN) .Family(wxFONTFAMILY_ROMAN)
@@ -353,16 +389,14 @@ void MyPage::OnDraw(wxDC& dc)
dc.DrawLine(0, 0, 200, 200); dc.DrawLine(0, 0, 200, 200);
dc.DrawLine(200, 0, 0, 200); dc.DrawLine(200, 0, 0, 200);
dc.DrawText(wxT("This is an 18pt string in MapMode"), 50, 60); dc.DrawText(wxT("This is an 18pt string in MapMode"), 50, 60);
s = wxT("Scaling test page");
break; break;
case 6: case Page_Bitmaps:
dc.DrawIcon( wxICON(sample), 10, 10 ); dc.DrawIcon( wxICON(sample), 10, 10 );
dc.DrawBitmap ( wxBitmap(svgbitmap_xpm), 50,15); dc.DrawBitmap ( wxBitmap(svgbitmap_xpm), 50,15);
s = wxT("Icon and Bitmap ");
break; break;
case 7: case Page_Clipping:
dc.SetTextForeground(wxT("RED")); dc.SetTextForeground(wxT("RED"));
dc.DrawText(wxT("Red = Clipping Off"), 30, 5); dc.DrawText(wxT("Red = Clipping Off"), 30, 5);
dc.SetTextForeground(wxT("GREEN")); dc.SetTextForeground(wxT("GREEN"));
@@ -419,10 +453,9 @@ void MyPage::OnDraw(wxDC& dc)
dc.DestroyClippingRegion(); dc.DestroyClippingRegion();
*/ */
s = wxT("Clipping region");
break; break;
case 8: case Page_TextPos:
wxString txtStr; wxString txtStr;
wxCoord txtX, txtY, txtW, txtH, txtDescent, txtEL; wxCoord txtX, txtY, txtW, txtH, txtDescent, txtEL;
wxCoord txtPad = 0; wxCoord txtPad = 0;
@@ -461,10 +494,9 @@ void MyPage::OnDraw(wxDC& dc)
dc.DrawLine(txtX - padding, txtY, txtX - padding + lenH, txtY + lenH); dc.DrawLine(txtX - padding, txtY, txtX - padding + lenH, txtY + lenH);
dc.DrawLine(txtX - padding + lenH, txtY + lenH, txtX - padding + lenH + lenW, txtY + (lenH - lenW)); // bottom dc.DrawLine(txtX - padding + lenH, txtY + lenH, txtX - padding + lenH + lenW, txtY + (lenH - lenW)); // bottom
dc.DrawRotatedText(txtStr, txtX, txtY, 45); dc.DrawRotatedText(txtStr, txtX, txtY, 45);
s = wxT("Text position test page");
break; break;
} }
wxLogStatus("%s", s); wxLogStatus("%s", pageDescriptions[m_index]);
} }