2
0
mirror of https://github.com/kotatogram/kotatogram-desktop synced 2025-09-02 23:55:12 +00:00

Add compact mode option to settings menu

This commit is contained in:
RadRussianRus
2019-11-13 19:14:03 +03:00
parent 8a3dc4d199
commit 753faf3a41
12 changed files with 66 additions and 32 deletions

View File

@@ -2325,4 +2325,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"ktg_user_status_unaccessible" = "account inaccessible"; "ktg_user_status_unaccessible" = "account inaccessible";
"ktg_settings_chat_list_compact" = "Compact chat list";
// Keys finished // Keys finished

View File

@@ -80,5 +80,6 @@
"ktg_outdated_now": "Чтобы приложение Kotatogram могло получать обновления.", "ktg_outdated_now": "Чтобы приложение Kotatogram могло получать обновления.",
"ktg_mac_menu_show": "Показать Kotatogram", "ktg_mac_menu_show": "Показать Kotatogram",
"ktg_manage_peer_subscribers": "Подписчики", "ktg_manage_peer_subscribers": "Подписчики",
"ktg_user_status_unaccessible": "аккаунт недоступен" "ktg_user_status_unaccessible": "аккаунт недоступен",
"ktg_settings_chat_list_compact": "Компактный список чатов"
} }

View File

