Show some special filter icons.

This commit is contained in:
John Preston 2020-03-06 17:12:22 +04:00
parent 48d790de5e
commit fcfb268677
2 changed files with 56 additions and 5 deletions

View File

@ -1501,7 +1501,7 @@ void Widget::updateControlsGeometry() {
}
auto smallLayoutWidth = (st::dialogsPadding.x() + st::dialogsPhotoSize + st::dialogsPadding.x());
auto smallLayoutRatio = (width() < st::columnMinimalWidthLeft) ? (st::columnMinimalWidthLeft - width()) / float64(st::columnMinimalWidthLeft - smallLayoutWidth) : 0.;
auto filterLeft = (controller()->filtersWidth() ? 0 : st::dialogsFilterPadding.x() + _mainMenuToggle->width()) + st::dialogsFilterPadding.x();
auto filterLeft = (controller()->filtersWidth() ? st::dialogsFilterSkip : st::dialogsFilterPadding.x() + _mainMenuToggle->width()) + st::dialogsFilterPadding.x();
auto filterRight = (Global::LocalPasscode() ? (st::dialogsFilterPadding.x() + _lockUnlock->width()) : st::dialogsFilterSkip) + st::dialogsFilterPadding.x();
auto filterWidth = qMax(width(), st::columnMinimalWidthLeft) - filterLeft - filterRight;
auto filterAreaHeight = st::topBarHeight;

View File

@ -16,6 +16,55 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "styles/style_window.h"
namespace Window {
namespace {
enum class Type {
Unread,
Unmuted,
Custom,
};
[[nodiscard]] Type ComputeType(const Data::ChatFilter &filter) {
using Flag = Data::ChatFilter::Flag;
const auto all = Flag::Contacts
| Flag::NonContacts
| Flag::Groups
| Flag::Broadcasts
| Flag::Bots
| Flag::NoArchive;
if (!filter.always().empty()) {
return Type::Custom;
} else if (filter.flags() == (all | Flag::NoRead)) {
return Type::Unread;
} else if (filter.flags() == (all | Flag::NoMuted)) {
return Type::Unmuted;
}
return Type::Custom;
}
[[nodiscard]] std::array<const style::icon*, 2> ComputeIcons(Type type) {
switch (type) {
case Type::Unread:
return {
&st::windowFiltersUnread,
&st::windowFiltersUnreadActive
};
case Type::Unmuted:
return {
&st::windowFiltersUnmuted,
&st::windowFiltersUnmutedActive
};
case Type::Custom:
return {
&st::windowFiltersCustom,
&st::windowFiltersCustomActive
};
}
Unexpected("Filter type in FiltersMenu::refresh.");
}
} // namespace
FiltersMenu::FiltersMenu(
not_null<Ui::RpWidget*> parent,
@ -73,18 +122,20 @@ void FiltersMenu::refresh() {
QString::number(0),
"All Chats",
QString(),
&st::windowFiltersCustom,
&st::windowFiltersCustomActive,
&st::windowFiltersAll,
&st::windowFiltersAllActive,
st::windowFiltersIconTop
});
const auto filters = &_session->session().data().chatsFilters();
for (const auto &filter : filters->list()) {
const auto type = ComputeType(filter);
const auto icons = ComputeIcons(type);
items.push_back({
QString::number(filter.id()),
filter.title(),
QString(),
&st::windowFiltersCustom,
&st::windowFiltersCustomActive,
icons[0],
icons[1],
st::windowFiltersIconTop
});
}