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

Merge PR57

This commit is contained in:
Tux3 / Mlkj / !Lev.uXFMLA 2014-07-04 16:14:41 +02:00
commit 0a41c0d712
12 changed files with 2890 additions and 2631 deletions

View File

@ -39,14 +39,14 @@ Core::Core(Camera* cam) :
{
toxTimer = new QTimer(this);
toxTimer->setSingleShot(true);
saveTimer = new QTimer(this);
saveTimer->start(TOX_SAVE_INTERVAL);
//saveTimer = new QTimer(this);
//saveTimer->start(TOX_SAVE_INTERVAL);
//fileTimer = new QTimer(this);
//fileTimer->start(TOX_FILE_INTERVAL);
bootstrapTimer = new QTimer(this);
bootstrapTimer->start(TOX_BOOTSTRAP_INTERVAL);
connect(toxTimer, &QTimer::timeout, this, &Core::process);
connect(saveTimer, &QTimer::timeout, this, &Core::saveConfiguration);
//connect(saveTimer, &QTimer::timeout, this, &Core::saveConfiguration); //Disable save timer in favor of saving on events
//connect(fileTimer, &QTimer::timeout, this, &Core::fileHeartbeat);
connect(bootstrapTimer, &QTimer::timeout, this, &Core::onBootstrapTimer);
connect(&Settings::getInstance(), &Settings::dhtServerListChanged, this, &Core::bootstrapDht);
@ -317,6 +317,7 @@ void Core::acceptFriendRequest(const QString& userId)
if (friendId == -1) {
emit failedToAddFriend(userId);
} else {
saveConfiguration();
emit friendAdded(friendId, userId);
}
}
@ -537,6 +538,7 @@ void Core::removeFriend(int friendId)
if (tox_del_friend(tox, friendId) == -1) {
emit failedToRemoveFriend(friendId);
} else {
saveConfiguration();
emit friendRemoved(friendId);
}
}
@ -553,6 +555,7 @@ void Core::setUsername(const QString& username)
if (tox_set_name(tox, cUsername.data(), cUsername.size()) == -1) {
emit failedToSetUsername(username);
} else {
saveConfiguration();
emit usernameSet(username);
}
}
@ -564,6 +567,7 @@ void Core::setStatusMessage(const QString& message)
if (tox_set_status_message(tox, cMessage.data(), cMessage.size()) == -1) {
emit failedToSetStatusMessage(message);
} else {
saveConfiguration();
emit statusMessageSet(message);
}
}
@ -587,6 +591,7 @@ void Core::setStatus(Status status)
}
if (tox_set_user_status(tox, userstatus) == 0) {
saveConfiguration();
emit statusSet(status);
} else {
emit failedToSetStatus(status);

3
core.h
View File

@ -119,6 +119,8 @@ public:
void quitGroupChat(int groupId) const;
void dispatchVideoFrame(vpx_image img) const;
void saveConfiguration();
public slots:
void start();
void process();
@ -261,7 +263,6 @@ private:
void onBootstrapTimer();
void loadConfiguration();
void saveConfiguration();
void loadFriends();
static void sendAllFileData(Core* core, ToxFile* file);

View File

@ -22,6 +22,7 @@ public:
ChatForm* chatForm;
int hasNewMessages;
Status friendStatus;
QPixmap avatar;
};
#endif // FRIEND_H

5272
widget.ui

File diff suppressed because it is too large Load Diff

View File

@ -23,6 +23,7 @@ FileTransfertWidget::FileTransfertWidget(ToxFile File)
setAutoFillBackground(true);
setMinimumSize(250,58);
setMaximumHeight(58);
setLayout(mainLayout);
mainLayout->setMargin(0);

View File

