Welcome to mirror list, hosted at ThFree Co, Russian Federation.

UserLocalNicknameDialog.cpp « mumble « src - github.com/mumble-voip/mumble.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: bb2dea4e187d504e63a6fcba484131779592b9e7 (plain)
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
84
85
86
87
88
89
90
91
// Copyright 2020-2021 The Mumble Developers. All rights reserved.
// Use of this source code is governed by a BSD-style license
// that can be found in the LICENSE file at the root of the
// Mumble source tree or at <https://www.mumble.info/LICENSE>.

#include "UserLocalNicknameDialog.h"
#include "ClientUser.h"
#include "Database.h"
#include "MainWindow.h"
#include "Global.h"

#include <QtGui/QCloseEvent>
#include <QtWidgets/QPushButton>

UserLocalNicknameDialog::UserLocalNicknameDialog(
	unsigned int sessionId,
	std::unordered_map< unsigned int, NicknameDialogPtr > &qmUserNicknameTracker)
	: QDialog(nullptr), m_clientSession(sessionId), m_qmUserNicknameTracker(qmUserNicknameTracker) {
	setupUi(this);

	qleUserLocalNickname->setFocus();

	qleUserLocalNickname->setAccessibleName(tr("User nickname"));

	ClientUser *user = ClientUser::get(sessionId);
	if (!user) {
		UserLocalNicknameDialog::close();
	} else {
		QString title = tr("Adjusting local nickname for %1").arg(user->qsName);
		setWindowTitle(title);
		qleUserLocalNickname->setText(user->getLocalNickname());
		m_originalNickname = qleUserLocalNickname->text();
	}

	if (Global::get().mw && Global::get().mw->windowFlags() & Qt::WindowStaysOnTopHint) {
		// If the main window is set to always be on top of other windows, we should make the
		// nickname dialog behave the same in order for it to not get hidden behind the main window.
		setWindowFlags(Qt::WindowStaysOnTopHint);
	}
}

void UserLocalNicknameDialog::closeEvent(QCloseEvent *event) {
	m_qmUserNicknameTracker.erase(m_clientSession);
	event->accept();
}

void UserLocalNicknameDialog::present(
	unsigned int sessionId,
	std::unordered_map< unsigned int, NicknameDialogPtr > &qmUserNicknameTracker) {
	if (qmUserNicknameTracker.find(sessionId) != qmUserNicknameTracker.end()) {
		qmUserNicknameTracker.at(sessionId)->show();
		qmUserNicknameTracker.at(sessionId)->raise();
	} else {
		// Make sure to use the custom deleter for QObjects that calls deleteLater() on them instead of using
		// delete directly as the latter can lead to segmentation faults.
		NicknameDialogPtr userNickname(new UserLocalNicknameDialog(sessionId, qmUserNicknameTracker), Mumble::QtUtils::deleteQObject);
		userNickname->show();
		qmUserNicknameTracker.insert(std::make_pair(sessionId, std::move(userNickname)));
	}
}

void UserLocalNicknameDialog::on_qleUserLocalNickname_textChanged(const QString &text) {
	ClientUser *user = ClientUser::get(m_clientSession);
	if (user) {
		user->setLocalNickname(text);
	}
}

void UserLocalNicknameDialog::on_qbbUserLocalNickname_clicked(QAbstractButton *button) {
	if (button == qbbUserLocalNickname->button(QDialogButtonBox::Reset)) {
		qleUserLocalNickname->setText(m_originalNickname);
	} else if (button == qbbUserLocalNickname->button(QDialogButtonBox::Ok)) {
		ClientUser *user = ClientUser::get(m_clientSession);
		if (user) {
			if (!user->qsHash.isEmpty()) {
				Global::get().db->setUserLocalNickname(user->qsHash, user->getLocalNickname());
			} else {
				Global::get().mw->logChangeNotPermanent(QObject::tr("Local Nickname Adjustment..."), user);
			}
		}
		UserLocalNicknameDialog::close();
	} else if (button == qbbUserLocalNickname->button(QDialogButtonBox::Cancel)) {
		qleUserLocalNickname->setText(m_originalNickname);
		UserLocalNicknameDialog::close();
	}
}

void UserLocalNicknameDialog::reject() {
	m_qmUserNicknameTracker.erase(m_clientSession);
	UserLocalNicknameDialog::close();
}