1 #include "qnstgraphicslinkdialog.h"
3 #include <QDesktopWidget>
4 #include <QApplication>
8 #include <QtGui/QListView>
9 #include <QtGui/QStringListModel>
12 CompleteLineEdit::CompleteLineEdit(QStringList words, QWidget *parent)
13 : QLineEdit(parent), words(words)
15 listView =
new QListView(
this);
16 model =
new QStringListModel(
this);
18 listView->setWindowFlags(Qt::ToolTip);
19 listView->setUniformItemSizes(
true);
21 installEventFilter(
this);
23 connect(
this, SIGNAL(textChanged(
const QString &)),
24 this, SLOT(setCompleter(
const QString &)));
26 connect(listView, SIGNAL(clicked(
const QModelIndex &)),
27 this, SLOT(completeText(
const QModelIndex &)));
30 void CompleteLineEdit::setStringList(
const QStringList &words)
35 bool CompleteLineEdit::eventFilter(QObject *
object, QEvent *event)
37 if (
object ==
this && event->type() == QEvent::KeyPress)
39 QKeyEvent *keyEvent =
static_cast<QKeyEvent *
>(event);
40 if (keyEvent->key() == Qt::Key_Tab)
42 if(!listView->isHidden())
44 QModelIndex currentIndex = listView->currentIndex();
45 if (currentIndex.isValid())
47 QString text = listView->currentIndex().data().toString();
57 void CompleteLineEdit::hideEvent ( QHideEvent * event )
68 void CompleteLineEdit::focusInEvent(QFocusEvent *e)
71 QLineEdit::focusInEvent(e);
74 void CompleteLineEdit::keyPressEvent(QKeyEvent *e)
76 if (!listView->isHidden())
79 int count = listView->model()->rowCount();
80 QModelIndex currentIndex = listView->currentIndex();
82 if (Qt::Key_Down == key)
84 int row = currentIndex.row() + 1;
88 QModelIndex index = listView->model()->index(row, 0);
89 listView->setCurrentIndex(index);
91 else if (Qt::Key_Up == key)
93 int row = currentIndex.row() - 1;
99 QModelIndex index = listView->model()->index(row, 0);
100 listView->setCurrentIndex(index);
102 else if (Qt::Key_Escape == key)
106 else if (Qt::Key_Enter == key ||
107 Qt::Key_Return == key )
109 if (currentIndex.isValid())
111 QString text = listView->currentIndex().data().toString();
119 QLineEdit::keyPressEvent(e);
124 QLineEdit::keyPressEvent(e);
128 void CompleteLineEdit::setCompleter(
const QString &text)
141 foreach(QString word, words)
143 if (word.toLower().contains(text.toLower()))
149 model->setStringList(sl);
150 listView->setModel(model);
152 if (model->rowCount() == 0)
156 listView->setMinimumWidth(width());
157 listView->setMaximumWidth(width());
159 QPoint p(0, height());
160 int x = mapToGlobal(p).x();
161 int y = mapToGlobal(p).y() + 1;
163 listView->move(x, y);
167 void CompleteLineEdit::completeText(
const QModelIndex &index)
169 QString text = index.data().toString();
174 QnstGraphicsLinkDialog::QnstGraphicsLinkDialog(QWidget* parent)
175 : QDialog(parent), firstTime(true)
180 this->form.gridLayout_2->addWidget(connLineEdit, 0, 1);
182 connect(connLineEdit, SIGNAL(textChanged(QString)),
183 SLOT(adjustBinds(QString)));
188 QnstGraphicsLinkDialog::~QnstGraphicsLinkDialog()
193 void QnstGraphicsLinkDialog::init(QMap<QString, QnstConnector*> connectors)
195 this->connectors = connectors;
197 form.cbCondition->setEnabled(
false);
198 form.cbCondition->clear();
200 form.cbAction->setEnabled(
false);
201 form.cbAction->clear();
206 strConn << conn->getName();
209 if (strConn.count() > 0){
210 strConn <<
"----------";
215 connLineEdit->setStringList(strConn);
221 setMinimumWidth(350);
223 QWidget *screen = NULL;
224 QRect screenGeometry;
226 if(this->parentWidget())
228 screen = QApplication::desktop()->screen(
229 QApplication::desktop()->screenNumber(this->parentWidget())
232 screenGeometry = QApplication::desktop()->screenGeometry(this->parentWidget());
236 screenGeometry = QApplication::desktop()->screenGeometry();
239 int screenWidth = screenGeometry.width();
240 int screenHeight = screenGeometry.height();
242 int x = screenGeometry.x() + (screenWidth - this->width()) / 2;
243 int y = screenGeometry.y() + (screenHeight - this->height()) / 2;
250 void QnstGraphicsLinkDialog::adjustBinds(QString conn)
252 if (conn ==
"" || conn ==
"----------")
254 form.cbCondition->setEnabled(
false);
255 form.cbCondition->clear();
257 form.cbAction->setEnabled(
false);
258 form.cbAction->clear();
261 else if (conn ==
"New...")
263 form.cbCondition->setEnabled(
true);
264 form.cbCondition->clear();
266 form.cbCondition->addItem(
"onBegin");
267 form.cbCondition->addItem(
"onEnd");
268 form.cbCondition->addItem(
"onSelection");
269 form.cbCondition->addItem(
"onResume");
270 form.cbCondition->addItem(
"onPause");
272 form.cbAction->setEnabled(
true);
273 form.cbAction->clear();
275 form.cbAction->addItem(
"start");
276 form.cbAction->addItem(
"stop");
277 form.cbAction->addItem(
"resume");
278 form.cbAction->addItem(
"pause");
279 form.cbAction->addItem(
"set");
285 if(connectors.contains(conn))
287 oconn = connectors[conn];
291 form.cbAction->clear();
292 form.cbCondition->clear();
296 form.cbCondition->setEnabled(
true);
297 form.cbCondition->clear();
299 if (oconn->getName() == conn)
301 foreach(QString cond, oconn->getConditions().values())
303 form.cbCondition->addItem(cond);
307 form.cbAction->setEnabled(
true);
308 form.cbAction->clear();
310 if (oconn->getName() == conn)
312 foreach(QString act, oconn->getActions().values()){
313 form.cbAction->addItem(act);
319 void QnstGraphicsLinkDialog::showEvent(QShowEvent *evt)
321 this->connLineEdit->setText(
"");
322 this->connLineEdit->setFocus();
325 QString QnstGraphicsLinkDialog::getCurrentConnector()
327 return this->connLineEdit->text();