MNE-CPP  beta 1.0
pluginconnectorconnectionwidget.cpp
Go to the documentation of this file.
1 //=============================================================================================================
36 //*************************************************************************************************************
37 //=============================================================================================================
38 // INCLUDES
39 //=============================================================================================================
40 
43 
44 
45 //*************************************************************************************************************
46 //=============================================================================================================
47 // INCLUDES
48 //=============================================================================================================
49 
50 #include <QGridLayout>
51 
52 
53 //*************************************************************************************************************
54 //=============================================================================================================
55 // USED NAMESPACES
56 //=============================================================================================================
57 
58 using namespace MNEX;
59 
60 
61 //*************************************************************************************************************
62 //=============================================================================================================
63 // DEFINE MEMBER METHODS
64 //=============================================================================================================
65 
66 
68 : QWidget(parent)
69 , m_pPluginConnectorConnection(pPluginConnectorConnection)
70 {
71 
72  QWidget *rightFiller = new QWidget;
73  rightFiller->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
74 
75  QWidget *bottomFiller = new QWidget;
76  bottomFiller->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
77 
78  QString sSender = m_pPluginConnectorConnection->getSender()->getName();
79  QString sReceiver = m_pPluginConnectorConnection->getReceiver()->getName();
80 
81  m_pLabel = new QLabel(tr("Connector Connection: ")+sSender+" -> "+sReceiver, this);
82  m_pLabel->setStyleSheet("border: 0px; font-size: 14px; font-weight: bold;");
83 
84 
85  qint32 curRow = 0;
86 
87  QGridLayout *layout = new QGridLayout;
88  layout->setMargin(5);
89  layout->addWidget(m_pLabel,curRow,0,1,3);
90  ++curRow;
91 
92  for(qint32 i = 0; i < m_pPluginConnectorConnection->getSender()->getOutputConnectors().size(); ++i)
93  {
94  QComboBox* m_pComboBox = new QComboBox(this);
95  QString t_sSenderName = m_pPluginConnectorConnection->getSender()->getOutputConnectors()[i]->getName();
96  QLabel* m_pLabelOutput = new QLabel(t_sSenderName,this);
97  m_qMapSenderToReceiverConnections.insert(t_sSenderName,m_pComboBox);
98 
99  layout->addWidget(m_pLabelOutput,curRow,0);
100 
101  ConnectorDataType t_senderConnectorDataType = PluginConnectorConnection::getDataType(m_pPluginConnectorConnection->getSender()->getOutputConnectors()[i]);
102 
103  m_pComboBox->addItem("----");
104 
105  for(qint32 j = 0; j < m_pPluginConnectorConnection->getReceiver()->getInputConnectors().size(); ++j)
106  {
107  ConnectorDataType t_receiverConnectorDataType = PluginConnectorConnection::getDataType(m_pPluginConnectorConnection->getReceiver()->getInputConnectors()[j]);
108  if(t_senderConnectorDataType == t_receiverConnectorDataType)
109  m_pComboBox->addItem(m_pPluginConnectorConnection->getReceiver()->getInputConnectors()[j]->getName());
110  }
111 
112  layout->addWidget(m_pComboBox,curRow,1);
113  ++curRow;
114  }
115 
116  //Look for existing connections
117  QHash<QPair<QString, QString>, QMetaObject::Connection>::iterator it;
118  for (it = pPluginConnectorConnection->m_qHashConnections.begin(); it != pPluginConnectorConnection->m_qHashConnections.end(); ++it)
119  {
120  QComboBox* m_pComboBox = m_qMapSenderToReceiverConnections[it.key().first];
121 
122  for(qint32 i = 0; i < m_pComboBox->count(); ++i)
123  if(QString::compare(m_pComboBox->itemText(i), it.key().second) == 0)
124  m_pComboBox->setCurrentIndex(i);
125  }
126 
127  //Connect Signals
128  foreach(QComboBox* m_pComboBox, m_qMapSenderToReceiverConnections)
129  connect(m_pComboBox, static_cast<void (QComboBox::*)(const QString &)>(&QComboBox::currentIndexChanged), this, &PluginConnectorConnectionWidget::updateReceiver);
130 
131  layout->addWidget(bottomFiller,curRow,0);
132  ++curRow;
133 
134  layout->addWidget(rightFiller,1,3,curRow-1,1);
135 
136  this->setLayout(layout);
137 }
138 
139 
140 //*************************************************************************************************************
141 
143 {
144  m_qMapSenderToReceiverConnections.clear();
145 }
146 
147 
148 //*************************************************************************************************************
149 
150 void PluginConnectorConnectionWidget::updateReceiver(const QString &p_sCurrentReceiver)
151 {
152  //If selection is default
153  if(QString::compare(p_sCurrentReceiver, QString("----")) == 0)
154  return;
155 
156  //get active control using focus
157  QString t_sCurrentSender;
158  QComboBox* t_qComboBox;
159  QMap<QString, QComboBox*>::iterator it;
160  for (it = m_qMapSenderToReceiverConnections.begin(); it != m_qMapSenderToReceiverConnections.end(); ++it)
161  {
162  if(it.value()->hasFocus())
163  {
164  t_sCurrentSender = it.key();
165  t_qComboBox = it.value();
166 
167 
168  qint32 i = 0;
169  for(i = 0; i < m_pPluginConnectorConnection->m_pSender->getOutputConnectors().size(); ++i)
170  if(m_pPluginConnectorConnection->m_pSender->getOutputConnectors()[i]->getName() == t_sCurrentSender)
171  break;
172 
173  qint32 j = 0;
174  for(j = 0; j < m_pPluginConnectorConnection->m_pSender->getOutputConnectors().size(); ++j)
175  if(m_pPluginConnectorConnection->m_pReceiver->getInputConnectors()[j]->getName() == p_sCurrentReceiver)
176  break;
177 
178  m_pPluginConnectorConnection->m_qHashConnections.insert(QPair<QString,QString>(m_pPluginConnectorConnection->m_pSender->getOutputConnectors()[i]->getName(),
179  m_pPluginConnectorConnection->m_pReceiver->getInputConnectors()[j]->getName()),
180  connect(m_pPluginConnectorConnection->m_pSender->getOutputConnectors()[i].data(), &PluginOutputConnector::notify,
181  m_pPluginConnectorConnection->m_pReceiver->getInputConnectors()[j].data(), &PluginInputConnector::update, Qt::BlockingQueuedConnection));
182  }
183  }
184 
185  //Disconnect the rest
186  for (it = m_qMapSenderToReceiverConnections.begin(); it != m_qMapSenderToReceiverConnections.end(); ++it)
187  {
188  if(it.value() != t_qComboBox && it.value()->currentText() == p_sCurrentReceiver)
189  {
190  QPair<QString, QString> t_qPair(it.key(),it.value()->currentText());
191  disconnect(m_pPluginConnectorConnection->m_qHashConnections[t_qPair]);
192  m_pPluginConnectorConnection->m_qHashConnections.remove(t_qPair);
193  it.value()->setCurrentIndex(0);
194  }
195  }
196 }
PluginConnectorConnectionWidget(PluginConnectorConnection *pPluginConnectorConnection, QWidget *parent=0)
Contains the declaration of the PluginConnectorConnection class.
void updateReceiver(const QString &p_sCurrentReceiver)
The PluginConnectorConnection class holds connector connections.
Definition: arrow.h:75
Contains the declaration of the PluginConnectorConnectionWidget class.