1
0
mirror of https://github.com/qTox/qTox.git synced 2024-03-22 14:00:36 +08:00

Merge remote-tracking branch 'upsteam/master' into style

This commit is contained in:
agilob 2014-10-22 16:21:01 +01:00
commit 9bc1568c0d
47 changed files with 1665 additions and 789 deletions

View File

@ -20,15 +20,15 @@ However, it is not a fork.
This client runs on Windows, Linux and Mac natively.<br/>
You can find the latest versions of qTox <a href="https://github.com/tux3/qTox/releases">here</a>, or from the Tox Project's servers :
You can find the latest versions of qTox <a href="https://github.com/tux3/qTox/releases">here</a> (Windows and Linux), or from the Tox Project's servers :
<a href="https://jenkins.libtoxcore.so/job/tux3-toxgui-win32/lastSuccessfulBuild/artifact/toxgui-win32.zip">Windows download</a><br/>
<a href="https://jenkins.libtoxcore.so/job/qTox%20OS%20X/lastSuccessfulBuild/artifact/qtox.dmg">Mac download </a><br/>
<a href="https://jenkins.libtoxcore.so/job/qTox-linux-amd64/">Linux download</a> (click "Last successful artifacts")<br/>
<a href="https://dist-build.tox.im/qtox.dmg">Mac download </a><br/>
<a href="https://jenkins.libtoxcore.so/job/qTox-linux-amd64/lastSuccessfulBuild/artifact/qt/qtox.xz">Linux download</a> (click "Last successful artifacts")<br/>
<h3>Screenshots</h3>
<h5>Note: The screenshots may not always be up to date, but they should give a good idea of the general look and features</h5>
<img src="https://wiki.tox.im/images/5/5d/ToxGUI_tux3.png">
<img src="https://wiki.tox.im/images/5/5d/ToxGUI_tux3.png"/>
<img src="https://i.imgur.com/0XWcqBc.jpg"/>
##Documentation:

2
debian/control vendored
View File

@ -7,7 +7,7 @@ Build-Depends: debhelper (>= 9), cdbs, qt5-qmake, libopenal-dev (>= 1:1.14), lib
Package: qtox
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}, libgcc1 (>= 1:4.1.1), libgl1-mesa-glx | libgl1, libopenal1 (>= 1.14), libopus0 (>= 0.9), libqt5core5a (>= 5.2), libqt5gui5 (>= 5.2), libqt5network5 (>= 5.0), libqt5widgets5 (>= 5.2), libqt5xml5 (>= 5.0), libstdc++6 (>= 4.9), libvpx1 (>= 1.0.0)
Depends: ${shlibs:Depends}, ${misc:Depends}, libgcc1 (>= 1:4.1.1), libgl1-mesa-glx | libgl1, libopenal1 (>= 1.14), libopus0 (>= 0.9), libqt5core5a (>= 5.2), libqt5gui5 (>= 5.2), libqt5network5 (>= 5.0), libqt5widgets5 (>= 5.2), libqt5xml5 (>= 5.0), libstdc++6 (>= 4.8.2), libvpx1 (>= 1.0.0)
Description: Tox client
qTox is a powerful Tox client that follows the Tox design guidelines.
Tox is a decentralized and encrypted replacement for Skype, supporting

BIN
img/icons/qtox.icns Normal file

Binary file not shown.

View File

