1 #include "qipaddressedit.h"
2 #include "qipaddressedititem.h"
3
4 #include <QtGui>
5 #include <QStringList>
6 #include <QHBoxLayout>
7 #include <QLabel>
8 #include "KeyboardGlobal.h"
9
QIpAddressEdit(QWidget * parent)10 QIpAddressEdit::QIpAddressEdit(QWidget *parent)
11 : QWidget(parent)
12 {
13 readOnly = false;
14 item1 = new QIpAddressEditItem(this);
15 item2 = new QIpAddressEditItem(this);
16 item3 = new QIpAddressEditItem(this);
17 item4 = new QIpAddressEditItem(this);
18 item1->setMaximumSize(100, 30);
19 item2->setMaximumSize(100, 30);
20 item3->setMaximumSize(100, 30);
21 item4->setMaximumSize(100, 30);
22 item1->setNextItem(item2);
23 item2->setNextItem(item3);
24 item3->setNextItem(item4);
25 item4->setPreviousItem(item3);
26 item3->setPreviousItem(item2);
27 item2->setPreviousItem(item1);
28
29 QHBoxLayout * mainLayout = new QHBoxLayout(this);
30 mainLayout->addWidget(item1);
31 mainLayout->addWidget(new QLabel(".", this));
32 mainLayout->addWidget(item2);
33 mainLayout->addWidget(new QLabel(".", this));
34 mainLayout->addWidget(item3);
35 mainLayout->addWidget(new QLabel(".", this));
36 mainLayout->addWidget(item4);
37
38 GlobalInit();
39 item1->installEventFilter(this);
40 item2->installEventFilter(this);
41 item3->installEventFilter(this);
42 item4->installEventFilter(this);
43
44 this->setLayout(mainLayout);
45 }
46
~QIpAddressEdit()47 QIpAddressEdit::~QIpAddressEdit()
48 {
49 delete item1;
50 delete item2;
51 delete item3;
52 delete item4;
53 }
54
eventFilter(QObject * watched,QEvent * event)55 bool QIpAddressEdit::eventFilter(QObject *watched, QEvent *event)
56 {
57 static bool mFocusIn = false;
58 if (event->type()==QEvent::FocusIn)
59 {
60 mFocusIn = true;
61 }
62 else if (event->type()==QEvent::FocusOut)
63 {
64 PlatformInputContextBase->FocusOut(watched);
65 mFocusIn = false;
66 }
67
68 if (mFocusIn && event->type() == QEvent::MouseButtonPress) {
69 QMouseEvent *e = (QMouseEvent *)event;
70 PlatformInputContextBase->FocusIn(watched, e->globalPos());
71 }
72
73 return QWidget::eventFilter(watched,event);
74 }
75
setText(const QString & ip)76 void QIpAddressEdit::setText(const QString &ip)
77 {
78 QStringList itemsText = ip.split(".");
79 if(itemsText.size() == 4)
80 {
81 item1->setText(itemsText[0]);
82 item2->setText(itemsText[1]);
83 item3->setText(itemsText[2]);
84 item4->setText(itemsText[3]);
85
86 emit textChanged(ip);
87 emit textEdited(ip);
88 }
89 }
90
text() const91 QString QIpAddressEdit::text() const
92 {
93 return QString("%1.%2.%3.%4")
94 .arg(item1->text())
95 .arg(item2->text())
96 .arg(item3->text())
97 .arg(item4->text());
98 }
99
setStyleSheet(const QString & styleSheet)100 void QIpAddressEdit::setStyleSheet(const QString &styleSheet)
101 {
102 item1->setStyleSheet(styleSheet);
103 item2->setStyleSheet(styleSheet);
104 item3->setStyleSheet(styleSheet);
105 item4->setStyleSheet(styleSheet);
106 }
107
ipChanged(const QString &)108 void QIpAddressEdit::ipChanged(const QString &)
109 {
110 emit textChanged(text());
111 }
112
ipEdited(const QString &)113 void QIpAddressEdit::ipEdited(const QString &)
114 {
115 emit textEdited(text());
116 }
117
setReadOnly(bool model)118 void QIpAddressEdit::setReadOnly(bool model)
119 {
120 readOnly = model;
121 item1->setReadOnly(model);
122 item2->setReadOnly(model);
123 item3->setReadOnly(model);
124 item4->setReadOnly(model);
125 }
126
clear()127 void QIpAddressEdit::clear()
128 {
129 item1->clear();
130 item2->clear();
131 item3->clear();
132 item4->clear();
133 }
134