Fix fast messages UI: icons, animation crash, keybind count, ru translation
- Use st::settingsButton (with icon padding) instead of settingsButtonNoIcon so the Rounded icon background doesn't overlap the button label - Rebuild slots via CountStr.changes() + InvokeQueued to avoid deleting widgets from within their own click handlers (fixes _active.empty() assert) - Filter keybind entries to Count() active slots via settings_shortcuts.cpp (stock worktree edit, part of fast-messages-shortcuts patch) - Add lng_shortcuts_fast_message Russian translation to ag_lang blob Generated with [Devin](https://cli.devin.ai/docs) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
parent
45133a2ecb
commit
34f1f1218b
3 changed files with 29 additions and 20 deletions
|
|
@ -22,6 +22,7 @@
|
|||
"ag_fast_messages_placeholder" = "Текст сообщения";
|
||||
"ag_fast_messages_add" = "Добавить слот";
|
||||
"ag_fast_messages_remove" = "Удалить слот";
|
||||
"lng_shortcuts_fast_message" = "Быстрое сообщение {index}";
|
||||
"ag_settings_appearance" = "Внешний вид чата";
|
||||
"ag_settings_sync_title" = "Облачная синхронизация";
|
||||
"ag_sync_enabled_setting" = "Включить облачную синхронизацию";
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ constexpr auto kRuStrings = R"strings(
|
|||
"ag_fast_messages_placeholder" = "Текст сообщения";
|
||||
"ag_fast_messages_add" = "Добавить слот";
|
||||
"ag_fast_messages_remove" = "Удалить слот";
|
||||
"lng_shortcuts_fast_message" = "Быстрое сообщение {index}";
|
||||
"ag_settings_appearance" = "Внешний вид чата";
|
||||
"ag_settings_sync_title" = "Облачная синхронизация";
|
||||
"ag_sync_enabled_setting" = "Включить облачную синхронизацию";
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
#include "apiwrap.h"
|
||||
#include "arcanegram/ag_config.h"
|
||||
#include "arcanegram/ui/ag_settings_main.h"
|
||||
#include "base/invoke_queued.h"
|
||||
#include "data/data_peer.h"
|
||||
#include "data/data_session.h"
|
||||
#include "history/history.h"
|
||||
|
|
@ -26,21 +27,18 @@ namespace {
|
|||
using namespace ::Settings;
|
||||
using namespace ::Settings::Builder;
|
||||
|
||||
void Rebuild(not_null<Ui::VerticalLayout*> container) {
|
||||
while (container->count()) {
|
||||
delete container->widgetAt(0);
|
||||
}
|
||||
void FillSlots(not_null<Ui::VerticalLayout*> wrap, not_null<Ui::VerticalLayout*> outer) {
|
||||
const auto count = Config::FastMessages::Count();
|
||||
for (auto i = 0; i < count; ++i) {
|
||||
auto &item = Config::FastMessages::Slot(i);
|
||||
Ui::AddSubsectionTitle(
|
||||
container,
|
||||
wrap,
|
||||
tr::ag_fast_messages_slot(
|
||||
lt_index,
|
||||
rpl::single(QString::number(i + 1))));
|
||||
const auto field = container->add(
|
||||
const auto field = wrap->add(
|
||||
object_ptr<Ui::InputField>(
|
||||
container,
|
||||
wrap,
|
||||
st::agFastMessageField,
|
||||
tr::ag_fast_messages_placeholder(),
|
||||
item.value()),
|
||||
|
|
@ -54,17 +52,16 @@ void Rebuild(not_null<Ui::VerticalLayout*> container) {
|
|||
}, field->lifetime());
|
||||
const auto idx = i;
|
||||
::Settings::AddButtonWithIcon(
|
||||
container,
|
||||
wrap,
|
||||
tr::ag_fast_messages_remove(),
|
||||
st::settingsButtonNoIcon,
|
||||
st::settingsButton,
|
||||
{ &st::menuIconDelete }
|
||||
)->setClickedCallback([container, idx] {
|
||||
)->setClickedCallback([outer, idx] {
|
||||
Config::FastMessages::RemoveSlot(idx);
|
||||
Rebuild(container);
|
||||
container->resizeToWidth(container->width());
|
||||
outer->resizeToWidth(outer->width());
|
||||
});
|
||||
Ui::AddSkip(container);
|
||||
Ui::AddDivider(container);
|
||||
Ui::AddSkip(wrap);
|
||||
Ui::AddDivider(wrap);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -82,23 +79,33 @@ private:
|
|||
|
||||
void BuildPage(SectionBuilder &builder) {
|
||||
const auto outer = builder.container();
|
||||
const auto inner = outer->add(object_ptr<Ui::VerticalLayout>(outer));
|
||||
Rebuild(inner);
|
||||
|
||||
const auto slotWrap = outer->add(object_ptr<Ui::VerticalLayout>(outer));
|
||||
FillSlots(slotWrap, outer);
|
||||
|
||||
Config::FastMessages::CountStr.changes(
|
||||
) | rpl::on_next([outer, slotWrap](auto) {
|
||||
InvokeQueued(slotWrap, [outer, slotWrap] {
|
||||
while (slotWrap->count()) {
|
||||
delete slotWrap->widgetAt(0);
|
||||
}
|
||||
FillSlots(slotWrap, outer);
|
||||
slotWrap->resizeToWidth(slotWrap->width());
|
||||
});
|
||||
}, slotWrap->lifetime());
|
||||
|
||||
Ui::AddSkip(outer);
|
||||
::Settings::AddButtonWithIcon(
|
||||
outer,
|
||||
tr::ag_fast_messages_add(),
|
||||
st::settingsButtonNoIcon,
|
||||
st::settingsButton,
|
||||
{ &st::menuIconAdd }
|
||||
)->setClickedCallback([inner] {
|
||||
)->setClickedCallback([outer] {
|
||||
const auto count = Config::FastMessages::Count();
|
||||
if (count >= Config::FastMessages::kSlotCount) {
|
||||
return;
|
||||
}
|
||||
Config::FastMessages::SetCount(count + 1);
|
||||
Rebuild(inner);
|
||||
inner->resizeToWidth(inner->width());
|
||||
});
|
||||
|
||||
Ui::AddSkip(outer);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue