25#include <QApplication>
33 , m_settingsFile(sPath +
QL1S(
"/extensions.ini"))
38void PIM_Handler::loadSettings()
40 QSettings settings(m_settingsFile, QSettings::IniFormat);
42 settings.beginGroup(
QSL(
"PIM"));
43 m_allInfo[PI_LastName] = settings.value(
QSL(
"LastName"), QString()).toString();
44 m_allInfo[PI_FirstName] = settings.value(
QSL(
"FirstName"), QString()).toString();
45 m_allInfo[PI_Email] = settings.value(
QSL(
"Email"), QString()).toString();
46 m_allInfo[PI_Mobile] = settings.value(
QSL(
"Mobile"), QString()).toString();
47 m_allInfo[PI_Phone] = settings.value(
QSL(
"Phone"), QString()).toString();
48 m_allInfo[PI_Address] = settings.value(
QSL(
"Address"), QString()).toString();
49 m_allInfo[PI_City] = settings.value(
QSL(
"City"), QString()).toString();
50 m_allInfo[PI_Zip] = settings.value(
QSL(
"Zip"), QString()).toString();
51 m_allInfo[PI_State] = settings.value(
QSL(
"State"), QString()).toString();
52 m_allInfo[PI_Country] = settings.value(
QSL(
"Country"), QString()).toString();
53 m_allInfo[PI_HomePage] = settings.value(
QSL(
"HomePage"), QString()).toString();
54 m_allInfo[PI_Special1] = settings.value(
QSL(
"Special1"), QString()).toString();
55 m_allInfo[PI_Special2] = settings.value(
QSL(
"Special2"), QString()).toString();
56 m_allInfo[PI_Special3] = settings.value(
QSL(
"Special3"), QString()).toString();
59 m_translations[PI_LastName] = tr(
"Last Name");
60 m_translations[PI_FirstName] = tr(
"First Name");
61 m_translations[PI_Email] = tr(
"E-mail");
62 m_translations[PI_Mobile] = tr(
"Mobile");
63 m_translations[PI_Phone] = tr(
"Phone");
64 m_translations[PI_Address] = tr(
"Address");
65 m_translations[PI_City] = tr(
"City");
66 m_translations[PI_Zip] = tr(
"ZIP Code");
67 m_translations[PI_State] = tr(
"State/Region");
68 m_translations[PI_Country] = tr(
"Country");
69 m_translations[PI_HomePage] = tr(
"Home Page");
70 m_translations[PI_Special1] = tr(
"Custom 1");
71 m_translations[PI_Special2] = tr(
"Custom 2");
72 m_translations[PI_Special3] = tr(
"Custom 3");
74 m_infoMatches[PI_LastName] <<
QSL(
"lastname") <<
QSL(
"surname");
75 m_infoMatches[PI_FirstName] <<
QSL(
"firstname") <<
QSL(
"name");
76 m_infoMatches[PI_Email] <<
QSL(
"email") <<
QSL(
"e-mail") <<
QSL(
"mail");
77 m_infoMatches[PI_Mobile] <<
QSL(
"mobile") <<
QSL(
"mobilephone");
78 m_infoMatches[PI_Phone] <<
QSL(
"phone") <<
QSL(
"telephone");
79 m_infoMatches[PI_Address] <<
QSL(
"address");
80 m_infoMatches[PI_City] <<
QSL(
"city");
81 m_infoMatches[PI_Zip] <<
QSL(
"zip");
82 m_infoMatches[PI_State] <<
QSL(
"state") <<
QSL(
"region");
83 m_infoMatches[PI_Country] <<
QSL(
"country");
84 m_infoMatches[PI_HomePage] <<
QSL(
"homepage") <<
QSL(
"www");
94 connect(m_settings.data(), &QDialog::accepted,
this, &PIM_Handler::loadSettings);
97 m_settings.data()->show();
98 m_settings.data()->raise();
104 m_clickedPos = hitTest.
pos();
114 auto* pimMenu =
new QMenu(tr(
"Insert Personal Information"));
115 pimMenu->setIcon(QIcon(QStringLiteral(
":/PIM/data/PIM.png")));
117 if (!m_allInfo[PI_FirstName].isEmpty() && !m_allInfo[PI_LastName].isEmpty()) {
118 const QString fullname = m_allInfo[PI_FirstName] + QLatin1Char(
' ') + m_allInfo[PI_LastName];
119 QAction* action = pimMenu->addAction(fullname,
this, &PIM_Handler::pimInsert);
120 action->setData(fullname);
123 for (
int i = 0;
i < PI_Max; ++
i) {
124 const QString info = m_allInfo[PI_Type(
i)];
125 if (info.isEmpty()) {
129 QAction* action = pimMenu->addAction(info,
this, &PIM_Handler::pimInsert);
130 action->setData(info);
131 action->setStatusTip(m_translations[PI_Type(
i)]);
134 pimMenu->addSeparator();
135 pimMenu->addAction(tr(
"Edit"),
this, SLOT(
showSettings()));
137 menu->addMenu(pimMenu);
138 menu->addSeparator();
147 bool isEnter =
event->key() == Qt::Key_Return ||
event->key() == Qt::Key_Enter;
148 bool isControlModifier =
event->modifiers() & Qt::ControlModifier;
150 if (!isEnter || !isControlModifier) {
154 QString source =
QL1S(
"var inputs = document.getElementsByTagName('input');"
156 "for (var i = 0; i < inputs.length; ++i) {"
157 " var input = inputs[i];"
158 " if (input.type != 'text' || input.name == '')"
160 " for (var key in table) {"
161 " if (!table.hasOwnProperty(key))"
163 " if (key == input.name || input.name.indexOf(key) != -1) {"
164 " input.value = table[key];"
177 delete m_settings.data();
182 connect(page, &QWebEnginePage::loadFinished,
this, &PIM_Handler::pageLoadFinished);
185void PIM_Handler::pimInsert()
187 if (!m_view || m_clickedPos.isNull())
190 auto* action = qobject_cast<QAction*>(sender());
194 QString info = action->data().toString();
195 info.replace(QLatin1Char(
'"'), QLatin1String(
"\\\""));
197 QString source =
QL1S(
"var e = document.elementFromPoint(%1, %2);"
199 " var v = e.value.substring(0, e.selectionStart);"
200 " v += \"%3\" + e.value.substring(e.selectionEnd);"
203 source = source.arg(m_clickedPos.x()).arg(m_clickedPos.y()).arg(info);
207void PIM_Handler::pageLoadFinished()
209 auto* page = qobject_cast<WebPage*>(sender());
218 QString source =
QL1S(
"var inputs = document.getElementsByTagName('input');"
220 "for (var i = 0; i < inputs.length; ++i) {"
221 " var input = inputs[i];"
222 " if (input.type != 'text' || input.name == '')"
224 " for (var key in table) {"
225 " if (!table.hasOwnProperty(key) || table[key] == '')"
227 " if (key == input.name || input.name.indexOf(key) != -1) {"
228 " input.style['-webkit-appearance'] = 'none';"
229 " input.style['-webkit-box-shadow'] = 'inset 0 0 2px 1px #EEE000';"
238QString PIM_Handler::matchingJsTable()
const
242 QHashIterator<PI_Type, QStringList>
i(m_infoMatches);
243 while (
i.hasNext()) {
246 const auto ivalues =
i.value();
247 for (
const QString &
value : ivalues) {
248 QString key = m_allInfo.value(
i.key());
249 key.replace(
QL1C(
'"'),
QL1S(
"\\\""));
250 values.append(
QSL(
"\"%1\":\"%2\",").arg(
value, key));
254 if (!values.isEmpty()) {
255 values = values.left(values.size() - 1);
258 return QSL(
"{ %1 }").arg(values);
bool keyPress(WebView *view, QKeyEvent *event)
void webPageCreated(WebPage *page)
PIM_Handler(const QString &sPath, QObject *parent=nullptr)
void showSettings(QWidget *parent=nullptr)
void populateWebViewMenu(QMenu *menu, WebView *view, const WebHitTestResult &hitTest)
bool isContentEditable() const
int value(const QColor &c)