@@ -217,7 +217,7 @@ bool Manager::readCustomFile() {
if (settingsChatListLinesIt != settings.constEnd()) { if (settingsChatListLinesIt != settings.constEnd()) {
const auto settingsChatListLines = (*settingsChatListLinesIt).toInt(); const auto settingsChatListLines = (*settingsChatListLinesIt).toInt();
if (settingsChatListLines >= 1 || settingsChatListLines <= 2) { if (settingsChatListLines >= 1 || settingsChatListLines <= 2) {
cSetDialogListLines(settingsChatListLines); SetDialogListLines(settingsChatListLines);
} }
} }
return true; return true;
@@ -254,7 +254,7 @@ void Manager::writeDefaultFile() {
settings.insert(qsl("show_chat_id"), cShowChatId()); settings.insert(qsl("show_chat_id"), cShowChatId());
settings.insert(qsl("net_speed_boost"), QJsonValue(QJsonValue::Null)); settings.insert(qsl("net_speed_boost"), QJsonValue(QJsonValue::Null));
settings.insert(qsl("show_phone_in_drawer"), cShowPhoneInDrawer()); settings.insert(qsl("show_phone_in_drawer"), cShowPhoneInDrawer());
settings.insert(qsl("chat_list_lines"), cDialogListLines()); settings.insert(qsl("chat_list_lines"), DialogListLines());
auto settingsScales = QJsonArray(); auto settingsScales = QJsonArray();
settings.insert(qsl("scales"), settingsScales); settings.insert(qsl("scales"), settingsScales);
@@ -307,7 +307,7 @@ void Manager::writeCurrentSettings() {
settings.insert(qsl("show_chat_id"), cShowChatId()); settings.insert(qsl("show_chat_id"), cShowChatId());
settings.insert(qsl("net_speed_boost"), cNetSpeedBoost()); settings.insert(qsl("net_speed_boost"), cNetSpeedBoost());
settings.insert(qsl("show_phone_in_drawer"), cShowPhoneInDrawer()); settings.insert(qsl("show_phone_in_drawer"), cShowPhoneInDrawer());
settings.insert(qsl("chat_list_lines"), cDialogListLines()); settings.insert(qsl("chat_list_lines"), DialogListLines());
auto settingsScales = QJsonArray(); auto settingsScales = QJsonArray();
auto currentScales = cInterfaceScales(); auto currentScales = cInterfaceScales();

View File

@@ -54,11 +54,11 @@ constexpr auto kHashtagResultsLimit = 5;
constexpr auto kStartReorderThreshold = 30; constexpr auto kStartReorderThreshold = 30;
inline int DialogsRowHeight() { inline int DialogsRowHeight() {
return (cDialogListLines() == 1 ? st::dialogsImportantBarHeight : st::dialogsRowHeight); return (DialogListLines() == 1 ? st::dialogsImportantBarHeight : st::dialogsRowHeight);
} }
inline int DialogsPhotoSize() { inline int DialogsPhotoSize() {
return (cDialogListLines() == 1 ? st::dialogsUnreadHeight : st::dialogsPhotoSize); return (DialogListLines() == 1 ? st::dialogsUnreadHeight : st::dialogsPhotoSize);
} }
int FixedOnTopDialogsCount(not_null<Dialogs::IndexedList*> list) { int FixedOnTopDialogsCount(not_null<Dialogs::IndexedList*> list) {
@@ -209,6 +209,11 @@ InnerWidget::InnerWidget(
refresh(); refresh();
}, lifetime()); }, lifetime());
DialogListLinesChanges(
) | rpl::start_with_next([=] {
refresh();
}, lifetime());
subscribe(Window::Theme::Background(), [=](const Window::Theme::BackgroundUpdate &data) { subscribe(Window::Theme::Background(), [=](const Window::Theme::BackgroundUpdate &data) {
if (data.paletteChanged()) { if (data.paletteChanged()) {
Layout::clearUnreadBadgesCache(); Layout::clearUnreadBadgesCache();
@@ -295,7 +300,7 @@ void InnerWidget::refreshWithCollapsedRows(bool toTop) {
? (*list->begin())->folder() ? (*list->begin())->folder()
: nullptr; : nullptr;
const auto inMainMenu = session().settings().archiveInMainMenu(); const auto inMainMenu = session().settings().archiveInMainMenu();
if (archive && (session().settings().archiveCollapsed() || inMainMenu || cDialogListLines() == 1)) { if (archive && (session().settings().archiveCollapsed() || inMainMenu || DialogListLines() == 1)) {
if (_selected && _selected->folder() == archive) { if (_selected && _selected->folder() == archive) {
_selected = nullptr; _selected = nullptr;
} }
@@ -2162,7 +2167,7 @@ bool InnerWidget::needCollapsedRowsRefresh() const {
const auto collapsedHasArchive = !_collapsedRows.empty() const auto collapsedHasArchive = !_collapsedRows.empty()
&& (_collapsedRows.back()->folder != nullptr); && (_collapsedRows.back()->folder != nullptr);
const auto archiveIsCollapsed = (archive != nullptr) const auto archiveIsCollapsed = (archive != nullptr)
&& (session().settings().archiveCollapsed() || cDialogListLines() == 1); && (session().settings().archiveCollapsed() || DialogListLines() == 1);
const auto archiveIsInMainMenu = (archive != nullptr) const auto archiveIsInMainMenu = (archive != nullptr)
&& session().settings().archiveInMainMenu(); && session().settings().archiveInMainMenu();
return archiveIsInMainMenu return archiveIsInMainMenu

View File

@@ -85,7 +85,7 @@ void PaintNarrowCounter(
? QString::number(unreadCount) ? QString::number(unreadCount)
: QString(); : QString();
const auto allowDigits = displayMentionBadge ? 1 : 3; const auto allowDigits = displayMentionBadge ? 1 : 3;
auto unreadRight = st::dialogsPadding.x() + (cDialogListLines() == 1 ? st::dialogsUnreadHeight : st::dialogsPhotoSize); auto unreadRight = st::dialogsPadding.x() + (DialogListLines() == 1 ? st::dialogsUnreadHeight : st::dialogsPhotoSize);
auto unreadTop = (lines == 1 auto unreadTop = (lines == 1
? st::dialogsPadding.y() ? st::dialogsPadding.y()
: st::dialogsPadding.y() + st::dialogsPhotoSize - st::dialogsUnreadHeight); : st::dialogsPadding.y() + st::dialogsPhotoSize - st::dialogsUnreadHeight);
@@ -99,7 +99,7 @@ void PaintNarrowCounter(
} }
if (displayMentionBadge) { if (displayMentionBadge) {
auto counter = qsl("@"); auto counter = qsl("@");
auto unreadRight = st::dialogsPadding.x() + (cDialogListLines() == 1 ? st::dialogsUnreadHeight : st::dialogsPhotoSize) - skipBeforeMention; auto unreadRight = st::dialogsPadding.x() + (DialogListLines() == 1 ? st::dialogsUnreadHeight : st::dialogsPhotoSize) - skipBeforeMention;
auto unreadTop = (lines == 1 auto unreadTop = (lines == 1
? st::dialogsPadding.y() ? st::dialogsPadding.y()
: st::dialogsPadding.y() + st::dialogsPhotoSize - st::dialogsUnreadHeight); : st::dialogsPadding.y() + st::dialogsPhotoSize - st::dialogsUnreadHeight);
@@ -831,7 +831,7 @@ void RowPainter::paint(
? history->hasUnreadMentions() ? history->hasUnreadMentions()
: false; : false;
const auto displayUnreadCounter = [&] { const auto displayUnreadCounter = [&] {
if (fullWidth < st::columnMinimalWidthLeft && cDialogListLines() == 1) { if (fullWidth < st::columnMinimalWidthLeft && DialogListLines() == 1) {
return false; return false;
} }
@@ -865,7 +865,7 @@ void RowPainter::paint(
| (allowUserOnline ? Flag::AllowUserOnline : Flag(0)) | (allowUserOnline ? Flag::AllowUserOnline : Flag(0))
| (peer && peer->isSelf() ? Flag::SavedMessages : Flag(0)); | (peer && peer->isSelf() ? Flag::SavedMessages : Flag(0));
const auto paintItemCallback = [&](int nameleft, int namewidth) { const auto paintItemCallback = [&](int nameleft, int namewidth) {
const auto texttop = (cDialogListLines() == 1 const auto texttop = (DialogListLines() == 1
? st::dialogsPadding.y() ? st::dialogsPadding.y()
: st::dialogsPadding.y() : st::dialogsPadding.y()
+ st::msgNameFont->height + st::msgNameFont->height
@@ -885,7 +885,7 @@ void RowPainter::paint(
selected, selected,
unreadMuted, unreadMuted,
mentionMuted); mentionMuted);
if (cDialogListLines() > 1 || flags & Flag::SearchResult) { if (DialogListLines() > 1 || flags & Flag::SearchResult) {
const auto &color = active const auto &color = active
? st::dialogsTextFgServiceActive ? st::dialogsTextFgServiceActive
: (selected : (selected
@@ -930,9 +930,9 @@ void RowPainter::paint(
active, active,
unreadMuted, unreadMuted,
mentionMuted, mentionMuted,
cDialogListLines()); DialogListLines());
}; };
if (cDialogListLines() == 1) { if (DialogListLines() == 1) {
paintOneLineRow( paintOneLineRow(
p, p,
row, row,
@@ -1029,7 +1029,7 @@ void RowPainter::paint(
| (showSavedMessages ? Flag::SavedMessages : Flag(0))/* // #feed | (showSavedMessages ? Flag::SavedMessages : Flag(0))/* // #feed
| (row->searchInChat().feed() ? Flag::FeedSearchResult : Flag(0))*/; | (row->searchInChat().feed() ? Flag::FeedSearchResult : Flag(0))*/;
const auto paintItemCallback = [&](int nameleft, int namewidth) { const auto paintItemCallback = [&](int nameleft, int namewidth) {
const auto texttop = (cDialogListLines() == 1 const auto texttop = (DialogListLines() == 1
? st::dialogsPadding.y() ? st::dialogsPadding.y()
: st::dialogsPadding.y() : st::dialogsPadding.y()
+ st::msgNameFont->height + st::msgNameFont->height
@@ -1049,7 +1049,7 @@ void RowPainter::paint(
unreadMuted, unreadMuted,
mentionMuted); mentionMuted);
if (cDialogListLines() > 1 || flags & Flag::SearchResult) { if (DialogListLines() > 1 || flags & Flag::SearchResult) {
const auto itemRect = QRect( const auto itemRect = QRect(
nameleft, nameleft,
texttop, texttop,
@@ -1077,9 +1077,9 @@ void RowPainter::paint(
active, active,
unreadMuted, unreadMuted,
mentionMuted, mentionMuted,
cDialogListLines()); DialogListLines());
}; };
if (cDialogListLines() == 1) { if (DialogListLines() == 1) {
paintOneLineRow( paintOneLineRow(
p, p,
row, row,
@@ -1115,7 +1115,7 @@ void RowPainter::paint(
} }
QRect RowPainter::sendActionAnimationRect(int animationWidth, int animationHeight, int fullWidth, bool textUpdated) { QRect RowPainter::sendActionAnimationRect(int animationWidth, int animationHeight, int fullWidth, bool textUpdated) {
auto nameleft = st::dialogsPadding.x() + (cDialogListLines() == 1 ? st::dialogsUnreadHeight : st::dialogsPhotoSize) + st::dialogsPhotoPadding; auto nameleft = st::dialogsPadding.x() + (DialogListLines() == 1 ? st::dialogsUnreadHeight : st::dialogsPhotoSize) + st::dialogsPhotoPadding;
auto namewidth = fullWidth - nameleft - st::dialogsPadding.x(); auto namewidth = fullWidth - nameleft - st::dialogsPadding.x();
auto texttop = st::dialogsPadding.y() + st::msgNameFont->height + st::dialogsSkip; auto texttop = st::dialogsPadding.y() + st::msgNameFont->height + st::dialogsSkip;
return QRect(nameleft, texttop, textUpdated ? namewidth : animationWidth, animationHeight); return QRect(nameleft, texttop, textUpdated ? namewidth : animationWidth, animationHeight);

View File

@@ -146,7 +146,7 @@ void BasicRow::PaintOnlineFrame(
q, q,
0, 0,
0, 0,
(cDialogListLines() == 1 ? st::dialogsUnreadHeight : st::dialogsPhotoSize)); (DialogListLines() == 1 ? st::dialogsUnreadHeight : st::dialogsPhotoSize));
PainterHighQualityEnabler hq(q); PainterHighQualityEnabler hq(q);
q.setCompositionMode(QPainter::CompositionMode_Source); q.setCompositionMode(QPainter::CompositionMode_Source);
@@ -154,7 +154,7 @@ void BasicRow::PaintOnlineFrame(
const auto size = st::dialogsOnlineBadgeSize; const auto size = st::dialogsOnlineBadgeSize;
const auto stroke = st::dialogsOnlineBadgeStroke; const auto stroke = st::dialogsOnlineBadgeStroke;
const auto skip = st::dialogsOnlineBadgeSkip; const auto skip = st::dialogsOnlineBadgeSkip;
const auto edge = st::dialogsPadding.x() + (cDialogListLines() == 1 ? st::dialogsUnreadHeight : st::dialogsPhotoSize); const auto edge = st::dialogsPadding.x() + (DialogListLines() == 1 ? st::dialogsUnreadHeight : st::dialogsPhotoSize);
const auto shrink = (size / 2) * (1. - data->online); const auto shrink = (size / 2) * (1. - data->online);
auto pen = QPen(Qt::transparent); auto pen = QPen(Qt::transparent);
@@ -182,13 +182,13 @@ void BasicRow::paintUserpic(
const auto online = _onlineUserpic const auto online = _onlineUserpic
? _onlineUserpic->animation.value(_online ? 1. : 0.) ? _onlineUserpic->animation.value(_online ? 1. : 0.)
: (_online ? 1. : 0.); : (_online ? 1. : 0.);
if (!allowOnline || cDialogListLines() == 1 || online == 0.) { if (!allowOnline || DialogListLines() == 1 || online == 0.) {
peer->paintUserpicLeft( peer->paintUserpicLeft(
p, p,
st::dialogsPadding.x(), st::dialogsPadding.x(),
st::dialogsPadding.y(), st::dialogsPadding.y(),
fullWidth, fullWidth,
(cDialogListLines() == 1 ? st::dialogsUnreadHeight : st::dialogsPhotoSize)); (DialogListLines() == 1 ? st::dialogsUnreadHeight : st::dialogsPhotoSize));
if (!allowOnline || !_online) { if (!allowOnline || !_online) {
_onlineUserpic = nullptr; _onlineUserpic = nullptr;
} }
@@ -197,8 +197,8 @@ void BasicRow::paintUserpic(
ensureOnlineUserpic(); ensureOnlineUserpic();
if (_onlineUserpic->frame.isNull()) { if (_onlineUserpic->frame.isNull()) {
_onlineUserpic->frame = QImage( _onlineUserpic->frame = QImage(
(cDialogListLines() == 1 ? st::dialogsUnreadHeight : st::dialogsPhotoSize) * cRetinaFactor(), (DialogListLines() == 1 ? st::dialogsUnreadHeight : st::dialogsPhotoSize) * cRetinaFactor(),
(cDialogListLines() == 1 ? st::dialogsUnreadHeight : st::dialogsPhotoSize) * cRetinaFactor(), (DialogListLines() == 1 ? st::dialogsUnreadHeight : st::dialogsPhotoSize) * cRetinaFactor(),
QImage::Format_ARGB32_Premultiplied); QImage::Format_ARGB32_Premultiplied);
_onlineUserpic->frame.setDevicePixelRatio(cRetinaFactor()); _onlineUserpic->frame.setDevicePixelRatio(cRetinaFactor());
} }

View File

@@ -1446,7 +1446,7 @@ void Widget::updateControlsGeometry() {
_forwardCancel->moveToLeft(0, filterAreaTop); _forwardCancel->moveToLeft(0, filterAreaTop);
filterAreaTop += st::dialogsForwardHeight; filterAreaTop += st::dialogsForwardHeight;
} }
auto smallLayoutWidth = (st::dialogsPadding.x() + (cDialogListLines() == 1 ? st::dialogsUnreadHeight : st::dialogsPhotoSize) + st::dialogsPadding.x()); auto smallLayoutWidth = (st::dialogsPadding.x() + (DialogListLines() == 1 ? st::dialogsUnreadHeight : st::dialogsPhotoSize) + st::dialogsPadding.x());
auto smallLayoutRatio = (width() < st::columnMinimalWidthLeft) ? (st::columnMinimalWidthLeft - width()) / float64(st::columnMinimalWidthLeft - smallLayoutWidth) : 0.; auto smallLayoutRatio = (width() < st::columnMinimalWidthLeft) ? (st::columnMinimalWidthLeft - width()) / float64(st::columnMinimalWidthLeft - smallLayoutWidth) : 0.;
auto filterLeft = st::dialogsFilterPadding.x() + _mainMenuToggle->width() + st::dialogsFilterPadding.x(); auto filterLeft = st::dialogsFilterPadding.x() + _mainMenuToggle->width() + st::dialogsFilterPadding.x();
auto filterRight = (Global::LocalPasscode() ? (st::dialogsFilterPadding.x() + _lockUnlock->width()) : st::dialogsFilterSkip) + st::dialogsFilterPadding.x(); auto filterRight = (Global::LocalPasscode() ? (st::dialogsFilterPadding.x() + _lockUnlock->width()) : st::dialogsFilterSkip) + st::dialogsFilterPadding.x();
@@ -1668,7 +1668,7 @@ void Widget::onCancelSearchInChat() {
void Widget::onDialogMoved(int movedFrom, int movedTo) { void Widget::onDialogMoved(int movedFrom, int movedTo) {
int32 st = _scroll->scrollTop(); int32 st = _scroll->scrollTop();
if (st > movedTo && st < movedFrom) { if (st > movedTo && st < movedFrom) {
_scroll->scrollToY(st + (cDialogListLines() == 1 ? st::dialogsImportantBarHeight : st::dialogsRowHeight)); _scroll->scrollToY(st + (DialogListLines() == 1 ? st::dialogsImportantBarHeight : st::dialogsRowHeight));
} }
} }

View File

@@ -263,4 +263,13 @@ void ClearCustomScales() {
gInterfaceScales.clear(); gInterfaceScales.clear();
} }
int gDialogListLines = 2; rpl::variable<int> gDialogListLines = 2;
void SetDialogListLines(int lines) {
gDialogListLines = lines;
}
int DialogListLines() {
return gDialogListLines.current();
}
rpl::producer<int> DialogListLinesChanges() {
return gDialogListLines.changes();
}

View File

@@ -226,4 +226,7 @@ DeclareRefSetting(ScaleVector, InterfaceScales);
bool HasCustomScales(); bool HasCustomScales();
bool AddCustomScale(int scale); bool AddCustomScale(int scale);
void ClearCustomScales(); void ClearCustomScales();
DeclareSetting(int, DialogListLines);
void SetDialogListLines(int lines);
[[nodiscard]] int DialogListLines();
[[nodiscard]] rpl::producer<int> DialogListLinesChanges();

View File

@@ -110,6 +110,20 @@ void SetupKotatoChats(not_null<Ui::VerticalLayout*> container) {
KotatoSettings::Write(); KotatoSettings::Write();
}, container->lifetime()); }, container->lifetime());
AddButton(
container,
tr::ktg_settings_chat_list_compact(),
st::settingsButton
)->toggleOn(
rpl::single(DialogListLines() == 1)
)->toggledValue(
) | rpl::filter([](bool enabled) {
return (enabled != (DialogListLines() == 1));
}) | rpl::start_with_next([](bool enabled) {
SetDialogListLines(enabled ? 1 : 2);
KotatoSettings::Write();
}, container->lifetime());
AddButton( AddButton(
container, container,
tr::ktg_settings_always_show_scheduled(), tr::ktg_settings_always_show_scheduled(),

View File

@@ -620,7 +620,7 @@ void FolderFiller::addTogglesForArchive() {
return; return;
} }
const auto controller = _controller; const auto controller = _controller;
if (cDialogListLines() != 1) { if (DialogListLines() != 1) {
const auto hidden = (controller->session().settings().archiveCollapsed()); const auto hidden = (controller->session().settings().archiveCollapsed());
const auto text = hidden const auto text = hidden
? tr::lng_context_archive_expand(tr::now) ? tr::lng_context_archive_expand(tr::now)

View File

@@ -309,7 +309,7 @@ bool SessionController::isGifPausedAtLeastFor(GifPauseReason reason) const {
} }
int SessionController::dialogsSmallColumnWidth() const { int SessionController::dialogsSmallColumnWidth() const {
return st::dialogsPadding.x() + (cDialogListLines() == 1 ? st::dialogsUnreadHeight : st::dialogsPhotoSize) + st::dialogsPadding.x(); return st::dialogsPadding.x() + (DialogListLines() == 1 ? st::dialogsUnreadHeight : st::dialogsPhotoSize) + st::dialogsPadding.x();
} }
int SessionController::minimalThreeColumnWidth() const { int SessionController::minimalThreeColumnWidth() const {