Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 

253 linhas
9.3 KiB

  1. #include "ConnectorSelectWidget.h"
  2. #include <QPainter>
  3. #include "CableTestBenchDefs.h"
  4. CConnectorSelectWidget::CConnectorSelectWidget(QWidget *parent) :
  5. QWidget(parent)
  6. {
  7. mConnectorLayoutPixmap = new QPixmap("./images/connecteurs.png");
  8. mCurSelConnector = CConnectorDefs::UNKNOWN_CONNECTOR_TYPE;
  9. //Create click zones for all input connectors
  10. CConnectorClickZoneWidget *InputClickZoneHandle;
  11. //6 pins
  12. InputClickZoneHandle = new CConnectorClickZoneWidget(CConnectorDefs::INPUT_6_PINS_CONNECTOR_TYPE,this);
  13. InputClickZoneHandle->setGeometry(316,153,53,54);
  14. InputClickZoneHandle->show();
  15. InputClickZoneHandle->raise();
  16. connect(InputClickZoneHandle,SIGNAL(ConnectorZoneClicked(CConnectorClickZoneWidget*)),this,SLOT(InputConnectorZoneClicked(CConnectorClickZoneWidget*)));
  17. mInputClickZoneList.append(InputClickZoneHandle);
  18. //14 pins
  19. InputClickZoneHandle = new CConnectorClickZoneWidget(CConnectorDefs::INPUT_14_PINS_CONNECTOR_TYPE,this);
  20. InputClickZoneHandle->setGeometry(316,31,53,54);
  21. InputClickZoneHandle->show();
  22. InputClickZoneHandle->raise();
  23. connect(InputClickZoneHandle,SIGNAL(ConnectorZoneClicked(CConnectorClickZoneWidget*)),this,SLOT(InputConnectorZoneClicked(CConnectorClickZoneWidget*)));
  24. mInputClickZoneList.append(InputClickZoneHandle);
  25. //10 pins
  26. InputClickZoneHandle = new CConnectorClickZoneWidget(CConnectorDefs::INPUT_10_PINS_CONNECTOR_TYPE,this);
  27. InputClickZoneHandle->setGeometry(202,32,28,86);
  28. InputClickZoneHandle->show();
  29. InputClickZoneHandle->raise();
  30. connect(InputClickZoneHandle,SIGNAL(ConnectorZoneClicked(CConnectorClickZoneWidget*)),this,SLOT(InputConnectorZoneClicked(CConnectorClickZoneWidget*)));
  31. mInputClickZoneList.append(InputClickZoneHandle);
  32. //24 pins
  33. InputClickZoneHandle = new CConnectorClickZoneWidget(CConnectorDefs::INPUT_24_PINS_CONNECTOR_TYPE,this);
  34. InputClickZoneHandle->setGeometry(245,33,48,86);
  35. InputClickZoneHandle->show();
  36. InputClickZoneHandle->raise();
  37. connect(InputClickZoneHandle,SIGNAL(ConnectorZoneClicked(CConnectorClickZoneWidget*)),this,SLOT(InputConnectorZoneClicked(CConnectorClickZoneWidget*)));
  38. mInputClickZoneList.append(InputClickZoneHandle);
  39. //72 pins
  40. InputClickZoneHandle = new CConnectorClickZoneWidget(CConnectorDefs::INPUT_72_PINS_CONNECTOR_TYPE,this);
  41. InputClickZoneHandle->setGeometry(245,150,47,120);
  42. InputClickZoneHandle->show();
  43. InputClickZoneHandle->raise();
  44. connect(InputClickZoneHandle,SIGNAL(ConnectorZoneClicked(CConnectorClickZoneWidget*)),this,SLOT(InputConnectorZoneClicked(CConnectorClickZoneWidget*)));
  45. mInputClickZoneList.append(InputClickZoneHandle);
  46. //90 pins
  47. InputClickZoneHandle = new CConnectorClickZoneWidget(CConnectorDefs::INPUT_90_PINS_CONNECTOR_TYPE,this);
  48. InputClickZoneHandle->setGeometry(324,286,33,73);
  49. InputClickZoneHandle->show();
  50. InputClickZoneHandle->raise();
  51. connect(InputClickZoneHandle,SIGNAL(ConnectorZoneClicked(CConnectorClickZoneWidget*)),this,SLOT(InputConnectorZoneClicked(CConnectorClickZoneWidget*)));
  52. mInputClickZoneList.append(InputClickZoneHandle);
  53. //108 pins
  54. InputClickZoneHandle = new CConnectorClickZoneWidget(CConnectorDefs::INPUT_108_PINS_CONNECTOR_TYPE,this);
  55. InputClickZoneHandle->setGeometry(245,308,47,149);
  56. InputClickZoneHandle->show();
  57. InputClickZoneHandle->raise();
  58. connect(InputClickZoneHandle,SIGNAL(ConnectorZoneClicked(CConnectorClickZoneWidget*)),this,SLOT(InputConnectorZoneClicked(CConnectorClickZoneWidget*)));
  59. mInputClickZoneList.append(InputClickZoneHandle);
  60. //120 pins
  61. InputClickZoneHandle = new CConnectorClickZoneWidget(CConnectorDefs::INPUT_120_PINS_CONNECTOR_TYPE,this);
  62. InputClickZoneHandle->setGeometry(319,380,42,74);
  63. InputClickZoneHandle->show();
  64. InputClickZoneHandle->raise();
  65. connect(InputClickZoneHandle,SIGNAL(ConnectorZoneClicked(CConnectorClickZoneWidget*)),this,SLOT(InputConnectorZoneClicked(CConnectorClickZoneWidget*)));
  66. mInputClickZoneList.append(InputClickZoneHandle);
  67. //Create selection zones for all output connectors
  68. CConnectorClickZoneWidget *OutputSelectZoneHandle;
  69. //6 pins
  70. OutputSelectZoneHandle = new CConnectorClickZoneWidget(CConnectorDefs::OUTPUT_6_PINS_CONNECTOR_TYPE,this);
  71. OutputSelectZoneHandle->setGeometry(2,152,43,43);
  72. OutputSelectZoneHandle->show();
  73. OutputSelectZoneHandle->raise();
  74. mOutputSelectZoneList.append(OutputSelectZoneHandle);
  75. //14 pins
  76. OutputSelectZoneHandle = new CConnectorClickZoneWidget(CConnectorDefs::OUTPUT_14_PINS_CONNECTOR_TYPE,this);
  77. OutputSelectZoneHandle->setGeometry(2,30,45,47);
  78. OutputSelectZoneHandle->show();
  79. OutputSelectZoneHandle->raise();
  80. mOutputSelectZoneList.append(OutputSelectZoneHandle);
  81. //24 pins
  82. OutputSelectZoneHandle = new CConnectorClickZoneWidget(CConnectorDefs::OUTPUT_24_PINS_CONNECTOR_TYPE,this);
  83. OutputSelectZoneHandle->setGeometry(80,33,48,86);
  84. OutputSelectZoneHandle->show();
  85. OutputSelectZoneHandle->raise();
  86. mOutputSelectZoneList.append(OutputSelectZoneHandle);
  87. //72 pins
  88. OutputSelectZoneHandle = new CConnectorClickZoneWidget(CConnectorDefs::OUTPUT_72_PINS_CONNECTOR_TYPE,this);
  89. OutputSelectZoneHandle->setGeometry(80,150,46,121);
  90. OutputSelectZoneHandle->show();
  91. OutputSelectZoneHandle->raise();
  92. mOutputSelectZoneList.append(OutputSelectZoneHandle);
  93. //108 pins
  94. OutputSelectZoneHandle = new CConnectorClickZoneWidget(CConnectorDefs::OUTPUT_108_PINS_CONNECTOR_TYPE,this);
  95. OutputSelectZoneHandle->setGeometry(80,308,47,148);
  96. OutputSelectZoneHandle->show();
  97. OutputSelectZoneHandle->raise();
  98. mOutputSelectZoneList.append(OutputSelectZoneHandle);
  99. }
  100. void CConnectorSelectWidget::paintEvent(QPaintEvent *event)
  101. {
  102. QPainter painter(this);
  103. painter.drawPixmap(0,0,*mConnectorLayoutPixmap);
  104. QPen pen;
  105. pen.setStyle(Qt::SolidLine);
  106. pen.setWidth(10);
  107. pen.setBrush(Qt::red);
  108. painter.setPen(pen);
  109. // painter.drawRect(this->geometry());
  110. // painter.drawRect(QRect(320,306,33,73));
  111. }
  112. void CConnectorSelectWidget::InputConnectorZoneClicked(CConnectorClickZoneWidget *ConClickZone)
  113. {
  114. qDebug("Connector zone clicked: %d",ConClickZone->GetConnectorType());
  115. if(ConClickZone->IsConSelected() == true)
  116. {
  117. // ClearAllConnectorsSelections();
  118. // mCurSelConnector = CConnectorDefs::UNKNOWN_CONNECTOR_TYPE;
  119. return;
  120. }
  121. else
  122. {
  123. ClearAllConnectorsSelections();
  124. CConnectorClickZoneWidget *OutputSelZone = 0;
  125. switch(ConClickZone->GetConnectorType())
  126. {
  127. case CConnectorDefs::INPUT_6_PINS_CONNECTOR_TYPE:
  128. {
  129. OutputSelZone = FindOutputSelectionZone(CConnectorDefs::OUTPUT_6_PINS_CONNECTOR_TYPE);
  130. break;
  131. }
  132. case CConnectorDefs::INPUT_14_PINS_CONNECTOR_TYPE:
  133. {
  134. OutputSelZone = FindOutputSelectionZone(CConnectorDefs::OUTPUT_14_PINS_CONNECTOR_TYPE);
  135. break;
  136. }
  137. case CConnectorDefs::INPUT_10_PINS_CONNECTOR_TYPE:
  138. case CConnectorDefs::INPUT_24_PINS_CONNECTOR_TYPE:
  139. {
  140. OutputSelZone = FindOutputSelectionZone(CConnectorDefs::OUTPUT_24_PINS_CONNECTOR_TYPE);
  141. break;
  142. }
  143. case CConnectorDefs::INPUT_72_PINS_CONNECTOR_TYPE:
  144. {
  145. OutputSelZone = FindOutputSelectionZone(CConnectorDefs::OUTPUT_72_PINS_CONNECTOR_TYPE);
  146. break;
  147. }
  148. case CConnectorDefs::INPUT_90_PINS_CONNECTOR_TYPE:
  149. case CConnectorDefs::INPUT_108_PINS_CONNECTOR_TYPE:
  150. case CConnectorDefs::INPUT_120_PINS_CONNECTOR_TYPE:
  151. {
  152. OutputSelZone = FindOutputSelectionZone(CConnectorDefs::OUTPUT_108_PINS_CONNECTOR_TYPE);
  153. break;
  154. }
  155. default:
  156. {
  157. break;
  158. }
  159. }
  160. if(OutputSelZone != 0)
  161. {
  162. OutputSelZone->SelectConnector(true,Qt::darkGreen);
  163. }
  164. ConClickZone->SelectConnector();
  165. mCurSelConnector = ConClickZone->GetConnectorType();
  166. }
  167. emit ConnectorSelected(mCurSelConnector);
  168. }
  169. CConnectorSelectWidget::~CConnectorSelectWidget()
  170. {
  171. qDebug("Destroyed");
  172. for(int i = 0; i < mInputClickZoneList.size(); i++)
  173. {
  174. delete mInputClickZoneList.at(i);
  175. }
  176. mInputClickZoneList.clear();
  177. for(int i = 0; i < mOutputSelectZoneList.size(); i++)
  178. {
  179. delete mOutputSelectZoneList.at(i);
  180. }
  181. mOutputSelectZoneList.clear();
  182. }
  183. int CConnectorSelectWidget::ClearAllOutputConSelections()
  184. {
  185. for(int i = 0; i < mOutputSelectZoneList.size(); i++)
  186. {
  187. mOutputSelectZoneList.at(i)->ClearConnectorSelection();
  188. }
  189. return RET_OK;
  190. }
  191. int CConnectorSelectWidget::ClearAllInputConSelections()
  192. {
  193. for(int i = 0; i < mInputClickZoneList.size(); i++)
  194. {
  195. mInputClickZoneList.at(i)->ClearConnectorSelection();
  196. }
  197. return RET_OK;
  198. }
  199. int CConnectorSelectWidget::ClearAllConnectorsSelections()
  200. {
  201. ClearAllOutputConSelections();
  202. ClearAllInputConSelections();
  203. return RET_OK;
  204. }
  205. CConnectorClickZoneWidget* CConnectorSelectWidget::FindOutputSelectionZone(CConnectorDefs::eConnectorType type)
  206. {
  207. for(int i = 0; i < mOutputSelectZoneList.size(); i++)
  208. {
  209. if(mOutputSelectZoneList.at(i)->GetConnectorType() == type)
  210. {
  211. return mOutputSelectZoneList.at(i);
  212. }
  213. }
  214. return 0;
  215. }