1
0
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:
Kevin Flynn 2014-07-02 23:43:23 -07:00
parent 5211f37d6a
commit a34e28518f
9 changed files with 2757 additions and 2578 deletions

View File

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

5257
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

@ -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);

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);
@ -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()

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 = "";
@ -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);
}

View File

@ -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