summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gui/logindialog.cpp51
-rw-r--r--gui/logindialog.h6
-rw-r--r--gui/logindialog.ui33
-rw-r--r--libsettings/include/keyring.h8
-rw-r--r--libsettings/src/stubkeyring.cpp6
-rw-r--r--libsettings/src/stubkeyring.h2
6 files changed, 88 insertions, 18 deletions
diff --git a/gui/logindialog.cpp b/gui/logindialog.cpp
index 426757a9..842a4541 100644
--- a/gui/logindialog.cpp
+++ b/gui/logindialog.cpp
@@ -15,12 +15,18 @@
#include "logindialog.h"
#include "ui_logindialog.h"
+#include "keyring.h"
LoginDialog::LoginDialog(QWidget *parent, const QString& loginErrMsg) :
QDialog(parent),
ui(new Ui::LoginDialog)
{
ui->setupUi(this);
+ //FIXME: translateable?
+ ui->usernameTextBox->lineEdit()->setPlaceholderText(QApplication::translate("LoginDialog", "Name", 0));
+
+ connect(ui->usernameTextBox, SIGNAL(currentTextChanged(QString)), this, SLOT(userTextChanged(QString)));
+ connect(ui->forgetButton, SIGNAL(clicked(bool)), this, SLOT(forgetCurrentUser()));
if (loginErrMsg.isEmpty())
ui->loginErrorLabel->setVisible(false);
@@ -33,6 +39,10 @@ LoginDialog::LoginDialog(QWidget *parent, const QString& loginErrMsg) :
resize(minimumSizeHint());
layout()->setSizeConstraint(QLayout::SetFixedSize);
+ Keyring * k = Keyring::instance();
+ QStringList accounts = k->getStoredAccounts("minecraft");
+ ui->usernameTextBox->addItems(accounts);
+
}
LoginDialog::~LoginDialog()
@@ -42,10 +52,49 @@ LoginDialog::~LoginDialog()
QString LoginDialog::getUsername() const
{
- return ui->usernameTextBox->text();
+ return ui->usernameTextBox->currentText();
}
QString LoginDialog::getPassword() const
{
return ui->passwordTextBox->text();
}
+
+void LoginDialog::forgetCurrentUser()
+{
+ Keyring * k = Keyring::instance();
+ QString acct = ui->usernameTextBox->currentText();
+ k->removeStoredAccount("minecraft", acct);
+ ui->passwordTextBox->clear();
+ int index = ui->usernameTextBox->findText(acct);
+ if(index != -1)
+ ui->usernameTextBox->removeItem(index);
+}
+
+void LoginDialog::userTextChanged ( const QString& user )
+{
+ Keyring * k = Keyring::instance();
+ QString acct = ui->usernameTextBox->currentText();
+ QString passwd = k->getPassword("minecraft",acct);
+ ui->passwordTextBox->setText(passwd);
+}
+
+
+void LoginDialog::accept()
+{
+ bool saveName = ui->rememberUsernameCheckbox->isChecked();
+ bool savePass = ui->rememberPasswordCheckbox->isChecked();
+ if(saveName)
+ {
+ Keyring * k = Keyring::instance();
+ if(savePass)
+ {
+ k->storePassword("minecraft",getUsername(),getPassword());
+ }
+ else
+ {
+ k->storePassword("minecraft",getUsername(),QString());
+ }
+ }
+ QDialog::accept();
+}
diff --git a/gui/logindialog.h b/gui/logindialog.h
index 1b70dcd5..5f4410f5 100644
--- a/gui/logindialog.h
+++ b/gui/logindialog.h
@@ -32,7 +32,11 @@ public:
QString getUsername() const;
QString getPassword() const;
-
+
+public slots:
+ virtual void accept();
+ virtual void userTextChanged(const QString& user);
+ virtual void forgetCurrentUser();
private:
Ui::LoginDialog *ui;
};
diff --git a/gui/logindialog.ui b/gui/logindialog.ui
index ce41d2f5..0aaad52b 100644
--- a/gui/logindialog.ui
+++ b/gui/logindialog.ui
@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>365</width>
- <height>145</height>
+ <width>476</width>
+ <height>168</height>
</rect>
</property>
<property name="windowTitle">
@@ -31,9 +31,9 @@
</widget>
</item>
<item row="0" column="1">
- <widget class="QLineEdit" name="usernameTextBox">
- <property name="placeholderText">
- <string>Username</string>
+ <widget class="QComboBox" name="usernameTextBox">
+ <property name="editable">
+ <bool>true</bool>
</property>
</widget>
</item>
@@ -54,20 +54,23 @@
</property>
</widget>
</item>
- </layout>
- </item>
- <item>
- <layout class="QHBoxLayout" name="checkboxLayout">
- <item>
- <widget class="QPushButton" name="forceUpdateButton">
- <property name="text">
- <string>&amp;Force Update</string>
+ <item row="0" column="2" rowspan="2">
+ <widget class="QPushButton" name="forgetButton">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
</property>
- <property name="checkable">
- <bool>true</bool>
+ <property name="text">
+ <string>Forget</string>
</property>
</widget>
</item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="checkboxLayout">
<item>
<widget class="QCheckBox" name="rememberUsernameCheckbox">
<property name="sizePolicy">
diff --git a/libsettings/include/keyring.h b/libsettings/include/keyring.h
index 5774e287..299b14b0 100644
--- a/libsettings/include/keyring.h
+++ b/libsettings/include/keyring.h
@@ -72,6 +72,14 @@ public:
*/
virtual QStringList getStoredAccounts(QString service) = 0;
+ /**
+ * @brief Remove the specified account from storage
+ * @param service the service name
+ * @param username the account name
+ * @return
+ */
+ virtual void removeStoredAccount(QString service, QString username) = 0;
+
protected:
/// fall back to StubKeyring if false
virtual bool isValid() { return false; }
diff --git a/libsettings/src/stubkeyring.cpp b/libsettings/src/stubkeyring.cpp
index 963f3dd9..cb03bf79 100644
--- a/libsettings/src/stubkeyring.cpp
+++ b/libsettings/src/stubkeyring.cpp
@@ -90,6 +90,12 @@ QStringList StubKeyring::getStoredAccounts(QString service)
return out;
}
+void StubKeyring::removeStoredAccount ( QString service, QString username )
+{
+ QString key = generateKey(service, username);
+ m_settings.remove(key);
+}
+
StubKeyring::StubKeyring() :
m_settings(QSettings::UserScope, "Orochimarufan", "Keyring")
{
diff --git a/libsettings/src/stubkeyring.h b/libsettings/src/stubkeyring.h
index b5f04e4c..45791c85 100644
--- a/libsettings/src/stubkeyring.h
+++ b/libsettings/src/stubkeyring.h
@@ -29,7 +29,7 @@ public:
virtual QString getPassword(QString service, QString username);
virtual bool hasPassword(QString service, QString username);
virtual QStringList getStoredAccounts(QString service);
-
+ virtual void removeStoredAccount(QString service, QString username);
private:
friend class Keyring;
explicit StubKeyring();