@ -75,6 +75,8 @@ void AddFriendForm::onSendTriggered()
showWarning(tr("Please fill in a valid Tox ID","Tox ID of the friend you're sending a friend request to"));
} else if (isToxId(id)) {
emit friendRequested(id, getMessage());
this->toxId.setText("");
this->message.setText("");
} else {
id = id.replace("@", "._tox.");
dns.setName(id);

View File

@ -11,11 +11,12 @@ FriendWidget::FriendWidget(int FriendId, QString id)
{
this->setMouseTracking(true);
this->setAutoFillBackground(true);
this->setLayout(&layout);
this->setFixedWidth(225);
this->setFixedHeight(55);
this->setLayout(&layout);
layout.setSpacing(0);
layout.setMargin(0);
layout.setStretchFactor(this, 100);
textLayout.setSpacing(0);
textLayout.setMargin(0);
@ -53,6 +54,11 @@ FriendWidget::FriendWidget(int FriendId, QString id)
isActiveWidget = 0;
}
void FriendWidget::setNewFixedWidth(int newWidth)
{
this->setFixedWidth(newWidth);
}
void FriendWidget::mouseReleaseEvent (QMouseEvent*)
{
emit friendWidgetClicked(this);

View File

@ -18,6 +18,7 @@ public:
void leaveEvent(QEvent* event);
void setAsActiveChatroom();
void setAsInactiveChatroom();
void setNewFixedWidth(int newWidth);
signals:
void friendWidgetClicked(FriendWidget* widget);

View File

@ -56,6 +56,11 @@ GroupWidget::GroupWidget(int GroupId, QString Name)
isActiveWidget = 0;
}
void GroupWidget::setNewFixedWidth(int newWidth)
{
this->setFixedWidth(newWidth);
}
void GroupWidget::mouseReleaseEvent (QMouseEvent*)
{
emit groupWidgetClicked(this);
@ -163,5 +168,5 @@ void GroupWidget::setAsInactiveChatroom()
QPalette pal3;
pal3.setColor(QPalette::Background, QColor(65,65,65,255));
this->setPalette(pal3);
avatar.setPixmap(QPixmap("img/group.png"));
avatar.setPixmap(QPixmap(":img/group.png"));
}

View File

@ -30,6 +30,7 @@ public:
QVBoxLayout textLayout;
void setAsInactiveChatroom();
void setAsActiveChatroom();
void setNewFixedWidth(int newWidth);
private:
QColor lastColor;

View File

@ -38,7 +38,6 @@ Widget::Widget(QWidget *parent) :
if (useNativeTheme)
{
ui->titleBar->hide();
//setWindowFlags(windowFlags() & ~Qt::FramelessWindowHint);
this->layout()->setContentsMargins(0, 0, 0, 0);
QString friendListStylesheet = "";
@ -89,13 +88,6 @@ Widget::Widget(QWidget *parent) :
setWindowFlags(Qt::CustomizeWindowHint);
setWindowFlags(Qt::FramelessWindowHint);
setAttribute(Qt::WA_DeleteOnClose);
setMouseTracking(true);
ui->titleBar->setMouseTracking(true);
ui->LTitle->setMouseTracking(true);
ui->tbMenu->setMouseTracking(true);
ui->pbMin->setMouseTracking(true);
ui->pbMax->setMouseTracking(true);
ui->pbClose->setMouseTracking(true);
addAction(ui->actionClose);
@ -116,7 +108,7 @@ Widget::Widget(QWidget *parent) :
QRect geo = settings.value("geometry").toRect();
if (geo.height() > 0 and geo.x() < QApplication::desktop()->width() and geo.width() > 0 and geo.y() < QApplication::desktop()->height())
setGeometry(geo);
this->setGeometry(geo);
if (settings.value("maximized").toBool())
{
@ -134,7 +126,7 @@ Widget::Widget(QWidget *parent) :
isWindowMinimized = 0;
centralLayout = new QHBoxLayout(ui->centralWidget);
//centralLayout = new QSplitter(ui->centralWidget);
ui->mainContent->setLayout(new QVBoxLayout());
@ -146,6 +138,7 @@ Widget::Widget(QWidget *parent) :
friendListWidget->layout()->setSpacing(0);
friendListWidget->layout()->setMargin(0);
friendListWidget->setLayoutDirection(Qt::LeftToRight);
//friendListWidget->
ui->friendList->setWidget(friendListWidget);
ui->nameLabel->setText(Settings::getInstance().getUsername());
@ -153,6 +146,25 @@ Widget::Widget(QWidget *parent) :
ui->statusLabel->setText(Settings::getInstance().getStatusMessage());
ui->statusLabel->label->setStyleSheet("QLabel { color : white; font-size: 8pt;}");
ui->friendList->widget()->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
ui->centralWidget->setStyleSheet("QSplitter{background-color: white;}");
this->setMouseTracking(true);
QList<QWidget*> widgets = this->findChildren<QWidget*>();
foreach (QWidget *widget, widgets)
widget->setMouseTracking(true);
ui->titleBar->setMouseTracking(true);
ui->LTitle->setMouseTracking(true);
ui->tbMenu->setMouseTracking(true);
ui->pbMin->setMouseTracking(true);
ui->pbMax->setMouseTracking(true);
ui->pbClose->setMouseTracking(true);
ui->statusHead->setMouseTracking(true);
QList<int> currentSizes = ui->centralWidget->sizes();
currentSizes[0] = 225;
ui->centralWidget->setSizes(currentSizes);
camera = new Camera;
camview = new SelfCamView(camera);
@ -194,6 +206,7 @@ Widget::Widget(QWidget *parent) :
connect(this, &Widget::friendRequested, core, &Core::requestFriendship);
connect(this, &Widget::friendRequestAccepted, core, &Core::acceptFriendRequest);
connect(ui->centralWidget, SIGNAL(splitterMoved(int,int)),this, SLOT(splitterMoved(int,int)));
connect(ui->addButton, SIGNAL(clicked()), this, SLOT(onAddClicked()));
connect(ui->groupButton, SIGNAL(clicked()), this, SLOT(onGroupClicked()));
connect(ui->transferButton, SIGNAL(clicked()), this, SLOT(onTransferClicked()));
@ -214,6 +227,7 @@ Widget::Widget(QWidget *parent) :
Widget::~Widget()
{
core->saveConfiguration();
instance = nullptr;
coreThread->exit();
coreThread->wait();
@ -233,7 +247,6 @@ Widget::~Widget()
settings.setValue("maximized", isMaximized());
settings.setValue("useNativeTheme", useNativeTheme);
delete ui;
delete centralLayout;
}
Widget* Widget::getInstance()
@ -243,6 +256,23 @@ Widget* Widget::getInstance()
return instance;
}
//Super ugly hack to enable resizable friend widgets
//There should be a way to set them to resize automagicly, but I can't seem to find it.
void Widget::splitterMoved(int, int)
{
updateFriendListWidth();
}
void Widget::updateFriendListWidth()
{
int newWidth = ui->friendList->width();
for (Friend* f : FriendList::friendList)
if (f->widget != nullptr)
f->widget->setNewFixedWidth(newWidth);
for (Group* g : GroupList::groupList)
if (g->widget != nullptr)
g->widget->setNewFixedWidth(newWidth);
}
QString Widget::getUsername()
{
@ -380,6 +410,7 @@ void Widget::addFriend(int friendId, const QString &userId)
QWidget* widget = ui->friendList->widget();
QLayout* layout = widget->layout();
layout->addWidget(newfriend->widget);
updateFriendListWidth();
connect(newfriend->widget, SIGNAL(friendWidgetClicked(FriendWidget*)), this, SLOT(onFriendWidgetClicked(FriendWidget*)));
connect(newfriend->widget, SIGNAL(removeFriend(int)), this, SLOT(removeFriend(int)));
connect(newfriend->widget, SIGNAL(copyFriendIdToClipboard(int)), this, SLOT(copyFriendIdToClipboard(int)));
@ -400,6 +431,7 @@ void Widget::addFriend(int friendId, const QString &userId)
connect(core, &Core::avEnding, newfriend->chatForm, &ChatForm::onAvEnding);
connect(core, &Core::avRequestTimeout, newfriend->chatForm, &ChatForm::onAvRequestTimeout);
connect(core, &Core::avPeerTimeout, newfriend->chatForm, &ChatForm::onAvPeerTimeout);
core->saveConfiguration();
}
void Widget::addFriendFailed(const QString&)
@ -541,6 +573,7 @@ void Widget::onFriendRequestReceived(const QString& userId, const QString& messa
void Widget::removeFriend(int friendId)
{
Friend* f = FriendList::findFriend(friendId);
f->widget->setAsInactiveChatroom();
if (f->widget == activeFriendWidget)
activeFriendWidget = nullptr;
FriendList::removeFriend(friendId);
@ -557,7 +590,6 @@ void Widget::copyFriendIdToClipboard(int friendId)
{
QClipboard *clipboard = QApplication::clipboard();
clipboard->setText(f->userId, QClipboard::Clipboard);
clipboard->deleteLater();
}
}
@ -643,6 +675,7 @@ void Widget::onGroupWidgetClicked(GroupWidget* widget)
void Widget::removeGroup(int groupId)
{
Group* g = GroupList::findGroup(groupId);
g->widget->setAsInactiveChatroom();
if (g->widget == activeGroupWidget)
activeGroupWidget = nullptr;
GroupList::removeGroup(groupId);
@ -671,6 +704,7 @@ Group *Widget::createGroup(int groupId)
QWidget* widget = ui->friendList->widget();
QLayout* layout = widget->layout();
layout->addWidget(newgroup->widget);
updateFriendListWidth();
connect(newgroup->widget, SIGNAL(groupWidgetClicked(GroupWidget*)), this, SLOT(onGroupWidgetClicked(GroupWidget*)));
connect(newgroup->widget, SIGNAL(removeGroup(int)), this, SLOT(removeGroup(int)));
connect(newgroup->chatForm, SIGNAL(sendMessage(int,QString)), core, SLOT(sendGroupMessage(int,QString)));
@ -702,81 +736,16 @@ bool Widget::isFriendWidgetCurActiveWidget(Friend* f)
return true;
}
void Widget::mouseMoveEvent(QMouseEvent *e)
void Widget::resizeEvent(QResizeEvent *)
{
if (!useNativeTheme)
{
int xMouse = e->pos().x();
int yMouse = e->pos().y();
int wWidth = this->geometry().width();
int wHeight = this->geometry().height();
if (moveWidget)
{
inResizeZone = false;
moveWindow(e);
}
else if (allowToResize)
resizeWindow(e);
//right
else if (xMouse >= wWidth - PIXELS_TO_ACT or allowToResize)
{
inResizeZone = true;
if (yMouse >= wHeight - PIXELS_TO_ACT)
setCursor(Qt::SizeFDiagCursor);
else if (yMouse <= PIXELS_TO_ACT)
setCursor(Qt::SizeBDiagCursor);
else
setCursor(Qt::SizeHorCursor);
resizeWindow(e);
}
//left
else if (xMouse <= PIXELS_TO_ACT or allowToResize)
{
inResizeZone = true;
if (yMouse >= wHeight - PIXELS_TO_ACT)
setCursor(Qt::SizeBDiagCursor);
else if (yMouse <= PIXELS_TO_ACT)
setCursor(Qt::SizeFDiagCursor);
else
setCursor(Qt::SizeHorCursor);
resizeWindow(e);
}
//bottom edge
else if ((yMouse >= wHeight - PIXELS_TO_ACT) or allowToResize)
{
inResizeZone = true;
setCursor(Qt::SizeVerCursor);
resizeWindow(e);
}
//Cursor part top
else if (yMouse <= PIXELS_TO_ACT or allowToResize)
{
inResizeZone = true;
setCursor(Qt::SizeVerCursor);
resizeWindow(e);
}
else
{
inResizeZone = false;
setCursor(Qt::ArrowCursor);
}
e->accept();
}
updateFriendListWidth();
}
bool Widget::event(QEvent * e)
{
if (e->type() == QEvent::WindowStateChange)
if( e->type() == QEvent::WindowStateChange )
{
if(windowState().testFlag(Qt::WindowMinimized) == true)
{
@ -802,7 +771,7 @@ bool Widget::event(QEvent * e)
Group* g = GroupList::findGroup(activeGroupWidget->groupId);
g->hasNewMessages = 0;
g->userWasMentioned = 0;
g->widget->statusPic.setPixmap(QPixmap("img/status/dot_groupchat.png"));
g->widget->statusPic.setPixmap(QPixmap(":img/status/dot_groupchat.png"));
}
}
else if (e->type() == QEvent::WindowDeactivate && !useNativeTheme)
@ -810,6 +779,73 @@ bool Widget::event(QEvent * e)
this->setObjectName("inactiveWindow");
this->style()->polish(this);
}
else if (e->type() == QEvent::MouseMove && !useNativeTheme)
{
QMouseEvent *k = (QMouseEvent *)e;
int xMouse = k->pos().x();
int yMouse = k->pos().y();
int wWidth = this->geometry().width();
int wHeight = this->geometry().height();
if (moveWidget)
{
inResizeZone = false;
moveWindow(k);
}
else if (allowToResize)
resizeWindow(k);
//right
else if (xMouse >= wWidth - PIXELS_TO_ACT or allowToResize)
{
inResizeZone = true;
if (yMouse >= wHeight - PIXELS_TO_ACT)
setCursor(Qt::SizeFDiagCursor);
else if (yMouse <= PIXELS_TO_ACT)
setCursor(Qt::SizeBDiagCursor);
else
setCursor(Qt::SizeHorCursor);
resizeWindow(k);
}
//left
else if (xMouse <= PIXELS_TO_ACT or allowToResize)
{
inResizeZone = true;
if (yMouse >= wHeight - PIXELS_TO_ACT)
setCursor(Qt::SizeBDiagCursor);
else if (yMouse <= PIXELS_TO_ACT)
setCursor(Qt::SizeFDiagCursor);
else
setCursor(Qt::SizeHorCursor);
resizeWindow(k);
}
//bottom edge
else if ((yMouse >= wHeight - PIXELS_TO_ACT) or allowToResize)
{
inResizeZone = true;
setCursor(Qt::SizeVerCursor);
resizeWindow(k);
}
//Cursor part top
else if (yMouse <= PIXELS_TO_ACT or allowToResize)
{
inResizeZone = true;
setCursor(Qt::SizeVerCursor);
resizeWindow(k);
}
else
{
inResizeZone = false;
setCursor(Qt::ArrowCursor);
}
e->accept();
}
return QWidget::event(e);
}
@ -901,6 +937,7 @@ void Widget::moveWindow(QMouseEvent *e)
void Widget::resizeWindow(QMouseEvent *e)
{
updateFriendListWidth();
if (!useNativeTheme)
{
if (allowToResize)
@ -1019,7 +1056,7 @@ void Widget::setCentralWidget(QWidget *widget, const QString &widgetName)
connect(widget, SIGNAL(cancelled()), this, SLOT(close()));
centralLayout->addWidget(widget);
ui->centralWidget->setLayout(centralLayout);
//ui->centralWidget->setLayout(centralLayout);
ui->LTitle->setText(widgetName);
}

View File

@ -44,6 +44,7 @@ public:
void updateFriendStatusLights(int friendId);
int useNativeTheme;
~Widget();
void updateFriendListWidth();
signals:
void friendRequestAccepted(const QString& userId);
@ -53,6 +54,9 @@ signals:
void usernameChanged(const QString& username);
void statusMessageChanged(const QString& statusMessage);
protected:
void resizeEvent(QResizeEvent *);
private slots:
void maximizeBtnClicked();
void minimizeBtnClicked();
@ -89,6 +93,7 @@ private slots:
void copyFriendIdToClipboard(int friendId);
void removeGroup(int groupId);
void onStatusImgClicked();
void splitterMoved(int pos, int index);
protected slots:
void moveWindow(QMouseEvent *e);
@ -99,7 +104,7 @@ private:
private:
Ui::Widget *ui;
QHBoxLayout *centralLayout;
QSplitter *centralLayout;
QPoint dragPosition;
TitleMode m_titleMode;
bool moveWidget;
@ -109,7 +114,6 @@ private:
bool resizeHorEsq;
bool resizeDiagSupEsq;
bool resizeDiagSupDer;
void mouseMoveEvent(QMouseEvent *e);
void mousePressEvent(QMouseEvent *e);
void mouseReleaseEvent(QMouseEvent *e);
void mouseDoubleClickEvent(QMouseEvent *e);
@ -127,6 +131,7 @@ private:
int isFriendWidgetActive, isGroupWidgetActive;
SelfCamView* camview;
Camera* camera;
bool notify(QObject *receiver, QEvent *event);
};
#endif // WIDGET_H