OSDN Git Service

Initial Commit
[qcad/qcad.git] / circuits / QSwap.cpp
1 //---------------------------------------------------------------------------\r
2 #include "QSwap.h"\r
3 #include "StrUtils.h"\r
4 //---------------------------------------------------------------------------\r
5 QSwap::QSwap(int x,int y) :QCircuit(x,y) {\r
6   Name = GetTypeStr();\r
7   Target1 = Y;\r
8   Target2 = Y;\r
9 }\r
10 //---------------------------------------------------------------------------\r
11 QSwap::QSwap(int x,int y, string param) :QCircuit(x,y) {\r
12   Name = GetTypeStr();\r
13   Target1 = Y;\r
14   Target2 = Y;\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
18 }\r
19 //---------------------------------------------------------------------------\r
20 void QSwap::SetTarget(int t1, int t2) {\r
21   if (t1 < t2) {\r
22     Target1 = t1;\r
23     Target2 = t2;\r
24   } else {\r
25     Target1 = t2;\r
26     Target2 = t1;\r
27   }\r
28   Y = Target1;\r
29 }\r
30 //---------------------------------------------------------------------------\r
31 void QSwap::Draw(QDraw *qDraw) {\r
32   int GridSize = qDraw->GetGridSize();\r
33   int UnitSize = qDraw->GetUnitSize();\r
34 \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
40 \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
46 \r
47   qDraw->SetPenColor(clBlack);\r
48   qDraw->DrawLine(x1, y1, x2, y2);\r
49   qDraw->DrawLine(x1, y2, x2, y1);\r
50 \r
51   y1 = Target2 * GridSize + d;\r
52   y2 = y1 + UnitSize;\r
53 \r
54   qDraw->SetPenColor(clBlack);\r
55   qDraw->DrawLine(x1, y1, x2, y2);\r
56   qDraw->DrawLine(x1, y2, x2, y1);\r
57 }\r
58 //---------------------------------------------------------------------------\r
59 string\r
60 QSwap::GetCalcText(void) {\r
61   ostringstream os;\r
62   os << "SWAP(";\r
63   os << "q[" << Target1 << "],";\r
64   os << "q[" << Target2 << "])";\r
65   return os.str();\r
66 }\r
67 //---------------------------------------------------------------------------\r
68 void QSwap::DrawPS(QPSDraw *psDraw) {\r
69   int GridSize = psDraw->GetGridSize();\r
70   int UnitSize = psDraw->GetUnitSize();\r
71 \r
72   int tx1 = X*GridSize + GridSize/2;\r
73 \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
77 \r
78 \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
84 \r
85   psDraw->DrawLine(x1, y1, x2, y2);\r
86   psDraw->DrawLine(x1, y2, x2, y1);\r
87 \r
88   y1 = Target2 * GridSize;\r
89   y2 = y1 + UnitSize;\r
90 \r
91   psDraw->DrawLine(x1, y1, x2, y2);\r
92   psDraw->DrawLine(x1, y2, x2, y1);\r
93 }\r
94 //---------------------------------------------------------------------------\r
95 string\r
96 QSwap::GetParam(void) {\r
97   ostringstream os;\r
98   os << Target1 << "," << Target2;\r
99   return os.str();\r
100 }\r
101 //---------------------------------------------------------------------------\r
102 void QSwap::Reverse(int y) {\r
103   Y = y - Y;\r
104   Target1 = y - Target1;\r
105   Target2 = y - Target2;\r
106 }\r
107 //---------------------------------------------------------------------------\r
108 TRect QSwap::GetOccupiedRect() {\r
109   return TRect(X, Target1, X + 1, Target2 + 1);\r
110 }\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
116 }\r
117 //---------------------------------------------------------------------------\r