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:
@@ -2325,4 +2325,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
|
||||
"ktg_user_status_unaccessible" = "account inaccessible";
|
||||
|
||||
"ktg_settings_chat_list_compact" = "Compact chat list";
|
||||
|
||||
// Keys finished
|
||||
|
@@ -80,5 +80,6 @@
|
||||
"ktg_outdated_now": "Чтобы приложение Kotatogram могло получать обновления.",
|
||||
"ktg_mac_menu_show": "Показать Kotatogram",
|
||||
"ktg_manage_peer_subscribers": "Подписчики",
|
||||
"ktg_user_status_unaccessible": "аккаунт недоступен"
|
||||
"ktg_user_status_unaccessible": "аккаунт недоступен",
|
||||
"ktg_settings_chat_list_compact": "Компактный список чатов"
|
||||
}
|
||||
|
@@ -217,7 +217,7 @@ bool Manager::readCustomFile() {
|
||||
if (settingsChatListLinesIt != settings.constEnd()) {
|
||||
const auto settingsChatListLines = (*settingsChatListLinesIt).toInt();
|
||||
if (settingsChatListLines >= 1 || settingsChatListLines <= 2) {
|
||||
cSetDialogListLines(settingsChatListLines);
|
||||
SetDialogListLines(settingsChatListLines);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
@@ -254,7 +254,7 @@ void Manager::writeDefaultFile() {
|
||||
settings.insert(qsl("show_chat_id"), cShowChatId());
|
||||
settings.insert(qsl("net_speed_boost"), QJsonValue(QJsonValue::Null));
|
||||
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();
|
||||
settings.insert(qsl("scales"), settingsScales);
|
||||
@@ -307,7 +307,7 @@ void Manager::writeCurrentSettings() {
|
||||
settings.insert(qsl("show_chat_id"), cShowChatId());
|
||||
settings.insert(qsl("net_speed_boost"), cNetSpeedBoost());
|
||||
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 currentScales = cInterfaceScales();
|
||||
|
@@ -54,11 +54,11 @@ constexpr auto kHashtagResultsLimit = 5;
|
||||
constexpr auto kStartReorderThreshold = 30;
|
||||
|
||||
inline int DialogsRowHeight() {
|
||||
return (cDialogListLines() == 1 ? st::dialogsImportantBarHeight : st::dialogsRowHeight);
|
||||
return (DialogListLines() == 1 ? st::dialogsImportantBarHeight : st::dialogsRowHeight);
|
||||
}
|
||||
|
||||
inline int DialogsPhotoSize() {
|
||||
return (cDialogListLines() == 1 ? st::dialogsUnreadHeight : st::dialogsPhotoSize);
|
||||
return (DialogListLines() == 1 ? st::dialogsUnreadHeight : st::dialogsPhotoSize);
|
||||
}
|
||||
|
||||
int FixedOnTopDialogsCount(not_null<Dialogs::IndexedList*> list) {
|
||||
@@ -209,6 +209,11 @@ InnerWidget::InnerWidget(
|
||||
refresh();
|
||||
}, lifetime());
|
||||
|
||||
DialogListLinesChanges(
|
||||
) | rpl::start_with_next([=] {
|
||||
refresh();
|
||||
}, lifetime());
|
||||
|
||||
subscribe(Window::Theme::Background(), [=](const Window::Theme::BackgroundUpdate &data) {
|
||||
if (data.paletteChanged()) {
|
||||
Layout::clearUnreadBadgesCache();
|
||||
@@ -295,7 +300,7 @@ void InnerWidget::refreshWithCollapsedRows(bool toTop) {
|
||||
? (*list->begin())->folder()
|
||||
: nullptr;
|
||||
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) {
|
||||
_selected = nullptr;
|
||||
}
|
||||
@@ -2162,7 +2167,7 @@ bool InnerWidget::needCollapsedRowsRefresh() const {
|
||||
const auto collapsedHasArchive = !_collapsedRows.empty()
|
||||
&& (_collapsedRows.back()->folder != nullptr);
|
||||
const auto archiveIsCollapsed = (archive != nullptr)
|
||||
&& (session().settings().archiveCollapsed() || cDialogListLines() == 1);
|
||||
&& (session().settings().archiveCollapsed() || DialogListLines() == 1);
|
||||
const auto archiveIsInMainMenu = (archive != nullptr)
|
||||
&& session().settings().archiveInMainMenu();
|
||||
return archiveIsInMainMenu
|
||||
|
@@ -85,7 +85,7 @@ void PaintNarrowCounter(
|
||||
? QString::number(unreadCount)
|
||||
: QString();
|
||||
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
|
||||
? st::dialogsPadding.y()
|
||||
: st::dialogsPadding.y() + st::dialogsPhotoSize - st::dialogsUnreadHeight);
|
||||
@@ -99,7 +99,7 @@ void PaintNarrowCounter(
|
||||
}
|
||||
if (displayMentionBadge) {
|
||||
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
|
||||
? st::dialogsPadding.y()
|
||||
: st::dialogsPadding.y() + st::dialogsPhotoSize - st::dialogsUnreadHeight);
|
||||
@@ -831,7 +831,7 @@ void RowPainter::paint(
|
||||
? history->hasUnreadMentions()
|
||||
: false;
|
||||
const auto displayUnreadCounter = [&] {
|
||||
if (fullWidth < st::columnMinimalWidthLeft && cDialogListLines() == 1) {
|
||||
if (fullWidth < st::columnMinimalWidthLeft && DialogListLines() == 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -865,7 +865,7 @@ void RowPainter::paint(
|
||||
| (allowUserOnline ? Flag::AllowUserOnline : Flag(0))
|
||||
| (peer && peer->isSelf() ? Flag::SavedMessages : Flag(0));
|
||||
const auto paintItemCallback = [&](int nameleft, int namewidth) {
|
||||
const auto texttop = (cDialogListLines() == 1
|
||||
const auto texttop = (DialogListLines() == 1
|
||||
? st::dialogsPadding.y()
|
||||
: st::dialogsPadding.y()
|
||||
+ st::msgNameFont->height
|
||||
@@ -885,7 +885,7 @@ void RowPainter::paint(
|
||||
selected,
|
||||
unreadMuted,
|
||||
mentionMuted);
|
||||
if (cDialogListLines() > 1 || flags & Flag::SearchResult) {
|
||||
if (DialogListLines() > 1 || flags & Flag::SearchResult) {
|
||||
const auto &color = active
|
||||
? st::dialogsTextFgServiceActive
|
||||
: (selected
|
||||
@@ -930,9 +930,9 @@ void RowPainter::paint(
|
||||
active,
|
||||
unreadMuted,
|
||||
mentionMuted,
|
||||
cDialogListLines());
|
||||
DialogListLines());
|
||||
};
|
||||
if (cDialogListLines() == 1) {
|
||||
if (DialogListLines() == 1) {
|
||||
paintOneLineRow(
|
||||
p,
|
||||
row,
|
||||
@@ -1029,7 +1029,7 @@ void RowPainter::paint(
|
||||
| (showSavedMessages ? Flag::SavedMessages : Flag(0))/* // #feed
|
||||
| (row->searchInChat().feed() ? Flag::FeedSearchResult : Flag(0))*/;
|
||||
const auto paintItemCallback = [&](int nameleft, int namewidth) {
|
||||
const auto texttop = (cDialogListLines() == 1
|
||||
const auto texttop = (DialogListLines() == 1
|
||||
? st::dialogsPadding.y()
|
||||
: st::dialogsPadding.y()
|
||||
+ st::msgNameFont->height
|
||||
@@ -1049,7 +1049,7 @@ void RowPainter::paint(
|
||||
unreadMuted,
|
||||
mentionMuted);
|
||||
|
||||
if (cDialogListLines() > 1 || flags & Flag::SearchResult) {
|
||||
if (DialogListLines() > 1 || flags & Flag::SearchResult) {
|
||||
const auto itemRect = QRect(
|
||||
nameleft,
|
||||
texttop,
|
||||
@@ -1077,9 +1077,9 @@ void RowPainter::paint(
|
||||
active,
|
||||
unreadMuted,
|
||||
mentionMuted,
|
||||
cDialogListLines());
|
||||
DialogListLines());
|
||||
};
|
||||
if (cDialogListLines() == 1) {
|
||||
if (DialogListLines() == 1) {
|
||||
paintOneLineRow(
|
||||
p,
|
||||
row,
|
||||
@@ -1115,7 +1115,7 @@ void RowPainter::paint(
|
||||
}
|
||||
|
||||
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 texttop = st::dialogsPadding.y() + st::msgNameFont->height + st::dialogsSkip;
|
||||
return QRect(nameleft, texttop, textUpdated ? namewidth : animationWidth, animationHeight);
|
||||
|
@@ -146,7 +146,7 @@ void BasicRow::PaintOnlineFrame(
|
||||
q,
|
||||
0,
|
||||
0,
|
||||
(cDialogListLines() == 1 ? st::dialogsUnreadHeight : st::dialogsPhotoSize));
|
||||
(DialogListLines() == 1 ? st::dialogsUnreadHeight : st::dialogsPhotoSize));
|
||||
|
||||
PainterHighQualityEnabler hq(q);
|
||||
q.setCompositionMode(QPainter::CompositionMode_Source);
|
||||
@@ -154,7 +154,7 @@ void BasicRow::PaintOnlineFrame(
|
||||
const auto size = st::dialogsOnlineBadgeSize;
|
||||
const auto stroke = st::dialogsOnlineBadgeStroke;
|
||||
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);
|
||||
|
||||
auto pen = QPen(Qt::transparent);
|
||||
@@ -182,13 +182,13 @@ void BasicRow::paintUserpic(
|
||||
const auto online = _onlineUserpic
|
||||
? _onlineUserpic->animation.value(_online ? 1. : 0.)
|
||||
: (_online ? 1. : 0.);
|
||||
if (!allowOnline || cDialogListLines() == 1 || online == 0.) {
|
||||
if (!allowOnline || DialogListLines() == 1 || online == 0.) {
|
||||
peer->paintUserpicLeft(
|
||||
p,
|
||||
st::dialogsPadding.x(),
|
||||
st::dialogsPadding.y(),
|
||||
fullWidth,
|
||||
(cDialogListLines() == 1 ? st::dialogsUnreadHeight : st::dialogsPhotoSize));
|
||||
(DialogListLines() == 1 ? st::dialogsUnreadHeight : st::dialogsPhotoSize));
|
||||
if (!allowOnline || !_online) {
|
||||
_onlineUserpic = nullptr;
|
||||
}
|
||||
@@ -197,8 +197,8 @@ void BasicRow::paintUserpic(
|
||||
ensureOnlineUserpic();
|
||||
if (_onlineUserpic->frame.isNull()) {
|
||||
_onlineUserpic->frame = QImage(
|
||||
(cDialogListLines() == 1 ? st::dialogsUnreadHeight : st::dialogsPhotoSize) * cRetinaFactor(),
|
||||
(cDialogListLines() == 1 ? st::dialogsUnreadHeight : st::dialogsPhotoSize) * cRetinaFactor(),
|
||||
(DialogListLines() == 1 ? st::dialogsUnreadHeight : st::dialogsPhotoSize) * cRetinaFactor(),
|
||||
(DialogListLines() == 1 ? st::dialogsUnreadHeight : st::dialogsPhotoSize) * cRetinaFactor(),
|
||||
QImage::Format_ARGB32_Premultiplied);
|
||||
_onlineUserpic->frame.setDevicePixelRatio(cRetinaFactor());
|
||||
}
|
||||
|
@@ -1446,7 +1446,7 @@ void Widget::updateControlsGeometry() {
|
||||
_forwardCancel->moveToLeft(0, filterAreaTop);
|
||||
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 filterLeft = st::dialogsFilterPadding.x() + _mainMenuToggle->width() + 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) {
|
||||
int32 st = _scroll->scrollTop();
|
||||
if (st > movedTo && st < movedFrom) {
|
||||
_scroll->scrollToY(st + (cDialogListLines() == 1 ? st::dialogsImportantBarHeight : st::dialogsRowHeight));
|
||||
_scroll->scrollToY(st + (DialogListLines() == 1 ? st::dialogsImportantBarHeight : st::dialogsRowHeight));
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -263,4 +263,13 @@ void ClearCustomScales() {
|
||||
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();
|
||||
}
|
||||
|
@@ -226,4 +226,7 @@ DeclareRefSetting(ScaleVector, InterfaceScales);
|
||||
bool HasCustomScales();
|
||||
bool AddCustomScale(int scale);
|
||||
void ClearCustomScales();
|
||||
DeclareSetting(int, DialogListLines);
|
||||
|
||||
void SetDialogListLines(int lines);
|
||||
[[nodiscard]] int DialogListLines();
|
||||
[[nodiscard]] rpl::producer<int> DialogListLinesChanges();
|
@@ -110,6 +110,20 @@ void SetupKotatoChats(not_null<Ui::VerticalLayout*> container) {
|
||||
KotatoSettings::Write();
|
||||
}, 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(
|
||||
container,
|
||||
tr::ktg_settings_always_show_scheduled(),
|
||||
|
@@ -620,7 +620,7 @@ void FolderFiller::addTogglesForArchive() {
|
||||
return;
|
||||
}
|
||||
const auto controller = _controller;
|
||||
if (cDialogListLines() != 1) {
|
||||
if (DialogListLines() != 1) {
|
||||
const auto hidden = (controller->session().settings().archiveCollapsed());
|
||||
const auto text = hidden
|
||||
? tr::lng_context_archive_expand(tr::now)
|
||||
|
@@ -309,7 +309,7 @@ bool SessionController::isGifPausedAtLeastFor(GifPauseReason reason) 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 {
|
||||
|
Reference in New Issue
Block a user