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

Recent list selectable from drop list, bug fixes

This commit is contained in:
TheSpiritXIII 2015-06-12 12:09:01 -04:00 committed by tux3
parent c24a508c38
commit ecdf863c02
6 changed files with 133 additions and 35 deletions

View File

@ -1030,13 +1030,25 @@ QSplitter:handle{
</widget>
</item>
<item>
<widget class="QComboBox" name="searchContactFilterCBox">
<widget class="QToolButton" name="searchContactFilterBox">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>...</string>
</property>
<property name="popupMode">
<enum>QToolButton::InstantPopup</enum>
</property>
<property name="toolButtonStyle">
<enum>Qt::ToolButtonTextBesideIcon</enum>
</property>
<property name="arrowType">
<enum>Qt::DownArrow</enum>
</property>
</widget>
</item>
</layout>

View File

@ -43,6 +43,7 @@
#include <QFileDialog>
#include <QBuffer>
#include <QMessageBox>
#include <QComboBox>
ProfileForm::ProfileForm(QWidget *parent) :
QWidget{parent}, qr{nullptr}

View File

@ -506,6 +506,7 @@ void FriendListWidget::moveWidget(FriendWidget* w, Status s, bool add)
Time time = getTime(activityDate);
CategoryWidget* categoryWidget = dynamic_cast<CategoryWidget*>(activityLayout->itemAt(time)->widget());
categoryWidget->addFriendWidget(contact->getFriendWidget(), contact->getStatus());
categoryWidget->show();
}
}

View File

