refactor(GUI): Move remaining messsage box functionality to new class

* Pass MessageBoxManager instantiation around instead of relying on a singleton
* Mock MessageBoxManager for unit tests when needed, since they don't have a
  QApplication which is required for creating QWidgets
* Remove GUI class, which didn't have a clear purpose
reviewable/pr6566/r20
Anthony Bilinski 2022-03-13 06:04:24 -07:00
parent 3bd85452da
commit b24faabf42
No known key found for this signature in database
GPG Key ID: 2AA8E0DA1B31FB3C
111 changed files with 973 additions and 755 deletions

View File

@ -448,8 +448,6 @@ set(${PROJECT_NAME}_SOURCES
src/widget/genericchatroomwidget.h
src/widget/groupwidget.cpp
src/widget/groupwidget.h
src/widget/gui.cpp
src/widget/gui.h
src/widget/loginscreen.cpp
src/widget/loginscreen.h
src/widget/maskablepixmapwidget.cpp
@ -470,6 +468,10 @@ set(${PROJECT_NAME}_SOURCES
src/widget/tool/activatedialog.h
src/widget/tool/adjustingscrollarea.cpp
src/widget/tool/adjustingscrollarea.h
src/widget/tool/imessageboxmanager.h
src/widget/tool/imessageboxmanager.cpp
src/widget/tool/messageboxmanager.cpp
src/widget/tool/messageboxmanager.h
src/widget/tool/callconfirmwidget.cpp
src/widget/tool/callconfirmwidget.h
src/widget/tool/chattextedit.cpp

View File

@ -395,7 +395,6 @@ The following example demonstrates the above include rules:
#include "persistence/profile.h"
#include "persistence/profilelocker.h"
#include "persistence/settings.h"
#include "widget/gui.h"
#include <QCoreApplication>
#include <QThread>

View File

@ -173,10 +173,10 @@ ChatMessage::Ptr ChatMessage::createChatInfoMessage(const QString& rawMessage,
return msg;
}
ChatMessage::Ptr ChatMessage::createFileTransferMessage(const QString& sender, CoreFile& coreFile,
ToxFile file, bool isMe, const QDateTime& date,
DocumentCache& documentCache,
Settings& settings, Style& style)
ChatMessage::Ptr ChatMessage::createFileTransferMessage(
const QString& sender, CoreFile& coreFile, ToxFile file, bool isMe,
const QDateTime& date, DocumentCache& documentCache, Settings& settings,
Style& style, IMessageBoxManager& messageBoxManager)
{
ChatMessage::Ptr msg = ChatMessage::Ptr(new ChatMessage(documentCache, settings, style));
@ -189,7 +189,7 @@ ChatMessage::Ptr ChatMessage::createFileTransferMessage(const QString& sender, C
msg->addColumn(new Text(documentCache, settings, style, sender, authorFont, true),
ColumnFormat(NAME_COL_WIDTH, ColumnFormat::FixedSize, ColumnFormat::Right));
msg->addColumn(new ChatLineContentProxy(new FileTransferWidget(
nullptr, coreFile, file, settings, style), 320, 0.6f),
nullptr, coreFile, file, settings, style, messageBoxManager), 320, 0.6f),
ColumnFormat(1.0, ColumnFormat::VariableSize));
msg->addColumn(new Timestamp(date, settings.getTimestampFormat(), baseFont,
documentCache, settings, style),

View File

@ -31,6 +31,7 @@ class DocumentCache;
class SmileyPack;
class Settings;
class Style;
class IMessageBoxManager;
class ChatMessage : public ChatLine
{
@ -65,7 +66,7 @@ public:
Style& style);
static ChatMessage::Ptr createFileTransferMessage(const QString& sender, CoreFile& coreFile,
ToxFile file, bool isMe, const QDateTime& date,
DocumentCache& documentCache, Settings& settings, Style& style);
DocumentCache& documentCache, Settings& settings, Style& style, IMessageBoxManager& messageBoxManager);
static ChatMessage::Ptr createTypingNotification(DocumentCache& documentCache, Settings& settings, Style& style);
static ChatMessage::Ptr createBusyNotification(DocumentCache& documentCache, Settings& settings, Style& style);

View File

@ -23,7 +23,6 @@
#include "chatmessage.h"
#include "content/filetransferwidget.h"
#include "content/text.h"
#include "src/widget/gui.h"
#include "src/widget/translator.h"
#include "src/widget/style.h"
#include "src/persistence/settings.h"
@ -211,7 +210,8 @@ ChatLogIdx clampedAdd(ChatLogIdx idx, int val, IChatLog& chatLog)
ChatWidget::ChatWidget(IChatLog& chatLog_, const Core& core_, DocumentCache& documentCache_,
SmileyPack& smileyPack_, Settings& settings_, Style& style_, QWidget* parent)
SmileyPack& smileyPack_, Settings& settings_, Style& style_,
IMessageBoxManager& messageBoxManager_, QWidget* parent)
: QGraphicsView(parent)
, selectionRectColor{style_.getColor(Style::ColorPalette::SelectText)}
, chatLog(chatLog_)
@ -221,6 +221,7 @@ ChatWidget::ChatWidget(IChatLog& chatLog_, const Core& core_, DocumentCache& doc
, smileyPack{smileyPack_}
, settings(settings_)
, style{style_}
, messageBoxManager{messageBoxManager_}
{
// Create the scene
busyScene = new QGraphicsScene(this);
@ -1460,7 +1461,7 @@ void ChatWidget::renderFile(QString displayName, ToxFile file, bool isSelf, QDat
CoreFile* coreFile = core.getCoreFile();
assert(coreFile);
chatMessage = ChatMessage::createFileTransferMessage(displayName, *coreFile,
file, isSelf, timestamp, documentCache, settings, style);
file, isSelf, timestamp, documentCache, settings, style, messageBoxManager);
} else {
auto proxy = static_cast<ChatLineContentProxy*>(chatMessage->getContent(1));
assert(proxy->getWidgetType() == ChatLineContentProxy::FileTransferWidgetType);

View File

@ -37,6 +37,7 @@ class SmileyPack;
class Settings;
class Style;
class ChatLineStorage;
class IMessageBoxManager;
static const size_t DEF_NUM_MSG_TO_LOAD = 100;
class ChatWidget : public QGraphicsView
@ -44,7 +45,8 @@ class ChatWidget : public QGraphicsView
Q_OBJECT
public:
ChatWidget(IChatLog& chatLog_, const Core& core_, DocumentCache& documentCache,
SmileyPack& smileyPack, Settings& settings, Style& style, QWidget* parent = nullptr);
SmileyPack& smileyPack, Settings& settings, Style& style,
IMessageBoxManager& messageBoxManager, QWidget* parent = nullptr);
virtual ~ChatWidget();
void insertChatlines(std::map<ChatLogIdx, ChatLine::Ptr> chatLines);
@ -220,4 +222,5 @@ private:
SmileyPack& smileyPack;
Settings& settings;
Style& style;
IMessageBoxManager& messageBoxManager;
};

View File

@ -22,9 +22,9 @@
#include "src/core/corefile.h"
#include "src/persistence/settings.h"
#include "src/widget/gui.h"
#include "src/widget/style.h"
#include "src/widget/widget.h"
#include "src/widget/tool/imessageboxmanager.h"
#include "src/model/exiftransform.h"
#include "util/display.h"
@ -49,7 +49,7 @@
// downloaded to.
FileTransferWidget::FileTransferWidget(QWidget* parent, CoreFile& _coreFile,
ToxFile file, Settings& settings_, Style& style_)
ToxFile file, Settings& settings_, Style& style_, IMessageBoxManager& messageBoxManager_)
: QWidget(parent)
, coreFile{_coreFile}
, ui(new Ui::FileTransferWidget)
@ -60,6 +60,7 @@ FileTransferWidget::FileTransferWidget(QWidget* parent, CoreFile& _coreFile,
, active(true)
, settings(settings_)
, style{style_}
, messageBoxManager{messageBoxManager_}
{
ui->setupUi(this);
@ -140,7 +141,7 @@ void FileTransferWidget::acceptTransfer(const QString& filepath)
// test if writable
if (!tryRemoveFile(filepath)) {
GUI::showWarning(tr("Location not writable", "Title of permissions popup"),
messageBoxManager.showWarning(tr("Location not writable", "Title of permissions popup"),
tr("You do not have permission to write that location. Choose another, or "
"cancel the save dialog.",
"text of permissions popup"));
@ -477,7 +478,7 @@ void FileTransferWidget::handleButton(QPushButton* btn)
}
if (btn->objectName() == "ok" || btn->objectName() == "previewButton") {
Widget::confirmExecutableOpen(QFileInfo(fileInfo.filePath));
messageBoxManager.confirmExecutableOpen(QFileInfo(fileInfo.filePath));
} else if (btn->objectName() == "dir") {
QString dirPath = QFileInfo(fileInfo.filePath).dir().path();
QDesktopServices::openUrl(QUrl::fromLocalFile(dirPath));

View File

@ -35,6 +35,7 @@ class QVariantAnimation;
class QPushButton;
class Settings;
class Style;
class IMessageBoxManager;
class FileTransferWidget : public QWidget
{
@ -42,7 +43,7 @@ class FileTransferWidget : public QWidget
public:
FileTransferWidget(QWidget* parent, CoreFile& _coreFile, ToxFile file,
Settings& settings, Style& style);
Settings& settings, Style& style, IMessageBoxManager& messageBoxManager);
virtual ~FileTransferWidget();
bool isActive() const;
void onFileTransferUpdate(ToxFile file);
@ -93,4 +94,5 @@ private:
ToxFile::FileStatus lastStatus = ToxFile::INITIALIZING;
Settings& settings;
Style& style;
IMessageBoxManager& messageBoxManager;
};

View File

@ -27,6 +27,7 @@
#include "src/video/camerasource.h"
#include "src/widget/loginscreen.h"
#include "src/widget/translator.h"
#include "src/widget/tool/messageboxmanager.h"
#include "widget/widget.h"
#include <QApplication>
#include <QCommandLineParser>
@ -57,6 +58,7 @@ QMutex* logBufferMutex = new QMutex();
std::unique_ptr<Settings> settings;
std::unique_ptr<ToxSave> toxSave;
std::unique_ptr<MessageBoxManager> messageBoxManager;
void cleanup()
{
@ -236,7 +238,8 @@ int main(int argc, char* argv[])
qWarning() << "Couldn't load font";
}
settings = std::unique_ptr<Settings>(new Settings());
messageBoxManager = std::unique_ptr<MessageBoxManager>(new MessageBoxManager());
settings = std::unique_ptr<Settings>(new Settings(*messageBoxManager));
QString locale = settings->getTranslation();
// We need to init the resources in the translations_library explicitely.
@ -406,13 +409,14 @@ int main(int argc, char* argv[])
// note: Because Settings is shouldering global settings as well as model specific ones it
// cannot be integrated into a central model object yet
nexus.setSettings(settings.get());
nexus.setMessageBoxManager(messageBoxManager.get());
auto& cameraSource = Nexus::getCameraSource();
// Autologin
// TODO (kriby): Shift responsibility of linking views to model objects from nexus
// Further: generate view instances separately (loginScreen, mainGUI, audio)
Profile* profile = nullptr;
if (autoLogin && Profile::exists(profileName, settings->getPaths()) && !Profile::isEncrypted(profileName, settings->getPaths())) {
profile = Profile::loadProfile(profileName, QString(), *settings, &parser, cameraSource);
profile = Profile::loadProfile(profileName, QString(), *settings, &parser, cameraSource, *messageBoxManager);
if (!profile) {
QMessageBox::information(nullptr, QObject::tr("Error"),
QObject::tr("Failed to load profile automatically."));
@ -429,7 +433,7 @@ int main(int argc, char* argv[])
profile = nexus.getProfile();
}
uriDialog = std::unique_ptr<ToxURIDialog>(new ToxURIDialog(nullptr, profile->getCore()));
uriDialog = std::unique_ptr<ToxURIDialog>(new ToxURIDialog(nullptr, profile->getCore(), *messageBoxManager));
if (ipc.isAttached()) {
// Start to accept Inter-process communication

View File

@ -19,7 +19,7 @@
#include "src/net/toxuri.h"
#include "src/core/core.h"
#include "src/widget/gui.h"
#include "src/widget/tool/imessageboxmanager.h"
#include <QByteArray>
#include <QCoreApplication>
#include <QDialogButtonBox>
@ -52,7 +52,7 @@ bool ToxURIDialog::handleToxURI(const QString& toxURI)
}
if (!error.isEmpty()) {
GUI::showWarning(QMessageBox::tr("Couldn't add friend"), error);
messageBoxManager.showWarning(QMessageBox::tr("Couldn't add friend"), error);
return false;
}
@ -72,9 +72,10 @@ void ToxURIDialog::setUserId(const QString& userId)
userIdEdit->setText(userId);
}
ToxURIDialog::ToxURIDialog(QWidget* parent, Core& _core)
ToxURIDialog::ToxURIDialog(QWidget* parent, Core& core_, IMessageBoxManager& messageBoxManager_)
: QDialog(parent)
, core{_core}
, core{core_}
, messageBoxManager{messageBoxManager_}
{
const QString defaultMessage =
QObject::tr("%1 here! Tox me maybe?",

View File

@ -28,11 +28,12 @@ class QByteArray;
class QLabel;
class QLineEdit;
class QPlainTextEdit;
class IMessageBoxManager;
class ToxURIDialog : public QDialog
{
Q_OBJECT
public:
explicit ToxURIDialog(QWidget* parent, Core& _core);
ToxURIDialog(QWidget* parent, Core& core, IMessageBoxManager& messageBoxManager);
QString getRequestMessage();
bool handleToxURI(const QString& toxURI);
@ -44,4 +45,5 @@ private:
QLabel* friendsLabel;
QLineEdit* userIdEdit;
Core& core;
IMessageBoxManager& messageBoxManager;
};

View File

@ -28,8 +28,8 @@
#include "src/widget/widget.h"
#include "src/widget/style.h"
#include "video/camerasource.h"
#include "widget/gui.h"
#include "widget/loginscreen.h"
#include "src/widget/tool/messageboxmanager.h"
#include "audio/audio.h"
#include <QApplication>
@ -235,11 +235,10 @@ void Nexus::showMainGUI()
assert(profile);
// Create GUI
widget = new Widget(*profile, *audioControl, *cameraSource, *settings, *style);
widget = new Widget(*profile, *audioControl, *cameraSource, *settings, *style, *messageBoxManager);
// Start GUI
widget->init();
GUI::getInstance();
// Zetok protection
// There are small instants on startup during which no
@ -308,7 +307,8 @@ Profile* Nexus::getProfile()
*/
void Nexus::onCreateNewProfile(const QString& name, const QString& pass)
{
setProfile(Profile::createProfile(name, pass, *settings, parser, *cameraSource));
setProfile(Profile::createProfile(name, pass, *settings, parser, *cameraSource,
*messageBoxManager));
parser = nullptr; // only apply cmdline proxy settings once
}
@ -317,7 +317,8 @@ void Nexus::onCreateNewProfile(const QString& name, const QString& pass)
*/
void Nexus::onLoadProfile(const QString& name, const QString& pass)
{
setProfile(Profile::loadProfile(name, pass, *settings, parser, *cameraSource));
setProfile(Profile::loadProfile(name, pass, *settings, parser, *cameraSource,
*messageBoxManager));
parser = nullptr; // only apply cmdline proxy settings once
}
/**
@ -356,6 +357,11 @@ CameraSource& Nexus::getCameraSource()
return *getInstance().cameraSource;
}
void Nexus::setMessageBoxManager(IMessageBoxManager* messageBoxManager_)
{
messageBoxManager = messageBoxManager_;
}
#ifdef Q_OS_MAC
void Nexus::retranslateUi()
{

View File

@ -34,6 +34,7 @@ class Core;
class QCommandLineParser;
class CameraSource;
class Style;
class IMessageBoxManager;
#ifdef Q_OS_MAC
class QMenuBar;
@ -51,6 +52,7 @@ public:
void start();
void showMainGUI();
void setSettings(Settings* settings_);
void setMessageBoxManager(IMessageBoxManager* messageBoxManager);
void setParser(QCommandLineParser* parser_);
static Nexus& getInstance();
static void destroyInstance();
@ -111,4 +113,5 @@ private:
QCommandLineParser* parser = nullptr;
std::unique_ptr<CameraSource> cameraSource;
std::unique_ptr<Style> style;
IMessageBoxManager* messageBoxManager = nullptr;
};

View File

@ -37,9 +37,9 @@
#include "src/net/avatarbroadcaster.h"
#include "src/net/bootstrapnodeupdater.h"
#include "src/nexus.h"
#include "src/widget/gui.h"
#include "src/widget/tool/identicon.h"
#include "src/widget/widget.h"
#include "src/widget/tool/imessageboxmanager.h"
namespace {
enum class LoadToxDataError
@ -294,13 +294,15 @@ void Profile::initCore(const QByteArray& toxsave, Settings& s, bool isNewProfile
avatarBroadcaster = std::unique_ptr<AvatarBroadcaster>(new AvatarBroadcaster(*core));
}
Profile::Profile(const QString& name_, std::unique_ptr<ToxEncrypt> passkey_, Paths& paths_, Settings& settings_)
Profile::Profile(const QString& name_, std::unique_ptr<ToxEncrypt> passkey_, Paths& paths_,
Settings& settings_, IMessageBoxManager& messageBoxManager_)
: name{name_}
, passkey{std::move(passkey_)}
, isRemoved{false}
, encrypted{passkey != nullptr}
, paths{paths_}
, settings{settings_}
, messageBoxManager{messageBoxManager_}
{}
/**
@ -312,7 +314,8 @@ Profile::Profile(const QString& name_, std::unique_ptr<ToxEncrypt> passkey_, Pat
* @note If the profile is already in use return nullptr.
*/
Profile* Profile::loadProfile(const QString& name, const QString& password, Settings& settings,
const QCommandLineParser* parser, CameraSource& cameraSource)
const QCommandLineParser* parser, CameraSource& cameraSource,
IMessageBoxManager& messageBoxManager)
{
if (ProfileLocker::hasLock()) {
qCritical() << "Tried to load profile " << name << ", but another profile is already locked!";
@ -334,7 +337,7 @@ Profile* Profile::loadProfile(const QString& name, const QString& password, Sett
return nullptr;
}
Profile* p = new Profile(name, std::move(tmpKey), paths, settings);
Profile* p = new Profile(name, std::move(tmpKey), paths, settings, messageBoxManager);
// Core settings are saved per profile, need to load them before starting Core
constexpr bool isNewProfile = false;
@ -355,7 +358,8 @@ Profile* Profile::loadProfile(const QString& name, const QString& password, Sett
* @note If the profile is already in use return nullptr.
*/
Profile* Profile::createProfile(const QString& name, const QString& password, Settings& settings,
const QCommandLineParser* parser, CameraSource& cameraSource)
const QCommandLineParser* parser, CameraSource& cameraSource,
IMessageBoxManager& messageBoxManager)
{
CreateToxDataError error;
Paths& paths = settings.getPaths();
@ -367,7 +371,7 @@ Profile* Profile::createProfile(const QString& name, const QString& password, Se
}
settings.createPersonal(name);
Profile* p = new Profile(name, std::move(tmpKey), paths, settings);
Profile* p = new Profile(name, std::move(tmpKey), paths, settings, messageBoxManager);
constexpr bool isNewProfile = true;
settings.updateProfileData(p, parser, isNewProfile);
@ -629,7 +633,7 @@ void Profile::loadDatabase(QString password)
QByteArray salt = core->getSelfPublicKey().getByteArray();
if (salt.size() != TOX_PASS_SALT_LENGTH) {
qWarning() << "Couldn't compute salt from public key" << name;
GUI::showError(QObject::tr("Error"),
messageBoxManager.showError(QObject::tr("Error"),
QObject::tr("qTox couldn't open your chat logs, they will be disabled."));
}
// At this point it's too early to load the personal settings (Nexus will do it), so we always
@ -641,7 +645,7 @@ void Profile::loadDatabase(QString password)
history.reset(new History(database, settings));
} else {
qWarning() << "Failed to open database for profile" << name;
GUI::showError(QObject::tr("Error"),
messageBoxManager.showError(QObject::tr("Error"),
QObject::tr("qTox couldn't open your chat logs, they will be disabled."));
}
}

View File

@ -39,6 +39,7 @@ class Settings;
class QCommandLineParser;
class ToxPk;
class CameraSource;
class IMessageBoxManager;
class Profile : public QObject
{
@ -46,9 +47,10 @@ class Profile : public QObject
public:
static Profile* loadProfile(const QString& name, const QString& password, Settings& settings,
const QCommandLineParser* parser, CameraSource& cameraSource);
const QCommandLineParser* parser, CameraSource& cameraSource,
IMessageBoxManager& messageBoxManager);
static Profile* createProfile(const QString& name, const QString& password, Settings& settings,
const QCommandLineParser* parser, CameraSource& cameraSource);
const QCommandLineParser* parser, CameraSource& cameraSource, IMessageBoxManager& messageBoxManager);
~Profile();
Core& getCore() const;
@ -105,7 +107,8 @@ private slots:
void onAvatarOfferReceived(uint32_t friendId, uint32_t fileId, const QByteArray& avatarHash, uint64_t filesize);
private:
Profile(const QString& name_, std::unique_ptr<ToxEncrypt> passkey_, Paths& paths_, Settings &settings_);
Profile(const QString& name_, std::unique_ptr<ToxEncrypt> passkey_, Paths& paths_,
Settings &settings_, IMessageBoxManager& messageBoxManager);
static QStringList getFilesByExt(QString extension, Settings& settings);
QString avatarPath(const ToxPk& owner, bool forceUnencrypted = false);
bool saveToxSave(QByteArray data);
@ -125,4 +128,5 @@ private:
std::unique_ptr<BootstrapNodeUpdater> bootstrapNodes;
Paths& paths;
Settings& settings;
IMessageBoxManager& messageBoxManager;
};

View File

@ -28,8 +28,8 @@
#include "src/persistence/globalsettingsupgrader.h"
#include "src/persistence/personalsettingsupgrader.h"
#include "src/persistence/smileypack.h"
#include "src/widget/gui.h"
#include "src/widget/style.h"
#include "src/widget/tool/imessageboxmanager.h"
#ifdef QTOX_PLATFORM_EXT
#include "src/platform/autorun.h"
#endif
@ -66,10 +66,11 @@ QThread* Settings::settingsThread{nullptr};
static constexpr int GLOBAL_SETTINGS_VERSION = 1;
static constexpr int PERSONAL_SETTINGS_VERSION = 1;
Settings::Settings()
Settings::Settings(IMessageBoxManager& messageBoxManager_)
: loaded(false)
, useCustomDhtList{false}
, currentProfileId(0)
, messageBoxManager{messageBoxManager_}
{
settingsThread = new QThread();
settingsThread->setObjectName("qTox Settings");
@ -491,7 +492,7 @@ void Settings::loadPersonal(QString profileName, const ToxEncrypt* passKey, bool
auto upgradeSuccess = PersonalSettingsUpgrader::doUpgrade(ps, personalSettingsVersion, PERSONAL_SETTINGS_VERSION);
if (!upgradeSuccess) {
GUI::showError(tr("Failed to load personal settings"),
messageBoxManager.showError(tr("Failed to load personal settings"),
tr("Unable to upgrade settings from version %1 to version %2. Cannot start qTox.")
.arg(personalSettingsVersion)
.arg(PERSONAL_SETTINGS_VERSION));

View File

@ -44,6 +44,7 @@
class Profile;
class QCommandLineParser;
class IMessageBoxManager;
namespace Db {
enum class syncType;
@ -147,7 +148,7 @@ public:
};
public:
Settings();
explicit Settings(IMessageBoxManager& messageBoxManager);
~Settings();
Settings(Settings& settings) = delete;
Settings& operator=(const Settings&) = delete;
@ -716,4 +717,5 @@ private:
Paths paths;
int globalSettingsVersion = 0;
int personalSettingsVersion = 0;
IMessageBoxManager& messageBoxManager;
};

View File

@ -19,7 +19,6 @@
#include "toxsave.h"
#include "src/persistence/settings.h"
#include "src/widget/gui.h"
#include "src/widget/widget.h"
#include "src/nexus.h"
#include "src/widget/tool/profileimporter.h"

View File

@ -18,7 +18,7 @@
*/
#include "aboutfriendform.h"
#include "src/widget/gui.h"
#include "src/widget/tool/imessageboxmanager.h"
#include "ui_aboutfriendform.h"
#include "src/core/core.h"
#include "src/widget/style.h"
@ -37,12 +37,13 @@ QString getAutoAcceptDir(const QString& dir)
} // namespace
AboutFriendForm::AboutFriendForm(std::unique_ptr<IAboutFriend> about_,
Settings& settings_, Style& style_, QWidget* parent)
Settings& settings_, Style& style_, IMessageBoxManager& messageBoxManager_, QWidget* parent)
: QDialog(parent)
, ui(new Ui::AboutFriendForm)
, about{std::move(about_)}
, settings{settings_}
, style{style_}
, messageBoxManager{messageBoxManager_}
{
ui->setupUi(this);
ui->label_4->hide();
@ -143,7 +144,7 @@ void AboutFriendForm::onAcceptedClicked()
void AboutFriendForm::onRemoveHistoryClicked()
{
const bool retYes = GUI::askQuestion(tr("Confirmation"),
const bool retYes = messageBoxManager.askQuestion(tr("Confirmation"),
tr("Are you sure to remove %1 chat history?").arg(about->getName()),
/* defaultAns = */ false, /* warning = */ true, /* yesno = */ true);
if (!retYes) {
@ -153,7 +154,7 @@ void AboutFriendForm::onRemoveHistoryClicked()
const bool result = about->clearHistory();
if (!result) {
GUI::showWarning(tr("History removed"),
messageBoxManager.showWarning(tr("History removed"),
tr("Failed to remove chat history with %1!").arg(about->getName()).toHtmlEscaped());
return;
}

View File

@ -32,6 +32,7 @@ class AboutFriendForm;
class Settings;
class Style;
class IMessageBoxManager;
class AboutFriendForm : public QDialog
{
@ -39,7 +40,7 @@ class AboutFriendForm : public QDialog
public:
AboutFriendForm(std::unique_ptr<IAboutFriend> about, Settings& settings,
Style& style, QWidget* parent = nullptr);
Style& style, IMessageBoxManager& messageBoxManager, QWidget* parent = nullptr);
~AboutFriendForm();
private:
@ -47,6 +48,7 @@ private:
const std::unique_ptr<IAboutFriend> about;
Settings& settings;
Style& style;
IMessageBoxManager& messageBoxManager;
signals:
void histroyRemoved();

View File

@ -22,7 +22,6 @@
#include "src/model/status.h"
#include "src/widget/gui.h"
#include "src/widget/maskablepixmapwidget.h"
#include "src/widget/style.h"
#include "src/widget/tool/callconfirmwidget.h"

View File

@ -41,12 +41,13 @@
QHash<int, CircleWidget*> CircleWidget::circleList;
CircleWidget::CircleWidget(const Core &core_, FriendListWidget* parent, int id_,
Settings& settings_, Style& style_)
Settings& settings_, Style& style_, IMessageBoxManager& messageBoxManager_)
: CategoryWidget(isCompact(), settings_, style_, parent)
, id(id_)
, core{core_}
, settings{settings_}
, style{style_}
, messageBoxManager{messageBoxManager_}
{
setName(settings.getCircleName(id), false);
circleList[id] = this;
@ -117,7 +118,7 @@ void CircleWidget::contextMenuEvent(QContextMenuEvent* event)
circleList.remove(replacedCircle);
} else if (selectedItem == openAction) {
ContentDialog* dialog = new ContentDialog(core, settings, style);
ContentDialog* dialog = new ContentDialog(core, settings, style, messageBoxManager);
emit newContentDialog(*dialog);
for (int i = 0; i < friendOnlineLayout()->count(); ++i) {
QWidget* const widget = friendOnlineLayout()->itemAt(i)->widget();

View File

@ -25,13 +25,14 @@ class ContentDialog;
class Core;
class Settings;
class Style;
class IMessageBoxManager;
class CircleWidget final : public CategoryWidget
{
Q_OBJECT
public:
CircleWidget(const Core& core_, FriendListWidget* parent, int id_, Settings& settings,
Style& style);
Style& style, IMessageBoxManager& messageboxManager);
~CircleWidget();
void editName();
@ -59,4 +60,5 @@ private:
const Core& core;
Settings& settings;
Style& style;
IMessageBoxManager& messageBoxManager;
};

View File

@ -54,7 +54,7 @@ const QSize defaultSize(720, 400);
} // namespace
ContentDialog::ContentDialog(const Core &core, Settings& settings_,
Style& style_, QWidget* parent)
Style& style_, IMessageBoxManager& messageBoxManager_, QWidget* parent)
: ActivateDialog(style_, parent, Qt::Window)
, splitter{new QSplitter(this)}
, friendLayout{new FriendListLayout(this)}
@ -63,6 +63,7 @@ ContentDialog::ContentDialog(const Core &core, Settings& settings_,
, videoCount(0)
, settings{settings_}
, style{style_}
, messageBoxManager{messageBoxManager_}
{
friendLayout->setMargin(0);
friendLayout->setSpacing(0);
@ -159,7 +160,7 @@ FriendWidget* ContentDialog::addFriend(std::shared_ptr<FriendChatroom> chatroom,
const auto compact = settings.getCompactLayout();
auto frnd = chatroom->getFriend();
const auto& friendPk = frnd->getPublicKey();
auto friendWidget = new FriendWidget(chatroom, compact, settings, style);
auto friendWidget = new FriendWidget(chatroom, compact, settings, style, messageBoxManager);
emit connectFriendWidget(*friendWidget);
chatWidgets[friendPk] = friendWidget;
friendLayout->addFriendWidget(friendWidget, frnd->getStatus());

View File

@ -47,12 +47,14 @@ class QSplitter;
class QScrollArea;
class Settings;
class Style;
class IMessageBoxManager;
class ContentDialog : public ActivateDialog, public IDialogs
{
Q_OBJECT
public:
ContentDialog(const Core& core, Settings& settings, Style& style, QWidget* parent = nullptr);
ContentDialog(const Core& core, Settings& settings, Style& style,
IMessageBoxManager& messageBoxManager, QWidget* parent = nullptr);
~ContentDialog() override;
FriendWidget* addFriend(std::shared_ptr<FriendChatroom> chatroom, GenericChatForm* form);
@ -139,4 +141,5 @@ private:
QString username;
Settings& settings;
Style& style;
IMessageBoxManager& messageBoxManager;
};

View File

@ -20,7 +20,6 @@
#include "contentlayout.h"
#include "style.h"
#include "src/persistence/settings.h"
#include "src/widget/gui.h"
#include <QFrame>
#include <QStyleFactory>

View File

@ -22,10 +22,10 @@
#include "src/nexus.h"
#include "src/persistence/settings.h"
#include "src/widget/contentlayout.h"
#include "src/widget/gui.h"
#include "src/widget/tool/croppinglabel.h"
#include "src/widget/style.h"
#include "src/widget/translator.h"
#include "src/widget/tool/imessageboxmanager.h"
#include <QApplication>
#include <QClipboard>
#include <QErrorMessage>
@ -61,10 +61,12 @@ namespace
* @brief Cached username so we can retranslate the invite message
*/
AddFriendForm::AddFriendForm(ToxId ownId_, Settings& settings_, Style& style_)
AddFriendForm::AddFriendForm(ToxId ownId_, Settings& settings_, Style& style_,
IMessageBoxManager& messageBoxManager_)
: ownId{ownId_}
, settings{settings_}
, style{style_}
, messageBoxManager{messageBoxManager_}
{
tabWidget = new QTabWidget();
main = new QWidget(tabWidget);
@ -204,14 +206,14 @@ void AddFriendForm::addFriend(const QString& idText)
ToxId friendId(idText);
if (!friendId.isValid()) {
GUI::showWarning(tr("Couldn't add friend"),
messageBoxManager.showWarning(tr("Couldn't add friend"),
tr("%1 Tox ID is invalid", "Tox address error").arg(idText));
return;
}
deleteFriendRequest(friendId);
if (friendId == ownId) {
GUI::showWarning(tr("Couldn't add friend"),
messageBoxManager.showWarning(tr("Couldn't add friend"),
//: When trying to add your own Tox ID as friend
tr("You can't add yourself as a friend!"));
} else {
@ -248,7 +250,7 @@ void AddFriendForm::onImportOpenClicked()
QFile contactFile(path);
if (!contactFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
GUI::showWarning(tr("Couldn't open file"),
messageBoxManager.showWarning(tr("Couldn't open file"),
//: Error message when trying to open a contact list file to import
tr("Couldn't open the contact file"));
return;
@ -271,7 +273,7 @@ void AddFriendForm::onImportOpenClicked()
}
if (contactsToImport.isEmpty()) {
GUI::showWarning(tr("Invalid file"),
messageBoxManager.showWarning(tr("Invalid file"),
tr("We couldn't find any contacts to import in this file!"));
}

View File

@ -35,6 +35,7 @@ class QTabWidget;
class ContentLayout;
class Settings;
class Style;
class IMessageBoxManager;
class AddFriendForm : public QObject
{
@ -47,7 +48,8 @@ public:
FriendRequest = 2
};
AddFriendForm(ToxId ownId_, Settings& settings, Style& style);
AddFriendForm(ToxId ownId_, Settings& settings, Style& style,
IMessageBoxManager& messageBoxManager);
AddFriendForm(const AddFriendForm&) = delete;
AddFriendForm& operator=(const AddFriendForm&) = delete;
~AddFriendForm();
@ -117,4 +119,5 @@ private:
ToxId ownId;
Settings& settings;
Style& style;
IMessageBoxManager& messageBoxManager;
};

View File

@ -109,9 +109,9 @@ QString secondsToDHMS(quint32 duration)
ChatForm::ChatForm(Profile& profile, Friend* chatFriend, IChatLog& chatLog_,
IMessageDispatcher& messageDispatcher_, DocumentCache& documentCache_,
SmileyPack& smileyPack_, CameraSource& cameraSource_, Settings& settings_,
Style& style_)
Style& style_, IMessageBoxManager& messageBoxManager)
: GenericChatForm(profile.getCore(), chatFriend, chatLog_, messageDispatcher_,
documentCache_, smileyPack_, settings_, style_)
documentCache_, smileyPack_, settings_, style_, messageBoxManager)
, core{profile.getCore()}
, f(chatFriend)
, isTyping{false}

View File

@ -46,6 +46,7 @@ class DocumentCache;
class SmileyPack;
class Settings;
class Style;
class IMessageBoxManager;
class ChatForm : public GenericChatForm
{
@ -53,7 +54,7 @@ class ChatForm : public GenericChatForm
public:
ChatForm(Profile& profile, Friend* chatFriend, IChatLog& chatLog_,
IMessageDispatcher& messageDispatcher_, DocumentCache& documentCache, SmileyPack& smileyPack,
CameraSource& cameraSource, Settings& settings, Style& style);
CameraSource& cameraSource, Settings& settings, Style& style, IMessageBoxManager& messageBoxManager);
~ChatForm() override;
void setStatusMessage(const QString& newMessage);

View File

@ -23,8 +23,11 @@
#include "src/widget/translator.h"
#include "src/widget/style.h"
#include "src/widget/widget.h"
#include "src/widget/tool/imessageboxmanager.h"
#include "src/friendlist.h"
#include "util/display.h"
#include <QDesktopServices>
#include <QFileInfo>
#include <QWindow>
#include <QTableView>
@ -426,8 +429,9 @@ namespace FileTransferList
} // namespace FileTransferList
FilesForm::FilesForm(CoreFile& coreFile, Settings& settings, Style& style)
FilesForm::FilesForm(CoreFile& coreFile, Settings& settings, Style& style, IMessageBoxManager& messageBoxManager_)
: QObject()
, messageBoxManager{messageBoxManager_}
{
head = new QWidget();
QFont bold;
@ -515,13 +519,13 @@ void FilesForm::onFileUpdated(const ToxFile& inFile)
void FilesForm::onSentFileActivated(const QModelIndex& index)
{
const auto& filePath = sentModel->data(index, Qt::UserRole).toString();
Widget::confirmExecutableOpen(filePath);
messageBoxManager.confirmExecutableOpen(filePath);
}
void FilesForm::onReceivedFileActivated(const QModelIndex& index)
{
const auto& filePath = recvdModel->data(index, Qt::UserRole).toString();
Widget::confirmExecutableOpen(filePath);
messageBoxManager.confirmExecutableOpen(filePath);
}
void FilesForm::retranslateUi()

View File

@ -36,6 +36,8 @@ class ContentLayout;
class QTableView;
class Settings;
class Style;
class QFileInfo;
class IMessageBoxManager;
namespace FileTransferList
{
@ -114,7 +116,8 @@ class FilesForm : public QObject
Q_OBJECT
public:
FilesForm(CoreFile& coreFile, Settings& settings, Style& style);
FilesForm(CoreFile& coreFile, Settings& settings, Style& style,
IMessageBoxManager& messageBoxManager);
~FilesForm();
bool isShown() const;
@ -142,4 +145,5 @@ private:
QTabWidget main;
QTableView *sent, *recvd;
FileTransferList::Model *sentModel, *recvdModel;
IMessageBoxManager& messageBoxManager;
};

View File

@ -44,7 +44,6 @@
#include "src/widget/tool/flyoutoverlaywidget.h"
#include "src/widget/translator.h"
#include "src/widget/widget.h"
#include "src/widget/gui.h"
#include <QClipboard>
#include <QFileDialog>
@ -140,7 +139,7 @@ QPushButton* createButton(const QString& name, T* self, Fun onClickSlot,
GenericChatForm::GenericChatForm(const Core& core_, const Chat* chat, IChatLog& chatLog_,
IMessageDispatcher& messageDispatcher_, DocumentCache& documentCache,
SmileyPack& smileyPack_, Settings& settings_, Style& style_,
QWidget* parent_)
IMessageBoxManager& messageBoxManager, QWidget* parent_)
: QWidget(parent_, Qt::Window)
, core{core_}
, audioInputFlag(false)
@ -156,7 +155,7 @@ GenericChatForm::GenericChatForm(const Core& core_, const Chat* chat, IChatLog&
searchForm = new SearchForm(settings, style);
dateInfo = new QLabel(this);
chatWidget = new ChatWidget(chatLog_, core, documentCache, smileyPack,
settings, style, this);
settings, style, messageBoxManager, this);
searchForm->hide();
dateInfo->setAlignment(Qt::AlignHCenter);
dateInfo->setVisible(false);

View File

@ -57,6 +57,7 @@ class DocumentCache;
class SmileyPack;
class Settings;
class Style;
class IMessageBoxManager;
namespace Ui {
class MainWindow;
@ -75,7 +76,7 @@ public:
GenericChatForm(const Core& core_, const Chat* chat, IChatLog& chatLog_,
IMessageDispatcher& messageDispatcher_, DocumentCache& documentCache,
SmileyPack& smileyPack, Settings& settings, Style& style,
QWidget* parent_ = nullptr);
IMessageBoxManager& messageBoxmanager, QWidget* parent_ = nullptr);
~GenericChatForm() override;
void setName(const QString& newName);

View File

@ -85,9 +85,9 @@ QString editName(const QString& name)
GroupChatForm::GroupChatForm(Core& core_, Group* chatGroup, IChatLog& chatLog_,
IMessageDispatcher& messageDispatcher_, Settings& settings_, DocumentCache& documentCache_,
SmileyPack& smileyPack_, Style& style_)
SmileyPack& smileyPack_, Style& style_, IMessageBoxManager& messageBoxManager)
: GenericChatForm(core_, chatGroup, chatLog_, messageDispatcher_,
documentCache_, smileyPack_, settings_, style_)
documentCache_, smileyPack_, settings_, style_, messageBoxManager)
, core{core_}
, group(chatGroup)
, inCall(false)

View File

@ -38,6 +38,7 @@ class Settings;
class DocumentCache;
class SmileyPack;
class Style;
class IMessageBoxManager;
class GroupChatForm : public GenericChatForm
{
@ -45,7 +46,8 @@ class GroupChatForm : public GenericChatForm
public:
GroupChatForm(Core& core_, Group* chatGroup, IChatLog& chatLog_,
IMessageDispatcher& messageDispatcher_, Settings& settings_,
DocumentCache& documentCache, SmileyPack& smileyPack, Style& style);
DocumentCache& documentCache, SmileyPack& smileyPack, Style& style,
IMessageBoxManager& messageBoxManager);
~GroupChatForm();
void peerAudioPlaying(ToxPk peerPk);

View File

@ -19,8 +19,6 @@
#pragma once
#include "src/widget/gui.h"
#include <QWidget>
class ContentLayout;

View File

@ -27,12 +27,12 @@
#include "src/widget/contentlayout.h"
#include "src/widget/form/setpassworddialog.h"
#include "src/widget/form/settingswidget.h"
#include "src/widget/gui.h"
#include "src/widget/maskablepixmapwidget.h"
#include "src/widget/style.h"
#include "src/widget/tool/croppinglabel.h"
#include "src/widget/translator.h"
#include "src/widget/widget.h"
#include "src/widget/tool/imessageboxmanager.h"
#include <QApplication>
#include <QBuffer>
#include <QClipboard>
@ -100,11 +100,12 @@ const QPair<QString, QString> CAN_NOT_CHANGE_PASSWORD = {
} // namespace
ProfileForm::ProfileForm(IProfileInfo* profileInfo_, Settings& settings_,
Style& style, QWidget* parent)
Style& style, IMessageBoxManager& messageBoxManager_, QWidget* parent)
: QWidget{parent}
, qr{nullptr}
, profileInfo{profileInfo_}
, settings{settings_}
, messageBoxManager{messageBoxManager_}
{
bodyUI = new Ui::IdentitySettings;
bodyUI->setupUi(this);
@ -321,7 +322,7 @@ void ProfileForm::onAvatarClicked()
return;
}
GUI::showError(tr("Error"), SET_AVATAR_ERROR[result]);
messageBoxManager.showError(tr("Error"), SET_AVATAR_ERROR[result]);
}
void ProfileForm::onRenameClicked()
@ -339,7 +340,7 @@ void ProfileForm::onRenameClicked()
}
const QPair<QString, QString> error = RENAME_ERROR[result];
GUI::showError(error.first, error.second.arg(name));
messageBoxManager.showError(error.first, error.second.arg(name));
prFileLabelUpdate();
}
@ -360,7 +361,7 @@ void ProfileForm::onExportClicked()
}
const QPair<QString, QString> error = SAVE_ERROR[result];
GUI::showWarning(error.first, error.second);
messageBoxManager.showWarning(error.first, error.second);
}
void ProfileForm::onDeleteClicked()
@ -368,7 +369,7 @@ void ProfileForm::onDeleteClicked()
const QString title = tr("Delete profile", "deletion confirmation title");
const QString question = tr("Are you sure you want to delete this profile?",
"deletion confirmation text");
if (!GUI::askQuestion(title, question)) {
if (!messageBoxManager.askQuestion(title, question)) {
return;
}
@ -386,7 +387,7 @@ void ProfileForm::onDeleteClicked()
//: deletion failed text part 2
message += "\n" + tr("Please manually remove them.");
GUI::showError(tr("Files could not be deleted!", "deletion failed title"), message);
messageBoxManager.showError(tr("Files could not be deleted!", "deletion failed title"), message);
}
void ProfileForm::onLogoutClicked()
@ -426,25 +427,25 @@ void ProfileForm::onSaveQrClicked()
}
const QPair<QString, QString> error = SAVE_ERROR[result];
GUI::showWarning(error.first, error.second);
messageBoxManager.showWarning(error.first, error.second);
}
void ProfileForm::onDeletePassClicked()
{
if (!profileInfo->isEncrypted()) {
GUI::showInfo(tr("Nothing to remove"), tr("Your profile does not have a password!"));
messageBoxManager.showInfo(tr("Nothing to remove"), tr("Your profile does not have a password!"));
return;
}
const QString title = tr("Remove password", "deletion confirmation title");
//: deletion confirmation text
const QString body = tr("Are you sure you want to remove your password?");
if (!GUI::askQuestion(title, body)) {
if (!messageBoxManager.askQuestion(title, body)) {
return;
}
if (!profileInfo->deletePassword()) {
GUI::showInfo(CAN_NOT_CHANGE_PASSWORD.first, CAN_NOT_CHANGE_PASSWORD.second);
messageBoxManager.showInfo(CAN_NOT_CHANGE_PASSWORD.first, CAN_NOT_CHANGE_PASSWORD.second);
}
}
@ -458,7 +459,7 @@ void ProfileForm::onChangePassClicked()
QString newPass = dialog->getPassword();
if (!profileInfo->setPassword(newPass)) {
GUI::showInfo(CAN_NOT_CHANGE_PASSWORD.first, CAN_NOT_CHANGE_PASSWORD.second);
messageBoxManager.showInfo(CAN_NOT_CHANGE_PASSWORD.first, CAN_NOT_CHANGE_PASSWORD.second);
}
}

View File

@ -31,6 +31,7 @@ class IProfileInfo;
class MaskablePixmapWidget;
class Settings;
class Style;
class IMessageBoxManager;
namespace Ui {
class IdentitySettings;
@ -56,7 +57,7 @@ class ProfileForm : public QWidget
Q_OBJECT
public:
ProfileForm(IProfileInfo* profileInfo_, Settings& settings, Style& style,
QWidget* parent = nullptr);
IMessageBoxManager& messageBoxManager, QWidget* parent = nullptr);
~ProfileForm();
void show(ContentLayout* contentLayout);
bool isShown() const;
@ -97,4 +98,5 @@ private:
ClickableTE* toxId;
IProfileInfo* profileInfo;
Settings& settings;
IMessageBoxManager& messageBoxManager;
};

View File

@ -30,8 +30,8 @@
#include "src/model/status.h"
#include "src/persistence/profile.h"
#include "src/persistence/settings.h"
#include "src/widget/gui.h"
#include "src/widget/tool/recursivesignalblocker.h"
#include "src/widget/tool/imessageboxmanager.h"
#include "src/widget/translator.h"
/**
@ -41,10 +41,11 @@
* Is also contains "Reset settings" button and "Make portable" checkbox.
*/
AdvancedForm::AdvancedForm(Settings& settings_, Style& style)
AdvancedForm::AdvancedForm(Settings& settings_, Style& style, IMessageBoxManager& messageBoxManager_)
: GenericForm(QPixmap(":/img/settings/general.png"), style)
, bodyUI(new Ui::AdvancedSettings)
, settings{settings_}
, messageBoxManager{messageBoxManager_}
{
bodyUI->setupUi(this);
@ -157,14 +158,14 @@ void AdvancedForm::on_btnCopyDebug_clicked()
void AdvancedForm::on_resetButton_clicked()
{
const QString titile = tr("Reset settings");
bool result = GUI::askQuestion(titile, tr("All settings will be reset to default. Are you sure?"),
bool result = messageBoxManager.askQuestion(titile, tr("All settings will be reset to default. Are you sure?"),
tr("Yes"), tr("No"));
if (!result)
return;
settings.resetToDefault();
GUI::showInfo(titile, "Changes will take effect after restart");
messageBoxManager.showInfo(titile, "Changes will take effect after restart");
}
void AdvancedForm::on_cbEnableIPv6_stateChanged()

View File

@ -24,6 +24,7 @@
class Core;
class Settings;
class Style;
class IMessageBoxManager;
namespace Ui {
class AdvancedSettings;
@ -33,7 +34,7 @@ class AdvancedForm : public GenericForm
{
Q_OBJECT
public:
AdvancedForm(Settings& settings, Style& style);
AdvancedForm(Settings& settings, Style& style, IMessageBoxManager& messageBoxManager);
~AdvancedForm();
QString getFormName() final
{
@ -61,4 +62,5 @@ private:
private:
Ui::AdvancedSettings* bodyUI;
Settings& settings;
IMessageBoxManager& messageBoxManager;
};

View File

@ -43,7 +43,7 @@ class AVForm : public GenericForm, private Ui::AVForm
Q_OBJECT
public:
AVForm(IAudioControl& audio_, CoreAV* coreAV_, CameraSource& camera_,
IAudioSettings* audioSettings_, IVideoSettings* videoSettings_, Style&);
IAudioSettings* audioSettings_, IVideoSettings* videoSettings_, Style& style);
~AVForm() override;
QString getFormName() final
{

View File

@ -18,7 +18,6 @@
*/
#include "genericsettings.h"
#include "src/widget/gui.h"
#include "src/widget/style.h"
#include <QCheckBox>

View File

@ -27,7 +27,7 @@ class GenericForm : public QWidget
{
Q_OBJECT
public:
GenericForm(const QPixmap& icon, Style&);
GenericForm(const QPixmap& icon, Style& style);
virtual ~GenericForm()
{
}

View File

@ -31,7 +31,6 @@
#include "src/persistence/settings.h"
#include "src/widget/form/setpassworddialog.h"
#include "src/widget/form/settingswidget.h"
#include "src/widget/gui.h"
#include "src/widget/tool/recursivesignalblocker.h"
#include "src/widget/translator.h"
#include "src/widget/widget.h"

View File

@ -43,7 +43,7 @@
SettingsWidget::SettingsWidget(UpdateCheck* updateCheck, IAudioControl& audio,
Core* core, SmileyPack& smileyPack, CameraSource& cameraSource,
Settings& settings, Style& style, Widget* parent)
Settings& settings, Style& style, IMessageBoxManager& messageBoxManager, Widget* parent)
: QWidget(parent, Qt::Window)
{
CoreAV* coreAV = core->getAv();
@ -67,7 +67,7 @@ SettingsWidget::SettingsWidget(UpdateCheck* updateCheck, IAudioControl& audio,
AVForm* rawAvfrm = new AVForm(audio, coreAV, cameraSource, audioSettings, videoSettings, style);
std::unique_ptr<AVForm> avfrm(rawAvfrm);
std::unique_ptr<AdvancedForm> expfrm(new AdvancedForm(settings, style));
std::unique_ptr<AdvancedForm> expfrm(new AdvancedForm(settings, style, messageBoxManager));
std::unique_ptr<AboutForm> abtfrm(new AboutForm(updateCheck, style));
#if UPDATE_CHECK_ENABLED

View File

@ -42,6 +42,7 @@ class SmileyPack;
class CameraSource;
class Settings;
class Style;
class IMessageBoxManager;
class SettingsWidget : public QWidget
{
@ -49,7 +50,7 @@ class SettingsWidget : public QWidget
public:
SettingsWidget(UpdateCheck* updateCheck, IAudioControl& audio, Core *core,
SmileyPack& smileyPack, CameraSource& cameraSource, Settings& settings,
Style& style, Widget* parent = nullptr);
Style& style, IMessageBoxManager& messageBoxManager, Widget* parent = nullptr);
~SettingsWidget();
bool isShown() const;

View File

@ -100,11 +100,13 @@ qint64 timeUntilTomorrow()
} // namespace
FriendListWidget::FriendListWidget(const Core &core_, Widget* parent,
Settings& settings_, Style& style_, bool groupsOnTop)
Settings& settings_, Style& style_, IMessageBoxManager& messageBoxManager_,
bool groupsOnTop)
: QWidget(parent)
, core{core_}
, settings{settings_}
, style{style_}
, messageBoxManager{messageBoxManager_}
{
int countContacts = core.getFriendList().size();
manager = new FriendListManager(countContacts, this);
@ -616,7 +618,8 @@ CircleWidget* FriendListWidget::createCircleWidget(int id)
return CircleWidget::getFromID(id);
}
CircleWidget* circleWidget = new CircleWidget(core, this, id, settings, style);
CircleWidget* circleWidget = new CircleWidget(core, this, id, settings, style,
messageBoxManager);
emit connectCircleWidget(*circleWidget);
connect(this, &FriendListWidget::onCompactChanged, circleWidget, &CircleWidget::onCompactChanged);
connect(circleWidget, &CircleWidget::renameRequested, this, &FriendListWidget::renameCircleWidget);

View File

@ -40,13 +40,15 @@ class Friend;
class IFriendListItem;
class Settings;
class Style;
class IMessageBoxManager;
class FriendListWidget : public QWidget
{
Q_OBJECT
public:
using SortingMode = Settings::FriendListSortingMode;
FriendListWidget(const Core& core, Widget* parent, Settings& settings, Style& style, bool groupsOnTop = true);
FriendListWidget(const Core& core, Widget* parent, Settings& settings, Style& style,
IMessageBoxManager& messageBoxManager, bool groupsOnTop = true);
~FriendListWidget();
void setMode(SortingMode mode);
SortingMode getMode() const;
@ -101,4 +103,5 @@ private:
const Core& core;
Settings& settings;
Style& style;
IMessageBoxManager& messageBoxManager;
};

View File

@ -57,12 +57,13 @@
* When you click should open the chat with friend. Widget has a context menu.
*/
FriendWidget::FriendWidget(std::shared_ptr<FriendChatroom> chatroom_, bool compact_,
Settings& settings_, Style& style_)
Settings& settings_, Style& style_, IMessageBoxManager& messageBoxManager_)
: GenericChatroomWidget(compact_, settings_, style_)
, chatroom{chatroom_}
, isDefaultAvatar{true}
, settings{settings_}
, style{style_}
, messageBoxManager{messageBoxManager_}
{
avatar->setPixmap(QPixmap(":/img/contact.svg"));
statusPic.setPixmap(QPixmap(Status::getIconPath(Status::Status::Offline)));
@ -285,7 +286,8 @@ void FriendWidget::showDetails()
const auto frnd = chatroom->getFriend();
const auto iabout = new AboutFriend(frnd, &settings);
std::unique_ptr<IAboutFriend> about = std::unique_ptr<IAboutFriend>(iabout);
const auto aboutUser = new AboutFriendForm(std::move(about), settings, style, this);
const auto aboutUser = new AboutFriendForm(std::move(about), settings, style,
messageBoxManager, this);
connect(aboutUser, &AboutFriendForm::histroyRemoved, this, &FriendWidget::friendHistoryRemoved);
aboutUser->show();
}

View File

@ -31,13 +31,14 @@ class MaskablePixmapWidget;
class CircleWidget;
class Settings;
class Style;
class IMessageBoxManager;
class FriendWidget : public GenericChatroomWidget, public IFriendListItem
{
Q_OBJECT
public:
FriendWidget(std::shared_ptr<FriendChatroom> chatroom_, bool compact_,
Settings& settings, Style& style);
FriendWidget(std::shared_ptr<FriendChatroom> chatroom, bool compact_,
Settings& settings, Style& style, IMessageBoxManager& messageBoxManager);
void contextMenuEvent(QContextMenuEvent* event) final;
void setAsActiveChatroom() final;
@ -90,4 +91,5 @@ public:
bool isDefaultAvatar;
Settings& settings;
Style& style;
IMessageBoxManager& messageBoxManager;
};

View File

@ -20,7 +20,6 @@
#include "genericchatitemwidget.h"
#include "src/persistence/settings.h"
#include "src/widget/tool/croppinglabel.h"
#include "src/widget/gui.h"
#include "src/widget/style.h"
#include <QVariant>

View File

@ -36,7 +36,7 @@ public:
FriendOnlineItem
};
GenericChatItemWidget(bool compact_, Style&, QWidget* parent = nullptr);
GenericChatItemWidget(bool compact_, Style& style, QWidget* parent = nullptr);
bool isCompact() const;
void setCompact(bool compact_);

View File

@ -19,7 +19,6 @@
#include "searchform.h"
#include "form/searchsettingsform.h"
#include "src/widget/gui.h"
#include "src/widget/style.h"
#include <QVBoxLayout>

View File

@ -19,7 +19,6 @@
#include "style.h"
#include "src/persistence/settings.h"
#include "src/widget/gui.h"
#include <QDebug>
#include <QDir>

View File

@ -19,7 +19,6 @@
#include "activatedialog.h"
#include "src/widget/gui.h"
#include "src/widget/style.h"
#include <QEvent>

View File

@ -28,9 +28,9 @@ class ActivateDialog : public QDialog
Q_OBJECT
public:
#if (QT_VERSION >= QT_VERSION_CHECK(5, 15, 0))
ActivateDialog(Style&, QWidget* parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());
ActivateDialog(Style& style, QWidget* parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());
#else
ActivateDialog(Style&, QWidget* parent = nullptr, Qt::WindowFlags f = nullptr);
ActivateDialog(Style& style, QWidget* parent = nullptr, Qt::WindowFlags f = nullptr);
#endif
bool event(QEvent* event) override;

View File

@ -0,0 +1,22 @@
/*
Copyright © 2022 by The qTox Project Contributors
This file is part of qTox, a Qt-based graphical interface for Tox.
qTox is libre 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.
qTox 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.
You should have received a copy of the GNU General Public License
along with qTox. If not, see <http://www.gnu.org/licenses/>.
*/
#include "src/widget/tool/imessageboxmanager.h"
IMessageBoxManager::~IMessageBoxManager() = default;

View File

@ -0,0 +1,37 @@
/*
Copyright © 2022 by The qTox Project Contributors
This file is part of qTox, a Qt-based graphical interface for Tox.
qTox is libre 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.
qTox 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.
You should have received a copy of the GNU General Public License
along with qTox. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
class QString;
class QFileInfo;
class IMessageBoxManager
{
public:
virtual ~IMessageBoxManager();
virtual void showInfo(const QString& title, const QString& msg) = 0;
virtual void showWarning(const QString& title, const QString& msg) = 0;
virtual void showError(const QString& title, const QString& msg) = 0;
virtual bool askQuestion(const QString& title, const QString& msg, bool defaultAns = false,
bool warning = true, bool yesno = true) = 0;
virtual bool askQuestion(const QString& title, const QString& msg, const QString& button1,
const QString& button2, bool defaultAns = false, bool warning = true) = 0;
virtual void confirmExecutableOpen(const QFileInfo& file) = 0;
};

View File

@ -1,5 +1,5 @@
/*
Copyright © 2015-2019 by The qTox Project Contributors
Copyright © 2022 by The qTox Project Contributors
This file is part of qTox, a Qt-based graphical interface for Tox.
@ -17,61 +17,27 @@
along with qTox. If not, see <http://www.gnu.org/licenses/>.
*/
#include "messageboxmanager.h"
#include "gui.h"
#include "widget.h"
#include "src/nexus.h"
#include <QApplication>
#include <QCoreApplication>
#include <QDebug>
#include <QDialogButtonBox>
#include <QInputDialog>
#include <QLabel>
#include <QThread>
#include <QMessageBox>
#include <QPushButton>
#include <QThread>
#include <assert.h>
/**
* @class GUI
* @brief Abstracts the GUI from the target backend (DesktopGUI, ...)
*
* All the functions exposed here are thread-safe.
* Prefer calling this class to calling a GUI backend directly.
*
* @fn void GUI::resized()
* @brief Emitted when the GUI is resized on supported platforms.
*/
GUI::GUI(QObject* parent)
: QObject(parent)
{
assert(QThread::currentThread() == qApp->thread());
assert(Nexus::getDesktopGUI());
}
/**
* @brief Returns the singleton instance.
*/
GUI& GUI::getInstance()
{
static GUI gui;
return gui;
}
// Implementation of the public clean interface
#include <QFileInfo>
#include <QDesktopServices>
#include <QUrl>
/**
* @brief Show some text to the user.
* @param title Title of information window.
* @param msg Text in information window.
*/
void GUI::showInfo(const QString& title, const QString& msg)
void MessageBoxManager::showInfo(const QString& title, const QString& msg)
{
if (QThread::currentThread() == qApp->thread()) {
getInstance()._showInfo(title, msg);
_showInfo(title, msg);
} else {
QMetaObject::invokeMethod(&getInstance(), "_showInfo", Qt::BlockingQueuedConnection,
QMetaObject::invokeMethod(this, "_showInfo", Qt::BlockingQueuedConnection,
Q_ARG(const QString&, title), Q_ARG(const QString&, msg));
}
}
@ -81,12 +47,12 @@ void GUI::showInfo(const QString& title, const QString& msg)
* @param title Title of warning window.
* @param msg Text in warning window.
*/
void GUI::showWarning(const QString& title, const QString& msg)
void MessageBoxManager::showWarning(const QString& title, const QString& msg)
{
if (QThread::currentThread() == qApp->thread()) {
getInstance()._showWarning(title, msg);
_showWarning(title, msg);
} else {
QMetaObject::invokeMethod(&getInstance(), "_showWarning", Qt::BlockingQueuedConnection,
QMetaObject::invokeMethod(this, "_showWarning", Qt::BlockingQueuedConnection,
Q_ARG(const QString&, title), Q_ARG(const QString&, msg));
}
}
@ -96,17 +62,12 @@ void GUI::showWarning(const QString& title, const QString& msg)
* @param title Title of error window.
* @param msg Text in error window.
*/
void GUI::showError(const QString& title, const QString& msg)
void MessageBoxManager::showError(const QString& title, const QString& msg)
{
if (QThread::currentThread() == qApp->thread()) {
// If the GUI hasn't started yet and we're on the main thread,
// we still want to be able to show error messages
if (!Nexus::getDesktopGUI())
QMessageBox::critical(nullptr, title, msg);
else
getInstance()._showError(title, msg);
_showError(title, msg);
} else {
QMetaObject::invokeMethod(&getInstance(), "_showError", Qt::BlockingQueuedConnection,
QMetaObject::invokeMethod(this, "_showError", Qt::BlockingQueuedConnection,
Q_ARG(const QString&, title), Q_ARG(const QString&, msg));
}
}
@ -120,13 +81,13 @@ void GUI::showError(const QString& title, const QString& msg)
* @param yesno Show "Yes" and "No" buttons.
* @return True if the answer is positive, false otherwise.
*/
bool GUI::askQuestion(const QString& title, const QString& msg, bool defaultAns, bool warning, bool yesno)
bool MessageBoxManager::askQuestion(const QString& title, const QString& msg, bool defaultAns, bool warning, bool yesno)
{
if (QThread::currentThread() == qApp->thread()) {
return getInstance()._askQuestion(title, msg, defaultAns, warning, yesno);
return _askQuestion(title, msg, defaultAns, warning, yesno);
} else {
bool ret;
QMetaObject::invokeMethod(&getInstance(), "_askQuestion", Qt::BlockingQueuedConnection,
QMetaObject::invokeMethod(this, "_askQuestion", Qt::BlockingQueuedConnection,
Q_RETURN_ARG(bool, ret), Q_ARG(const QString&, title),
Q_ARG(const QString&, msg), Q_ARG(bool, defaultAns),
Q_ARG(bool, warning), Q_ARG(bool, yesno));
@ -146,14 +107,14 @@ bool GUI::askQuestion(const QString& title, const QString& msg, bool defaultAns,
* @param warning If is true, we will use a special warning style.
* @return True if the answer is positive, false otherwise.
*/
bool GUI::askQuestion(const QString& title, const QString& msg, const QString& button1,
bool MessageBoxManager::askQuestion(const QString& title, const QString& msg, const QString& button1,
const QString& button2, bool defaultAns, bool warning)
{
if (QThread::currentThread() == qApp->thread()) {
return getInstance()._askQuestion(title, msg, button1, button2, defaultAns, warning);
return _askQuestion(title, msg, button1, button2, defaultAns, warning);
} else {
bool ret;
QMetaObject::invokeMethod(&getInstance(), "_askQuestion", Qt::BlockingQueuedConnection,
QMetaObject::invokeMethod(this, "_askQuestion", Qt::BlockingQueuedConnection,
Q_RETURN_ARG(bool, ret), Q_ARG(const QString&, title),
Q_ARG(const QString&, msg), Q_ARG(bool, defaultAns),
Q_ARG(bool, warning));
@ -161,30 +122,61 @@ bool GUI::askQuestion(const QString& title, const QString& msg, const QString& b
}
}
void MessageBoxManager::confirmExecutableOpen(const QFileInfo& file)
{
static const QStringList dangerousExtensions = {"app", "bat", "com", "cpl", "dmg",
"exe", "hta", "jar", "js", "jse",
"lnk", "msc", "msh", "msh1", "msh1xml",
"msh2", "msh2xml", "mshxml", "msi", "msp",
"pif", "ps1", "ps1xml", "ps2", "ps2xml",
"psc1", "psc2", "py", "reg", "scf",
"sh", "src", "vb", "vbe", "vbs",
"ws", "wsc", "wsf", "wsh"};
if (dangerousExtensions.contains(file.suffix())) {
bool answer = askQuestion(tr("Executable file", "popup title"),
tr("You have asked qTox to open an executable file. "
"Executable files can potentially damage your computer. "
"Are you sure want to open this file?",
"popup text"),
false, true);
if (!answer) {
return;
}
// The user wants to run this file, so make it executable and run it
QFile(file.filePath())
.setPermissions(file.permissions() | QFile::ExeOwner | QFile::ExeUser | QFile::ExeGroup
| QFile::ExeOther);
}
QDesktopServices::openUrl(QUrl::fromLocalFile(file.filePath()));
}
// Private implementations
void GUI::_showInfo(const QString& title, const QString& msg)
void MessageBoxManager::_showInfo(const QString& title, const QString& msg)
{
QMessageBox messageBox(QMessageBox::Information, title, msg, QMessageBox::Ok, getMainWidget());
QMessageBox messageBox(QMessageBox::Information, title, msg, QMessageBox::Ok, this);
messageBox.setButtonText(QMessageBox::Ok, QApplication::tr("Ok"));
messageBox.exec();
}
void GUI::_showWarning(const QString& title, const QString& msg)
void MessageBoxManager::_showWarning(const QString& title, const QString& msg)
{
QMessageBox messageBox(QMessageBox::Warning, title, msg, QMessageBox::Ok, getMainWidget());
QMessageBox messageBox(QMessageBox::Warning, title, msg, QMessageBox::Ok, this);
messageBox.setButtonText(QMessageBox::Ok, QApplication::tr("Ok"));
messageBox.exec();
}
void GUI::_showError(const QString& title, const QString& msg)
void MessageBoxManager::_showError(const QString& title, const QString& msg)
{
QMessageBox messageBox(QMessageBox::Critical, title, msg, QMessageBox::Ok, getMainWidget());
QMessageBox messageBox(QMessageBox::Critical, title, msg, QMessageBox::Ok, this);
messageBox.setButtonText(QMessageBox::Ok, QApplication::tr("Ok"));
messageBox.exec();
}
bool GUI::_askQuestion(const QString& title, const QString& msg, bool defaultAns, bool warning,
bool MessageBoxManager::_askQuestion(const QString& title, const QString& msg, bool defaultAns, bool warning,
bool yesno)
{
QString positiveButton = yesno ? QApplication::tr("Yes") : QApplication::tr("Ok");
@ -193,11 +185,11 @@ bool GUI::_askQuestion(const QString& title, const QString& msg, bool defaultAns
return _askQuestion(title, msg, positiveButton, negativeButton, defaultAns, warning);
}
bool GUI::_askQuestion(const QString& title, const QString& msg, const QString& button1,
bool MessageBoxManager::_askQuestion(const QString& title, const QString& msg, const QString& button1,
const QString& button2, bool defaultAns, bool warning)
{
QMessageBox::Icon icon = warning ? QMessageBox::Warning : QMessageBox::Question;
QMessageBox box(icon, title, msg, QMessageBox::NoButton, getMainWidget());
QMessageBox box(icon, title, msg, QMessageBox::NoButton, this);
QPushButton* pushButton1 = box.addButton(button1, QMessageBox::AcceptRole);
QPushButton* pushButton2 = box.addButton(button2, QMessageBox::RejectRole);
box.setDefaultButton(defaultAns ? pushButton1 : pushButton2);
@ -206,16 +198,3 @@ bool GUI::_askQuestion(const QString& title, const QString& msg, const QString&
box.exec();
return box.clickedButton() == pushButton1;
}
// Other
/**
* @brief Get the main widget.
* @return The main QWidget* of the application
*/
QWidget* GUI::getMainWidget()
{
QWidget* maingui{nullptr};
maingui = Nexus::getDesktopGUI();
return maingui;
}

View File

@ -1,5 +1,5 @@
/*
Copyright © 2015-2019 by The qTox Project Contributors
Copyright © 2022 by The qTox Project Contributors
This file is part of qTox, a Qt-based graphical interface for Tox.
@ -17,31 +17,28 @@
along with qTox. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include <QObject>
#include <QWidget>
class QWidget;
#include "src/widget/tool/imessageboxmanager.h"
class GUI : public QObject
class QFileInfo;
class MessageBoxManager : public QWidget, public IMessageBoxManager
{
Q_OBJECT
Q_OBJECT
public:
static GUI& getInstance();
static QWidget* getMainWidget();
static void showInfo(const QString& title, const QString& msg);
static void showWarning(const QString& title, const QString& msg);
static void showError(const QString& title, const QString& msg);
static bool askQuestion(const QString& title, const QString& msg, bool defaultAns = false,
bool warning = true, bool yesno = true);
static bool askQuestion(const QString& title, const QString& msg, const QString& button1,
const QString& button2, bool defaultAns = false, bool warning = true);
private:
explicit GUI(QObject* parent = nullptr);
~MessageBoxManager() override = default;
void showInfo(const QString& title, const QString& msg) override;
void showWarning(const QString& title, const QString& msg) override;
void showError(const QString& title, const QString& msg) override;
bool askQuestion(const QString& title, const QString& msg, bool defaultAns = false,
bool warning = true, bool yesno = true) override;
bool askQuestion(const QString& title, const QString& msg, const QString& button1,
const QString& button2, bool defaultAns = false, bool warning = true) override;
void confirmExecutableOpen(const QFileInfo& file) override;
private slots:
// Private implementation, those must be called from the GUI thread

View File

@ -76,9 +76,9 @@
#include "src/widget/form/groupinviteform.h"
#include "src/widget/form/profileform.h"
#include "src/widget/form/settingswidget.h"
#include "src/widget/gui.h"
#include "src/widget/style.h"
#include "src/widget/translator.h"
#include "src/widget/tool/imessageboxmanager.h"
#include "tool/removefrienddialog.h"
#include "src/persistence/smileypack.h"
@ -142,7 +142,7 @@ void Widget::acceptFileTransfer(const ToxFile& file, const QString& path)
Widget* Widget::instance{nullptr};
Widget::Widget(Profile &profile_, IAudioControl& audio_, CameraSource& cameraSource_,
Settings& settings_, Style& style_, QWidget* parent)
Settings& settings_, Style& style_, IMessageBoxManager& messageBoxManager_, QWidget* parent)
: QMainWindow(parent)
, profile{profile_}
, trayMenu{nullptr}
@ -159,6 +159,7 @@ Widget::Widget(Profile &profile_, IAudioControl& audio_, CameraSource& cameraSou
, documentCache(new DocumentCache(*smileyPack, settings))
, cameraSource{cameraSource_}
, style{style_}
, messageBoxManager(messageBoxManager_)
{
installEventFilter(this);
QString locale = settings.getTranslation();
@ -264,7 +265,8 @@ void Widget::init()
sharedMessageProcessorParams.reset(new MessageProcessor::SharedParams(core->getMaxMessageSize(), coreExt->getMaxExtendedMessageSize()));
chatListWidget = new FriendListWidget(*core, this, settings, style, settings.getGroupchatPosition());
chatListWidget = new FriendListWidget(*core, this, settings, style,
messageBoxManager, settings.getGroupchatPosition());
connect(chatListWidget, &FriendListWidget::searchCircle, this, &Widget::searchCircle);
connect(chatListWidget, &FriendListWidget::connectCircleWidget, this,
&Widget::connectCircleWidget);
@ -292,8 +294,8 @@ void Widget::init()
style.setThemeColor(settings, settings.getThemeColor());
CoreFile* coreFile = core->getCoreFile();
filesForm = new FilesForm(*coreFile, settings, style);
addFriendForm = new AddFriendForm(core->getSelfId(), settings, style);
filesForm = new FilesForm(*coreFile, settings, style, messageBoxManager);
addFriendForm = new AddFriendForm(core->getSelfId(), settings, style, messageBoxManager);
groupInviteForm = new GroupInviteForm(settings);
#if UPDATE_CHECK_ENABLED
@ -301,13 +303,13 @@ void Widget::init()
connect(updateCheck.get(), &UpdateCheck::updateAvailable, this, &Widget::onUpdateAvailable);
#endif
settingsWidget = new SettingsWidget(updateCheck.get(), audio, core, *smileyPack,
cameraSource, settings, style, this);
cameraSource, settings, style, messageBoxManager, this);
#if UPDATE_CHECK_ENABLED
updateCheck->checkForUpdate();
#endif
profileInfo = new ProfileInfo(core, &profile, settings);
profileForm = new ProfileForm(profileInfo, settings, style);
profileForm = new ProfileForm(profileInfo, settings, style, messageBoxManager);
#if DESKTOP_NOTIFICATIONS
notificationGenerator.reset(new NotificationGenerator(settings, &profile));
@ -921,37 +923,6 @@ void Widget::onTransferClicked()
}
}
void Widget::confirmExecutableOpen(const QFileInfo& file)
{
static const QStringList dangerousExtensions = {"app", "bat", "com", "cpl", "dmg",
"exe", "hta", "jar", "js", "jse",
"lnk", "msc", "msh", "msh1", "msh1xml",
"msh2", "msh2xml", "mshxml", "msi", "msp",
"pif", "ps1", "ps1xml", "ps2", "ps2xml",
"psc1", "psc2", "py", "reg", "scf",
"sh", "src", "vb", "vbe", "vbs",
"ws", "wsc", "wsf", "wsh"};
if (dangerousExtensions.contains(file.suffix())) {
bool answer = GUI::askQuestion(tr("Executable file", "popup title"),
tr("You have asked qTox to open an executable file. "
"Executable files can potentially damage your computer. "
"Are you sure want to open this file?",
"popup text"),
false, true);
if (!answer) {
return;
}
// The user wants to run this file, so make it executable and run it
QFile(file.filePath())
.setPermissions(file.permissions() | QFile::ExeOwner | QFile::ExeUser | QFile::ExeGroup
| QFile::ExeOther);
}
QDesktopServices::openUrl(QUrl::fromLocalFile(file.filePath()));
}
void Widget::onIconClick(QSystemTrayIcon::ActivationReason reason)
{
if (reason == QSystemTrayIcon::Trigger) {
@ -1182,11 +1153,11 @@ void Widget::addFriend(uint32_t friendId, const ToxPk& friendPk)
settings.updateFriendAddress(friendPk.toString());
Friend* newfriend = FriendList::addFriend(friendId, friendPk, settings);
auto dialogManager = ContentDialogManager::getInstance();
auto rawChatroom = new FriendChatroom(newfriend, dialogManager, *core, settings);
auto contentDialogManager = ContentDialogManager::getInstance();
auto rawChatroom = new FriendChatroom(newfriend, contentDialogManager, *core, settings);
std::shared_ptr<FriendChatroom> chatroom(rawChatroom);
const auto compact = settings.getCompactLayout();
auto widget = new FriendWidget(chatroom, compact, settings, style);
auto widget = new FriendWidget(chatroom, compact, settings, style, messageBoxManager);
connectFriendWidget(*widget);
auto history = profile.getHistory();
@ -1201,7 +1172,7 @@ void Widget::addFriend(uint32_t friendId, const ToxPk& friendPk)
*friendMessageDispatcher);
auto friendForm = new ChatForm(profile, newfriend, *chatHistory,
*friendMessageDispatcher, *documentCache, *smileyPack, cameraSource,
settings, style);
settings, style, messageBoxManager);
connect(friendForm, &ChatForm::updateFriendActivity, this, &Widget::updateFriendActivity);
friendMessageDispatchers[friendPk] = friendMessageDispatcher;
@ -1865,7 +1836,7 @@ void Widget::onUpdateAvailable()
ContentDialog* Widget::createContentDialog() const
{
ContentDialog* contentDialog = new ContentDialog(*core, settings, style);
ContentDialog* contentDialog = new ContentDialog(*core, settings, style, messageBoxManager);
registerContentDialog(*contentDialog);
return contentDialog;
@ -2153,8 +2124,8 @@ Group* Widget::createGroup(uint32_t groupnumber, const GroupId& groupId)
av->invalidateGroupCallPeerSource(*newgroup, user);
});
}
auto dialogManager = ContentDialogManager::getInstance();
auto rawChatroom = new GroupChatroom(newgroup, dialogManager, *core);
auto contentDialogManager = ContentDialogManager::getInstance();
auto rawChatroom = new GroupChatroom(newgroup, contentDialogManager, *core);
std::shared_ptr<GroupChatroom> chatroom(rawChatroom);
const auto compact = settings.getCompactLayout();
@ -2188,7 +2159,7 @@ Group* Widget::createGroup(uint32_t groupnumber, const GroupId& groupId)
groupAlertConnections.insert(groupId, notifyReceivedConnection);
auto form = new GroupChatForm(*core, newgroup, *groupChatLog, *messageDispatcher,
settings, *documentCache, *smileyPack, style);
settings, *documentCache, *smileyPack, style, messageBoxManager);
connect(&settings, &Settings::nameColorsChanged, form, &GenericChatForm::setColorizedNames);
form->setColorizedNames(settings.getEnableGroupChatsColor());
groupMessageDispatchers[groupId] = messageDispatcher;

View File

@ -86,6 +86,7 @@ class ChatHistory;
class SmileyPack;
class CameraSource;
class Style;
class IMessageBoxManager;
class Widget final : public QMainWindow
{
Q_OBJECT
@ -119,8 +120,9 @@ private:
};
public:
Widget(Profile& profile_, IAudioControl& audio_, CameraSource& cameraSource, Settings& settings,
Style& style, QWidget* parent = nullptr);
Widget(Profile& profile_, IAudioControl& audio_, CameraSource& cameraSource,
Settings& settings, Style& style, IMessageBoxManager& messageBoxManager,
QWidget* parent = nullptr);
~Widget() override;
void init();
void setCentralWidget(QWidget* widget, const QString& widgetName);
@ -141,8 +143,6 @@ public:
ContentDialog* createContentDialog() const;
ContentLayout* createContentDialog(DialogType type) const;
static void confirmExecutableOpen(const QFileInfo& file);
void clearAllReceipts();
static inline QIcon prepareIcon(QString path, int w = 0, int h = 0);
@ -389,6 +389,7 @@ private:
std::unique_ptr<DocumentCache> documentCache;
CameraSource& cameraSource;
Style& style;
IMessageBoxManager& messageBoxManager;
};
bool toxActivateEventHandler(const QByteArray& data, void* userData);

23
translations/ar.ts vendored
View File

@ -1713,6 +1713,19 @@ Please make sure to enter the same password twice.</source>
<translation>فتح إعدادات</translation>
</message>
</context>
<context>
<name>MessageBoxManager</name>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished">ملف تنفيدي</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished">هل انت متأكد من فتح الملف ؟</translation>
</message>
</context>
<context>
<name>NetCamView</name>
<message>
@ -2877,16 +2890,6 @@ This ID includes the NoSpam code (in blue), and the checksum (in gray).</source>
<source>Status</source>
<translation>الحالة</translation>
</message>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation>ملف تنفيدي</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation>هل انت متأكد من فتح الملف ؟</translation>
</message>
<message>
<source>Your name</source>
<translation>اسمك</translation>

23
translations/be.ts vendored
View File

@ -1712,6 +1712,19 @@ Please make sure to enter the same password twice.</source>
<translation>Адкрыць налады</translation>
</message>
</context>
<context>
<name>MessageBoxManager</name>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished">Выканальны файл</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished">Вы просіце, каб qTox адкрыў выканальны файл. Выканальныя файлы патэнцыйна могуць нанесці шкоду вашаму камп’ютару. Вы сапраўды хочаце адкрыць гэты файл?</translation>
</message>
</context>
<context>
<name>NetCamView</name>
<message>
@ -2905,16 +2918,6 @@ This ID includes the NoSpam code (in blue), and the checksum (in gray).</source>
<source>Contacts</source>
<translation>Кантакты</translation>
</message>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation>Выканальны файл</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation>Вы просіце, каб qTox адкрыў выканальны файл. Выканальныя файлы патэнцыйна могуць нанесці шкоду вашаму камп’ютару. Вы сапраўды хочаце адкрыць гэты файл?</translation>
</message>
<message>
<source>Status</source>
<translation>Стан</translation>

23
translations/bg.ts vendored
View File

@ -1711,6 +1711,19 @@ Please make sure to enter the same password twice.</source>
<translation>Отворете настройките</translation>
</message>
</context>
<context>
<name>MessageBoxManager</name>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished">Изпълним файл</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished">Поискали сте qTox да отвори изпълним файл. Изпълнимите файлове могат да навредят на компютъра. Сигурни ли сте, че искате да файлът да бъде отворен?</translation>
</message>
</context>
<context>
<name>NetCamView</name>
<message>
@ -2890,16 +2903,6 @@ This ID includes the NoSpam code (in blue), and the checksum (in gray).</source>
<source>Status</source>
<translation>Статус</translation>
</message>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation>Изпълним файл</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation>Поискали сте qTox да отвори изпълним файл. Изпълнимите файлове могат да навредят на компютъра. Сигурни ли сте, че искате да файлът да бъде отворен?</translation>
</message>
<message>
<source>Your name</source>
<translation>Вашето име</translation>

23
translations/cs.ts vendored
View File

@ -1713,6 +1713,19 @@ Ujistěte se, že zadáváte stejné heslo dvakrát.</translation>
<translation>Otevřít Nastavení</translation>
</message>
</context>
<context>
<name>MessageBoxManager</name>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished">Spustitelný soubor</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished">Požadujete aby qTox spustil soubor Spustitelné soubory mohou být rizikem pro váš počítač. Jste si jistý, že chcete tento soubor spustit?</translation>
</message>
</context>
<context>
<name>NetCamView</name>
<message>
@ -2889,16 +2902,6 @@ ID zahrnuje kód NoSpam (modře) a kontrolní součet (šedě).</translation>
<source>Contacts</source>
<translation>Kontakty</translation>
</message>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation>Spustitelný soubor</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation>Požadujete aby qTox spustil soubor Spustitelné soubory mohou být rizikem pro váš počítač. Jste si jistý, že chcete tento soubor spustit?</translation>
</message>
<message>
<source>Status</source>
<translation>Stav</translation>

23
translations/da.ts vendored
View File

@ -1702,6 +1702,19 @@ Please make sure to enter the same password twice.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MessageBoxManager</name>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished">Udførbar fil</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished">Du har bedt qTox at åbne en udførbar fil. Udførbare filer kan potentielt skade din computer. Er du sikker på, st du ønsker at udføre denne fil?</translation>
</message>
</context>
<context>
<name>NetCamView</name>
<message>
@ -2889,16 +2902,6 @@ This ID includes the NoSpam code (in blue), and the checksum (in gray).</source>
<source>Contacts</source>
<translation>Kontakter</translation>
</message>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation>Udførbar fil</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished">Du har bedt qTox at åbne en udførbar fil. Udførbare filer kan potentielt skade din computer. Er du sikker på, st du ønsker at udføre denne fil?</translation>
</message>
<message>
<source>Status</source>
<translation>Status</translation>

23
translations/de.ts vendored
View File

@ -1718,6 +1718,19 @@ Bitte gib in beide Felder das gleiche Passwort ein.</translation>
<translation>Einstellungen öffnen</translation>
</message>
</context>
<context>
<name>MessageBoxManager</name>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished">Ausführbare Datei</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished">Du hast qTox aufgefordert, eine Datei auszuführen. Bitte beachte, dass ausführbare Dateien ein Sicherheitsrisiko darstellen können. Bist du dir sicher, dass du die Datei ausführen möchtest?</translation>
</message>
</context>
<context>
<name>NetCamView</name>
<message>
@ -2914,16 +2927,6 @@ Diese ID enthält den NoSpam-Code (in blau) und die Prüfsumme (in grau).</trans
<source>Contacts</source>
<translation>Kontakte</translation>
</message>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation>Ausführbare Datei</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation>Du hast qTox aufgefordert, eine Datei auszuführen. Bitte beachte, dass ausführbare Dateien ein Sicherheitsrisiko darstellen können. Bist du dir sicher, dass du die Datei ausführen möchtest?</translation>
</message>
<message>
<source>Status</source>
<translation>Status</translation>

23
translations/el.ts vendored
View File

@ -1701,6 +1701,19 @@ Please make sure to enter the same password twice.</source>
<translation>Άνοιγμα Ρυθμίσεων</translation>
</message>
</context>
<context>
<name>MessageBoxManager</name>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished">Εκτελέσιμο αρχείο</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished">Έχετε ζητήσει απ&apos; το qTox να ανοίξει ένα εκτελέσιμο αρχείο. Τα εκτελέσιμα αρχεία μπορούν ενδεχομένως να βλάψουν τον υπολογιστή σας. Είστε βέβαιοι ότι θέλετε να ανοίξετε αυτό το αρχείο;</translation>
</message>
</context>
<context>
<name>NetCamView</name>
<message>
@ -2861,16 +2874,6 @@ This ID includes the NoSpam code (in blue), and the checksum (in gray).</source>
<source>Status</source>
<translation>Κατάσταση</translation>
</message>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation>Εκτελέσιμο αρχείο</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation>Έχετε ζητήσει απ&apos; το qTox να ανοίξει ένα εκτελέσιμο αρχείο. Τα εκτελέσιμα αρχεία μπορούν ενδεχομένως να βλάψουν τον υπολογιστή σας. Είστε βέβαιοι ότι θέλετε να ανοίξετε αυτό το αρχείο;</translation>
</message>
<message>
<source>Your name</source>
<translation>Το όνομα σας</translation>

23
translations/eo.ts vendored
View File

@ -1694,6 +1694,19 @@ Please make sure to enter the same password twice.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MessageBoxManager</name>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>NetCamView</name>
<message>
@ -2849,16 +2862,6 @@ This ID includes the NoSpam code (in blue), and the checksum (in gray).</source>
<source>Status</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Your name</source>
<translation>Via nomo</translation>

23
translations/es.ts vendored
View File

@ -1711,6 +1711,19 @@ Verifica que sean la misma en ambos recuadros.</translation>
<translation>Abrir opciones</translation>
</message>
</context>
<context>
<name>MessageBoxManager</name>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished">Archivo ejecutable</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished">Has seleccionado que qTox abra un archivo ejecutable. Los archivos ejecutables pueden ser dañinos para tu computador. ¿Estás seguro de que quieres abrirlo?</translation>
</message>
</context>
<context>
<name>NetCamView</name>
<message>
@ -2941,16 +2954,6 @@ Este ID incluye el código NoSpam (en azul), y la suma de comprobación (en gris
<source>Contacts</source>
<translation>Amigos</translation>
</message>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation>Archivo ejecutable</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation>Has seleccionado que qTox abra un archivo ejecutable. Los archivos ejecutables pueden ser dañinos para tu computador. ¿Estás seguro de que quieres abrirlo?</translation>
</message>
<message>
<source>Your name</source>
<translation>Tu nombre</translation>

23
translations/et.ts vendored
View File

@ -1711,6 +1711,19 @@ Palun vaata, et sa mõlemal korral sisestad sama salasõna.</translation>
<translation>Ava seaded</translation>
</message>
</context>
<context>
<name>MessageBoxManager</name>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished">Käivitatav fail</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished">Oled palunud qToxil avada käivitatava faili. Sellised failid võivad teoreetiliselt sinu arvutit kahjustada. Kas oled kindel, et soovid faili avada?</translation>
</message>
</context>
<context>
<name>NetCamView</name>
<message>
@ -2876,16 +2889,6 @@ See ID sisaldab NoSpam koodi (sinine) ja kontrollsumma (hall).</translation>
<source>Status</source>
<translation>Olek</translation>
</message>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation>Käivitatav fail</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation>Oled palunud qToxil avada käivitatava faili. Sellised failid võivad teoreetiliselt sinu arvutit kahjustada. Kas oled kindel, et soovid faili avada?</translation>
</message>
<message>
<source>Your name</source>
<translation>Sinu nimi</translation>

23
translations/fa.ts vendored
View File

@ -1706,6 +1706,19 @@ Please make sure to enter the same password twice.</source>
<translation>بازکردن تنظیمات</translation>
</message>
</context>
<context>
<name>MessageBoxManager</name>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished">فایل اجرایی</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished">شما از qTox خواسته اید که یک فایل اجرایی را باز کند. فایل های اجرایی میتوانند به شکل بالقوه صدمه جدی به سیستم شما بزنند. آیا اطمینان دارید که میخواهید این فایل را اجرا کنید؟</translation>
</message>
</context>
<context>
<name>NetCamView</name>
<message>
@ -2897,16 +2910,6 @@ This ID includes the NoSpam code (in blue), and the checksum (in gray).</source>
<source>Contacts</source>
<translation>مخاطبین</translation>
</message>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation>فایل اجرایی</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation>شما از qTox خواسته اید که یک فایل اجرایی را باز کند. فایل های اجرایی میتوانند به شکل بالقوه صدمه جدی به سیستم شما بزنند. آیا اطمینان دارید که میخواهید این فایل را اجرا کنید؟</translation>
</message>
<message>
<source>Status</source>
<translation>وضعیت</translation>

23
translations/fi.ts vendored
View File

@ -1710,6 +1710,19 @@ Varmista, että syötät saman salasanan kahdesti.</translation>
<translation>Avaa asetukset</translation>
</message>
</context>
<context>
<name>MessageBoxManager</name>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished">Suoritettava tiedosto</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished">Olet pyytänyt qToxia avaamaan tiedoston. Tämän tyyppiset tiedostot voivat mahdollisesti vahingoittaa konettasi. Oletko varma, että haluat avata tämän tiedoston?</translation>
</message>
</context>
<context>
<name>NetCamView</name>
<message>
@ -2892,16 +2905,6 @@ Tämä ID sisältää spammin estävän koodin(joka on sinisellä), ja tarkistus
<source>Status</source>
<translation>Tila</translation>
</message>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation>Suoritettava tiedosto</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation>Olet pyytänyt qToxia avaamaan tiedoston. Tämän tyyppiset tiedostot voivat mahdollisesti vahingoittaa konettasi. Oletko varma, että haluat avata tämän tiedoston?</translation>
</message>
<message>
<source>Add new circle...</source>
<translation>Lisää uusi piiri...</translation>

23
translations/fr.ts vendored
View File

@ -1710,6 +1710,19 @@ Veuillez vous assurer d&apos;entrer deux fois le même mot de passe.</translatio
<translation>Ouvrir les paramètres</translation>
</message>
</context>
<context>
<name>MessageBoxManager</name>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished">Fichier exécutable</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished">Vous avez demandé à qTox d&apos;ouvrir un fichier exécutable. Les fichiers exécutables peuvent potentiellement endommager votre ordinateur. Êtes-vous sûr(e) de vouloir ouvrir ce fichier&#xa0;?</translation>
</message>
</context>
<context>
<name>NetCamView</name>
<message>
@ -2904,16 +2917,6 @@ Cet identifiant comprend le code NoSpam (en bleu) et la somme de contrôle (en g
<source>Contacts</source>
<translation>Contacts</translation>
</message>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation>Fichier exécutable</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation>Vous avez demandé à qTox d&apos;ouvrir un fichier exécutable. Les fichiers exécutables peuvent potentiellement endommager votre ordinateur. Êtes-vous sûr(e) de vouloir ouvrir ce fichier&#xa0;?</translation>
</message>
<message>
<source>Your name</source>
<translation>Votre nom</translation>

23
translations/gl.ts vendored
View File

@ -1709,6 +1709,19 @@ Please make sure to enter the same password twice.</source>
<translation>Abrir Configuración</translation>
</message>
</context>
<context>
<name>MessageBoxManager</name>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished">Arquivo executable</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished">Pediu a qTox que abra un ficheiro executable. Os ficheiros executables poden danar o ordenador. Ten a certeza de querer abrir este ficheiro?</translation>
</message>
</context>
<context>
<name>NetCamView</name>
<message>
@ -2901,16 +2914,6 @@ This ID includes the NoSpam code (in blue), and the checksum (in gray).</source>
<source>Contacts</source>
<translation>Contactos</translation>
</message>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation>Arquivo executable</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation>Pediu a qTox que abra un ficheiro executable. Os ficheiros executables poden danar o ordenador. Ten a certeza de querer abrir este ficheiro?</translation>
</message>
<message>
<source>Status</source>
<translation>Estado</translation>

23
translations/he.ts vendored
View File

@ -1702,6 +1702,19 @@ Please make sure to enter the same password twice.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MessageBoxManager</name>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>NetCamView</name>
<message>
@ -2889,16 +2902,6 @@ This ID includes the NoSpam code (in blue), and the checksum (in gray).</source>
<source>Contacts</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Status</source>
<translation type="unfinished"></translation>

23
translations/hr.ts vendored
View File

@ -1704,6 +1704,19 @@ Please make sure to enter the same password twice.</source>
<translation>Otvori postavke</translation>
</message>
</context>
<context>
<name>MessageBoxManager</name>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished">Izvršna datoteka</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished">Tražiš od qToxa da otvori izvršnu datoteku. Zlonamjerne izvršne datoteke mogu oštetiti podatke. Zaista želiš pokrenuti ovu datoteku?</translation>
</message>
</context>
<context>
<name>NetCamView</name>
<message>
@ -2876,16 +2889,6 @@ This ID includes the NoSpam code (in blue), and the checksum (in gray).</source>
<comment>Button to set your status to &apos;Busy&apos;</comment>
<translation>Zauzet(a)</translation>
</message>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation>Izvršna datoteka</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation>Tražiš od qToxa da otvori izvršnu datoteku. Zlonamjerne izvršne datoteke mogu oštetiti podatke. Zaista želiš pokrenuti ovu datoteku?</translation>
</message>
<message>
<source>Status</source>
<translation>Stanje</translation>

23
translations/hu.ts vendored
View File

@ -1698,6 +1698,19 @@ Please make sure to enter the same password twice.</source>
<translation>Beállítások megnyitása</translation>
</message>
</context>
<context>
<name>MessageBoxManager</name>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished">Futtatható fájl</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished">Meg akart nyitni egy futtatható fájlt. Ezek a fájlok potenciálisan veszélyeztethetik a számítógépét. Valóban meg szeretné nyitni ezt a fájlt?</translation>
</message>
</context>
<context>
<name>NetCamView</name>
<message>
@ -2868,16 +2881,6 @@ This ID includes the NoSpam code (in blue), and the checksum (in gray).</source>
<comment>Button to set your status to &apos;Busy&apos;</comment>
<translation>Elfoglalt</translation>
</message>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation>Futtatható fájl</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation>Meg akart nyitni egy futtatható fájlt. Ezek a fájlok potenciálisan veszélyeztethetik a számítógépét. Valóban meg szeretné nyitni ezt a fájlt?</translation>
</message>
<message>
<source>Status</source>
<translation>Állapot</translation>

23
translations/is.ts vendored
View File

@ -1702,6 +1702,19 @@ Please make sure to enter the same password twice.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MessageBoxManager</name>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>NetCamView</name>
<message>
@ -2889,16 +2902,6 @@ This ID includes the NoSpam code (in blue), and the checksum (in gray).</source>
<source>Contacts</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Status</source>
<translation type="unfinished"></translation>

23
translations/it.ts vendored
View File

@ -1710,6 +1710,19 @@ Per favore assicurati di inserire la stessa password due volte.</translation>
<translation>Apri Impostazioni</translation>
</message>
</context>
<context>
<name>MessageBoxManager</name>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished">File eseguibile</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished">Hai chiesto a qTox di aprire un file eseguibile. I file eseguibili possono danneggiare il tuo computer. Sei sicuro di voler aprire questo file?</translation>
</message>
</context>
<context>
<name>NetCamView</name>
<message>
@ -2917,16 +2930,6 @@ This ID includes the NoSpam code (in blue), and the checksum (in gray).</source>
<source>Search Contacts</source>
<translation>Cerca tra i contatti</translation>
</message>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation>File eseguibile</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation>Hai chiesto a qTox di aprire un file eseguibile. I file eseguibili possono danneggiare il tuo computer. Sei sicuro di voler aprire questo file?</translation>
</message>
<message>
<source>Status</source>
<translation>Stato</translation>

23
translations/ja.ts vendored
View File

@ -1697,6 +1697,19 @@ Please make sure to enter the same password twice.</source>
<translation>設定を開く</translation>
</message>
</context>
<context>
<name>MessageBoxManager</name>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished">実行可能なファイル</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished">qTox で実行可能なファイルを開こうとしています。実行可能なファイルはお使いのコンピューターに危害を加える可能性があります。このファイルを開いてもよろしいですか?</translation>
</message>
</context>
<context>
<name>NetCamView</name>
<message>
@ -2856,16 +2869,6 @@ This ID includes the NoSpam code (in blue), and the checksum (in gray).</source>
<source>Status</source>
<translation>ステータス</translation>
</message>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation>実行可能なファイル</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation>qTox で実行可能なファイルを開こうとしています。実行可能なファイルはお使いのコンピューターに危害を加える可能性があります。このファイルを開いてもよろしいですか?</translation>
</message>
<message>
<source>Your name</source>
<translation>名前</translation>

23
translations/kn.ts vendored
View File

@ -1702,6 +1702,19 @@ Please make sure to enter the same password twice.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MessageBoxManager</name>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>NetCamView</name>
<message>
@ -2889,16 +2902,6 @@ This ID includes the NoSpam code (in blue), and the checksum (in gray).</source>
<source>Contacts</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Status</source>
<translation type="unfinished"></translation>

23
translations/ko.ts vendored
View File

@ -1701,6 +1701,19 @@ Please make sure to enter the same password twice.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MessageBoxManager</name>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished">실행파일</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished">실행파일을 열기하는것은 위험할 수 있습니다. 파일을 열기하시겠습니까?</translation>
</message>
</context>
<context>
<name>NetCamView</name>
<message>
@ -2887,16 +2900,6 @@ This ID includes the NoSpam code (in blue), and the checksum (in gray).</source>
<source>Contacts</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation>실행파일</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation>실행파일을 열기하는것은 위험할 수 있습니다. 파일을 열기하시겠습니까?</translation>
</message>
<message>
<source>Status</source>
<translation>상태</translation>

23
translations/lt.ts vendored
View File

@ -1713,6 +1713,19 @@ Please make sure to enter the same password twice.</source>
<translation>Atverti nustatymus</translation>
</message>
</context>
<context>
<name>MessageBoxManager</name>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished">Vykdomasis failas</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished">Nurodėte qTox atidaryti vykdomąjį failą (programą). Vykdomieji failai gali pakenkti Jūsų kompiuteriui. Ar norite tęsti?</translation>
</message>
</context>
<context>
<name>NetCamView</name>
<message>
@ -2947,16 +2960,6 @@ Pasidalinkite ja su draugais, kad pradėtumėte kalbėtis.
<source>Contacts</source>
<translation>Kontaktai</translation>
</message>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation>Vykdomasis failas</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation>Nurodėte qTox atidaryti vykdomąjį failą (programą). Vykdomieji failai gali pakenkti Jūsų kompiuteriui. Ar norite tęsti?</translation>
</message>
<message>
<source>Status</source>
<translation>Būsena</translation>

23
translations/lv.ts vendored
View File

@ -1719,6 +1719,19 @@ Please make sure to enter the same password twice.</source>
<translation>Atvērt iestatījumus</translation>
</message>
</context>
<context>
<name>MessageBoxManager</name>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>NetCamView</name>
<message>
@ -2912,16 +2925,6 @@ This ID includes the NoSpam code (in blue), and the checksum (in gray).</source>
<source>Contacts</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Status</source>
<translation type="unfinished">Statuss</translation>

23
translations/mk.ts vendored
View File

@ -1712,6 +1712,19 @@ Please make sure to enter the same password twice.</source>
<translation>Отвори Поставки</translation>
</message>
</context>
<context>
<name>MessageBoxManager</name>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished">Извршна датотека</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished">Побаравте qTox да отвори извршна датотека. Извршните датотеки можат да му нанесат штета на вашиот компјутер. Дали сте сигурни дека сакате да ја отворите оваа датотека?</translation>
</message>
</context>
<context>
<name>NetCamView</name>
<message>
@ -2905,16 +2918,6 @@ This ID includes the NoSpam code (in blue), and the checksum (in gray).</source>
<source>Contacts</source>
<translation></translation>
</message>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation>Извршна датотека</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation>Побаравте qTox да отвори извршна датотека. Извршните датотеки можат да му нанесат штета на вашиот компјутер. Дали сте сигурни дека сакате да ја отворите оваа датотека?</translation>
</message>
<message>
<source>Status</source>
<translation></translation>

23
translations/nl.ts vendored
View File

@ -1701,6 +1701,19 @@ Please make sure to enter the same password twice.</source>
<translation>Instellingen openen</translation>
</message>
</context>
<context>
<name>MessageBoxManager</name>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished">Uitvoerbaar bestand</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished">Je hebt qTox gevraagd een uitvoerbaar bestand te openen. Uitvoerbare bestanden kunnen schade toebrengen aan je computer. Weet je zeker dat je dit bestand wilt openen?</translation>
</message>
</context>
<context>
<name>NetCamView</name>
<message>
@ -2888,16 +2901,6 @@ This ID includes the NoSpam code (in blue), and the checksum (in gray).</source>
<source>Contacts</source>
<translation>Contacten</translation>
</message>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation>Uitvoerbaar bestand</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation>Je hebt qTox gevraagd een uitvoerbaar bestand te openen. Uitvoerbare bestanden kunnen schade toebrengen aan je computer. Weet je zeker dat je dit bestand wilt openen?</translation>
</message>
<message>
<source>Status</source>
<translation>Status</translation>

23
translations/nl_BE.ts vendored
View File

@ -1709,6 +1709,19 @@ Please make sure to enter the same password twice.</source>
<translation>Open instellingen</translation>
</message>
</context>
<context>
<name>MessageBoxManager</name>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished">Uitvoerbaar bestand</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished">Ge hebt qTox gevraagd voor een uitvoerbaar bestand te openen. Uitvoerbare bestanden kunnen schade toebrengen aan uwe computer. Zijt ge zeker dat ge dit bestand wilt openen?</translation>
</message>
</context>
<context>
<name>NetCamView</name>
<message>
@ -2901,16 +2914,6 @@ This ID includes the NoSpam code (in blue), and the checksum (in gray).</source>
<source>Contacts</source>
<translation>Contacten</translation>
</message>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation>Uitvoerbaar bestand</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation>Ge hebt qTox gevraagd voor een uitvoerbaar bestand te openen. Uitvoerbare bestanden kunnen schade toebrengen aan uwe computer. Zijt ge zeker dat ge dit bestand wilt openen?</translation>
</message>
<message>
<source>Status</source>
<translation></translation>

23
translations/no_nb.ts vendored
View File

@ -1703,6 +1703,19 @@ Please make sure to enter the same password twice.</source>
<translation>Åpne innstillinger</translation>
</message>
</context>
<context>
<name>MessageBoxManager</name>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished">Kjørbar fil</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished">Du har spurt qTox om å åpne en kjørbar fil. Kjørbare filer kan forårsake skader på din maskin. Er du sikker du vil åpne denne filen?</translation>
</message>
</context>
<context>
<name>NetCamView</name>
<message>
@ -2922,16 +2935,6 @@ This ID includes the NoSpam code (in blue), and the checksum (in gray).</source>
<source>Contacts</source>
<translation>Venner</translation>
</message>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation>Kjørbar fil</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation>Du har spurt qTox om å åpne en kjørbar fil. Kjørbare filer kan forårsake skader på din maskin. Er du sikker du vil åpne denne filen?</translation>
</message>
<message>
<source>Search Contacts</source>
<translation>Søk i kontakter</translation>

24
translations/pl.ts vendored
View File

@ -1727,6 +1727,19 @@ Please make sure to enter the same password twice.</source>
<translation>Otwórz ustawienia</translation>
</message>
</context>
<context>
<name>MessageBoxManager</name>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished">Plik wykonywalny</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished">Zażądano od qToxa aby otworzyć plik wykonywalny. Wykonywalne pliki mogą potencjalnie uszkodzić twój komputer. Czy na pewno chcesz otworzyć ten plik?</translation>
</message>
</context>
<context>
<name>NetCamView</name>
<message>
@ -2949,17 +2962,6 @@ This ID includes the NoSpam code (in blue), and the checksum (in gray).</source>
<translatorcomment>better translation?</translatorcomment>
<translation>Szukaj znajomych</translation>
</message>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translatorcomment>better translation?</translatorcomment>
<translation>Plik wykonywalny</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation>Zażądano od qToxa aby otworzyć plik wykonywalny. Wykonywalne pliki mogą potencjalnie uszkodzić twój komputer. Czy na pewno chcesz otworzyć ten plik?</translation>
</message>
<message>
<source>Status</source>
<translation>Status</translation>

23
translations/pt.ts vendored
View File

@ -1710,6 +1710,19 @@ Certifique-se de introduziu a mesma palavra-passe duas vezes.</translation>
<translation>Abrir configurações</translation>
</message>
</context>
<context>
<name>MessageBoxManager</name>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished">Ficheiro executável</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished">Pediu ao qTox para abrir um ficheiro executável. Os executáveis podem potencialmente danificar o seu computador. Tem a certeza que quer abrir este ficheiro?</translation>
</message>
</context>
<context>
<name>NetCamView</name>
<message>
@ -2936,16 +2949,6 @@ Este ID inclui o código NoSpam (em azul) e o checkum (em cinzento).</translatio
<source>Contacts</source>
<translation>Contactos</translation>
</message>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation>Ficheiro executável</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation>Pediu ao qTox para abrir um ficheiro executável. Os executáveis podem potencialmente danificar o seu computador. Tem a certeza que quer abrir este ficheiro?</translation>
</message>
<message>
<source>Status</source>
<translation>Estado</translation>

23
translations/pt_BR.ts vendored
View File

@ -1718,6 +1718,19 @@ Certifique-se de que você entrou a mesma senha duas vezes.</translation>
<translation>Abrir Configurações</translation>
</message>
</context>
<context>
<name>MessageBoxManager</name>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished">Arquivo executável</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished">Você pediu ao qTox para abrir um arquivo executável. Executáveis podem potencialmente danificar seu computador. Tem certeza de que deseja abrir este arquivo?</translation>
</message>
</context>
<context>
<name>NetCamView</name>
<message>
@ -2913,16 +2926,6 @@ Este ID inclui o código NoSpam (em azul) e o checkum (em cinza).</translation>
<source>Contacts</source>
<translation>Contatos</translation>
</message>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation>Arquivo executável</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation>Você pediu ao qTox para abrir um arquivo executável. Executáveis podem potencialmente danificar seu computador. Tem certeza de que deseja abrir este arquivo?</translation>
</message>
<message>
<source>Status</source>
<translation>Status</translation>

23
translations/ro.ts vendored
View File

@ -1721,6 +1721,19 @@ Vă rugăm să vă asigurați că introduceți aceeași parolă de două ori.</t
<translation>Deschideți setările</translation>
</message>
</context>
<context>
<name>MessageBoxManager</name>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished">Fișier executabil</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished">Sunteți întrebat de qTox pentru deschiderea unui fișier executabil. Fișierele executabile pot deteriora computerul. Sigur doriți să deschideți acest fișier?</translation>
</message>
</context>
<context>
<name>NetCamView</name>
<message>
@ -2917,16 +2930,6 @@ Acest ID include codul NoSpam (în albastru) și suma de control (în gri).</tra
<source>Contacts</source>
<translation>Contacte</translation>
</message>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation>Fișier executabil</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation>Sunteți întrebat de qTox pentru deschiderea unui fișier executabil. Fișierele executabile pot deteriora computerul. Sigur doriți să deschideți acest fișier?</translation>
</message>
<message>
<source>Status</source>
<translation>Stare</translation>

23
translations/ru.ts vendored
View File

@ -1716,6 +1716,19 @@ Please make sure to enter the same password twice.</source>
<translation>Открыть настройки</translation>
</message>
</context>
<context>
<name>MessageBoxManager</name>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished">Исполняемый файл</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished">Вы просите qTox открыть исполняемый файл. Исполняемые файлы могут нанести вред вашему компьютеру. Вы уверены, что хотите открыть этот файл?</translation>
</message>
</context>
<context>
<name>NetCamView</name>
<message>
@ -2960,16 +2973,6 @@ This ID includes the NoSpam code (in blue), and the checksum (in gray).</source>
<source>Contacts</source>
<translation>Контакты</translation>
</message>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation>Исполняемый файл</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation>Вы просите qTox открыть исполняемый файл. Исполняемые файлы могут нанести вред вашему компьютеру. Вы уверены, что хотите открыть этот файл?</translation>
</message>
<message>
<source>Status</source>
<translation>Статус</translation>

23
translations/si.ts vendored
View File

@ -1702,6 +1702,19 @@ Please make sure to enter the same password twice.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MessageBoxManager</name>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>NetCamView</name>
<message>
@ -2889,16 +2902,6 @@ This ID includes the NoSpam code (in blue), and the checksum (in gray).</source>
<source>Contacts</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Status</source>
<translation type="unfinished"></translation>

23
translations/sk.ts vendored
View File

@ -1721,6 +1721,19 @@ Prosím, uistite sa, že ste zadali to isté heslo dvakrát.</translation>
<translation>Otvoriť nastavenia</translation>
</message>
</context>
<context>
<name>MessageBoxManager</name>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished">Spustiteľný súbor</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished">Požiadali ste qTox o spustenie spustiteľného súboru. Spustiteľné súbory môžu poškodiť váš počítač. Naozaj chcete tento súbor otvoriť?</translation>
</message>
</context>
<context>
<name>NetCamView</name>
<message>
@ -2917,16 +2930,6 @@ Toto ID obsahuje kód NoSpam (modrou) a kontrolný súčet (šedou).</translatio
<source>Contacts</source>
<translation>Kontakty</translation>
</message>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation>Spustiteľný súbor</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation>Požiadali ste qTox o spustenie spustiteľného súboru. Spustiteľné súbory môžu poškodiť váš počítač. Naozaj chcete tento súbor otvoriť?</translation>
</message>
<message>
<source>Status</source>
<translation>Stav</translation>

23
translations/sl.ts vendored
View File

@ -1708,6 +1708,19 @@ Please make sure to enter the same password twice.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MessageBoxManager</name>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished">Zagonska datoteka</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished">Želiš odpreti zagonsko datoteko. Te datoteke so lahko nevarne in škodijo računalniku. Želiš vseeno odpreti?</translation>
</message>
</context>
<context>
<name>NetCamView</name>
<message>
@ -2878,16 +2891,6 @@ This ID includes the NoSpam code (in blue), and the checksum (in gray).</source>
<comment>Button to set your status to &apos;Busy&apos;</comment>
<translation>Zaseden</translation>
</message>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation>Zagonska datoteka</translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation>Želiš odpreti zagonsko datoteko. Te datoteke so lahko nevarne in škodijo računalniku. Želiš vseeno odpreti?</translation>
</message>
<message>
<source>Status</source>
<translation type="unfinished">Stanje</translation>

23
translations/sq.ts vendored
View File

@ -1702,6 +1702,19 @@ Please make sure to enter the same password twice.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MessageBoxManager</name>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>NetCamView</name>
<message>
@ -2889,16 +2902,6 @@ This ID includes the NoSpam code (in blue), and the checksum (in gray).</source>
<source>Contacts</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Executable file</source>
<comment>popup title</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>You have asked qTox to open an executable file. Executable files can potentially damage your computer. Are you sure want to open this file?</source>
<comment>popup text</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Status</source>
<translation type="unfinished"></translation>

Some files were not shown because too many files have changed in this diff Show More