-
Notifications
You must be signed in to change notification settings - Fork 0
/
lastfmpassform.cpp
83 lines (72 loc) · 3.35 KB
/
lastfmpassform.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/****************************************************************************}
{ lastfmpassform.cpp - login form for Last.fm authenctication }
{ }
{ Copyright (c) 2017 Alexey Parfenov <zxed@alkatrazstudio.net> }
{ }
{ This file is part of Meson Player. }
{ }
{ Meson Player is free software: you can redistribute it and/or modify it }
{ under the terms of the GNU General Public License as published by }
{ the Free Software Foundation, either version 3 of the License, }
{ or (at your option) any later version. }
{ }
{ Meson Player is distributed in the hope that it will be useful, }
{ but WITHOUT ANY WARRANTY; without even the implied warranty of }
{ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU }
{ General Public License for more details: https://gnu.org/licenses/gpl.html }
{****************************************************************************/
#include "lastfmpassform.h"
static const int inputMaxLen = 100;
static LastfmPassForm* instance = nullptr;
LastfmPassForm::LastfmPassForm() : QDialog()
{
setWindowTitle(tr("Log in to Last.fm"));
setAttribute(Qt::WA_DeleteOnClose);
setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowCloseButtonHint | Qt::Tool | Qt::WindowStaysOnTopHint);
new QVBoxLayout(this);
inputUsername = new QLineEdit();
inputUsername->setMaxLength(inputMaxLen);
inputUsername->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
inputUsername->setPlaceholderText(tr("Your username"));
layout()->addWidget(inputUsername);
inputPassword = new QLineEdit();
inputPassword->setMaxLength(inputMaxLen);
inputPassword->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
inputPassword->setEchoMode(QLineEdit::Password);
inputPassword->setPlaceholderText(tr("Your password"));
layout()->addWidget(inputPassword);
QPushButton* btnOk = new QPushButton();
btnOk->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
btnOk->setText(tr("Log in"));
connect(btnOk, &QPushButton::clicked, [this](){
emit onLogin(inputUsername->text(), inputPassword->text());
});
layout()->addWidget(btnOk);
setMinimumWidth(500);
resize(minimumWidth(), layout()->contentsRect().height());
setMaximumHeight(height());
inputUsername->setFocus();
}
void LastfmPassForm::showForm(const std::function <void (const QString&, const QString&)>& callback)
{
if(instance)
{
instance->raise();
instance->activateWindow();
instance->setFocus();
return;
}
instance = new LastfmPassForm();
instance->show();
instance->activateWindow();
instance->setFocus();
connect(instance, &LastfmPassForm::onLogin,
[callback](const QString& username, const QString& password){
callback(username, password);
instance->close();
}
);
connect(instance, &LastfmPassForm::destroyed, [](){
instance = nullptr;
});
}