mirror of
https://github.com/qTox/qTox.git
synced 2024-03-22 14:00:36 +08:00
Added resizable friendList
Not perfect, but a good start. Note that the editable name&status labels disappeared, QDesigner seems to have turned them into regular QLabels (no idea why).
This commit is contained in:
parent
5211f37d6a
commit
a34e28518f
1
friend.h
1
friend.h
|
@ -22,6 +22,7 @@ public:
|
|||
ChatForm* chatForm;
|
||||
int hasNewMessages;
|
||||
Status friendStatus;
|
||||
QPixmap avatar;
|
||||
};
|
||||
|
||||
#endif // FRIEND_H
|
||||
|
|
|
@ -23,6 +23,7 @@ FileTransfertWidget::FileTransfertWidget(ToxFile File)
|
|||
setAutoFillBackground(true);
|
||||
|
||||
setMinimumSize(250,58);
|
||||
setMaximumHeight(58);
|
||||
setLayout(mainLayout);
|
||||
mainLayout->setMargin(0);
|
||||
|
||||
|
|
|
@ -11,11 +11,16 @@ FriendWidget::FriendWidget(int FriendId, QString id)
|
|||
{
|
||||
this->setMouseTracking(true);
|
||||
this->setAutoFillBackground(true);
|
||||
this->setLayout(&layout);
|
||||
//this->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed);
|
||||
//this->setMinimumWidth(225);
|
||||
this->setFixedWidth(225);
|
||||
this->setFixedHeight(55);
|
||||
layout.setSpacing(0);
|
||||
this->setLayout(&layout);
|
||||
//layout.setSpacing(0);
|
||||
layout.setMargin(0);
|
||||
layout.setStretchFactor(this, 100);
|
||||
//this->setFixedWidth(225);
|
||||
//this->setMaximumWidth();
|
||||
textLayout.setSpacing(0);
|
||||
textLayout.setMargin(0);
|
||||
|
||||
|
@ -53,6 +58,11 @@ FriendWidget::FriendWidget(int FriendId, QString id)
|
|||
isActiveWidget = 0;
|
||||
}
|
||||
|
||||
void FriendWidget::setNewFixedWidth(int newWidth)
|
||||
{
|
||||
this->setFixedWidth(newWidth);
|
||||
}
|
||||
|
||||
void FriendWidget::mouseReleaseEvent (QMouseEvent*)
|
||||
{
|
||||
emit friendWidgetClicked(this);
|
||||
|
|
|
@ -18,6 +18,7 @@ public:
|
|||
void leaveEvent(QEvent* event);
|
||||
void setAsActiveChatroom();
|
||||
void setAsInactiveChatroom();
|
||||
void setNewFixedWidth(int newWidth);
|
||||
|
||||
signals:
|
||||
void friendWidgetClicked(FriendWidget* widget);
|
||||
|
|
|
@ -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);
|
||||
|
@ -144,7 +149,7 @@ void GroupWidget::setAsActiveChatroom()
|
|||
QPalette pal3;
|
||||
pal3.setColor(QPalette::Background, Qt::white);
|
||||
this->setPalette(pal3);
|
||||
avatar.setPixmap(QPixmap(":img/group_dark.png"));
|
||||
avatar.setPixmap(QPixmap(":img/group.png"));
|
||||
}
|
||||
|
||||
void GroupWidget::setAsInactiveChatroom()
|
||||
|
|
|
@ -30,6 +30,7 @@ public:
|
|||
QVBoxLayout textLayout;
|
||||
void setAsInactiveChatroom();
|
||||
void setAsActiveChatroom();
|
||||
void setNewFixedWidth(int newWidth);
|
||||
|
||||
private:
|
||||
QColor lastColor;
|
||||
|
|
|
@ -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 = "";
|
||||
|
@ -109,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())
|
||||
{
|
||||
|
@ -127,7 +126,7 @@ Widget::Widget(QWidget *parent) :
|
|||
|
||||
isWindowMinimized = 0;
|
||||
|
||||
centralLayout = new QHBoxLayout(ui->centralWidget);
|
||||
//centralLayout = new QSplitter(ui->centralWidget);
|
||||
|
||||
|
||||
ui->mainContent->setLayout(new QVBoxLayout());
|
||||
|
@ -139,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());
|
||||
|
@ -147,14 +147,24 @@ Widget::Widget(QWidget *parent) :
|
|||
ui->statusLabel->label->setStyleSheet("QLabel { color : white; font-size: 8pt;}");
|
||||
ui->friendList->widget()->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
||||
|
||||
setMouseTracking(true);
|
||||
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->->setMouseTracking(true);
|
||||
ui->statusHead->setAttribute(Qt::WA_TransparentForMouseEvents);
|
||||
ui->statusHead->setMouseTracking(true);
|
||||
|
||||
QList<int> currentSizes = ui->centralWidget->sizes();
|
||||
currentSizes[0] = 225;
|
||||
ui->centralWidget->setSizes(currentSizes);
|
||||
|
||||
camera = new Camera;
|
||||
camview = new SelfCamView(camera);
|
||||
|
@ -196,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()));
|
||||
|
@ -234,7 +245,6 @@ Widget::~Widget()
|
|||
settings.setValue("maximized", isMaximized());
|
||||
settings.setValue("useNativeTheme", useNativeTheme);
|
||||
delete ui;
|
||||
delete centralLayout;
|
||||
}
|
||||
|
||||
Widget* Widget::getInstance()
|
||||
|
@ -244,6 +254,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 pos, int index)
|
||||
{
|
||||
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()
|
||||
{
|
||||
|
@ -379,6 +406,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)));
|
||||
|
@ -536,6 +564,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);
|
||||
|
@ -637,6 +666,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);
|
||||
|
@ -665,6 +695,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)));
|
||||
|
@ -696,6 +727,7 @@ bool Widget::isFriendWidgetCurActiveWidget(Friend* f)
|
|||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool Widget::event(QEvent * e)
|
||||
{
|
||||
if (e->type() == QEvent::WindowStateChange)
|
||||
|
@ -890,6 +922,7 @@ void Widget::moveWindow(QMouseEvent *e)
|
|||
|
||||
void Widget::resizeWindow(QMouseEvent *e)
|
||||
{
|
||||
updateFriendListWidth();
|
||||
if (!useNativeTheme)
|
||||
{
|
||||
if (allowToResize)
|
||||
|
@ -1008,7 +1041,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);
|
||||
}
|
||||
|
||||
|
|
|
@ -44,6 +44,7 @@ public:
|
|||
void updateFriendStatusLights(int friendId);
|
||||
int useNativeTheme;
|
||||
~Widget();
|
||||
void updateFriendListWidth();
|
||||
|
||||
signals:
|
||||
void friendRequestAccepted(const QString& userId);
|
||||
|
@ -88,6 +89,7 @@ private slots:
|
|||
void removeFriend(int friendId);
|
||||
void copyFriendIdToClipboard(int friendId);
|
||||
void removeGroup(int groupId);
|
||||
void splitterMoved(int pos, int index);
|
||||
|
||||
protected slots:
|
||||
void moveWindow(QMouseEvent *e);
|
||||
|
@ -98,7 +100,7 @@ private:
|
|||
|
||||
private:
|
||||
Ui::Widget *ui;
|
||||
QHBoxLayout *centralLayout;
|
||||
QSplitter *centralLayout;
|
||||
QPoint dragPosition;
|
||||
TitleMode m_titleMode;
|
||||
bool moveWidget;
|
||||
|
@ -108,7 +110,6 @@ private:
|
|||
bool resizeHorEsq;
|
||||
bool resizeDiagSupEsq;
|
||||
bool resizeDiagSupDer;
|
||||
//void mouseMoveEvent(QMouseEvent *e);
|
||||
void mousePressEvent(QMouseEvent *e);
|
||||
void mouseReleaseEvent(QMouseEvent *e);
|
||||
void mouseDoubleClickEvent(QMouseEvent *e);
|
||||
|
@ -126,6 +127,7 @@ private:
|
|||
int isFriendWidgetActive, isGroupWidgetActive;
|
||||
SelfCamView* camview;
|
||||
Camera* camera;
|
||||
bool notify(QObject *receiver, QEvent *event);
|
||||
};
|
||||
|
||||
#endif // WIDGET_H
|
||||
|
|
Loading…
Reference in New Issue
Block a user