@ -134,6 +134,45 @@ void Widget::init()
ui->myProfile->insertWidget(0, profilePicture);
ui->myProfile->insertSpacing(1, 7);
filterMenu = new QMenu(this);
filterGroup = new QActionGroup(this);
filterDisplayGroup = new QActionGroup(this);
filterDisplayName = new QAction(this);
filterDisplayName->setCheckable(true);
filterDisplayName->setChecked(true);
filterDisplayGroup->addAction(filterDisplayName);
filterMenu->addAction(filterDisplayName);
filterDisplayActivity = new QAction(this);
filterDisplayActivity->setCheckable(true);
filterDisplayGroup->addAction(filterDisplayActivity);
filterMenu->addAction(filterDisplayActivity);
filterMenu->addSeparator();
filterAllAction = new QAction(this);
filterAllAction->setCheckable(true);
filterAllAction->setChecked(true);
filterGroup->addAction(filterAllAction);
filterMenu->addAction(filterAllAction);
filterOnlineAction = new QAction(this);
filterOnlineAction->setCheckable(true);
filterGroup->addAction(filterOnlineAction);
filterMenu->addAction(filterOnlineAction);
filterOfflineAction = new QAction(this);
filterOfflineAction->setCheckable(true);
filterGroup->addAction(filterOfflineAction);
filterMenu->addAction(filterOfflineAction);
filterFriendsAction = new QAction(this);
filterFriendsAction->setCheckable(true);
filterGroup->addAction(filterFriendsAction);
filterMenu->addAction(filterFriendsAction);
filterGroupsAction = new QAction(this);
filterGroupsAction->setCheckable(true);
filterGroup->addAction(filterGroupsAction);
filterMenu->addAction(filterGroupsAction);
ui->searchContactFilterBox->setMenu(filterMenu);
ui->mainContent->setLayout(new QVBoxLayout());
ui->mainHead->setLayout(new QVBoxLayout());
ui->mainHead->layout()->setMargin(0);
@ -205,7 +244,8 @@ void Widget::init()
connect(timer, &QTimer::timeout, this, &Widget::onTryCreateTrayIcon);
connect(offlineMsgTimer, &QTimer::timeout, this, &Widget::processOfflineMsgs);
connect(ui->searchContactText, &QLineEdit::textChanged, this, &Widget::searchContacts);
connect(ui->searchContactFilterCBox, &QComboBox::currentTextChanged, this, &Widget::searchContacts);
connect(filterGroup, &QActionGroup::triggered, this, &Widget::searchContacts);
connect(filterDisplayGroup, &QActionGroup::triggered, this, &Widget::changeDisplayMode);
connect(ui->friendList, &QWidget::customContextMenuRequested, this, &Widget::friendListContextMenu);
// keyboard shortcuts
@ -624,7 +664,7 @@ void Widget::addFriend(int friendId, const QString &userId)
newfriend->getFriendWidget()->onAvatarChange(friendId, avatar);
}
int filter = ui->searchContactFilterCBox->currentIndex();
int filter = getFilterCriteria();
newfriend->getFriendWidget()->search(ui->searchContactText->text(), filterOffline(filter));
}
@ -718,7 +758,7 @@ void Widget::onFriendUsernameChanged(int friendId, const QString& username)
void Widget::onFriendDisplayChanged(FriendWidget *friendWidget, Status s)
{
contactListWidget->moveWidget(friendWidget, s);
int filter = ui->searchContactFilterCBox->currentIndex();
int filter = getFilterCriteria();
switch (s)
{
case Status::Offline:
@ -1016,7 +1056,7 @@ void Widget::onGroupTitleChanged(int groupnumber, const QString& author, const Q
g->getChatForm()->addSystemInfoMessage(tr("%1 has set the title to %2").arg(author, title), ChatMessage::INFO, QDateTime::currentDateTime());
contactListWidget->renameGroupWidget(g->getGroupWidget(), title);
int filter = ui->searchContactFilterCBox->currentIndex();
int filter = getFilterCriteria();
g->getGroupWidget()->searchName(ui->searchContactText->text(), filterGroups(filter));
}
@ -1076,7 +1116,7 @@ Group *Widget::createGroup(int groupId)
connect(newgroup->getChatForm(), &GroupChatForm::sendAction, core, &Core::sendGroupAction);
connect(newgroup->getChatForm(), &GroupChatForm::groupTitleChanged, core, &Core::changeGroupTitle);
int filter = ui->searchContactFilterCBox->currentIndex();
int filter = getFilterCriteria();
newgroup->getGroupWidget()->searchName(ui->searchContactText->text(), filterGroups(filter));
return newgroup;
@ -1436,23 +1476,56 @@ Status Widget::getStatusFromString(QString status)
void Widget::searchContacts()
{
QString searchString = ui->searchContactText->text();
int filter = ui->searchContactFilterCBox->currentIndex();
int filter = getFilterCriteria();
contactListWidget->searchChatrooms(searchString, filterOnline(filter), filterOffline(filter), filterGroups(filter));
updateFilterText();
contactListWidget->reDraw();
}
void Widget::changeDisplayMode()
{
if (filterDisplayGroup->checkedAction() == filterDisplayActivity)
contactListWidget->setMode(FriendListWidget::Activity);
else if (filterDisplayGroup->checkedAction() == filterDisplayName)
contactListWidget->setMode(FriendListWidget::Name);
updateFilterText();
}
void Widget::updateFilterText()
{
ui->searchContactFilterBox->setText(filterDisplayGroup->checkedAction()->text() + QStringLiteral(" | ") + filterGroup->checkedAction()->text());
}
int Widget::getFilterCriteria() const
{
QAction* checked = filterGroup->checkedAction();
if (checked == filterOnlineAction)
return Online;
else if (checked == filterOfflineAction)
return Offline;
else if (checked == filterFriendsAction)
return Friends;
else if (checked == filterGroupsAction)
return Groups;
return All;
}
void Widget::searchCircle(CircleWidget *circleWidget)
{
int filter = ui->searchContactFilterCBox->currentIndex();
int filter = getFilterCriteria();
circleWidget->search(ui->searchContactText->text(), true, filterOnline(filter), filterOffline(filter));
}
void Widget::searchItem(GenericChatItemWidget *chatItem, GenericChatItemWidget::ItemType type)
{
bool hide;
int filter = ui->searchContactFilterCBox->currentIndex();
int filter = getFilterCriteria();
switch (type)
{
case GenericChatItemWidget::GroupItem:
@ -1467,7 +1540,7 @@ void Widget::searchItem(GenericChatItemWidget *chatItem, GenericChatItemWidget::
bool Widget::groupsVisible() const
{
int filter = ui->searchContactFilterCBox->currentIndex();
int filter = getFilterCriteria();
return !filterGroups(filter);
}
@ -1475,20 +1548,10 @@ void Widget::friendListContextMenu(const QPoint &pos)
{
QMenu menu(this);
QAction *addCircleAction = menu.addAction(tr("Add new circle..."));
QAction *switchMode = menu.addAction("Switch between Recent and Name (BETA)");
QAction *chosenAction = menu.exec(ui->friendList->mapToGlobal(pos));
if (chosenAction == addCircleAction)
{
contactListWidget->addCircleWidget();
}
else if (chosenAction == switchMode)
{
if (contactListWidget->getMode() == FriendListWidget::Name)
contactListWidget->setMode(FriendListWidget::Activity);
else
contactListWidget->setMode(FriendListWidget::Name);
}
}
void Widget::setActiveToolMenuButton(ActiveToolMenuButton newActiveButton)
@ -1509,12 +1572,17 @@ void Widget::retranslateUi()
ui->retranslateUi(this);
ui->nameLabel->setText(name);
ui->statusLabel->setText(status);
ui->searchContactFilterCBox->clear();
ui->searchContactFilterCBox->addItem(tr("All"));
ui->searchContactFilterCBox->addItem(tr("Online"));
ui->searchContactFilterCBox->addItem(tr("Offline"));
ui->searchContactFilterCBox->addItem(tr("Friends"));
ui->searchContactFilterCBox->addItem(tr("Groups"));
filterDisplayName->setText(tr("By Name"));
filterDisplayActivity->setText(tr("By Activity"));
filterAllAction->setText(tr("All"));
filterOnlineAction->setText(tr("Online"));
filterOfflineAction->setText(tr("Offline"));
filterFriendsAction->setText(tr("Friends"));
filterGroupsAction->setText(tr("Groups"));
ui->searchContactText->setPlaceholderText(tr("Search Contacts"));
updateFilterText();
ui->searchContactText->setPlaceholderText(tr("Search Contacts"));
statusOnline->setText(tr("Online", "Button to set your status to 'Online'"));
statusAway->setText(tr("Away", "Button to set your status to 'Away'"));

View File

@ -50,6 +50,7 @@ class ProfileForm;
class SettingsWidget;
class AddFriendForm;
class CircleWidget;
class QActionGroup;
class Widget final : public QMainWindow
{
@ -186,6 +187,9 @@ private:
void saveSplitterGeometry();
void cycleContacts(bool forward);
void searchContacts();
void changeDisplayMode();
void updateFilterText();
int getFilterCriteria() const;
static bool filterGroups(int index);
static bool filterOnline(int index);
static bool filterOffline(int index);
@ -194,10 +198,23 @@ private:
private:
SystemTrayIcon *icon;
QMenu *trayMenu;
QAction *statusOnline,
*statusAway,
*statusBusy,
*actionQuit;
QAction *statusOnline;
QAction *statusAway;
QAction *statusBusy;
QAction *actionQuit;
QMenu* filterMenu;
QActionGroup* filterGroup;
QAction* filterAllAction;
QAction* filterOnlineAction;
QAction* filterOfflineAction;
QAction* filterFriendsAction;
QAction* filterGroupsAction;
QActionGroup* filterDisplayGroup;
QAction* filterDisplayName;
QAction* filterDisplayActivity;
Ui::MainWindow *ui;
QSplitter *centralLayout;

View File

@ -7,7 +7,7 @@ QLineEdit
border-radius: 4px;
}
QComboBox {
QToolButton {
background: none;
background-color: @themeMedium;
color: white;
@ -15,14 +15,13 @@ QComboBox {
border-radius: 4px;
}
QComboBox:on {
QToolButton:pressed {
background-color: @themeMediumDark;
border-radius: 4px;
}
QComboBox:drop-down {
border-style: none;
border-radius: 4px;
QToolButton::menu-indicator {
image: none
}
/**