1 //---------------------------------------------------------------------------
\r
3 #include "StrUtils.h"
\r
4 //---------------------------------------------------------------------------
\r
5 QSwap::QSwap(int x,int y) :QCircuit(x,y) {
\r
10 //---------------------------------------------------------------------------
\r
11 QSwap::QSwap(int x,int y, string param) :QCircuit(x,y) {
\r
12 Name = GetTypeStr();
\r
15 vector<string> v = StrUtils::split_str(param);
\r
16 Target1 = atoi(v[0].c_str());
\r
17 Target2 = atoi(v[1].c_str());
\r
19 //---------------------------------------------------------------------------
\r
20 void QSwap::SetTarget(int t1, int t2) {
\r
30 //---------------------------------------------------------------------------
\r
31 void QSwap::Draw(QDraw *qDraw) {
\r
32 int GridSize = qDraw->GetGridSize();
\r
33 int UnitSize = qDraw->GetUnitSize();
\r
35 int tx = X*GridSize + GridSize/2;
\r
36 int ty1 = Target1*GridSize + GridSize/2;
\r
37 int ty2 = Target2*GridSize + GridSize/2;
\r
38 qDraw->SetPenColor(clBlack);
\r
39 qDraw->DrawLine(tx,ty1,tx,ty2);
\r
41 int d = (GridSize - UnitSize) / 2;
\r
42 int x1 = X * GridSize+d;
\r
43 int y1 = Target1 * GridSize+d;
\r
44 int x2 = x1 + UnitSize;
\r
45 int y2 = y1 + UnitSize;
\r
47 qDraw->SetPenColor(clBlack);
\r
48 qDraw->DrawLine(x1, y1, x2, y2);
\r
49 qDraw->DrawLine(x1, y2, x2, y1);
\r
51 y1 = Target2 * GridSize + d;
\r
54 qDraw->SetPenColor(clBlack);
\r
55 qDraw->DrawLine(x1, y1, x2, y2);
\r
56 qDraw->DrawLine(x1, y2, x2, y1);
\r
58 //---------------------------------------------------------------------------
\r
60 QSwap::GetCalcText(void) {
\r
63 os << "q[" << Target1 << "],";
\r
64 os << "q[" << Target2 << "])";
\r
67 //---------------------------------------------------------------------------
\r
68 void QSwap::DrawPS(QPSDraw *psDraw) {
\r
69 int GridSize = psDraw->GetGridSize();
\r
70 int UnitSize = psDraw->GetUnitSize();
\r
72 int tx1 = X*GridSize + GridSize/2;
\r
74 int ty1 = Target1*GridSize + GridSize/2;
\r
75 int ty2 = Target2*GridSize + GridSize/2;
\r
76 psDraw->DrawLine(tx1,ty1,tx1,ty2);
\r
79 int d = (GridSize-UnitSize)/2;
\r
80 int x1 = X * GridSize+d;
\r
81 int y1 = Target1 * GridSize+d;
\r
82 int x2 = x1 + UnitSize;
\r
83 int y2 = y1 + UnitSize;
\r
85 psDraw->DrawLine(x1, y1, x2, y2);
\r
86 psDraw->DrawLine(x1, y2, x2, y1);
\r
88 y1 = Target2 * GridSize;
\r
91 psDraw->DrawLine(x1, y1, x2, y2);
\r
92 psDraw->DrawLine(x1, y2, x2, y1);
\r
94 //---------------------------------------------------------------------------
\r
96 QSwap::GetParam(void) {
\r
98 os << Target1 << "," << Target2;
\r
101 //---------------------------------------------------------------------------
\r
102 void QSwap::Reverse(int y) {
\r
104 Target1 = y - Target1;
\r
105 Target2 = y - Target2;
\r
107 //---------------------------------------------------------------------------
\r
108 TRect QSwap::GetOccupiedRect() {
\r
109 return TRect(X, Target1, X + 1, Target2 + 1);
\r
111 //---------------------------------------------------------------------------
\r
112 QCircuit *QSwap::Clone() {
\r
113 QSwap * qs = new QSwap(X, Y);
\r
114 qs->SetTarget(this->GetTarget1(), this->GetTarget2());
\r
115 return (QCircuit*)qs;
\r
117 //---------------------------------------------------------------------------
\r