@ -60,6 +60,7 @@ win32 {
LIBS += -lz -lopengl32 -lole32 -loleaut32 -luuid -lvfw32 -ljpeg -ltiff -lpng -ljasper -lIlmImf -lHalf -lws2_32
} else {
macx {
ICON = img/icons/qtox.icns
LIBS += -L$$PWD/libs/lib/ -ltoxcore -ltoxav -lsodium -lvpx -framework OpenAL -lopencv_core -lopencv_highgui
} else {
# If we're building a package, static link libtox[core,av] and libsodium, since they are not provided by any package
@ -68,7 +69,7 @@ win32 {
INSTALLS += target
LIBS += -L$$PWD/libs/lib/ -lopus -lvpx -lopenal -Wl,-Bstatic -ltoxcore -ltoxav -lsodium -lopencv_highgui -lopencv_imgproc -lopencv_core -lz -Wl,-Bdynamic
LIBS += -Wl,-Bstatic -ljpeg -ltiff -lpng -ljasper -lIlmImf -lIlmThread -lIex -ldc1394 -lraw1394 -lHalf -lz -llzma -ljbig
LIBS += -Wl,-Bdynamic -ltbb -lv4l1 -lv4l2 -lgnutls -lrtmp -lgnutls -lavformat -lavcodec -lavutil -lavfilter -lswscale -lusb-1.0
LIBS += -Wl,-Bdynamic -lv4l1 -lv4l2 -lavformat -lavcodec -lavutil -lswscale -lusb-1.0
} else {
LIBS += -L$$PWD/libs/lib/ -ltoxcore -ltoxav -lvpx -lopenal -lopencv_core -lopencv_highgui -lopencv_imgproc
@ -134,10 +135,12 @@ HEADERS += src/widget/form/addfriendform.h \
src/widget/tool/chatactions/filetransferaction.h \
src/widget/tool/chatactions/systemmessageaction.h \
src/widget/tool/chatactions/actionaction.h \
src/widget/tool/chatactions/alertaction.h \
src/widget/maskablepixmapwidget.h \
src/videosource.h \
src/cameraworker.h \
src/widget/videosurface.h
src/widget/videosurface.h \
src/widget/form/tabcompleter.h
SOURCES += \
src/widget/form/addfriendform.cpp \
@ -182,7 +185,9 @@ SOURCES += \
src/widget/tool/chatactions/filetransferaction.cpp \
src/widget/tool/chatactions/systemmessageaction.cpp \
src/widget/tool/chatactions/actionaction.cpp \
src/widget/tool/chatactions/alertaction.cpp \
src/widget/maskablepixmapwidget.cpp \
src/cameraworker.cpp \
src/widget/videosurface.cpp \
src/netvideosource.cpp
src/netvideosource.cpp \
src/widget/form/tabcompleter.cpp

View File

@ -18,6 +18,7 @@
#include <QTimer>
#include <QDebug>
#include <QCoreApplication>
CameraWorker::CameraWorker(int index)
: clock(nullptr)
@ -178,6 +179,7 @@ void CameraWorker::setProp(int prop, double val)
double CameraWorker::getProp(int prop)
{
double ret = 0.0;
qApp->processEvents();
QMetaObject::invokeMethod(this, "_getProp", Qt::BlockingQueuedConnection, Q_RETURN_ARG(double, ret), Q_ARG(int, prop));
return ret;

View File

@ -226,6 +226,12 @@ void Core::start()
}
loadPath = "";
}
else // new ID
{
setStatusMessage(tr("Toxing on qTox")); // this also solves the not updating issue
setUsername(tr("qTox User"));
Widget::getInstance()->onSettingsClicked(); // update ui with new profile (im worried about threading, but it seems to work)
}
tox_callback_friend_request(tox, onFriendRequest, this);
tox_callback_friend_message(tox, onFriendMessage, this);
@ -1187,10 +1193,7 @@ void Core::saveConfiguration(const QString& path)
void Core::switchConfiguration(const QString& profile)
{
if (profile.isEmpty())
{
qWarning() << "Core: got null profile to switch to, not switching";
return;
}
qDebug() << "Core: creating new Id";
else
qDebug() << "Core: switching from" << Settings::getInstance().getCurrentProfile() << "to" << profile;
saveConfiguration();
@ -1205,8 +1208,11 @@ void Core::switchConfiguration(const QString& profile)
}
emit selfAvatarChanged(QPixmap(":/img/contact_dark.png"));
emit blockingClearContacts(); // we need this to block, but signals are required for thread safety
loadPath = QDir(Settings::getSettingsDirPath()).filePath(profile + TOX_EXT);
if (profile.isEmpty())
loadPath = "";
else
loadPath = QDir(Settings::getSettingsDirPath()).filePath(profile + TOX_EXT);
Settings::getInstance().setCurrentProfile(profile);
start();

View File

@ -46,7 +46,7 @@ FileTransferInstance::FileTransferInstance(ToxFile File)
filenameElided = fm.elidedText(filename, Qt::ElideRight, MAX_CONTENT_WIDTH);
size = getHumanReadableSize(File.filesize);
contentPrefWidth = std::max(fm.width(filenameElided), fm.width(size));
contentPrefWidth = std::max(fm.boundingRect(filenameElided).width(), fm.width(size));
speed = "0B/s";
eta = "00:00";
@ -209,6 +209,7 @@ bool isFileWritable(QString& path)
void FileTransferInstance::acceptRecvRequest()
{
QString path = Settings::getInstance().getAutoAcceptDir(Core::getInstance()->getFriendAddress(friendId));
if (path.isEmpty()) path = Settings::getInstance().getGlobalAutoAcceptDir();
if (!path.isEmpty())
{
QDir dir(path);

View File

@ -18,7 +18,6 @@
#include "misc/settings.h"
#include <QApplication>
#include <QFontDatabase>
#include <QSystemTrayIcon>
#include <QDebug>
int main(int argc, char *argv[])
@ -38,24 +37,6 @@ int main(int argc, char *argv[])
QFontDatabase::addApplicationFont("://DejaVuSans.ttf");
Widget* w = Widget::getInstance();
if (QSystemTrayIcon::isSystemTrayAvailable() == false)
{
qWarning() << "No system tray detected!";
w->show();
}
else
{
QSystemTrayIcon *icon = new QSystemTrayIcon(w);
QObject::connect(icon,
SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
w,
SLOT(onIconClick()));
icon->setIcon(w->windowIcon());
icon->show();
if(Settings::getInstance().getAutostartInTray() == false)
w->show();
}
int errorcode = a.exec();

View File

@ -112,6 +112,7 @@ void Settings::load()
translation = s.value("translation", "").toString();
makeToxPortable = s.value("makeToxPortable", false).toBool();
autostartInTray = s.value("autostartInTray", false).toBool();
closeToTray = s.value("closeToTray", false).toBool();
forceTCP = s.value("forceTCP", false).toBool();
useProxy = s.value("useProxy", false).toBool();
proxyAddr = s.value("proxyAddr", "").toString();
@ -137,6 +138,7 @@ void Settings::load()
secondColumnHandlePosFromRight = s.value("secondColumnHandlePosFromRight", 50).toInt();
timestampFormat = s.value("timestampFormat", "hh:mm").toString();
minimizeOnClose = s.value("minimizeOnClose", false).toBool();
minimizeToTray = s.value("minimizeToTray", false).toBool();
useNativeStyle = s.value("nativeStyle", false).toBool();
style = s.value("style", "None").toString();
statusChangeNotificationEnabled = s.value("statusChangeNotificationEnabled", false).toBool();
@ -153,6 +155,7 @@ void Settings::load()
s.endGroup();
s.beginGroup("AutoAccept");
globalAutoAcceptDir = s.value("globalAutoAcceptDir", "").toString();
for (auto& key : s.childKeys())
autoAccept[key] = s.value(key).toString();
s.endGroup();
@ -225,6 +228,7 @@ void Settings::save(QString path)
s.setValue("translation",translation);
s.setValue("makeToxPortable",makeToxPortable);
s.setValue("autostartInTray",autostartInTray);
s.setValue("closeToTray", closeToTray);
s.setValue("useProxy", useProxy);
s.setValue("forceTCP", forceTCP);
s.setValue("proxyAddr", proxyAddr);
@ -250,6 +254,7 @@ void Settings::save(QString path)
s.setValue("secondColumnHandlePosFromRight", secondColumnHandlePosFromRight);
s.setValue("timestampFormat", timestampFormat);
s.setValue("minimizeOnClose", minimizeOnClose);
s.setValue("minimizeToTray", minimizeToTray);
s.setValue("nativeStyle", useNativeStyle);
s.setValue("style",style);
s.setValue("statusChangeNotificationEnabled", statusChangeNotificationEnabled);
@ -266,6 +271,7 @@ void Settings::save(QString path)
s.endGroup();
s.beginGroup("AutoAccept");
s.setValue("globalAutoAcceptDir", globalAutoAcceptDir);
for (auto& id : autoAccept.keys())
s.setValue(id, autoAccept.value(id));
s.endGroup();
@ -390,6 +396,27 @@ void Settings::setAutostartInTray(bool newValue)
autostartInTray = newValue;
}
bool Settings::getCloseToTray() const
{
return closeToTray;
}
void Settings::setCloseToTray(bool newValue)
{
closeToTray = newValue;
}
bool Settings::getMinimizeToTray() const
{
return minimizeToTray;
}
void Settings::setMinimizeToTray(bool newValue)
{
minimizeToTray = newValue;
}
bool Settings::getStatusChangeNotificationEnabled() const
{
return statusChangeNotificationEnabled;
@ -504,6 +531,16 @@ void Settings::setAutoAcceptDir(const QString& id, const QString& dir)
autoAccept[id.left(TOX_ID_PUBLIC_KEY_LENGTH)] = dir;
}
QString Settings::getGlobalAutoAcceptDir() const
{
return globalAutoAcceptDir;
}
void Settings::setGlobalAutoAcceptDir(const QString& newValue)
{
globalAutoAcceptDir = newValue;
}
void Settings::setWidgetData(const QString& uniqueName, const QByteArray& data)
{
widgetSettings[uniqueName] = data;

View File

@ -52,6 +52,12 @@ public:
bool getAutostartInTray() const;
void setAutostartInTray(bool newValue);
bool getCloseToTray() const;
void setCloseToTray(bool newValue);
bool getMinimizeToTray() const;
void setMinimizeToTray(bool newValue);
QString getStyle() const;
void setStyle(const QString& newValue);
@ -128,6 +134,9 @@ public:
QString getAutoAcceptDir(const QString& id) const;
void setAutoAcceptDir(const QString&id, const QString& dir);
QString getGlobalAutoAcceptDir() const;
void setGlobalAutoAcceptDir(const QString& dir);
// ChatView
int getFirstColumnHandlePos() const;
void setFirstColumnHandlePos(const int pos);
@ -185,6 +194,8 @@ private:
QString translation;
static bool makeToxPortable;
bool autostartInTray;
bool closeToTray;
bool minimizeToTray;
bool forceTCP;
@ -201,6 +212,7 @@ private:
QHash<QString, QByteArray> widgetSettings;
QHash<QString, QString> autoAccept;
QString globalAutoAcceptDir;
// GUI
bool enableSmoothAnimation;

View File

@ -70,6 +70,7 @@ QColor Style::getColor(Style::ColorPalette entry)
QColor("#414141").lighter(120),
QColor("#d1d1d1"),
QColor("#ffffff"),
QColor("#ff7700"),
};
return palette[entry];
@ -108,6 +109,7 @@ QString Style::resolve(QString qss)
{"@mediumGreyLight", getColor(MediumGreyLight).name()},
{"@lightGrey", getColor(LightGrey).name()},
{"@white", getColor(White).name()},
{"@orange", getColor(Orange).name()},
// fonts
{"@extraBig", qssifyFont(getFont(ExtraBig))},

View File

@ -37,6 +37,7 @@ public:
MediumGreyLight,
LightGrey,
White,
Orange,
};
enum Font

View File

@ -154,4 +154,6 @@ void AddFriendForm::handleDnsLookup()
// finally we got it
emit friendRequested(friendAdress, getMessage());
this->toxId.setText("");
this->message.setText("");
}

View File

@ -87,7 +87,7 @@ void ChatForm::onSendTriggered()
if (msg.isEmpty())
return;
QString name = Widget::getInstance()->getUsername();
if (msg.startsWith("/me "))
if (msg.startsWith("/me"))
{
msg = msg.right(msg.length() - 4);
addMessage(name, msg, true);
@ -180,7 +180,8 @@ void ChatForm::onFileRecvRequest(ToxFile file)
chatWidget->insertMessage(new FileTransferAction(fileTrans, getElidedName(name), QTime::currentTime().toString("hh:mm"), false));
if (!Settings::getInstance().getAutoAcceptDir(Core::getInstance()->getFriendAddress(f->friendId)).isEmpty())
if (!Settings::getInstance().getAutoAcceptDir(Core::getInstance()->getFriendAddress(f->friendId)).isEmpty()
|| !Settings::getInstance().getGlobalAutoAcceptDir().isEmpty())
fileTrans->pressFromHtml("btnB");
}
@ -408,7 +409,8 @@ void ChatForm::onAvPeerTimeout(int FriendId, int)
void ChatForm::onAvMediaChange(int FriendId, int CallId, bool video)
{
Q_UNUSED(FriendId)
if (FriendId != f->friendId || CallId != callId)
return;
if (video)
{

View File

@ -25,6 +25,7 @@
#include "src/widget/tool/chatactions/messageaction.h"
#include "src/widget/tool/chatactions/systemmessageaction.h"
#include "src/widget/tool/chatactions/actionaction.h"
#include "src/widget/tool/chatactions/alertaction.h"
#include "src/widget/chatareawidget.h"
#include "src/widget/tool/chattextedit.h"
#include "src/widget/maskablepixmapwidget.h"
@ -173,7 +174,7 @@ void GenericChatForm::addMessage(QString author, QString message, bool isAction,
QString date = datetime.toString(Settings::getInstance().getTimestampFormat());
bool isMe = (author == Widget::getInstance()->getUsername());
if (!isAction && message.startsWith("/me "))
if (!isAction && message.startsWith("/me"))
{ // always render actions regardless of what core thinks
isAction = true;
message = message.right(message.length()-4);
@ -193,6 +194,13 @@ void GenericChatForm::addMessage(QString author, QString message, bool isAction,
previousName = author;
}
void GenericChatForm::addAlertMessage(QString author, QString message, QDateTime datetime)
{
QString date = datetime.toString(Settings::getInstance().getTimestampFormat());
chatWidget->insertMessage(new AlertAction(author, message, date));
previousName = author;
}
void GenericChatForm::onEmoteButtonClicked()
{
// don't show the smiley selection widget if there are no smileys available

View File

@ -22,7 +22,7 @@
#include <QDateTime>
// Spacing in px inserted when the author of the last message changes
#define AUTHOR_CHANGE_SPACING 5
#define AUTHOR_CHANGE_SPACING 5 // why the hell is this a thing? surely the different font is enough?
class QLabel;
class QVBoxLayout;
@ -45,6 +45,7 @@ public:
virtual void setName(const QString &newName);
virtual void show(Ui::MainWindow &ui);
void addMessage(QString author, QString message, bool isAction = false, QDateTime datetime=QDateTime::currentDateTime());
void addAlertMessage(QString author, QString message, QDateTime datetime=QDateTime::currentDateTime());
void addSystemInfoMessage(const QString &message, const QString &type, const QDateTime &datetime=QDateTime::currentDateTime());
int getNumberOfMessages();

View File

@ -15,6 +15,7 @@
*/
#include "groupchatform.h"
#include "tabcompleter.h"
#include "src/group.h"
#include "src/widget/groupwidget.h"
#include "src/widget/tool/chattextedit.h"
@ -33,6 +34,8 @@ GroupChatForm::GroupChatForm(Group* chatGroup)
namesList = new QLabel();
namesList->setObjectName("peersLabel");
tabber = new TabCompleter(msgEdit, group);
fileButton->setEnabled(false);
callButton->setVisible(false);
videoButton->setVisible(false);
@ -59,6 +62,8 @@ GroupChatForm::GroupChatForm(Group* chatGroup)
connect(sendButton, SIGNAL(clicked()), this, SLOT(onSendTriggered()));
connect(msgEdit, SIGNAL(enterPressed()), this, SLOT(onSendTriggered()));
connect(msgEdit, &ChatTextEdit::tabPressed, tabber, &TabCompleter::complete);
connect(msgEdit, &ChatTextEdit::keyPressed, tabber, &TabCompleter::reset);
setAcceptDrops(true);
}

View File

@ -21,6 +21,7 @@
namespace Ui {class MainWindow;}
class Group;
class TabCompleter;
class GroupChatForm : public GenericChatForm
{
@ -41,6 +42,7 @@ protected:
private:
Group* group;
QLabel *nusersLabel, *namesList;
TabCompleter* tabber;
};
#endif // GROUPCHATFORM_H

View File

@ -34,7 +34,44 @@
<height>489</height>
</rect>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<layout class="QVBoxLayout" name="verticalLayout_5">
<item>
<widget class="QGroupBox" name="audioGroup">
<property name="title">
<string>Volume Settings (Stubs)</string>
</property>
<layout class="QFormLayout" name="formLayout_2">
<item row="4" column="0">
<widget class="QLabel" name="microphoneLabel">
<property name="text">
<string>Microphone</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="playbackLabel">
<property name="text">
<string>Playback</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QSlider" name="playbackSlider">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QSlider" name="microphoneSlider">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="videoGroup">
<property name="title">
@ -47,7 +84,7 @@
<enum>QFormLayout::ExpandingFieldsGrow</enum>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label">
<widget class="QLabel" name="resolutionLabel">
<property name="text">
<string>Resolution</string>
</property>
@ -64,7 +101,7 @@
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<widget class="QLabel" name="hueLabel">
<property name="text">
<string>Hue</string>
</property>
@ -78,7 +115,7 @@
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_3">
<widget class="QLabel" name="brightnessLabel">
<property name="text">
<string>Brightness</string>
</property>
@ -92,7 +129,7 @@
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_4">
<widget class="QLabel" name="saturationLabel">
<property name="text">
<string>Saturation</string>
</property>
@ -106,7 +143,7 @@
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_5">
<widget class="QLabel" name="contrastLabel">
<property name="text">
<string>Contrast</string>
</property>
@ -119,64 +156,27 @@
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QFrame" name="CamFrame">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
<horstretch>1</horstretch>
<verstretch>99</verstretch>
</sizepolicy>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="VideoSurface" name="CamVideoSurface" native="true"/>
</item>
</layout>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Volume Settings (Stubs)</string>
</property>
<layout class="QFormLayout" name="formLayout_2">
<item row="0" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>Playback</string>
<item>
<widget class="QFrame" name="CamFrame">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
<horstretch>1</horstretch>
<verstretch>99</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QSlider" name="horizontalSlider">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_8">
<property name="text">
<string>Microphone</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QSlider" name="horizontalSlider_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="VideoSurface" name="CamVideoSurface" native="true"/>
</item>
</layout>
</widget>
</item>
</layout>

View File

@ -40,7 +40,9 @@ GeneralForm::GeneralForm(SettingsWidget *myParent) :
bodyUI->transComboBox->setCurrentIndex(locales.indexOf(Settings::getInstance().getTranslation()));
bodyUI->cbMakeToxPortable->setChecked(Settings::getInstance().getMakeToxPortable());
bodyUI->startInTray->setChecked(Settings::getInstance().getAutostartInTray());
bodyUI->statusChangesCheckbox->setChecked(Settings::getInstance().getStatusChangeNotificationEnabled());
bodyUI->closeToTray->setChecked(Settings::getInstance().getCloseToTray());
bodyUI->minimizeToTray->setChecked(Settings::getInstance().getMinimizeToTray());
bodyUI->statusChanges->setChecked(Settings::getInstance().getStatusChangeNotificationEnabled());
for (auto entry : SmileyPack::listSmileyPacks())
{
@ -72,7 +74,9 @@ GeneralForm::GeneralForm(SettingsWidget *myParent) :
connect(bodyUI->transComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(onTranslationUpdated()));
connect(bodyUI->cbMakeToxPortable, &QCheckBox::stateChanged, this, &GeneralForm::onMakeToxPortableUpdated);
connect(bodyUI->startInTray, &QCheckBox::stateChanged, this, &GeneralForm::onSetAutostartInTray);
connect(bodyUI->statusChangesCheckbox, &QCheckBox::stateChanged, this, &GeneralForm::onSetStatusChange);
connect(bodyUI->closeToTray, &QCheckBox::stateChanged, this, &GeneralForm::onSetCloseToTray);
connect(bodyUI->minimizeToTray, &QCheckBox::stateChanged, this, &GeneralForm::onSetMinimizeToTray);
connect(bodyUI->statusChanges, &QCheckBox::stateChanged, this, &GeneralForm::onSetStatusChange);
connect(bodyUI->smileyPackBrowser, SIGNAL(currentIndexChanged(int)), this, SLOT(onSmileyBrowserIndexChanged(int)));
// new syntax can't handle overloaded signals... (at least not in a pretty way)
connect(bodyUI->cbUDPDisabled, &QCheckBox::stateChanged, this, &GeneralForm::onUDPUpdated);
@ -109,6 +113,16 @@ void GeneralForm::onSetAutostartInTray()
Settings::getInstance().setAutostartInTray(bodyUI->startInTray->isChecked());
}
void GeneralForm::onSetCloseToTray()
{
Settings::getInstance().setCloseToTray(bodyUI->closeToTray->isChecked());
}
void GeneralForm::onSetMinimizeToTray()
{
Settings::getInstance().setMinimizeToTray(bodyUI->minimizeToTray->isChecked());
}
void GeneralForm::onStyleSelected(QString style)
{
Settings::getInstance().setStyle(style);
@ -125,7 +139,7 @@ void GeneralForm::onAutoAwayChanged()
void GeneralForm::onSetStatusChange()
{
Settings::getInstance().setStatusChangeNotificationEnabled(bodyUI->statusChangesCheckbox->isChecked());
Settings::getInstance().setStatusChangeNotificationEnabled(bodyUI->statusChanges->isChecked());
}
void GeneralForm::onSmileyBrowserIndexChanged(int index)

View File

@ -35,6 +35,7 @@ private slots:
void onTranslationUpdated();
void onMakeToxPortableUpdated();
void onSetAutostartInTray();
void onSetCloseToTray();
void onSmileyBrowserIndexChanged(int index);
void onUDPUpdated();
void onProxyAddrEdited();
@ -43,6 +44,7 @@ private slots:
void onStyleSelected(QString style);
void onSetStatusChange();
void onAutoAwayChanged();
void onSetMinimizeToTray();
private:

View File

@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>527</width>
<height>500</height>
<height>525</height>
</rect>
</property>
<property name="windowTitle">
@ -74,7 +74,21 @@
</widget>
</item>
<item>
<widget class="QCheckBox" name="statusChangesCheckbox">
<widget class="QCheckBox" name="closeToTray">
<property name="text">
<string>Close to tray</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="minimizeToTray">
<property name="text">
<string>Minimize to tray</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="statusChanges">
<property name="text">
<string>Show contacts' status changes</string>
</property>

View File

@ -54,6 +54,7 @@ IdentityForm::IdentityForm() :
connect(bodyUI->exportButton, &QPushButton::clicked, this, &IdentityForm::onExportClicked);
connect(bodyUI->deleteButton, &QPushButton::clicked, this, &IdentityForm::onDeleteClicked);
connect(bodyUI->importButton, &QPushButton::clicked, this, &IdentityForm::onImportClicked);
connect(bodyUI->newButton, &QPushButton::clicked, this, &IdentityForm::onNewClicked);
connect(Core::getInstance(), &Core::usernameSet, this, [=](const QString& val) { bodyUI->userName->setText(val); });
connect(Core::getInstance(), &Core::statusMessageSet, this, [=](const QString& val) { bodyUI->statusMessage->setText(val); });
@ -120,15 +121,22 @@ void IdentityForm::onRenameClicked()
{
QString cur = bodyUI->profiles->currentText();
QString title = tr("Rename \"%1\"", "renaming a profile").arg(cur);
QString name = QInputDialog::getText(this, title, title+":");
if (name != "")
do
{
QString name = QInputDialog::getText(this, title, title+":");
if (name.isEmpty()) break;
name = Core::sanitize(name);
QDir dir(Settings::getSettingsDirPath());
QFile::rename(dir.filePath(cur+Core::TOX_EXT), dir.filePath(name+Core::TOX_EXT));
bodyUI->profiles->setItemText(bodyUI->profiles->currentIndex(), name);
Settings::getInstance().setCurrentProfile(name);
}
QString file = dir.filePath(name+Core::TOX_EXT);
if (!QFile::exists(file) || checkContinue(tr("Profile already exists", "rename confirm title"),
tr("A profile named \"%1\" already exists. Do you want to erase it?", "rename confirm text").arg(cur)))
{
QFile::rename(dir.filePath(cur+Core::TOX_EXT), file);
bodyUI->profiles->setItemText(bodyUI->profiles->currentIndex(), name);
Settings::getInstance().setCurrentProfile(name);
break;
}
} while (true);
}
void IdentityForm::onExportClicked()
@ -149,9 +157,8 @@ void IdentityForm::onDeleteClicked()
}
else
{
QMessageBox::StandardButton resp = QMessageBox::question(this,
tr("Deletion imminent!","deletion confirmation title"), tr("Are you sure you want to delete this profile?","deletion confirmation text"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No);
if (resp == QMessageBox::Yes)
if (checkContinue(tr("Deletion imminent!","deletion confirmation title"),
tr("Are you sure you want to delete this profile?","deletion confirmation text")))
{
QFile::remove(QDir(Settings::getSettingsDirPath()).filePath(bodyUI->profiles->currentText()+Core::TOX_EXT));
bodyUI->profiles->removeItem(bodyUI->profiles->currentIndex());
@ -167,6 +174,7 @@ void IdentityForm::onImportClicked()
return;
QFileInfo info(path);
QString profile = info.completeBaseName();
if (info.suffix() != "tox")
{
@ -174,8 +182,22 @@ void IdentityForm::onImportClicked()
return;
}
QString profile = info.completeBaseName();
if (info.exists() && !checkContinue(tr("Profile already exists", "import confirm title"),
tr("A profile named \"%1\" already exists. Do you want to erase it?", "import confirm text").arg(profile)))
return;
QString profilePath = QDir(Settings::getSettingsDirPath()).filePath(profile + Core::TOX_EXT);
QFile::copy(path, profilePath);
bodyUI->profiles->addItem(profile);
}
void IdentityForm::onNewClicked()
{
emit Widget::getInstance()->changeProfile(QString());
}
bool IdentityForm::checkContinue(const QString& title, const QString& msg)
{
QMessageBox::StandardButton resp = QMessageBox::question(this, title, msg, QMessageBox::Yes | QMessageBox::No, QMessageBox::No);
return resp == QMessageBox::Yes;
}

View File

@ -63,6 +63,8 @@ private slots:
void onExportClicked();
void onDeleteClicked();
void onImportClicked();
void onNewClicked();
bool checkContinue(const QString& title, const QString& msg);
private:
Ui::IdentitySettings* bodyUI;

View File

@ -122,11 +122,22 @@
</layout>
</item>
<item>
<widget class="QPushButton" name="importButton">
<property name="text">
<string comment="import profile button">Import a profile</string>
</property>
</widget>
<layout class="QHBoxLayout" name="profilesButtonsLayout2">
<item>
<widget class="QPushButton" name="importButton">
<property name="text">
<string comment="import profile button">Import a profile</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="newButton">
<property name="text">
<string comment="new profile button">New Tox ID</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>

View File

@ -0,0 +1,122 @@
/*
Copyright (C) 2005-2014 by the Quassel Project and Project Tox
devel@quassel-irc.org and https://tox.im
This file is part of qTox, a Qt-based graphical interface for Tox.
This program 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.
This program 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 COPYING file for more details.
*/
/* This file was taken from the Quassel IRC client source (src/uisupport), and
was greatly simplified for use in qTox. */
#include "tabcompleter.h"
#include "src/core.h"
#include "src/group.h"
#include "src/widget/tool/chattextedit.h"
#include <QRegExp>
#include <QKeyEvent>
const QString TabCompleter::nickSuffix = QString(": ");
TabCompleter::TabCompleter(ChatTextEdit* msgEdit, Group* group)
: QObject(msgEdit), msgEdit(msgEdit), group(group), enabled(false)
{
}
/* from quassel/src/uisupport/multilineedit.h
// Compatibility methods with the rest of the classes which still expect this to be a QLineEdit
inline QString text() const { return toPlainText(); }
inline QString html() const { return toHtml(); }
inline int cursorPosition() const { return textCursor().position(); }
inline void insert(const QString &newText) { insertPlainText(newText); }
inline void backspace() { keyPressEvent(new QKeyEvent(QEvent::KeyPress, Qt::Key_Backspace, Qt::NoModifier)); }
*/
void TabCompleter::buildCompletionList()
{
// ensure a safe state in case we return early.
completionMap.clear();
nextCompletion = completionMap.begin();
// split the string on the given RE (not chars, nums or braces/brackets) and take the last section
QString tabAbbrev = msgEdit->toPlainText().left(msgEdit->textCursor().position()).section(QRegExp("[^\\w\\d-_\\[\\]{}|`^.\\\\]"), -1, -1);
// that section is then used as the completion regex
QRegExp regex(QString("^[-_\\[\\]{}|`^.\\\\]*").append(QRegExp::escape(tabAbbrev)), Qt::CaseInsensitive);
for(auto name : group->peers.values())
if (regex.indexIn(name) > -1)
completionMap[name.toLower()] = name;
nextCompletion = completionMap.begin();
lastCompletionLength = tabAbbrev.length();
}
void TabCompleter::complete()
{
if (!enabled) {
buildCompletionList();
enabled = true;
}
if (nextCompletion != completionMap.end()) {
// clear previous completion
for (int i = 0; i < lastCompletionLength; i++) {
msgEdit->keyPressEvent(new QKeyEvent(QEvent::KeyPress, Qt::Key_Backspace, Qt::NoModifier));
}
// insert completion
msgEdit->insertPlainText(*nextCompletion);
// remember charcount to delete next time and advance to next completion
lastCompletionLength = nextCompletion->length();
nextCompletion++;
// we're completing the first word of the line
if (msgEdit->textCursor().position() == lastCompletionLength) {
msgEdit->insertPlainText(nickSuffix);
lastCompletionLength += nickSuffix.length();
}
}
else { // we're at the end of the list -> start over again
if (!completionMap.isEmpty()) {
nextCompletion = completionMap.begin();
complete();
}
}
}
void TabCompleter::reset()
{
enabled = false;
}
// this determines the sort order
bool TabCompleter::SortableString::operator<(const SortableString &other) const
{
QString name = Core::getInstance()->getUsername();
if (this->contents == name)
return false;
else if (other.contents == name)
return true;
/* QDateTime thisTime = thisUser->lastChannelActivity(_currentBufferId);
QDateTime thatTime = thatUser->lastChannelActivity(_currentBufferId);
if (thisTime.isValid() || thatTime.isValid())
return thisTime > thatTime;
*/ // this could be a useful feature at some point
return QString::localeAwareCompare(this->contents, other.contents) < 0;
}

View File

@ -0,0 +1,61 @@
/*
Copyright (C) 2005-2014 by the Quassel Project and Project Tox
devel@quassel-irc.org and https://tox.im
This file is part of qTox, a Qt-based graphical interface for Tox.
This program 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.
This program 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 COPYING file for more details.
*/
/* This file was taken from the Quassel IRC client source (src/uisupport), and
was greatly simplified for use in qTox. */
#ifndef TABCOMPLETER_H
#define TABCOMPLETER_H
#include <QString>
#include <QMap>
#include <QObject> // I'm really confused why I need this
class ChatTextEdit;
class Group;
class TabCompleter : public QObject
{
Q_OBJECT
public:
explicit TabCompleter(ChatTextEdit* msgEdit, Group* group);
public slots:
void complete();
void reset();
private:
struct SortableString {
inline SortableString(const QString &n) { contents = n; }
bool operator<(const SortableString &other) const;
QString contents;
};
ChatTextEdit* msgEdit;
Group* group;
bool enabled;
const static QString nickSuffix;
QMap<SortableString, QString> completionMap;
QMap<SortableString, QString>::Iterator nextCompletion;
int lastCompletionLength;
void buildCompletionList();
};
#endif

View File

@ -49,9 +49,10 @@ void FriendWidget::contextMenuEvent(QContextMenuEvent * event)
QPoint pos = event->globalPos();
QString id = Core::getInstance()->getFriendAddress(friendId);
QString dir = Settings::getInstance().getAutoAcceptDir(id);
QString globalDir = Settings::getInstance().getGlobalAutoAcceptDir();
QMenu menu;
QMenu* inviteMenu = menu.addMenu(tr("Invite to group","Menu to invite a friend to a groupchat"));
QAction* copyId = menu.addAction(tr("Copy friend ID","Menu to copy the Tox ID of that friend"));
QMenu* inviteMenu = menu.addMenu(tr("Invite in group","Menu to invite a friend in a groupchat"));
QMap<QAction*, Group*> groupActions;
for (Group* group : GroupList::groupList)
{
@ -60,10 +61,15 @@ void FriendWidget::contextMenuEvent(QContextMenuEvent * event)
}
if (groupActions.isEmpty())
inviteMenu->setEnabled(false);
menu.addSeparator();
QAction* autoAccept = menu.addAction(tr("Auto accept files from this friend", "context menu entry"));
QAction* disableAutoAccept = menu.addAction(tr("Diasble auto accepting files", "context menu entry"));
QAction* disableAutoAccept = menu.addAction(tr("Manually accept files from this friend", "context menu entry"));
QAction* globalAA = menu.addAction(tr("Auto accept files from all friends", "context menu entry"));
QAction* disableGlobalAA = menu.addAction(tr("Disable global auto accept", "context menu entry"));
if (dir.isEmpty())
disableAutoAccept->setEnabled(false);
if (globalDir.isEmpty())
disableGlobalAA->setEnabled(false);
menu.addSeparator();
QAction* removeFriendAction = menu.addAction(tr("Remove friend", "Menu to remove the friend from our friendlist"));
@ -98,6 +104,21 @@ void FriendWidget::contextMenuEvent(QContextMenuEvent * event)
{
Settings::getInstance().setAutoAcceptDir(id, "");
}
else if (selectedItem == globalAA)
{
if (globalDir.isEmpty())
globalDir = QDir::homePath();
globalDir = QFileDialog::getExistingDirectory(0, tr("Choose an auto accept directory","popup title"), dir);
if (!globalDir.isEmpty())
{
qDebug() << "FriendWidget: setting global auto accept dir to" << globalDir;
Settings::getInstance().setGlobalAutoAcceptDir(globalDir);
}
}
else if (selectedItem == disableGlobalAA)
{
Settings::getInstance().setGlobalAutoAcceptDir("");
}
else if (groupActions.contains(selectedItem))
{
Group* group = groupActions[selectedItem];

View File

@ -15,11 +15,10 @@
*/
#include "actionaction.h"
#include "src/misc/smileypack.h"
#include <QDebug>
ActionAction::ActionAction(const QString &author, const QString &message, const QString &date, const bool& me) :
ChatAction(me, author, date),
message(message)
ActionAction::ActionAction(const QString &author, QString message, const QString &date, const bool& me) :
MessageAction(author, author+" "+message, date, me)
{
}
@ -45,24 +44,5 @@ QString ActionAction::getName()
QString ActionAction::getMessage()
{
QString message_ = SmileyPack::getInstance().smileyfied(toHtmlChars(message));
// detect urls
QRegExp exp("(www\\.|http[s]?:\\/\\/|ftp:\\/\\/)\\S+");
int offset = 0;
while ((offset = exp.indexIn(message_, offset)) != -1)
{
QString url = exp.cap();
// add scheme if not specified
if (exp.cap(1) == "www.")
url.prepend("http://");
QString htmledUrl = QString("<a href=\"%1\">%1</a>").arg(url);
message_.replace(offset, exp.cap().length(), htmledUrl);
offset += htmledUrl.length();
}
return QString("<div class=action>%1 %2</div>").arg(name).arg(message_);
return MessageAction::getMessage("action");
}

View File

@ -17,12 +17,12 @@
#ifndef ACTIONACTION_H
#define ACTIONACTION_H
#include "chataction.h"
#include "messageaction.h"
class ActionAction : public ChatAction
class ActionAction : public MessageAction
{
public:
ActionAction(const QString &author, const QString &message, const QString& date, const bool&);
ActionAction(const QString &author, QString message, const QString& date, const bool&);
virtual ~ActionAction(){;}
virtual QString getMessage();
virtual QString getName();

View File

@ -0,0 +1,47 @@
/*
Copyright (C) 2014 by Project Tox <https://tox.im>
This file is part of qTox, a Qt-based graphical interface for Tox.
This program 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.
This program 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 COPYING file for more details.
*/
#include "alertaction.h"
AlertAction::AlertAction(const QString &author, const QString &message, const QString &date) :
MessageAction(author, message, date, false)
{
}
void AlertAction::setup(QTextCursor cursor, QTextEdit *)
{
// When this function is called, we're supposed to only update ourselve when needed
// Nobody should ask us to do anything with our content, we're on our own
// Except we never udpate on our own, so we can safely free our resources
(void) cursor;
message.clear();
message.squeeze();
name.clear();
name.squeeze();
date.clear();
date.squeeze();
}
/*
QString AlertAction::getName()
{
return QString("<div class=%1>%2</div>").arg("alert_name").arg(toHtmlChars(name));
}
*/
QString AlertAction::getMessage()
{
return MessageAction::getMessage("alert");
}

View File

@ -0,0 +1,35 @@
/*
Copyright (C) 2014 by Project Tox <https://tox.im>
This file is part of qTox, a Qt-based graphical interface for Tox.
This program 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.
This program 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 COPYING file for more details.
*/
#ifndef ALERTACTION_H
#define ALERTACTION_H
#include "messageaction.h"
class AlertAction : public MessageAction
{
public:
AlertAction(const QString &author, const QString &message, const QString& date);
virtual ~AlertAction(){;}
virtual QString getMessage();
//virtual QString getName(); only do the message for now; preferably would do the whole row
virtual void setup(QTextCursor cursor, QTextEdit*) override;
private:
QString message;
};
#endif // MESSAGEACTION_H

View File

@ -38,7 +38,7 @@ void MessageAction::setup(QTextCursor cursor, QTextEdit *)
date.squeeze();
}
QString MessageAction::getMessage()
QString MessageAction::getMessage(QString div)
{
QString message_ = SmileyPack::getInstance().smileyfied(toHtmlChars(message));
@ -65,14 +65,19 @@ QString MessageAction::getMessage()
for (QString& s : messageLines)
{
if (QRegExp("^[ ]*&gt;.*").exactMatch(s))
message_ += "<span class=quote>>" + s.right(s.length()-4) + "</span><br/>";
message_ += "<span class=quote>" + s.right(s.length()-4) + "</span><br/>";
else
message_ += s + "<br/>";
}
message_ = message_.left(message_.length()-4);
if (isMe)
return QString("<div class=message_me>" + message_ + "</div>");
else
return QString("<div class=message>" + message_ + "</div>");
return QString(QString("<div class=%1>").arg(div) + message_ + "</div>");
}
QString MessageAction::getMessage()
{
if (isMe)
return getMessage("message_me");
else
return getMessage("message");
}

View File

@ -25,9 +25,10 @@ public:
MessageAction(const QString &author, const QString &message, const QString &date, const bool &me);
virtual ~MessageAction(){;}
virtual QString getMessage();
virtual QString getMessage(QString div);
virtual void setup(QTextCursor cursor, QTextEdit*) override;
private:
protected:
QString message;
};

View File

@ -27,11 +27,15 @@ ChatTextEdit::ChatTextEdit(QWidget *parent) :
void ChatTextEdit::keyPressEvent(QKeyEvent * event)
{
int key = event->key();
if ((key == Qt::Key_Enter || key == Qt::Key_Return)
&& !(event->modifiers() && Qt::ShiftModifier))
{
if ((key == Qt::Key_Enter || key == Qt::Key_Return) && !(event->modifiers() && Qt::ShiftModifier))
emit enterPressed();
return;
else if (key == Qt::Key_Tab)
emit tabPressed();
else if (key == Qt::Key_Backspace) // because of the backspace() hack in tabber, we can't emit on these
QTextEdit::keyPressEvent(event);
else
{
emit keyPressed();
QTextEdit::keyPressEvent(event);
}
QTextEdit::keyPressEvent(event);
}

View File

@ -28,6 +28,8 @@ public:
signals:
void enterPressed();
void tabPressed();
void keyPressed();
public slots:

View File

@ -61,7 +61,52 @@ Widget::Widget(QWidget *parent)
void Widget::init()
{
ui->setupUi(this);
if (QSystemTrayIcon::isSystemTrayAvailable() == true)
{
icon = new QSystemTrayIcon(this);
icon->setIcon(this->windowIcon());
trayMenu = new QMenu;
trayMenu->setStyleSheet("QMenu {background: white; color: black; border: 1px solid black;}"
"QMenu::item:selected { background: #414141}");
statusOnline = new QAction(tr("online"), this);
statusOnline->setIcon(QIcon(":ui/statusButton/dot_online.png"));
connect(statusOnline, SIGNAL(triggered()), this, SLOT(setStatusOnline()));
statusAway = new QAction(tr("away"), this);
statusAway->setIcon(QIcon(":ui/statusButton/dot_idle.png"));
connect(statusAway, SIGNAL(triggered()), this, SLOT(setStatusAway()));
statusBusy = new QAction(tr("busy"), this);
connect(statusBusy, SIGNAL(triggered()), this, SLOT(setStatusBusy()));
statusBusy->setIcon(QIcon(":ui/statusButton/dot_busy.png"));
actionQuit = new QAction(tr("&Quit"), this);
connect(actionQuit, SIGNAL(triggered()), qApp, SLOT(quit()));
trayMenu->addAction(new QAction(tr("Change status to:"), this));
trayMenu->addAction(statusOnline);
trayMenu->addAction(statusAway);
trayMenu->addAction(statusBusy);
trayMenu->addSeparator();
trayMenu->addAction(actionQuit);
icon->setContextMenu(trayMenu);
connect(icon,
SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
this,
SLOT(onIconClick(QSystemTrayIcon::ActivationReason)));
icon->show();
if(Settings::getInstance().getAutostartInTray() == false)
this->show();
}
else
{
qWarning() << "No system tray detected!";
this->show();
}
ui->statusbar->hide();
ui->menubar->hide();
@ -148,7 +193,6 @@ void Widget::init()
filesForm = new FilesForm();
addFriendForm = new AddFriendForm;
settingsWidget = new SettingsWidget();
connect(core, &Core::connected, this, &Widget::onConnected);
connect(core, &Core::disconnected, this, &Widget::onDisconnected);
@ -233,12 +277,19 @@ Widget::~Widget()
for (Group* g : GroupList::groupList)
delete g;
GroupList::groupList.clear();
delete statusAway;
delete statusBusy;
delete statusOnline;
delete actionQuit;
delete trayMenu;
delete icon;
delete ui;
instance = nullptr;
}
Widget* Widget::getInstance()
{
if (!instance)
{
instance = new Widget();
@ -254,10 +305,30 @@ QThread* Widget::getCoreThread()
void Widget::closeEvent(QCloseEvent *event)
{
Settings::getInstance().setWindowGeometry(saveGeometry());
Settings::getInstance().setWindowState(saveState());
Settings::getInstance().setSplitterState(ui->mainSplitter->saveState());
QWidget::closeEvent(event);
if(Settings::getInstance().getCloseToTray() == true)
{
event->ignore();
this->hide();
}
else
{
Settings::getInstance().setWindowGeometry(saveGeometry());
Settings::getInstance().setWindowState(saveState());
Settings::getInstance().setSplitterState(ui->mainSplitter->saveState());
QWidget::closeEvent(event);
}
}
void Widget::changeEvent(QEvent *event)
{
if (event->type() == QEvent::WindowStateChange)
{
if(isMinimized() == true
&& Settings::getInstance().getMinimizeToTray() == true)
{
this->hide();
}
}
}
QString Widget::detectProfile()
@ -454,12 +525,21 @@ void Widget::onTransferClicked()
activeChatroomWidget = nullptr;
}
void Widget::onIconClick()
void Widget::onIconClick(QSystemTrayIcon::ActivationReason reason)
{
if(this->isHidden() == true)
this->show();
else
this->hide();
switch (reason) {
case QSystemTrayIcon::Trigger:
if(this->isHidden() == true)
this->show();
else
this->hide();
case QSystemTrayIcon::DoubleClick:
break;
case QSystemTrayIcon::MiddleClick:
break;
default:
;
}
}
void Widget::onSettingsClicked()
@ -750,14 +830,19 @@ void Widget::onGroupMessageReceived(int groupnumber, const QString& message, con
if (!g)
return;
g->chatForm->addMessage(author, message);
QString name = core->getUsername();
bool targeted = (author != name) && message.contains(name, Qt::CaseInsensitive);
if (targeted)
g->chatForm->addAlertMessage(author, message);
else
g->chatForm->addMessage(author, message);
if ((static_cast<GenericChatroomWidget*>(g->widget) != activeChatroomWidget) || isMinimized() || !isActiveWindow())
{
g->hasNewMessages = 1;
newMessageAlert(); // sound alert on any message, not just naming user
if (message.contains(core->getUsername(), Qt::CaseInsensitive))
if (targeted)
{
newMessageAlert();
g->userWasMentioned = 1; // useful for highlighting line or desktop notifications
}
g->widget->updateStatusLight();
@ -773,17 +858,23 @@ void Widget::onGroupNamelistChanged(int groupnumber, int peernumber, uint8_t Cha
g = createGroup(groupnumber);
}
QString name = core->getGroupPeerName(groupnumber, peernumber);
TOX_CHAT_CHANGE change = static_cast<TOX_CHAT_CHANGE>(Change);
if (change == TOX_CHAT_CHANGE_PEER_ADD)
{
QString name = core->getGroupPeerName(groupnumber, peernumber);
if (name.isEmpty())
name = tr("<Unknown>", "Placeholder when we don't know someone's name in a group chat");
g->addPeer(peernumber,name);
//g->chatForm->addSystemInfoMessage(tr("%1 has joined the chat").arg(name), "green");
// we can't display these messages until irungentoo fixes peernumbers
// https://github.com/irungentoo/toxcore/issues/1128
}
else if (change == TOX_CHAT_CHANGE_PEER_DEL)
{
g->removePeer(peernumber);
else if (change == TOX_CHAT_CHANGE_PEER_NAME)
//g->chatForm->addSystemInfoMessage(tr("%1 has left the chat").arg(name), "silver");
}
else if (change == TOX_CHAT_CHANGE_PEER_NAME) // core overwrites old name before telling us it changed...
g->updatePeer(peernumber,core->getGroupPeerName(groupnumber, peernumber));
}

View File

@ -18,6 +18,7 @@
#define WIDGET_H
#include <QMainWindow>
#include <QSystemTrayIcon>
#include "form/addfriendform.h"
#include "form/settingswidget.h"
#include "form/settings/identityform.h"
@ -65,6 +66,11 @@ public:
~Widget();
virtual void closeEvent(QCloseEvent *event);
virtual void changeEvent(QEvent *event);
public slots:
void onSettingsClicked();
signals:
void friendRequestAccepted(const QString& userId);
@ -82,7 +88,6 @@ private slots:
void onAddClicked();
void onGroupClicked();
void onTransferClicked();
void onSettingsClicked();
void onFailedToStartCore();
void onBadProxyCore();
void onAvatarClicked();
@ -112,7 +117,7 @@ private slots:
void onMessageSendResult(int friendId, const QString& message, int messageId);
void onGroupSendResult(int groupId, const QString& message, int result);
void playRingtone();
void onIconClick();
void onIconClick(QSystemTrayIcon::ActivationReason);
void onUserAway();
private:
@ -124,6 +129,12 @@ private:
void removeGroup(Group* g);
QString askProfiles();
QString detectProfile();
QSystemTrayIcon *icon;
QMenu *trayMenu;
QAction *statusOnline,
*statusAway,
*statusBusy,
*actionQuit;
Ui::MainWindow *ui;
QSplitter *centralLayout;

Binary file not shown.

View File

@ -3,11 +3,6 @@
<TS version="2.1" language="fr_FR">
<context>
<name>AVForm</name>
<message>
<location filename="../src/widget/form/settings/avform.cpp" line="22"/>
<source>Audio/Video settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Hide video preview</source>
<comment>On a button</comment>
@ -18,6 +13,11 @@
<comment>On a button</comment>
<translation type="obsolete">Montrer l&apos;aperçu vidéo</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avform.cpp" line="22"/>
<source>Audio/Video</source>
<translation>Audio/Vidéo</translation>
</message>
</context>
<context>
<name>AVPage</name>
@ -41,57 +41,52 @@
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="14"/>
<source>Form</source>
<translation type="unfinished"></translation>
<translation>qTox</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="20"/>
<location filename="../src/widget/form/settings/avsettings.ui" line="38"/>
<source>Video Settings</source>
<translation>Options vidéo</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="49"/>
<source>Resolution</source>
<translation>Résolution</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="148"/>
<source>Volume Settings (Stubs)</source>
<translation type="unfinished"></translation>
<translation>Options du volume (Fictif)</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="26"/>
<location filename="../src/widget/form/settings/avsettings.ui" line="154"/>
<source>Playback</source>
<translation type="unfinished"></translation>
<translation>Haut-parleurs</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="40"/>
<location filename="../src/widget/form/settings/avsettings.ui" line="168"/>
<source>Microphone</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="57"/>
<source>Video settings</source>
<translation type="unfinished"></translation>
<translation>Microphone</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="66"/>
<source>Modes</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="83"/>
<source>Hue</source>
<translation type="unfinished"></translation>
<translation>Teinte</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="97"/>
<location filename="../src/widget/form/settings/avsettings.ui" line="80"/>
<source>Brightness</source>
<translation type="unfinished"></translation>
<translation>Luminosité</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="111"/>
<location filename="../src/widget/form/settings/avsettings.ui" line="94"/>
<source>Saturation</source>
<translation type="unfinished"></translation>
<translation>Saturation</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="125"/>
<location filename="../src/widget/form/settings/avsettings.ui" line="108"/>
<source>Contrast</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="139"/>
<source>Preview</source>
<translation type="unfinished"></translation>
<translation>Contraste</translation>
</message>
<message>
<source>Show video preview</source>
@ -192,7 +187,7 @@
<context>
<name>ChatForm</name>
<message>
<location filename="../src/widget/form/chatform.cpp" line="105"/>
<location filename="../src/widget/form/chatform.cpp" line="106"/>
<source>Send a file</source>
<translation>Envoyer un fichier</translation>
</message>
@ -211,33 +206,44 @@
<context>
<name>Core</name>
<message>
<location filename="../src/core.cpp" line="1104"/>
<source>Encrypted profile</source>
<translation type="unfinished"></translation>
<location filename="../src/core.cpp" line="231"/>
<source>Toxing on qTox</source>
<translation>Toxer avec qTox</translation>
</message>
<message>
<location filename="../src/core.cpp" line="1105"/>
<location filename="../src/core.cpp" line="232"/>
<source>qTox User</source>
<translation>Utilisateur de qTox</translation>
</message>
<message>
<location filename="../src/core.cpp" line="1106"/>
<source>Encrypted profile</source>
<translation>Profil chiffré</translation>
</message>
<message>
<location filename="../src/core.cpp" line="1107"/>
<source>Your tox profile seems to be encrypted, qTox can&apos;t open it
Do you want to erase this profile ?</source>
<translation type="unfinished"></translation>
<translation>Votre profil tox semble être chiffré, qTox ne peut pas l&apos;ouvrir
Voulez-vous effacer ce profil ?</translation>
</message>
</context>
<context>
<name>FileTransferInstance</name>
<message>
<location filename="../src/filetransferinstance.cpp" line="209"/>
<location filename="../src/filetransferinstance.cpp" line="234"/>
<source>Save a file</source>
<comment>Title of the file saving dialog</comment>
<translation>Sauvegarder un fichier</translation>
</message>
<message>
<location filename="../src/filetransferinstance.cpp" line="220"/>
<location filename="../src/filetransferinstance.cpp" line="242"/>
<source>Location not writable</source>
<comment>Title of permissions popup</comment>
<translation>Impossible d&apos;écrire ici</translation>
</message>
<message>
<location filename="../src/filetransferinstance.cpp" line="220"/>
<location filename="../src/filetransferinstance.cpp" line="242"/>
<source>You do not have permission to write that location. Choose another, or cancel the save dialog.</source>
<comment>text of permissions popup</comment>
<translation>Vous n&apos;avez pas la permission d&apos;écrire ici. Choisissez un audre endroit, ou annulez.</translation>
@ -309,19 +315,55 @@ Do you want to erase this profile ?</source>
<context>
<name>FriendWidget</name>
<message>
<location filename="../src/widget/friendwidget.cpp" line="48"/>
<location filename="../src/widget/friendwidget.cpp" line="54"/>
<source>Invite to group</source>
<comment>Menu to invite a friend to a groupchat</comment>
<translation>Inviter au groupe</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="55"/>
<source>Copy friend ID</source>
<comment>Menu to copy the Tox ID of that friend</comment>
<translation>Copier l&apos;ID ami</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="49"/>
<source>Invite in group</source>
<comment>Menu to invite a friend in a groupchat</comment>
<translation>Inviter dans un groupe</translation>
<location filename="../src/widget/friendwidget.cpp" line="65"/>
<source>Auto accept files from this friend</source>
<comment>context menu entry</comment>
<translation>Automatiquement accepter les fichiers de ce contact</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="59"/>
<location filename="../src/widget/friendwidget.cpp" line="66"/>
<source>Manually accept files from this friend</source>
<comment>context menu entry</comment>
<translation>Accepter les fichiers de ce contact manuellement</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="67"/>
<source>Auto accept files from all friends</source>
<comment>context menu entry</comment>
<translation>Accepter les fichiers de tous les contacts automatiquement</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="68"/>
<source>Disable global auto accept</source>
<comment>context menu entry</comment>
<translation>Désactiver l&apos;acceptation automatique de fichier</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="96"/>
<location filename="../src/widget/friendwidget.cpp" line="111"/>
<source>Choose an auto accept directory</source>
<comment>popup title</comment>
<translation>Choisir un dossier de téléchargement</translation>
</message>
<message>
<source>Invite in group</source>
<comment>Menu to invite a friend in a groupchat</comment>
<translation type="vanished">Inviter dans un groupe</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="74"/>
<source>Remove friend</source>
<comment>Menu to remove the friend from our friendlist</comment>
<translation>Supprimer ami</translation>
@ -330,9 +372,13 @@ Do you want to erase this profile ?</source>
<context>
<name>GeneralForm</name>
<message>
<location filename="../src/widget/form/settings/generalform.cpp" line="27"/>
<source>General Settings</source>
<translation type="unfinished">Options Générales</translation>
<translation type="obsolete">Options Générales</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalform.cpp" line="30"/>
<source>General</source>
<translation>Général</translation>
</message>
</context>
<context>
@ -375,95 +421,110 @@ Do you want to erase this profile ?</source>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="14"/>
<source>Form</source>
<translation type="unfinished"></translation>
<translation>qTox</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="29"/>
<source>General Settings</source>
<translation type="unfinished">Options Générales</translation>
<translation>Options Générales</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="35"/>
<source>Use translations</source>
<extracomment>Text on a checkbox to enable translations</extracomment>
<translation type="unfinished">Utiliser les traductions</translation>
<translation type="obsolete">Utiliser les traductions</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="42"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="37"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="53"/>
<source>The translation may not load until qTox restarts.</source>
<translation>La translation peut ne pas se charger jusqu&apos;à ce que qTox redémarre.</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="40"/>
<source>Translation:</source>
<translation>Traduction:</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="62"/>
<source>Save settings to the working directory instead of the usual conf dir</source>
<extracomment>describes makeToxPortable checkbox</extracomment>
<translation type="unfinished">Sauvegarde les options dans le dossier courant au lieu du dossier de configuration habituel</translation>
<translation>Sauvegarde les options dans le dossier courant au lieu du dossier de configuration habituel</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="45"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="65"/>
<source>Make Tox portable</source>
<translation type="unfinished">Rendre Tox portable</translation>
<translation>Rendre Tox portable</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="52"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="72"/>
<source>Start in tray</source>
<translation type="unfinished"></translation>
<translation>Démarrer dans la barre d&apos;état</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="59"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="79"/>
<source>Show contacts&apos; status changes</source>
<translation type="unfinished"></translation>
<translation>Montrer les changements de status des contacts</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="68"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="88"/>
<source>Provided in minutes</source>
<translation type="unfinished"></translation>
<translation>En minutes</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="74"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="94"/>
<source>Auto away after (0 to disable):</source>
<translation type="unfinished"></translation>
<translation>Auto-absent après (0 pour désactiver):</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="87"/>
<source> minutes</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="105"/>
<source>Theme</source>
<translation type="unfinished">Thème</translation>
<location filename="../src/widget/form/settings/generalsettings.ui" line="107"/>
<source>Set to 0 to disable</source>
<translation>Mettre à 0 pour désactiver</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="113"/>
<source> minutes</source>
<translation> minutes</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="131"/>
<source>Theme</source>
<translation>Thème</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="139"/>
<source>Smiley Pack:</source>
<extracomment>Text on smiley pack label</extracomment>
<translation type="unfinished"></translation>
<translation>Pack de smileys:</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="134"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="160"/>
<source>:)</source>
<translation type="unfinished"></translation>
<translation>:)</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="144"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="170"/>
<source>;)</source>
<translation type="unfinished"></translation>
<translation>:)</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="154"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="180"/>
<source>:p</source>
<translation type="unfinished"></translation>
<translation>:p</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="164"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="190"/>
<source>:O</source>
<translation type="unfinished"></translation>
<translation>:O</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="174"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="200"/>
<source>:&apos;(</source>
<translation type="unfinished"></translation>
<translation>:&apos;(</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="188"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="214"/>
<source>Style:</source>
<translation type="unfinished"></translation>
<translation>Style:</translation>
</message>
<message>
<source>Smiley Pack</source>
@ -471,51 +532,51 @@ Do you want to erase this profile ?</source>
<translation type="obsolete">Pack de smileys</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="210"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="236"/>
<source>Connection Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="216"/>
<source>Enable IPv6 (recommended)</source>
<extracomment>Text on a checkbox to enable IPv6</extracomment>
<translation type="unfinished">Activer IPv6 (recommandé)</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="223"/>
<source>This allows, e.g., toxing over Tor. It adds load to the Tox network however, so use only when necessary.</source>
<extracomment>force tcp checkbox tooltip</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="226"/>
<source>Disable UDP (not recommended)</source>
<extracomment>Text on checkbox to disable UDP</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="233"/>
<source>Use proxy (SOCKS5)</source>
<translation type="unfinished"></translation>
<translation>Options de réseau</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="242"/>
<source>Address</source>
<extracomment>Text on proxy addr label</extracomment>
<translation type="unfinished"></translation>
<source>Enable IPv6 (recommended)</source>
<extracomment>Text on a checkbox to enable IPv6</extracomment>
<translation>Activer IPv6 (recommandé)</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="249"/>
<source>This allows, e.g., toxing over Tor. It adds load to the Tox network however, so use only when necessary.</source>
<extracomment>force tcp checkbox tooltip</extracomment>
<translation>Permet par exemple d&apos;utiliser Tox à travers Tor, mais ce n&apos;est à utiliser que si nécessaire, car cela ralenti le réseau Tox.</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="252"/>
<source>Disable UDP (not recommended)</source>
<extracomment>Text on checkbox to disable UDP</extracomment>
<translation>Désactiver UDP (non recommandé)</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="259"/>
<source>Use proxy (SOCKS5)</source>
<translation>Utiliser un proxy (SOCKS5)</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="268"/>
<source>Address</source>
<extracomment>Text on proxy addr label</extracomment>
<translation>Addresse</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="278"/>
<source>Port</source>
<extracomment>Text on proxy port label</extracomment>
<translation type="unfinished"></translation>
<translation>Port</translation>
</message>
</context>
<context>
<name>GenericChatForm</name>
<message>
<location filename="../src/widget/form/genericchatform.cpp" line="154"/>
<location filename="../src/widget/form/genericchatform.cpp" line="160"/>
<location filename="../src/widget/form/genericchatform.cpp" line="150"/>
<location filename="../src/widget/form/genericchatform.cpp" line="156"/>
<source>Save chat log</source>
<translation>Sauvegarder l&apos;historique de conversation</translation>
</message>
@ -523,7 +584,7 @@ Do you want to erase this profile ?</source>
<context>
<name>GroupChatForm</name>
<message>
<location filename="../src/widget/form/groupchatform.cpp" line="47"/>
<location filename="../src/widget/form/groupchatform.cpp" line="45"/>
<source>%1 users in chat</source>
<comment>Number of users in chat</comment>
<translation>%1 personnes</translation>
@ -533,7 +594,7 @@ Do you want to erase this profile ?</source>
<translation type="vanished">&lt;Inconnu&gt;</translation>
</message>
<message>
<location filename="../src/widget/form/groupchatform.cpp" line="85"/>
<location filename="../src/widget/form/groupchatform.cpp" line="77"/>
<source>%1 users in chat</source>
<translation>%1 personnes</translation>
</message>
@ -545,19 +606,19 @@ Do you want to erase this profile ?</source>
<context>
<name>GroupWidget</name>
<message>
<location filename="../src/widget/groupwidget.cpp" line="39"/>
<location filename="../src/widget/groupwidget.cpp" line="59"/>
<location filename="../src/widget/groupwidget.cpp" line="42"/>
<location filename="../src/widget/groupwidget.cpp" line="64"/>
<source>%1 users in chat</source>
<translation>%1 personnes</translation>
</message>
<message>
<location filename="../src/widget/groupwidget.cpp" line="41"/>
<location filename="../src/widget/groupwidget.cpp" line="61"/>
<location filename="../src/widget/groupwidget.cpp" line="44"/>
<location filename="../src/widget/groupwidget.cpp" line="66"/>
<source>0 users in chat</source>
<translation>0 personnes</translation>
</message>
<message>
<location filename="../src/widget/groupwidget.cpp" line="48"/>
<location filename="../src/widget/groupwidget.cpp" line="53"/>
<source>Quit group</source>
<comment>Menu to quit a groupchat</comment>
<translation>Quitter le groupe</translation>
@ -566,87 +627,111 @@ Do you want to erase this profile ?</source>
<context>
<name>IdentityForm</name>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="33"/>
<source>Your identity</source>
<translation type="unfinished"></translation>
<location filename="../src/widget/form/settings/identityform.cpp" line="34"/>
<source>Identity</source>
<translation>Identité</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="114"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="112"/>
<source>Call active</source>
<comment>popup title</comment>
<translation type="unfinished"></translation>
<translation>Appel en cours</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="115"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="113"/>
<source>You can&apos;t switch profiles while a call is active!</source>
<comment>popup text</comment>
<translation type="unfinished"></translation>
<translation>Vous ne pouvez pas changer de profil quand un appel est en cours!</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="125"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="123"/>
<source>Rename &quot;%1&quot;</source>
<comment>renaming a profile</comment>
<translation type="unfinished"></translation>
<translation>Renommer &quot;%1&quot;</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="140"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="131"/>
<source>Profile already exists</source>
<comment>rename confirm title</comment>
<translation>Ce profil existe déjà</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="132"/>
<source>A profile named &quot;%1&quot; already exists. Do you want to erase it?</source>
<comment>rename confirm text</comment>
<translation>Un profil appelé &quot;%1&quot; existe déjà. Voulez-vous le supprimer ?</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="145"/>
<source>Export profile</source>
<comment>save dialog title</comment>
<translation type="unfinished"></translation>
<translation>Exporter le profil</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="142"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="147"/>
<source>Tox save file (*.tox)</source>
<comment>save dialog filter</comment>
<translation type="unfinished"></translation>
<translation>Fichier sauvegarde Tox (*.tox)</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="151"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="156"/>
<source>Profile currently loaded</source>
<comment>current profile deletion warning title</comment>
<translation type="unfinished"></translation>
<translation>Profil en cours d&apos;utilisation</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="151"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="156"/>
<source>This profile is currently in use. Please load a different profile before deleting this one.</source>
<comment>current profile deletion warning text</comment>
<translation type="unfinished"></translation>
<translation>Ce profil est en cours d&apos;utilisation. Merci de choisir un autre profil avant de supprimer celui-ci.</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="156"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="160"/>
<source>Deletion imminent!</source>
<comment>deletion confirmation title</comment>
<translation type="unfinished"></translation>
<translation>Suppression imminente!</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="156"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="161"/>
<source>Are you sure you want to delete this profile?</source>
<comment>deletion confirmation text</comment>
<translation type="unfinished"></translation>
<translation>Êtes-vous sur de vouloir supprimer ce profil ?</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="168"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="172"/>
<source>Import profile</source>
<comment>import dialog title</comment>
<translation type="unfinished"></translation>
<translation>Importer un profil</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="168"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="172"/>
<source>Tox save file (*.tox)</source>
<comment>import dialog filter</comment>
<translation type="unfinished"></translation>
<translation>Fichier sauvegarde Tox (*.tox)</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="176"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="181"/>
<source>Ignoring non-Tox file</source>
<comment>popup title</comment>
<translation type="unfinished"></translation>
<translation>Fichier non-Tox ignoré</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="176"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="181"/>
<source>Warning: you&apos;ve chosen a file that is not a Tox save file; ignoring.</source>
<comment>popup text</comment>
<translation type="unfinished"></translation>
<translation>Attention: Vous avez sélectionné un fichier qui n&apos;est pas une sauvegarde Tox: il sera ignoré.</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="185"/>
<source>Profile already exists</source>
<comment>import confirm title</comment>
<translation>Ce profil existe déjà</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="186"/>
<source>A profile named &quot;%1&quot; already exists. Do you want to erase it?</source>
<comment>import confirm text</comment>
<translation>Un profil appelé &quot;%1&quot; existe déjà. Voulez-vous le supprimer ?</translation>
</message>
</context>
<context>
@ -679,78 +764,84 @@ Do you want to erase this profile ?</source>
<message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="14"/>
<source>Form</source>
<translation type="unfinished"></translation>
<translation>qTox</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="20"/>
<source>Public Information</source>
<translation type="unfinished">Informations Publiques</translation>
<translation>Informations Publiques</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="26"/>
<source>Name</source>
<translation type="unfinished">Nom</translation>
<translation>Nom</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="36"/>
<source>Status</source>
<translation type="unfinished">Status</translation>
<translation>Status</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="49"/>
<source>Tox ID</source>
<translation type="unfinished">ID Tox</translation>
<translation>ID Tox</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="55"/>
<source>Your Tox ID (click to copy)</source>
<translation type="unfinished"></translation>
<translation>Votre ID Tox (cliquez pour copier)</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="65"/>
<source>Profiles</source>
<translation type="unfinished"></translation>
<translation>Profils</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="73"/>
<source>Available profiles:</source>
<translation type="unfinished"></translation>
<translation>Profils disponibles:</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="94"/>
<source>Load</source>
<comment>load profile button</comment>
<translation type="unfinished"></translation>
<translation>Charger</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="101"/>
<source>Rename</source>
<comment>rename profile button</comment>
<translation type="unfinished"></translation>
<translation>Renommer</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="108"/>
<source>Export</source>
<comment>export profile button</comment>
<translation type="unfinished"></translation>
<translation>Exporter</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="115"/>
<source>Delete</source>
<comment>delete profile button</comment>
<translation type="unfinished"></translation>
<translation>Supprimer</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="118"/>
<source>This is useful to remain safe on public computers</source>
<comment>delete profile button tooltip</comment>
<translation type="unfinished"></translation>
<translation>Util pour sécuriser sur un ordinateur public</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="127"/>
<location filename="../src/widget/form/settings/identitysettings.ui" line="129"/>
<source>Import a profile</source>
<comment>import profile button</comment>
<translation type="unfinished"></translation>
<translation>Importer un profil</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="136"/>
<source>New Tox ID</source>
<comment>new profile button</comment>
<translation>Nouvel ID Tox</translation>
</message>
</context>
<context>
@ -805,8 +896,8 @@ Do you want to erase this profile ?</source>
<name>PrivacyForm</name>
<message>
<location filename="../src/widget/form/settings/privacyform.cpp" line="21"/>
<source>Privacy settings</source>
<translation type="unfinished"></translation>
<source>Privacy</source>
<translation>Vie privée</translation>
</message>
</context>
<context>
@ -903,103 +994,103 @@ Do you want to erase this profile ?</source>
<translation type="vanished">Ctrl+Q</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="101"/>
<location filename="../src/widget/widget.cpp" line="109"/>
<source>Online</source>
<comment>Button to set your status to &apos;Online&apos;</comment>
<translation>Connecté</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="103"/>
<location filename="../src/widget/widget.cpp" line="111"/>
<source>Away</source>
<comment>Button to set your status to &apos;Away&apos;</comment>
<translation>Indisponnible</translation>
<translation>Indisponible</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="105"/>
<location filename="../src/widget/widget.cpp" line="113"/>
<source>Busy</source>
<comment>Button to set your status to &apos;Busy&apos;</comment>
<translation>Occupé</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="282"/>
<location filename="../src/widget/widget.cpp" line="310"/>
<source>Choose a profile</source>
<translation type="unfinished"></translation>
<translation>Choisir un profil</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="283"/>
<location filename="../src/widget/widget.cpp" line="311"/>
<source>Please choose which identity to use</source>
<translation type="unfinished"></translation>
<translation>Merci de choisir l&apos;identité à utiliser</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="309"/>
<location filename="../src/widget/widget.cpp" line="337"/>
<source>Choose a profile picture</source>
<translation type="unfinished"></translation>
<translation>Choisissez une image de profil</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="316"/>
<location filename="../src/widget/widget.cpp" line="323"/>
<location filename="../src/widget/widget.cpp" line="344"/>
<location filename="../src/widget/widget.cpp" line="351"/>
<location filename="../src/widget/widget.cpp" line="372"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="316"/>
<source>Unable to open this file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="323"/>
<source>Unable to read this image</source>
<translation type="unfinished"></translation>
<translation>Erreur</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="344"/>
<source>Unable to open this file</source>
<translation>Impossible d&apos;ouvrir ce fichier</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="351"/>
<source>Unable to read this image</source>
<translation>Impossible de lire cette image</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="372"/>
<source>This image is too big</source>
<translation type="unfinished"></translation>
<translation>Cette image est trop volumineuse</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="371"/>
<location filename="../src/widget/widget.cpp" line="399"/>
<source>Toxcore failed to start, the application will terminate after you close this message.</source>
<translation type="unfinished"></translation>
<translation>Toxcore n&apos;as pas pu démarrer correctement, l&apos;application va quitter quand vous fermerez ce message.</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="380"/>
<location filename="../src/widget/widget.cpp" line="408"/>
<source>toxcore failed to start with your proxy settings. qTox cannot run; please modify your settings and restart.</source>
<comment>popup text</comment>
<translation type="unfinished"></translation>
<translation>Toxcore n&apos;as pas pu démarrer avec ces paramètres de proxy, qTox ne peut pas continuer; merci de modifier vos paramètres et redémarrer.</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="549"/>
<location filename="../src/widget/widget.cpp" line="579"/>
<source>away</source>
<comment>contact status</comment>
<translation type="unfinished"></translation>
<translation>indisponnible</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="551"/>
<location filename="../src/widget/widget.cpp" line="581"/>
<source>busy</source>
<comment>contact status</comment>
<translation type="unfinished"></translation>
<translation>occupé</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="553"/>
<location filename="../src/widget/widget.cpp" line="583"/>
<source>offline</source>
<comment>contact status</comment>
<translation type="unfinished"></translation>
<translation>déconnecté</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="555"/>
<location filename="../src/widget/widget.cpp" line="585"/>
<source>online</source>
<comment>contact status</comment>
<translation type="unfinished"></translation>
<translation>connecté</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="561"/>
<location filename="../src/widget/widget.cpp" line="587"/>
<source>%1 is now %2</source>
<comment>e.g. &quot;Dubslow is now online&quot;</comment>
<translation type="unfinished"></translation>
<translation>%1 est maintenant %2</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="752"/>
<location filename="../src/widget/widget.cpp" line="780"/>
<source>&lt;Unknown&gt;</source>
<comment>Placeholder when we don&apos;t know someone&apos;s name in a group chat</comment>
<translation>&lt;Inconnu&gt;</translation>

Binary file not shown.

View File

@ -17,47 +17,47 @@
<translation>Form</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="38"/>
<location filename="../src/widget/form/settings/avsettings.ui" line="75"/>
<source>Video Settings</source>
<translation>Impostazioni Video</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="49"/>
<location filename="../src/widget/form/settings/avsettings.ui" line="86"/>
<source>Resolution</source>
<translation>Risoluzione</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="148"/>
<location filename="../src/widget/form/settings/avsettings.ui" line="38"/>
<source>Volume Settings (Stubs)</source>
<translation>Impostazioni Volume (Stub)</translation>
<translation>Impostazioni Audio (Stub)</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="154"/>
<location filename="../src/widget/form/settings/avsettings.ui" line="51"/>
<source>Playback</source>
<translation>Altoparlanti</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="168"/>
<location filename="../src/widget/form/settings/avsettings.ui" line="44"/>
<source>Microphone</source>
<translation>Microfono</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="66"/>
<location filename="../src/widget/form/settings/avsettings.ui" line="103"/>
<source>Hue</source>
<translation>Colore</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="80"/>
<location filename="../src/widget/form/settings/avsettings.ui" line="117"/>
<source>Brightness</source>
<translation>Luminoistà</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="94"/>
<location filename="../src/widget/form/settings/avsettings.ui" line="131"/>
<source>Saturation</source>
<translation>Saturazione</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="108"/>
<location filename="../src/widget/form/settings/avsettings.ui" line="145"/>
<source>Contrast</source>
<translation>Contrasto</translation>
</message>
@ -153,12 +153,22 @@
<context>
<name>Core</name>
<message>
<location filename="../src/core.cpp" line="1100"/>
<location filename="../src/core.cpp" line="231"/>
<source>Toxing on qTox</source>
<translation>Toxing on qTox</translation>
</message>
<message>
<location filename="../src/core.cpp" line="232"/>
<source>qTox User</source>
<translation>qTox User</translation>
</message>
<message>
<location filename="../src/core.cpp" line="1106"/>
<source>Encrypted profile</source>
<translation>Profilo criptato</translation>
</message>
<message>
<location filename="../src/core.cpp" line="1101"/>
<location filename="../src/core.cpp" line="1107"/>
<source>Your tox profile seems to be encrypted, qTox can&apos;t open it
Do you want to erase this profile ?</source>
<translation>Il tuo profilo Tox sembra essere criptato, qTox non può aprirlo\nVuoi eliminare questo profilo?</translation>
@ -167,19 +177,19 @@ Do you want to erase this profile ?</source>
<context>
<name>FileTransferInstance</name>
<message>
<location filename="../src/filetransferinstance.cpp" line="233"/>
<location filename="../src/filetransferinstance.cpp" line="234"/>
<source>Save a file</source>
<comment>Title of the file saving dialog</comment>
<translation>Salva file</translation>
</message>
<message>
<location filename="../src/filetransferinstance.cpp" line="241"/>
<location filename="../src/filetransferinstance.cpp" line="242"/>
<source>Location not writable</source>
<comment>Title of permissions popup</comment>
<translation>Errore</translation>
</message>
<message>
<location filename="../src/filetransferinstance.cpp" line="241"/>
<location filename="../src/filetransferinstance.cpp" line="242"/>
<source>You do not have permission to write that location. Choose another, or cancel the save dialog.</source>
<comment>text of permissions popup</comment>
<translation>Non hai sufficienti permessi per scrivere in questa locazione. Scegli un&apos;altra posizione, o annulla il salvataggio.</translation>
@ -243,37 +253,50 @@ Do you want to erase this profile ?</source>
<context>
<name>FriendWidget</name>
<message>
<location filename="../src/widget/friendwidget.cpp" line="53"/>
<location filename="../src/widget/friendwidget.cpp" line="55"/>
<source>Copy friend ID</source>
<comment>Menu to copy the Tox ID of that friend</comment>
<translation>Copia Tox ID del contatto</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="54"/>
<source>Invite in group</source>
<comment>Menu to invite a friend in a groupchat</comment>
<translation>Invita nel gruppo</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="63"/>
<location filename="../src/widget/friendwidget.cpp" line="65"/>
<source>Auto accept files from this friend</source>
<comment>context menu entry</comment>
<translation>Accetta automaticamente i files inviati da questo contatto</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="64"/>
<source>Diasble auto accepting files</source>
<location filename="../src/widget/friendwidget.cpp" line="54"/>
<source>Invite to group</source>
<comment>Menu to invite a friend to a groupchat</comment>
<translation>Invita nel gruppo</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="66"/>
<source>Manually accept files from this friend</source>
<comment>context menu entry</comment>
<translation>Non accettare automaticamente i files inviati da questo contatto</translation>
<translation>Accetta manualmente i files inviati da questo contatto</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="67"/>
<source>Auto accept files from all friends</source>
<comment>context menu entry</comment>
<translation>Accetta automaticamente i files inviati da tutti i contatti</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="68"/>
<source>Disable global auto accept</source>
<comment>context menu entry</comment>
<translation>Accetta manualmente i files inviati da tutti i contatti</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="74"/>
<source>Remove friend</source>
<comment>Menu to remove the friend from our friendlist</comment>
<translation>Rimuovi contatto</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="90"/>
<location filename="../src/widget/friendwidget.cpp" line="96"/>
<location filename="../src/widget/friendwidget.cpp" line="111"/>
<source>Choose an auto accept directory</source>
<comment>popup title</comment>
<translation>Scegli dove salvare i files accettati automaticamente</translation>
@ -311,33 +334,33 @@ Do you want to erase this profile ?</source>
<translation>Lingua:</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="94"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="108"/>
<source>Auto away after (0 to disable):</source>
<translation>Imposta assenza dopo:</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="107"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="121"/>
<source>Set to 0 to disable</source>
<translation>Imposta 0 per disabilitare</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="139"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="153"/>
<source>Smiley Pack:</source>
<extracomment>Text on smiley pack label</extracomment>
<translation>Emoticons:</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="214"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="228"/>
<source>Style:</source>
<translation>Stile:</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="236"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="250"/>
<source>Connection Settings</source>
<translation>Impostazioni Connessione</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="242"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="256"/>
<source>Enable IPv6 (recommended)</source>
<extracomment>Text on a checkbox to enable IPv6</extracomment>
<translation>Abilita IPv6 (consigliato)</translation>
@ -356,78 +379,88 @@ Do you want to erase this profile ?</source>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="72"/>
<source>Start in tray</source>
<translation>Avvia minimizzato</translation>
<translation>Avvia minimizzato nella traybar</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="79"/>
<source>Close to tray</source>
<translation>Chiudi nella traybar</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="86"/>
<source>Minimize to tray</source>
<translation>Minimizza nella traybar</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="93"/>
<source>Show contacts&apos; status changes</source>
<translation>Mostra quando i contatti cambiano stato</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="88"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="102"/>
<source>Provided in minutes</source>
<translation>Espresso in minuti</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="113"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="127"/>
<source> minutes</source>
<translation> minuti</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="131"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="145"/>
<source>Theme</source>
<translation>Impostazioni Tema</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="160"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="174"/>
<source>:)</source>
<translation>:)</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="170"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="184"/>
<source>;)</source>
<translation>;)</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="180"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="194"/>
<source>:p</source>
<translation>:p</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="190"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="204"/>
<source>:O</source>
<translation>:O</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="200"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="214"/>
<source>:&apos;(</source>
<translation>:&apos;(</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="259"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="273"/>
<source>Use proxy (SOCKS5)</source>
<translation>Usa proxy (SOCKS5)</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="268"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="282"/>
<source>Address</source>
<extracomment>Text on proxy addr label</extracomment>
<translation>IP</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="278"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="292"/>
<source>Port</source>
<extracomment>Text on proxy port label</extracomment>
<translation>Porta</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="252"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="266"/>
<source>Disable UDP (not recommended)</source>
<extracomment>Text on checkbox to disable UDP</extracomment>
<translation>Disabilita connessioni UDP (non raccomandato)</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="249"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="263"/>
<source>This allows, e.g., toxing over Tor. It adds load to the Tox network however, so use only when necessary.</source>
<extracomment>force tcp checkbox tooltip</extracomment>
<translation>Questo permette di usare qTox con Tor; tuttavia aggiunge carico alla rete Tox, quindi usalo solo se necessario.</translation>
@ -436,8 +469,8 @@ Do you want to erase this profile ?</source>
<context>
<name>GenericChatForm</name>
<message>
<location filename="../src/widget/form/genericchatform.cpp" line="150"/>
<location filename="../src/widget/form/genericchatform.cpp" line="156"/>
<location filename="../src/widget/form/genericchatform.cpp" line="151"/>
<location filename="../src/widget/form/genericchatform.cpp" line="157"/>
<source>Save chat log</source>
<translation>Salva il log della chat</translation>
</message>
@ -445,13 +478,13 @@ Do you want to erase this profile ?</source>
<context>
<name>GroupChatForm</name>
<message>
<location filename="../src/widget/form/groupchatform.cpp" line="45"/>
<location filename="../src/widget/form/groupchatform.cpp" line="48"/>
<source>%1 users in chat</source>
<comment>Number of users in chat</comment>
<translation>%1 utenti in chat</translation>
</message>
<message>
<location filename="../src/widget/form/groupchatform.cpp" line="77"/>
<location filename="../src/widget/form/groupchatform.cpp" line="82"/>
<source>%1 users in chat</source>
<translation>%1 utenti in chat</translation>
</message>
@ -485,83 +518,107 @@ Do you want to erase this profile ?</source>
<translation>Identità</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="111"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="112"/>
<source>Call active</source>
<comment>popup title</comment>
<translation>Chiamata in corso</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="112"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="113"/>
<source>You can&apos;t switch profiles while a call is active!</source>
<comment>popup text</comment>
<translation>Non puoi cambiare profilo durante una chiamata!</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="122"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="123"/>
<source>Rename &quot;%1&quot;</source>
<comment>renaming a profile</comment>
<translation>Rinomina &quot;%1&quot;</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="137"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="131"/>
<source>Profile already exists</source>
<comment>rename confirm title</comment>
<translation>Profilo già esistente</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="132"/>
<source>A profile named &quot;%1&quot; already exists. Do you want to erase it?</source>
<comment>rename confirm text</comment>
<translation>Un profilo chiamato &quot;%1&quot; esiste già. Vuoi sovrascriverlo?</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="145"/>
<source>Export profile</source>
<comment>save dialog title</comment>
<translation>Esporta profilo</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="139"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="147"/>
<source>Tox save file (*.tox)</source>
<comment>save dialog filter</comment>
<translation>Tox save file (*.tox)</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="148"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="156"/>
<source>Profile currently loaded</source>
<comment>current profile deletion warning title</comment>
<translation>Profilo attualmente in uso</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="148"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="156"/>
<source>This profile is currently in use. Please load a different profile before deleting this one.</source>
<comment>current profile deletion warning text</comment>
<translation>Questo profilo è attualmente in uso. Per favore carica un profilo differente prima di eliminare questo.</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="153"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="160"/>
<source>Deletion imminent!</source>
<comment>deletion confirmation title</comment>
<translation>Eliminazione imminente!</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="153"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="161"/>
<source>Are you sure you want to delete this profile?</source>
<comment>deletion confirmation text</comment>
<translation>Sei sicuro di voler eliminare questo profilo?</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="165"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="172"/>
<source>Import profile</source>
<comment>import dialog title</comment>
<translation>Importa profilo</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="165"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="172"/>
<source>Tox save file (*.tox)</source>
<comment>import dialog filter</comment>
<translation>Tox save file (*.tox)</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="173"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="181"/>
<source>Ignoring non-Tox file</source>
<comment>popup title</comment>
<translation>File ignorato</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="173"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="181"/>
<source>Warning: you&apos;ve chosen a file that is not a Tox save file; ignoring.</source>
<comment>popup text</comment>
<translation>Attenzione: hai scelto un file che non contiente un profilo Tox.\nQuesto file verrà ignorato.</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="185"/>
<source>Profile already exists</source>
<comment>import confirm title</comment>
<translation>Profilo già esistente</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="186"/>
<source>A profile named &quot;%1&quot; already exists. Do you want to erase it?</source>
<comment>import confirm text</comment>
<translation>Un profilo chiamato &quot;%1&quot; esiste già. Vuoi sovrascriverlo?</translation>
</message>
</context>
<context>
<name>IdentitySettings</name>
@ -636,10 +693,16 @@ Do you want to erase this profile ?</source>
<translation>Utile per preservare la tua sicurezza su computer pubblici</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="127"/>
<location filename="../src/widget/form/settings/identitysettings.ui" line="129"/>
<source>Import a profile</source>
<comment>import profile button</comment>
<translation>Importa un profilo</translation>
<translation>Importa profilo</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="136"/>
<source>New Tox ID</source>
<comment>new profile button</comment>
<translation>Nuovo profilo</translation>
</message>
</context>
<context>
@ -701,103 +764,128 @@ Do you want to erase this profile ?</source>
<context>
<name>Widget</name>
<message>
<location filename="../src/widget/widget.cpp" line="109"/>
<location filename="../src/widget/widget.cpp" line="75"/>
<source>online</source>
<translation>online</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="78"/>
<source>away</source>
<translation>assente</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="81"/>
<source>busy</source>
<translation>occupato</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="84"/>
<source>&amp;Quit</source>
<translation>&amp;Esci</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="87"/>
<source>Change status to:</source>
<translation>Cambia stato in:</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="154"/>
<source>Online</source>
<comment>Button to set your status to &apos;Online&apos;</comment>
<translation>Online</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="111"/>
<location filename="../src/widget/widget.cpp" line="156"/>
<source>Away</source>
<comment>Button to set your status to &apos;Away&apos;</comment>
<translation>Assente</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="113"/>
<location filename="../src/widget/widget.cpp" line="158"/>
<source>Busy</source>
<comment>Button to set your status to &apos;Busy&apos;</comment>
<translation>Occupato</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="311"/>
<location filename="../src/widget/widget.cpp" line="382"/>
<source>Choose a profile</source>
<translation>Scegli un profilo</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="312"/>
<location filename="../src/widget/widget.cpp" line="383"/>
<source>Please choose which identity to use</source>
<translation>Per favore scegli quale identità usare</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="338"/>
<location filename="../src/widget/widget.cpp" line="409"/>
<source>Choose a profile picture</source>
<translation>Scegli un&apos;immagine per il profilo</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="345"/>
<location filename="../src/widget/widget.cpp" line="352"/>
<location filename="../src/widget/widget.cpp" line="373"/>
<location filename="../src/widget/widget.cpp" line="416"/>
<location filename="../src/widget/widget.cpp" line="423"/>
<location filename="../src/widget/widget.cpp" line="444"/>
<source>Error</source>
<translation>Errore</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="345"/>
<location filename="../src/widget/widget.cpp" line="416"/>
<source>Unable to open this file</source>
<translation>Impossibile aprire il file</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="352"/>
<location filename="../src/widget/widget.cpp" line="423"/>
<source>Unable to read this image</source>
<translation>Impossibile leggere l&apos;immagine</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="373"/>
<location filename="../src/widget/widget.cpp" line="444"/>
<source>This image is too big</source>
<translation>L&apos;immagine è troppo grande</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="400"/>
<location filename="../src/widget/widget.cpp" line="471"/>
<source>Toxcore failed to start, the application will terminate after you close this message.</source>
<translation>Impossibile avviare Toxcore.\nqTox terminerà dopo che avrai chiuso questo messaggio.</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="409"/>
<location filename="../src/widget/widget.cpp" line="480"/>
<source>toxcore failed to start with your proxy settings. qTox cannot run; please modify your settings and restart.</source>
<comment>popup text</comment>
<translation>Impossibile avviare Toxcore con le tue impostazione proxy.\nqTox non può funzionare correttamente, per favore modifica le impostazioni e riavvia il programma.</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="580"/>
<location filename="../src/widget/widget.cpp" line="660"/>
<source>away</source>
<comment>contact status</comment>
<translation>assente</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="582"/>
<location filename="../src/widget/widget.cpp" line="662"/>
<source>busy</source>
<comment>contact status</comment>
<translation>occupato</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="584"/>
<location filename="../src/widget/widget.cpp" line="664"/>
<source>offline</source>
<comment>contact status</comment>
<translation>offline</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="586"/>
<location filename="../src/widget/widget.cpp" line="666"/>
<source>online</source>
<comment>contact status</comment>
<translation>online</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="588"/>
<location filename="../src/widget/widget.cpp" line="668"/>
<source>%1 is now %2</source>
<comment>e.g. &quot;Dubslow is now online&quot;</comment>
<translation>%1 è ora %2</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="781"/>
<location filename="../src/widget/widget.cpp" line="866"/>
<source>&lt;Unknown&gt;</source>
<comment>Placeholder when we don&apos;t know someone&apos;s name in a group chat</comment>
<translation>&lt;Sconosciuto&gt;</translation>

Binary file not shown.

View File

@ -48,27 +48,27 @@
<translation>Ustawienia</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="38"/>
<location filename="../src/widget/form/settings/avsettings.ui" line="75"/>
<source>Video Settings</source>
<translation>Ustawienia wideo</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="49"/>
<location filename="../src/widget/form/settings/avsettings.ui" line="86"/>
<source>Resolution</source>
<translation>Rozdzielczość</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="148"/>
<location filename="../src/widget/form/settings/avsettings.ui" line="38"/>
<source>Volume Settings (Stubs)</source>
<translation>Ustawienia dźwięku</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="154"/>
<location filename="../src/widget/form/settings/avsettings.ui" line="51"/>
<source>Playback</source>
<translation>Odtwarzanie</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="168"/>
<location filename="../src/widget/form/settings/avsettings.ui" line="44"/>
<source>Microphone</source>
<translation>Mikrofon</translation>
</message>
@ -81,22 +81,22 @@
<translation type="obsolete">Tryby</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="66"/>
<location filename="../src/widget/form/settings/avsettings.ui" line="103"/>
<source>Hue</source>
<translation>Odcień</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="80"/>
<location filename="../src/widget/form/settings/avsettings.ui" line="117"/>
<source>Brightness</source>
<translation>Jasność</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="94"/>
<location filename="../src/widget/form/settings/avsettings.ui" line="131"/>
<source>Saturation</source>
<translation>Nasycenie</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="108"/>
<location filename="../src/widget/form/settings/avsettings.ui" line="145"/>
<source>Contrast</source>
<translation>Kontrast</translation>
</message>
@ -200,12 +200,23 @@
<context>
<name>Core</name>
<message>
<location filename="../src/core.cpp" line="1100"/>
<location filename="../src/core.cpp" line="231"/>
<source>Toxing on qTox</source>
<translatorcomment>better translation?</translatorcomment>
<translation>Toxuję na qTox</translation>
</message>
<message>
<location filename="../src/core.cpp" line="232"/>
<source>qTox User</source>
<translation>Użytkownik qToxa</translation>
</message>
<message>
<location filename="../src/core.cpp" line="1106"/>
<source>Encrypted profile</source>
<translation>Zaszyfrowany profil</translation>
</message>
<message>
<location filename="../src/core.cpp" line="1101"/>
<location filename="../src/core.cpp" line="1107"/>
<source>Your tox profile seems to be encrypted, qTox can&apos;t open it
Do you want to erase this profile ?</source>
<translation>Twój profil zdaje się być zaszyfrowany, qTox nie jest w stanie go otworzyć
@ -215,19 +226,19 @@ Czy chcesz usunąć ten profil ?</translation>
<context>
<name>FileTransferInstance</name>
<message>
<location filename="../src/filetransferinstance.cpp" line="233"/>
<location filename="../src/filetransferinstance.cpp" line="234"/>
<source>Save a file</source>
<comment>Title of the file saving dialog</comment>
<translation>Zapisz plik</translation>
</message>
<message>
<location filename="../src/filetransferinstance.cpp" line="241"/>
<location filename="../src/filetransferinstance.cpp" line="242"/>
<source>Location not writable</source>
<comment>Title of permissions popup</comment>
<translation>Nie można zapisać w lokacji</translation>
</message>
<message>
<location filename="../src/filetransferinstance.cpp" line="241"/>
<location filename="../src/filetransferinstance.cpp" line="242"/>
<source>You do not have permission to write that location. Choose another, or cancel the save dialog.</source>
<comment>text of permissions popup</comment>
<translation>Nie masz uprawnienia by zapisać w tej lokacji. Wybierz inną lub anuluj zapis.</translation>
@ -291,37 +302,61 @@ Czy chcesz usunąć ten profil ?</translation>
<context>
<name>FriendWidget</name>
<message>
<location filename="../src/widget/friendwidget.cpp" line="53"/>
<location filename="../src/widget/friendwidget.cpp" line="55"/>
<source>Copy friend ID</source>
<comment>Menu to copy the Tox ID of that friend</comment>
<translation>Kopiuj ID kontaktu</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="54"/>
<source>Invite in group</source>
<comment>Menu to invite a friend in a groupchat</comment>
<translation>Zaproś do grupy</translation>
<translation type="obsolete">Zaproś do grupy</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="63"/>
<location filename="../src/widget/friendwidget.cpp" line="65"/>
<source>Auto accept files from this friend</source>
<comment>context menu entry</comment>
<translation>Odbieraj pliki automatycznie</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="64"/>
<source>Diasble auto accepting files</source>
<comment>context menu entry</comment>
<translation>Nie odbieraj plików automatycznie</translation>
<translation type="obsolete">Nie odbieraj plików automatycznie</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="54"/>
<source>Invite to group</source>
<comment>Menu to invite a friend to a groupchat</comment>
<translation>Zaproś do grupy</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="66"/>
<source>Manually accept files from this friend</source>
<comment>context menu entry</comment>
<translation>Ręcznie akceptuj pliki od tego znajomego</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="67"/>
<source>Auto accept files from all friends</source>
<comment>context menu entry</comment>
<translation>Automatycznie akceptuj pliki od wszystkich znajomych</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="68"/>
<source>Disable global auto accept</source>
<comment>context menu entry</comment>
<translatorcomment>better translation?</translatorcomment>
<translation>Wyłącz globalnie automatyczną akceptację</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="74"/>
<source>Remove friend</source>
<comment>Menu to remove the friend from our friendlist</comment>
<translation>Usuń kontakt</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="90"/>
<location filename="../src/widget/friendwidget.cpp" line="96"/>
<location filename="../src/widget/friendwidget.cpp" line="111"/>
<source>Choose an auto accept directory</source>
<comment>popup title</comment>
<translation>Wybierz domyślną ścieżkę dla plików</translation>
@ -390,7 +425,7 @@ Czy chcesz usunąć ten profil ?</translation>
<message>
<source>Use translations</source>
<extracomment>Text on a checkbox to enable translations</extracomment>
<translation type="vanished">Użyj tłumaczenia</translation>
<translation type="obsolete">Użyj tłumaczenia</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="37"/>
@ -422,33 +457,43 @@ Czy chcesz usunąć ten profil ?</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="79"/>
<source>Close to tray</source>
<translation>Zamknij do traya</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="86"/>
<source>Minimize to tray</source>
<translation>Minimalizuj do traya</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="93"/>
<source>Show contacts&apos; status changes</source>
<translation>Pokazuj zmiany statusów</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="88"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="102"/>
<source>Provided in minutes</source>
<translation>Podane w minutach</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="94"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="108"/>
<source>Auto away after (0 to disable):</source>
<translation>Zmiana statusu na &quot;Nieobecny&quot; (0 by wyłączyć):</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="107"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="121"/>
<source>Set to 0 to disable</source>
<translation>Ustaw na 0 by wyłączyć</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="139"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="153"/>
<source>Smiley Pack:</source>
<extracomment>Text on smiley pack label</extracomment>
<translatorcomment>better translation? anyone?</translatorcomment>
<translation>Paczka uśmiechów:</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="214"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="228"/>
<source>Style:</source>
<translation>Styl:</translation>
</message>
@ -457,12 +502,12 @@ Czy chcesz usunąć ten profil ?</translation>
<translation type="obsolete">Automatyczna zmiana statusu na &quot;Nieobecny&quot; po:</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="113"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="127"/>
<source> minutes</source>
<translation> min</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="131"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="145"/>
<source>Theme</source>
<translation>Motyw</translation>
</message>
@ -473,27 +518,27 @@ Czy chcesz usunąć ten profil ?</translation>
<translation type="obsolete">Paczka uśmiechów</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="160"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="174"/>
<source>:)</source>
<translation>:)</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="170"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="184"/>
<source>;)</source>
<translation>;)</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="180"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="194"/>
<source>:p</source>
<translation>:p</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="190"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="204"/>
<source>:O</source>
<translation>:O</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="200"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="214"/>
<source>:&apos;(</source>
<translation>:&apos;(</translation>
</message>
@ -502,41 +547,41 @@ Czy chcesz usunąć ten profil ?</translation>
<translation type="obsolete">Styl</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="236"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="250"/>
<source>Connection Settings</source>
<translation>Ustawienia połączenia</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="242"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="256"/>
<source>Enable IPv6 (recommended)</source>
<extracomment>Text on a checkbox to enable IPv6</extracomment>
<translation>Użyj IPv6 (zalecane)</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="249"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="263"/>
<source>This allows, e.g., toxing over Tor. It adds load to the Tox network however, so use only when necessary.</source>
<extracomment>force tcp checkbox tooltip</extracomment>
<translation>To pozwala np. na toxowanie przez Tora. Niestety obciąża to sieć Tox, więc używaj tylko w razie potrzeby.</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="252"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="266"/>
<source>Disable UDP (not recommended)</source>
<extracomment>Text on checkbox to disable UDP</extracomment>
<translation>Wyłącz UDP (nie zalecane)</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="259"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="273"/>
<source>Use proxy (SOCKS5)</source>
<translation>Użyj proxy (SOCKS5)</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="268"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="282"/>
<source>Address</source>
<extracomment>Text on proxy addr label</extracomment>
<translation>Adres</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="278"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="292"/>
<source>Port</source>
<extracomment>Text on proxy port label</extracomment>
<translation>Port</translation>
@ -545,8 +590,8 @@ Czy chcesz usunąć ten profil ?</translation>
<context>
<name>GenericChatForm</name>
<message>
<location filename="../src/widget/form/genericchatform.cpp" line="150"/>
<location filename="../src/widget/form/genericchatform.cpp" line="156"/>
<location filename="../src/widget/form/genericchatform.cpp" line="151"/>
<location filename="../src/widget/form/genericchatform.cpp" line="157"/>
<source>Save chat log</source>
<translation>Zapisz historię rozmowy</translation>
</message>
@ -554,7 +599,7 @@ Czy chcesz usunąć ten profil ?</translation>
<context>
<name>GroupChatForm</name>
<message>
<location filename="../src/widget/form/groupchatform.cpp" line="45"/>
<location filename="../src/widget/form/groupchatform.cpp" line="48"/>
<source>%1 users in chat</source>
<comment>Number of users in chat</comment>
<translation>%1 użytkowników w czacie</translation>
@ -564,7 +609,7 @@ Czy chcesz usunąć ten profil ?</translation>
<translation type="obsolete">&lt;Nieznany/a&gt;</translation>
</message>
<message>
<location filename="../src/widget/form/groupchatform.cpp" line="77"/>
<location filename="../src/widget/form/groupchatform.cpp" line="82"/>
<source>%1 users in chat</source>
<translation>%1 użytkowników w czacie</translation>
</message>
@ -602,83 +647,107 @@ Czy chcesz usunąć ten profil ?</translation>
<translation>Tożsamość</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="111"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="112"/>
<source>Call active</source>
<comment>popup title</comment>
<translation>Rozmowa w trakcie</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="112"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="113"/>
<source>You can&apos;t switch profiles while a call is active!</source>
<comment>popup text</comment>
<translation>Nie można zmienić profilu podczas aktywnego połączenia!</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="122"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="123"/>
<source>Rename &quot;%1&quot;</source>
<comment>renaming a profile</comment>
<translation>Zmień nazwę &quot;%1&quot;</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="137"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="131"/>
<source>Profile already exists</source>
<comment>rename confirm title</comment>
<translation>Profil już istnieje</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="132"/>
<source>A profile named &quot;%1&quot; already exists. Do you want to erase it?</source>
<comment>rename confirm text</comment>
<translation>Profil pod nazwą &quot;%1&quot; już istnieje. Czy chcesz go usunąć?</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="145"/>
<source>Export profile</source>
<comment>save dialog title</comment>
<translation>Eksportuj profil</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="139"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="147"/>
<source>Tox save file (*.tox)</source>
<comment>save dialog filter</comment>
<translation>Plik zapisu Tox (*.tox)</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="148"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="156"/>
<source>Profile currently loaded</source>
<comment>current profile deletion warning title</comment>
<translation>Profil obecnie załadowany</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="148"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="156"/>
<source>This profile is currently in use. Please load a different profile before deleting this one.</source>
<comment>current profile deletion warning text</comment>
<translation>Ten profil jest obecnie w użyciu. Proszę załaduj inny profil przed usunięciem tego.</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="153"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="160"/>
<source>Deletion imminent!</source>
<comment>deletion confirmation title</comment>
<translation>Usuwanie profilu!</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="153"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="161"/>
<source>Are you sure you want to delete this profile?</source>
<comment>deletion confirmation text</comment>
<translation>Czy na pewno chcesz usunąć ten profil?</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="165"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="172"/>
<source>Import profile</source>
<comment>import dialog title</comment>
<translation>Importuj profil</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="165"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="172"/>
<source>Tox save file (*.tox)</source>
<comment>import dialog filter</comment>
<translation>Plik zapisu Tox (*.tox)</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="173"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="181"/>
<source>Ignoring non-Tox file</source>
<comment>popup title</comment>
<translation>Zignorowano niepoprawny plik profilu</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="173"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="181"/>
<source>Warning: you&apos;ve chosen a file that is not a Tox save file; ignoring.</source>
<comment>popup text</comment>
<translation>Ostrzeżenie: Wybrano plik który nie jest plikiem zapisu Tox; zignorowano.</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="185"/>
<source>Profile already exists</source>
<comment>import confirm title</comment>
<translation>Profil już istnieje</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="186"/>
<source>A profile named &quot;%1&quot; already exists. Do you want to erase it?</source>
<comment>import confirm text</comment>
<translation>Profil pod nazwą &quot;%1&quot; już istnieje. Czy chcesz go usunąć?</translation>
</message>
</context>
<context>
<name>IdentityPage</name>
@ -778,11 +847,17 @@ Czy chcesz usunąć ten profil ?</translation>
<translation>Użyteczne by pozostać bezpiecznym na publicznych komputerach</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="127"/>
<location filename="../src/widget/form/settings/identitysettings.ui" line="129"/>
<source>Import a profile</source>
<comment>import profile button</comment>
<translation>Importuj profil</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="136"/>
<source>New Tox ID</source>
<comment>new profile button</comment>
<translation>Nowy Tox ID</translation>
</message>
</context>
<context>
<name>MainWindow</name>
@ -891,103 +966,128 @@ Czy chcesz usunąć ten profil ?</translation>
<context>
<name>Widget</name>
<message>
<location filename="../src/widget/widget.cpp" line="109"/>
<location filename="../src/widget/widget.cpp" line="75"/>
<source>online</source>
<translation>online</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="78"/>
<source>away</source>
<translation>nieobecna/y</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="81"/>
<source>busy</source>
<translation>zajęta/y</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="84"/>
<source>&amp;Quit</source>
<translation>&amp;Wyjdź</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="87"/>
<source>Change status to:</source>
<translation>Zmień status na:</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="154"/>
<source>Online</source>
<comment>Button to set your status to &apos;Online&apos;</comment>
<translation>Online</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="111"/>
<location filename="../src/widget/widget.cpp" line="156"/>
<source>Away</source>
<comment>Button to set your status to &apos;Away&apos;</comment>
<translation>Nieobecny/a</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="113"/>
<location filename="../src/widget/widget.cpp" line="158"/>
<source>Busy</source>
<comment>Button to set your status to &apos;Busy&apos;</comment>
<translation>Zajęty/a</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="290"/>
<location filename="../src/widget/widget.cpp" line="382"/>
<source>Choose a profile</source>
<translation>Wybierz profil</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="291"/>
<location filename="../src/widget/widget.cpp" line="383"/>
<source>Please choose which identity to use</source>
<translation>Proszę wybierz która tożsamość ma być użyta</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="317"/>
<location filename="../src/widget/widget.cpp" line="409"/>
<source>Choose a profile picture</source>
<translation>Wybierz obrazek profilu</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="324"/>
<location filename="../src/widget/widget.cpp" line="331"/>
<location filename="../src/widget/widget.cpp" line="352"/>
<location filename="../src/widget/widget.cpp" line="416"/>
<location filename="../src/widget/widget.cpp" line="423"/>
<location filename="../src/widget/widget.cpp" line="444"/>
<source>Error</source>
<translation>Błąd</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="324"/>
<location filename="../src/widget/widget.cpp" line="416"/>
<source>Unable to open this file</source>
<translation>Nie można otworzyć tego pliku</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="331"/>
<location filename="../src/widget/widget.cpp" line="423"/>
<source>Unable to read this image</source>
<translation>Nie można odczytać tego obrazka</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="352"/>
<location filename="../src/widget/widget.cpp" line="444"/>
<source>This image is too big</source>
<translation>Ten obrazek jest zbyt wielki</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="379"/>
<location filename="../src/widget/widget.cpp" line="471"/>
<source>Toxcore failed to start, the application will terminate after you close this message.</source>
<translation>Nie udało się uruchomić Toxcore, aplikacja zamknie się po zamknięciu tej wiadomości.</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="388"/>
<location filename="../src/widget/widget.cpp" line="480"/>
<source>toxcore failed to start with your proxy settings. qTox cannot run; please modify your settings and restart.</source>
<comment>popup text</comment>
<translation>Nie udało się uruchomić toxcore z twoimi ustawieniami proxy. qTox nie może działać, proszę zmodyfikuj ustawienia i zrestartuj.</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="559"/>
<location filename="../src/widget/widget.cpp" line="660"/>
<source>away</source>
<comment>contact status</comment>
<translation>nieobecna/y</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="561"/>
<location filename="../src/widget/widget.cpp" line="662"/>
<source>busy</source>
<comment>contact status</comment>
<translation>zajęta/y</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="563"/>
<location filename="../src/widget/widget.cpp" line="664"/>
<source>offline</source>
<comment>contact status</comment>
<translation>offline</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="565"/>
<location filename="../src/widget/widget.cpp" line="666"/>
<source>online</source>
<comment>contact status</comment>
<translation>online</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="567"/>
<location filename="../src/widget/widget.cpp" line="668"/>
<source>%1 is now %2</source>
<comment>e.g. &quot;Dubslow is now online&quot;</comment>
<translation>%1 jest teraz %2</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="760"/>
<location filename="../src/widget/widget.cpp" line="866"/>
<source>&lt;Unknown&gt;</source>
<comment>Placeholder when we don&apos;t know someone&apos;s name in a group chat</comment>
<translation>&lt;Nieznany/a&gt;</translation>

Binary file not shown.

View File

@ -5,18 +5,8 @@
<name>AVForm</name>
<message>
<location filename="../src/widget/form/settings/avform.cpp" line="22"/>
<source>Audio/Video settings</source>
<translation>Настройки аудио/видео</translation>
</message>
<message>
<source>Hide video preview</source>
<comment>On a button</comment>
<translation type="vanished">Спрятать видео-превью</translation>
</message>
<message>
<source>Show video preview</source>
<comment>On a button</comment>
<translation type="vanished">Посмотреть видео-превью</translation>
<source>Audio/Video</source>
<translation>Аудио/Видео</translation>
</message>
</context>
<context>
@ -27,58 +17,49 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="20"/>
<source>Volume Settings (Stubs)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="26"/>
<source>Playback</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="40"/>
<source>Microphone</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="57"/>
<source>Video settings</source>
<location filename="../src/widget/form/settings/avsettings.ui" line="75"/>
<source>Video Settings</source>
<translation>Настройки видео</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="66"/>
<source>Modes</source>
<translation type="unfinished"></translation>
<location filename="../src/widget/form/settings/avsettings.ui" line="86"/>
<source>Resolution</source>
<translation>Разрешение</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="83"/>
<location filename="../src/widget/form/settings/avsettings.ui" line="38"/>
<source>Volume Settings (Stubs)</source>
<translation>Настройки звука (заглушка)</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="51"/>
<source>Playback</source>
<translation>Воспроизведение</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="44"/>
<source>Microphone</source>
<translation>Микрофон</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="103"/>
<source>Hue</source>
<translation type="unfinished"></translation>
<translation>Тон</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="97"/>
<location filename="../src/widget/form/settings/avsettings.ui" line="117"/>
<source>Brightness</source>
<translation type="unfinished"></translation>
<translation>Яркость</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="111"/>
<location filename="../src/widget/form/settings/avsettings.ui" line="131"/>
<source>Saturation</source>
<translation type="unfinished"></translation>
<translation>Насыщенность</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="125"/>
<location filename="../src/widget/form/settings/avsettings.ui" line="145"/>
<source>Contrast</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="139"/>
<source>Preview</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Show video preview</source>
<translation type="vanished">Посмотреть видео-превью</translation>
<translation>Контраст</translation>
</message>
</context>
<context>
@ -166,7 +147,7 @@
<context>
<name>ChatForm</name>
<message>
<location filename="../src/widget/form/chatform.cpp" line="105"/>
<location filename="../src/widget/form/chatform.cpp" line="106"/>
<source>Send a file</source>
<translation>Отправить файл</translation>
</message>
@ -174,12 +155,23 @@
<context>
<name>Core</name>
<message>
<location filename="../src/core.cpp" line="1104"/>
<location filename="../src/core.cpp" line="231"/>
<source>Toxing on qTox</source>
<translatorcomment>Как-то так. Может, можно ещё что-нибудь придумать?</translatorcomment>
<translation type="unfinished">Всем привет из qTox&apos;а</translation>
</message>
<message>
<location filename="../src/core.cpp" line="232"/>
<source>qTox User</source>
<translation>Пользователь qTox</translation>
</message>
<message>
<location filename="../src/core.cpp" line="1106"/>
<source>Encrypted profile</source>
<translation>Зашифрованный профиль</translation>
</message>
<message>
<location filename="../src/core.cpp" line="1105"/>
<location filename="../src/core.cpp" line="1107"/>
<source>Your tox profile seems to be encrypted, qTox can&apos;t open it
Do you want to erase this profile ?</source>
<translation>Похоже, ваш tox-профиль зашифрован, qTox не может открыть его
@ -189,19 +181,19 @@ Do you want to erase this profile ?</source>
<context>
<name>FileTransferInstance</name>
<message>
<location filename="../src/filetransferinstance.cpp" line="209"/>
<location filename="../src/filetransferinstance.cpp" line="234"/>
<source>Save a file</source>
<comment>Title of the file saving dialog</comment>
<translation>Сохранить файл</translation>
</message>
<message>
<location filename="../src/filetransferinstance.cpp" line="220"/>
<location filename="../src/filetransferinstance.cpp" line="242"/>
<source>Location not writable</source>
<comment>Title of permissions popup</comment>
<translation>Непригодная для записи локация</translation>
</message>
<message>
<location filename="../src/filetransferinstance.cpp" line="220"/>
<location filename="../src/filetransferinstance.cpp" line="242"/>
<source>You do not have permission to write that location. Choose another, or cancel the save dialog.</source>
<comment>text of permissions popup</comment>
<translation>У вас нет прав записи в эту локацию. Выберете другую или закройте диалог сохранения.</translation>
@ -267,40 +259,71 @@ Do you want to erase this profile ?</source>
<context>
<name>FriendWidget</name>
<message>
<location filename="../src/widget/friendwidget.cpp" line="48"/>
<location filename="../src/widget/friendwidget.cpp" line="55"/>
<source>Copy friend ID</source>
<comment>Menu to copy the Tox ID of that friend</comment>
<translation>Копировать ID друга</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="49"/>
<source>Invite in group</source>
<comment>Menu to invite a friend in a groupchat</comment>
<translation type="obsolete">Пригласить в группу</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="65"/>
<source>Auto accept files from this friend</source>
<comment>context menu entry</comment>
<translation>Автоматически принимать файлы от этого друга</translation>
</message>
<message>
<source>Diasble auto accepting files</source>
<comment>context menu entry</comment>
<translation type="obsolete">Запретить принимать файлы автоматически</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="54"/>
<source>Invite to group</source>
<comment>Menu to invite a friend to a groupchat</comment>
<translation>Пригласить в группу</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="59"/>
<location filename="../src/widget/friendwidget.cpp" line="66"/>
<source>Manually accept files from this friend</source>
<comment>context menu entry</comment>
<translation>Вручную принимать файлы от этого друга</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="67"/>
<source>Auto accept files from all friends</source>
<comment>context menu entry</comment>
<translation>Автоматически принимать файлы от всех друзей</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="68"/>
<source>Disable global auto accept</source>
<comment>context menu entry</comment>
<translation>Выключить глобальное автопринятие</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="74"/>
<source>Remove friend</source>
<comment>Menu to remove the friend from our friendlist</comment>
<translation>Удалить друга</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="96"/>
<location filename="../src/widget/friendwidget.cpp" line="111"/>
<source>Choose an auto accept directory</source>
<comment>popup title</comment>
<translation>Выбрать папку для автоматического приёма</translation>
</message>
</context>
<context>
<name>GeneralForm</name>
<message>
<location filename="../src/widget/form/settings/generalform.cpp" line="27"/>
<source>General Settings</source>
<translation>Общие настройки</translation>
</message>
<message>
<source>Bad port</source>
<comment>title of bad port popup</comment>
<translation type="vanished">Неправильный порт</translation>
</message>
<message>
<source>The port you entered is invalid; please enter another.</source>
<comment>text of bad port popup</comment>
<translation type="vanished">Введёный порт неверен; введите другой.</translation>
<location filename="../src/widget/form/settings/generalform.cpp" line="30"/>
<source>General</source>
<translation>Общие</translation>
</message>
</context>
<context>
@ -316,153 +339,154 @@ Do you want to erase this profile ?</source>
<translation>Общие настройки</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="113"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="37"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="53"/>
<source>The translation may not load until qTox restarts.</source>
<translation>Перевод не изменится до перезапуска qTox.</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="40"/>
<source>Translation:</source>
<translation>Перевод:</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="79"/>
<source>Close to tray</source>
<translation>Сворачивать в трей при закрытии</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="86"/>
<source>Minimize to tray</source>
<translation>Сворачивать в трей</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="121"/>
<source>Set to 0 to disable</source>
<translation>Укажите 0, чтобы отключить</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="153"/>
<source>Smiley Pack:</source>
<extracomment>Text on smiley pack label</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="134"/>
<source>:)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="144"/>
<source>;)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="154"/>
<source>:p</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="164"/>
<source>:O</source>
<translation type="unfinished"></translation>
<translation>Набор смайликов:</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="174"/>
<source>:)</source>
<translation>:)</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="184"/>
<source>;)</source>
<translation>;)</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="194"/>
<source>:p</source>
<translation>:p</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="204"/>
<source>:O</source>
<translation>:O</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="214"/>
<source>:&apos;(</source>
<translation type="unfinished"></translation>
<translation>:&apos;(</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="188"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="228"/>
<source>Style:</source>
<translation type="unfinished"></translation>
<translation>Стиль:</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="210"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="250"/>
<source>Connection Settings</source>
<translation type="unfinished"></translation>
<translation>Настройки соединения</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="216"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="256"/>
<source>Enable IPv6 (recommended)</source>
<extracomment>Text on a checkbox to enable IPv6</extracomment>
<translation>Включить IPv6 (рекомендуется)</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="233"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="273"/>
<source>Use proxy (SOCKS5)</source>
<translation type="unfinished"></translation>
<translation>Использовать прокси (SOCKS5)</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="242"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="282"/>
<source>Address</source>
<extracomment>Text on proxy addr label</extracomment>
<translation type="unfinished"></translation>
<translation>Адрес</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="252"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="292"/>
<source>Port</source>
<extracomment>Text on proxy port label</extracomment>
<translation type="unfinished"></translation>
<translation>Порт</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="35"/>
<source>Use translations</source>
<extracomment>Text on a checkbox to enable translations</extracomment>
<translation>Использовать перевод</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="42"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="62"/>
<source>Save settings to the working directory instead of the usual conf dir</source>
<extracomment>describes makeToxPortable checkbox</extracomment>
<translation>Сохранять настройки в рабочую директорию вместо страндартной папки настроек</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="45"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="65"/>
<source>Make Tox portable</source>
<translation>Портативный режим</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="52"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="72"/>
<source>Start in tray</source>
<translation type="unfinished"></translation>
<translation>Запускать в системном лотке</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="59"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="93"/>
<source>Show contacts&apos; status changes</source>
<translation type="unfinished"></translation>
<translation>Показывать изменения статусов контактов</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="68"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="102"/>
<source>Provided in minutes</source>
<translation type="unfinished"></translation>
<translation>Выставлено в минутах</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="74"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="108"/>
<source>Auto away after (0 to disable):</source>
<translation type="unfinished"></translation>
<translation>Автоматически отсутствовать после (0 для отключения):</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="87"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="127"/>
<source> minutes</source>
<translation type="unfinished"></translation>
<translation> минут</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="105"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="145"/>
<source>Theme</source>
<translation>Тема</translation>
</message>
<message>
<source>Smiley Pack</source>
<extracomment>Text on smiley pack label</extracomment>
<translation type="vanished">Набор смайликов</translation>
</message>
<message>
<source>Proxy settings</source>
<translation type="vanished">Настройки прокси</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="226"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="266"/>
<source>Disable UDP (not recommended)</source>
<extracomment>Text on checkbox to disable UDP</extracomment>
<translation>Выключить UDP (не рекомендуется)</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="223"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="263"/>
<source>This allows, e.g., toxing over Tor. It adds load to the Tox network however, so use only when necessary.</source>
<extracomment>force tcp checkbox tooltip</extracomment>
<translation>Это позволяет, например, использовать tox поверх Tor. Однако это добавляет нагрузку на сеть Tox, так что используйте только в случае необходимости.</translation>
</message>
<message>
<source>Proxy address</source>
<extracomment>Text on proxy addr label</extracomment>
<translation type="vanished">Адрес прокси</translation>
</message>
<message>
<source>Proxy port</source>
<extracomment>Text on proxy port label</extracomment>
<translation type="vanished">Порт прокси</translation>
</message>
</context>
<context>
<name>GenericChatForm</name>
<message>
<location filename="../src/widget/form/genericchatform.cpp" line="154"/>
<location filename="../src/widget/form/genericchatform.cpp" line="160"/>
<location filename="../src/widget/form/genericchatform.cpp" line="151"/>
<location filename="../src/widget/form/genericchatform.cpp" line="157"/>
<source>Save chat log</source>
<translation>Сохранить лог чата</translation>
</message>
@ -470,13 +494,13 @@ Do you want to erase this profile ?</source>
<context>
<name>GroupChatForm</name>
<message>
<location filename="../src/widget/form/groupchatform.cpp" line="47"/>
<location filename="../src/widget/form/groupchatform.cpp" line="48"/>
<source>%1 users in chat</source>
<comment>Number of users in chat</comment>
<translation>%1 пользователей в чате</translation>
</message>
<message>
<location filename="../src/widget/form/groupchatform.cpp" line="85"/>
<location filename="../src/widget/form/groupchatform.cpp" line="82"/>
<source>%1 users in chat</source>
<translation>%1 пользователей в чате</translation>
</message>
@ -484,20 +508,20 @@ Do you want to erase this profile ?</source>
<context>
<name>GroupWidget</name>
<message>
<location filename="../src/widget/groupwidget.cpp" line="48"/>
<location filename="../src/widget/groupwidget.cpp" line="53"/>
<source>Quit group</source>
<comment>Menu to quit a groupchat</comment>
<translation>Покинуть группу</translation>
</message>
<message>
<location filename="../src/widget/groupwidget.cpp" line="39"/>
<location filename="../src/widget/groupwidget.cpp" line="59"/>
<location filename="../src/widget/groupwidget.cpp" line="42"/>
<location filename="../src/widget/groupwidget.cpp" line="64"/>
<source>%1 users in chat</source>
<translation>%1 пользователей в чате</translation>
</message>
<message>
<location filename="../src/widget/groupwidget.cpp" line="41"/>
<location filename="../src/widget/groupwidget.cpp" line="61"/>
<location filename="../src/widget/groupwidget.cpp" line="44"/>
<location filename="../src/widget/groupwidget.cpp" line="66"/>
<source>0 users in chat</source>
<translation>Ни одного пользователя в чате</translation>
</message>
@ -505,87 +529,111 @@ Do you want to erase this profile ?</source>
<context>
<name>IdentityForm</name>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="33"/>
<source>Your identity</source>
<translation>Ваша идентификация</translation>
<location filename="../src/widget/form/settings/identityform.cpp" line="34"/>
<source>Identity</source>
<translation>Личность</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="114"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="112"/>
<source>Call active</source>
<comment>popup title</comment>
<translation type="unfinished"></translation>
<translation>Идёт звонок</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="115"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="113"/>
<source>You can&apos;t switch profiles while a call is active!</source>
<comment>popup text</comment>
<translation type="unfinished"></translation>
<translation>Вы не можете переключить профиль, пока идёт звонок!</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="125"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="123"/>
<source>Rename &quot;%1&quot;</source>
<comment>renaming a profile</comment>
<translation type="unfinished"></translation>
<translation>Переименовать «%1»</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="140"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="131"/>
<source>Profile already exists</source>
<comment>rename confirm title</comment>
<translation>Профиль уже существует</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="132"/>
<source>A profile named &quot;%1&quot; already exists. Do you want to erase it?</source>
<comment>rename confirm text</comment>
<translation>Профиль с именем «%1» уже существует. Желаете его стереть?</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="145"/>
<source>Export profile</source>
<comment>save dialog title</comment>
<translation type="unfinished"></translation>
<translation>Экспортировать профиль</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="142"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="147"/>
<source>Tox save file (*.tox)</source>
<comment>save dialog filter</comment>
<translation type="unfinished"></translation>
<translation>Файл сохранения Tox (*.tox)</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="151"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="156"/>
<source>Profile currently loaded</source>
<comment>current profile deletion warning title</comment>
<translation type="unfinished"></translation>
<translation>Профиль в настоящее время загружен</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="151"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="156"/>
<source>This profile is currently in use. Please load a different profile before deleting this one.</source>
<comment>current profile deletion warning text</comment>
<translation type="unfinished"></translation>
<translation>Этот профиль используется. Загрузите другой профиль, прежде чем удалять этот.</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="156"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="160"/>
<source>Deletion imminent!</source>
<comment>deletion confirmation title</comment>
<translation type="unfinished"></translation>
<translation>Необратимое удаление!</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="156"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="161"/>
<source>Are you sure you want to delete this profile?</source>
<comment>deletion confirmation text</comment>
<translation type="unfinished"></translation>
<translation>Вы действительно хотите удалить этот профиль?</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="168"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="172"/>
<source>Import profile</source>
<comment>import dialog title</comment>
<translation type="unfinished"></translation>
<translation>Импортировать профиль</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="168"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="172"/>
<source>Tox save file (*.tox)</source>
<comment>import dialog filter</comment>
<translation type="unfinished"></translation>
<translation>Файл сохранения Tox (*.tox)</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="176"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="181"/>
<source>Ignoring non-Tox file</source>
<comment>popup title</comment>
<translation type="unfinished"></translation>
<translation>Игнорирование не-Tox файла</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="176"/>
<location filename="../src/widget/form/settings/identityform.cpp" line="181"/>
<source>Warning: you&apos;ve chosen a file that is not a Tox save file; ignoring.</source>
<comment>popup text</comment>
<translation type="unfinished"></translation>
<translation>Внимание: вы выбрали не файл сохранения Tox; игнорирование.</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="185"/>
<source>Profile already exists</source>
<comment>import confirm title</comment>
<translation>Профиль уже существует</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="186"/>
<source>A profile named &quot;%1&quot; already exists. Do you want to erase it?</source>
<comment>import confirm text</comment>
<translation>Профиль с именем «%1» уже существует. Желаете его стереть?</translation>
</message>
</context>
<context>
@ -623,48 +671,54 @@ Do you want to erase this profile ?</source>
<message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="65"/>
<source>Profiles</source>
<translation type="unfinished"></translation>
<translation>Профили</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="73"/>
<source>Available profiles:</source>
<translation type="unfinished"></translation>
<translation>Доступные профили:</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="94"/>
<source>Load</source>
<comment>load profile button</comment>
<translation type="unfinished"></translation>
<translation>Загрузить</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="101"/>
<source>Rename</source>
<comment>rename profile button</comment>
<translation type="unfinished"></translation>
<translation>Переименовать</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="108"/>
<source>Export</source>
<comment>export profile button</comment>
<translation type="unfinished"></translation>
<translation>Экспортировать</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="115"/>
<source>Delete</source>
<comment>delete profile button</comment>
<translation type="unfinished"></translation>
<translation>Удалить</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="118"/>
<source>This is useful to remain safe on public computers</source>
<comment>delete profile button tooltip</comment>
<translation type="unfinished"></translation>
<translation>Это полезно, чтобы оставаться в безопасности за общими компьютерами</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="127"/>
<location filename="../src/widget/form/settings/identitysettings.ui" line="129"/>
<source>Import a profile</source>
<comment>import profile button</comment>
<translation type="unfinished"></translation>
<translation>Импортировать профиль</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="136"/>
<source>New Tox ID</source>
<comment>new profile button</comment>
<translation>Новый Tox ID</translation>
</message>
</context>
<context>
@ -719,122 +773,139 @@ Do you want to erase this profile ?</source>
<name>PrivacyForm</name>
<message>
<location filename="../src/widget/form/settings/privacyform.cpp" line="21"/>
<source>Privacy settings</source>
<translation>Настройки приватности</translation>
</message>
</context>
<context>
<name>SelfCamView</name>
<message>
<source>Tox video test</source>
<comment>Title of the window to test the video/webcam</comment>
<translation type="vanished">Проверка видео</translation>
<source>Privacy</source>
<translation>Защищённость</translation>
</message>
</context>
<context>
<name>Widget</name>
<message>
<location filename="../src/widget/widget.cpp" line="101"/>
<location filename="../src/widget/widget.cpp" line="75"/>
<source>online</source>
<translation>в сети</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="78"/>
<source>away</source>
<translation>отошёл</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="81"/>
<source>busy</source>
<translation>занят</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="84"/>
<source>&amp;Quit</source>
<translation>В&amp;ыход</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="87"/>
<source>Change status to:</source>
<translation>Сменить статус на:</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="154"/>
<source>Online</source>
<comment>Button to set your status to &apos;Online&apos;</comment>
<translation>В сети</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="103"/>
<location filename="../src/widget/widget.cpp" line="156"/>
<source>Away</source>
<comment>Button to set your status to &apos;Away&apos;</comment>
<translatorcomment>Вероятно, это не столь долгое путешествие</translatorcomment>
<translation>Отошёл</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="105"/>
<location filename="../src/widget/widget.cpp" line="158"/>
<source>Busy</source>
<comment>Button to set your status to &apos;Busy&apos;</comment>
<translation>Занят</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="282"/>
<location filename="../src/widget/widget.cpp" line="382"/>
<source>Choose a profile</source>
<translation type="unfinished"></translation>
<translation>Выберите профиль</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="283"/>
<location filename="../src/widget/widget.cpp" line="383"/>
<source>Please choose which identity to use</source>
<translation type="unfinished"></translation>
<translation>Выберите личность, которую хотите использовать</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="309"/>
<location filename="../src/widget/widget.cpp" line="409"/>
<source>Choose a profile picture</source>
<translation>Выбрать картинку для профиля</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="316"/>
<location filename="../src/widget/widget.cpp" line="323"/>
<location filename="../src/widget/widget.cpp" line="344"/>
<location filename="../src/widget/widget.cpp" line="416"/>
<location filename="../src/widget/widget.cpp" line="423"/>
<location filename="../src/widget/widget.cpp" line="444"/>
<source>Error</source>
<translation>Ошибка</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="316"/>
<location filename="../src/widget/widget.cpp" line="416"/>
<source>Unable to open this file</source>
<translation>Невозможно открыть файл</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="323"/>
<location filename="../src/widget/widget.cpp" line="423"/>
<source>Unable to read this image</source>
<translation>Невозможно прочесть это изображение</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="344"/>
<location filename="../src/widget/widget.cpp" line="444"/>
<source>This image is too big</source>
<translation>Это изображение слишком большое</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="371"/>
<location filename="../src/widget/widget.cpp" line="471"/>
<source>Toxcore failed to start, the application will terminate after you close this message.</source>
<translation>Не удалось запустить toxcore, приложение будет завершено после того как вы закроете это сообщение.</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="380"/>
<location filename="../src/widget/widget.cpp" line="480"/>
<source>toxcore failed to start with your proxy settings. qTox cannot run; please modify your settings and restart.</source>
<comment>popup text</comment>
<translation>Не удалось запустить toxcore с вашими настройками прокси, qTox не может работать; измените ваши настройки и перезапустите его.</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="549"/>
<location filename="../src/widget/widget.cpp" line="660"/>
<source>away</source>
<comment>contact status</comment>
<translation type="unfinished"></translation>
<translation>отсутствует</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="551"/>
<location filename="../src/widget/widget.cpp" line="662"/>
<source>busy</source>
<comment>contact status</comment>
<translation type="unfinished"></translation>
<translation>занят</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="553"/>
<location filename="../src/widget/widget.cpp" line="664"/>
<source>offline</source>
<comment>contact status</comment>
<translation type="unfinished"></translation>
<translation>офлайн</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="555"/>
<location filename="../src/widget/widget.cpp" line="666"/>
<source>online</source>
<comment>contact status</comment>
<translation type="unfinished"></translation>
<translation>в сети</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="561"/>
<location filename="../src/widget/widget.cpp" line="668"/>
<source>%1 is now %2</source>
<comment>e.g. &quot;Dubslow is now online&quot;</comment>
<translation type="unfinished"></translation>
<translation>%1 сейчас %2</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="752"/>
<location filename="../src/widget/widget.cpp" line="866"/>
<source>&lt;Unknown&gt;</source>
<comment>Placeholder when we don&apos;t know someone&apos;s name in a group chat</comment>
<translation>&lt;Неизвестно&gt;</translation>
<translation>&lt;Неизвестный&gt;</translation>
</message>
</context>
</TS>

View File

@ -38,8 +38,8 @@ span.quote {
}
div.green {
margin-top: 12px;
margin-bottom: 12px;
margin-top: 6px;
margin-bottom: 6px;
margin-left: 0px;
margin-right: 0px;
color: @white;
@ -48,8 +48,8 @@ div.green {
}
div.silver {
margin-top: 12px;
margin-bottom: 12px;
margin-top: 6px;
margin-bottom: 6px;
margin-left: 0px;
margin-right: 0px;
color: @black;
@ -58,8 +58,8 @@ div.silver {
}
div.red {
margin-top: 12px;
margin-bottom: 12px;
margin-top: 6px;
margin-bottom: 6px;
margin-left: 0px;
margin-right: 0px;
color: @white;
@ -67,6 +67,20 @@ div.red {
font: @small;
}
div.alert {
margin-left: 0px;
margin-right: 0px;
color: @black;
background-color: @orange;
font: @big;
}
div.alert_name {
color: @black;
background-color: @orange;
font: @bigBold;
}
div.button {
margin-top: 0px;
margin-bottom: 0px;