Generialize radiobutton options box
This commit is contained in:
parent
789ef6e6f8
commit
7189332b74
6 changed files with 194 additions and 127 deletions
|
|
@ -617,8 +617,8 @@ PRIVATE
|
||||||
kotato/boxes/confirm_box.h
|
kotato/boxes/confirm_box.h
|
||||||
kotato/boxes/fonts_box.cpp
|
kotato/boxes/fonts_box.cpp
|
||||||
kotato/boxes/fonts_box.h
|
kotato/boxes/fonts_box.h
|
||||||
kotato/boxes/net_boost_box.cpp
|
kotato/boxes/radio_box.cpp
|
||||||
kotato/boxes/net_boost_box.h
|
kotato/boxes/radio_box.h
|
||||||
kotato/boxes/unpin_box.cpp
|
kotato/boxes/unpin_box.cpp
|
||||||
kotato/boxes/unpin_box.h
|
kotato/boxes/unpin_box.h
|
||||||
kotato/json_settings.cpp
|
kotato/json_settings.cpp
|
||||||
|
|
|
||||||
|
|
@ -1,89 +0,0 @@
|
||||||
/*
|
|
||||||
This file is part of Telegram Desktop,
|
|
||||||
the official desktop application for the Telegram messaging service.
|
|
||||||
|
|
||||||
For license and copyright information please follow this link:
|
|
||||||
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|
||||||
*/
|
|
||||||
#include "kotato/boxes/net_boost_box.h"
|
|
||||||
|
|
||||||
#include "lang/lang_keys.h"
|
|
||||||
#include "ui/widgets/checkbox.h"
|
|
||||||
#include "ui/widgets/labels.h"
|
|
||||||
#include "styles/style_layers.h"
|
|
||||||
#include "styles/style_boxes.h"
|
|
||||||
#include "boxes/confirm_box.h"
|
|
||||||
#include "kotato/json_settings.h"
|
|
||||||
#include "app.h"
|
|
||||||
|
|
||||||
NetBoostBox::NetBoostBox(QWidget* parent)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void NetBoostBox::prepare() {
|
|
||||||
setTitle(tr::ktg_net_speed_boost_title());
|
|
||||||
|
|
||||||
addButton(tr::lng_settings_save(), [=] { save(); });
|
|
||||||
addButton(tr::lng_cancel(), [=] { closeBox(); });
|
|
||||||
|
|
||||||
auto y = st::boxOptionListPadding.top();
|
|
||||||
_description.create(
|
|
||||||
this,
|
|
||||||
tr::ktg_net_speed_boost_desc(tr::now),
|
|
||||||
st::boxLabel);
|
|
||||||
_description->moveToLeft(st::boxPadding.left(), y);
|
|
||||||
|
|
||||||
y += _description->height() + st::boxMediumSkip;
|
|
||||||
|
|
||||||
_boostGroup = std::make_shared<Ui::RadiobuttonGroup>(cNetSpeedBoost());
|
|
||||||
|
|
||||||
for (int i = 0; i <= 3; i++) {
|
|
||||||
const auto button = Ui::CreateChild<Ui::Radiobutton>(
|
|
||||||
this,
|
|
||||||
_boostGroup,
|
|
||||||
i,
|
|
||||||
BoostLabel(i),
|
|
||||||
st::autolockButton);
|
|
||||||
button->moveToLeft(st::boxPadding.left(), y);
|
|
||||||
y += button->heightNoMargins() + st::boxOptionListSkip;
|
|
||||||
}
|
|
||||||
showChildren();
|
|
||||||
setDimensions(st::boxWidth, y);
|
|
||||||
}
|
|
||||||
|
|
||||||
QString NetBoostBox::BoostLabel(int boost) {
|
|
||||||
switch (boost) {
|
|
||||||
case 0:
|
|
||||||
return tr::ktg_net_speed_boost_default(tr::now);
|
|
||||||
|
|
||||||
case 1:
|
|
||||||
return tr::ktg_net_speed_boost_slight(tr::now);
|
|
||||||
|
|
||||||
case 2:
|
|
||||||
return tr::ktg_net_speed_boost_medium(tr::now);
|
|
||||||
|
|
||||||
case 3:
|
|
||||||
return tr::ktg_net_speed_boost_big(tr::now);
|
|
||||||
|
|
||||||
default:
|
|
||||||
Unexpected("Boost in NetBoostBox::BoostLabel.");
|
|
||||||
}
|
|
||||||
return QString();
|
|
||||||
}
|
|
||||||
|
|
||||||
void NetBoostBox::save() {
|
|
||||||
const auto changeBoost = [=] {
|
|
||||||
SetNetworkBoost(_boostGroup->value());
|
|
||||||
Kotato::JsonSettings::Write();
|
|
||||||
App::restart();
|
|
||||||
};
|
|
||||||
|
|
||||||
const auto box = std::make_shared<QPointer<BoxContent>>();
|
|
||||||
|
|
||||||
*box = getDelegate()->show(
|
|
||||||
Box<ConfirmBox>(
|
|
||||||
tr::ktg_net_boost_restart_desc(tr::now),
|
|
||||||
tr::lng_settings_restart_now(tr::now),
|
|
||||||
tr::lng_cancel(tr::now),
|
|
||||||
changeBoost));
|
|
||||||
}
|
|
||||||
|
|
@ -1,33 +0,0 @@
|
||||||
/*
|
|
||||||
This file is part of Kotatogram Desktop,
|
|
||||||
the unofficial app based on Telegram Desktop.
|
|
||||||
|
|
||||||
For license and copyright information please follow this link:
|
|
||||||
https://github.com/kotatogram/kotatogram-desktop/blob/dev/LEGAL
|
|
||||||
*/
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include "boxes/abstract_box.h"
|
|
||||||
|
|
||||||
namespace Ui {
|
|
||||||
class RadiobuttonGroup;
|
|
||||||
class Radiobutton;
|
|
||||||
class FlatLabel;
|
|
||||||
} // namespace Ui
|
|
||||||
|
|
||||||
class NetBoostBox : public Ui::BoxContent {
|
|
||||||
public:
|
|
||||||
NetBoostBox(QWidget* parent);
|
|
||||||
|
|
||||||
static QString BoostLabel(int boost);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
void prepare() override;
|
|
||||||
|
|
||||||
private:
|
|
||||||
void save();
|
|
||||||
|
|
||||||
object_ptr<Ui::FlatLabel> _description = { nullptr };
|
|
||||||
std::shared_ptr<Ui::RadiobuttonGroup> _boostGroup;
|
|
||||||
|
|
||||||
};
|
|
||||||
109
Telegram/SourceFiles/kotato/boxes/radio_box.cpp
Normal file
109
Telegram/SourceFiles/kotato/boxes/radio_box.cpp
Normal file
|
|
@ -0,0 +1,109 @@
|
||||||
|
/*
|
||||||
|
This file is part of Kotatogram Desktop,
|
||||||
|
the unofficial app based on Telegram Desktop.
|
||||||
|
|
||||||
|
For license and copyright information please follow this link:
|
||||||
|
https://github.com/kotatogram/kotatogram-desktop/blob/dev/LEGAL
|
||||||
|
*/
|
||||||
|
#include "kotato/boxes/radio_box.h"
|
||||||
|
|
||||||
|
#include "lang/lang_keys.h"
|
||||||
|
#include "ui/wrap/vertical_layout.h"
|
||||||
|
#include "ui/widgets/checkbox.h"
|
||||||
|
#include "ui/widgets/labels.h"
|
||||||
|
#include "boxes/confirm_box.h"
|
||||||
|
#include "styles/style_layers.h"
|
||||||
|
#include "styles/style_boxes.h"
|
||||||
|
#include "kotato/json_settings.h"
|
||||||
|
#include "app.h"
|
||||||
|
|
||||||
|
namespace Kotato {
|
||||||
|
|
||||||
|
RadioBox::RadioBox(
|
||||||
|
QWidget*,
|
||||||
|
const QString &title,
|
||||||
|
int currentValue,
|
||||||
|
const QMap<int, QString> &options,
|
||||||
|
Fn<void(int)> saveCallback,
|
||||||
|
bool warnRestart)
|
||||||
|
: _title(title)
|
||||||
|
, _startValue(currentValue)
|
||||||
|
, _options(options)
|
||||||
|
, _saveCallback(std::move(saveCallback))
|
||||||
|
, _warnRestart(warnRestart) {
|
||||||
|
}
|
||||||
|
|
||||||
|
RadioBox::RadioBox(
|
||||||
|
QWidget*,
|
||||||
|
const QString &title,
|
||||||
|
const QString &description,
|
||||||
|
int currentValue,
|
||||||
|
const QMap<int, QString> &options,
|
||||||
|
Fn<void(int)> saveCallback,
|
||||||
|
bool warnRestart)
|
||||||
|
: _title(title)
|
||||||
|
, _description(description)
|
||||||
|
, _startValue(currentValue)
|
||||||
|
, _options(options)
|
||||||
|
, _saveCallback(std::move(saveCallback))
|
||||||
|
, _warnRestart(warnRestart) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void RadioBox::prepare() {
|
||||||
|
setTitle(rpl::single(_title));
|
||||||
|
|
||||||
|
addButton(tr::lng_settings_save(), [=] { save(); });
|
||||||
|
addButton(tr::lng_cancel(), [=] { closeBox(); });
|
||||||
|
|
||||||
|
const auto content = Ui::CreateChild<Ui::VerticalLayout>(this);
|
||||||
|
|
||||||
|
if (!_description.isEmpty()) {
|
||||||
|
content->add(
|
||||||
|
object_ptr<Ui::FlatLabel>(this, _description, st::boxLabel),
|
||||||
|
style::margins(
|
||||||
|
st::boxPadding.left(),
|
||||||
|
st::boxPadding.bottom(),
|
||||||
|
st::boxPadding.right(),
|
||||||
|
st::boxPadding.bottom()));
|
||||||
|
}
|
||||||
|
|
||||||
|
_group = std::make_shared<Ui::RadiobuttonGroup>(_startValue);
|
||||||
|
|
||||||
|
for (auto i = _options.constBegin(); i != _options.constEnd(); ++i) {
|
||||||
|
content->add(
|
||||||
|
object_ptr<Ui::Radiobutton>(
|
||||||
|
this,
|
||||||
|
_group,
|
||||||
|
i.key(),
|
||||||
|
i.value(),
|
||||||
|
st::autolockButton),
|
||||||
|
style::margins(
|
||||||
|
st::boxPadding.left(),
|
||||||
|
st::boxPadding.bottom(),
|
||||||
|
st::boxPadding.right(),
|
||||||
|
st::boxPadding.bottom()));
|
||||||
|
}
|
||||||
|
|
||||||
|
setDimensionsToContent(st::boxWidth, content);
|
||||||
|
}
|
||||||
|
|
||||||
|
void RadioBox::save() {
|
||||||
|
if (_warnRestart) {
|
||||||
|
const auto saveAfterWarn = [=] {
|
||||||
|
_saveCallback(_group->value());
|
||||||
|
};
|
||||||
|
|
||||||
|
const auto box = std::make_shared<QPointer<BoxContent>>();
|
||||||
|
|
||||||
|
*box = getDelegate()->show(
|
||||||
|
Box<ConfirmBox>(
|
||||||
|
tr::lng_settings_need_restart(tr::now),
|
||||||
|
tr::lng_settings_restart_now(tr::now),
|
||||||
|
tr::lng_cancel(tr::now),
|
||||||
|
saveAfterWarn));
|
||||||
|
} else {
|
||||||
|
_saveCallback(_group->value());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace Kotato
|
||||||
40
Telegram/SourceFiles/kotato/boxes/radio_box.h
Normal file
40
Telegram/SourceFiles/kotato/boxes/radio_box.h
Normal file
|
|
@ -0,0 +1,40 @@
|
||||||
|
/*
|
||||||
|
This file is part of Kotatogram Desktop,
|
||||||
|
the unofficial app based on Telegram Desktop.
|
||||||
|
|
||||||
|
For license and copyright information please follow this link:
|
||||||
|
https://github.com/kotatogram/kotatogram-desktop/blob/dev/LEGAL
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "boxes/abstract_box.h"
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class RadiobuttonGroup;
|
||||||
|
class Radiobutton;
|
||||||
|
class FlatLabel;
|
||||||
|
} // namespace Ui
|
||||||
|
|
||||||
|
namespace Kotato {
|
||||||
|
|
||||||
|
class RadioBox : public Ui::BoxContent {
|
||||||
|
public:
|
||||||
|
RadioBox(QWidget* parent, const QString &title, int currentValue, const QMap<int, QString> &options, Fn<void(int)> saveCallback, bool warnRestart = false);
|
||||||
|
RadioBox(QWidget* parent, const QString &title, const QString &description, int currentValue, const QMap<int, QString> &options, Fn<void(int)> saveCallback, bool warnRestart = false);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void prepare() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
void save();
|
||||||
|
|
||||||
|
QString _title;
|
||||||
|
QString _description;
|
||||||
|
int _startValue;
|
||||||
|
QMap<int, QString> _options;
|
||||||
|
Fn<void(int)> _saveCallback;
|
||||||
|
bool _warnRestart = false;
|
||||||
|
std::shared_ptr<Ui::RadiobuttonGroup> _group;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace Kotato
|
||||||
|
|
@ -18,7 +18,7 @@ https://github.com/kotatogram/kotatogram-desktop/blob/dev/LEGAL
|
||||||
#include "ui/text/text_utilities.h" // Ui::Text::ToUpper
|
#include "ui/text/text_utilities.h" // Ui::Text::ToUpper
|
||||||
#include "boxes/connection_box.h"
|
#include "boxes/connection_box.h"
|
||||||
#include "kotato/boxes/fonts_box.h"
|
#include "kotato/boxes/fonts_box.h"
|
||||||
#include "kotato/boxes/net_boost_box.h"
|
#include "kotato/boxes/radio_box.h"
|
||||||
#include "boxes/about_box.h"
|
#include "boxes/about_box.h"
|
||||||
#include "boxes/confirm_box.h"
|
#include "boxes/confirm_box.h"
|
||||||
#include "platform/platform_specific.h"
|
#include "platform/platform_specific.h"
|
||||||
|
|
@ -38,6 +38,30 @@ https://github.com/kotatogram/kotatogram-desktop/blob/dev/LEGAL
|
||||||
|
|
||||||
namespace Settings {
|
namespace Settings {
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
QString NetBoostLabel(int boost) {
|
||||||
|
switch (boost) {
|
||||||
|
case 0:
|
||||||
|
return tr::ktg_net_speed_boost_default(tr::now);
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
return tr::ktg_net_speed_boost_slight(tr::now);
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
return tr::ktg_net_speed_boost_medium(tr::now);
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
return tr::ktg_net_speed_boost_big(tr::now);
|
||||||
|
|
||||||
|
default:
|
||||||
|
Unexpected("Boost in Settings::NetBoostLabel.");
|
||||||
|
}
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace
|
||||||
|
|
||||||
#define SettingsMenuСSwitch(LangKey, Option) AddButton( \
|
#define SettingsMenuСSwitch(LangKey, Option) AddButton( \
|
||||||
container, \
|
container, \
|
||||||
tr::LangKey(), \
|
tr::LangKey(), \
|
||||||
|
|
@ -192,13 +216,29 @@ void SetupKotatoNetwork(not_null<Ui::VerticalLayout*> container) {
|
||||||
AddSkip(container);
|
AddSkip(container);
|
||||||
AddSubsectionTitle(container, tr::ktg_settings_network());
|
AddSubsectionTitle(container, tr::ktg_settings_network());
|
||||||
|
|
||||||
|
const QMap<int, QString> netBoostOptions = {
|
||||||
|
{ 0, NetBoostLabel(0) },
|
||||||
|
{ 1, NetBoostLabel(1) },
|
||||||
|
{ 2, NetBoostLabel(2) },
|
||||||
|
{ 3, NetBoostLabel(3) }
|
||||||
|
};
|
||||||
|
|
||||||
AddButtonWithLabel(
|
AddButtonWithLabel(
|
||||||
container,
|
container,
|
||||||
tr::ktg_settings_net_speed_boost(),
|
tr::ktg_settings_net_speed_boost(),
|
||||||
rpl::single(NetBoostBox::BoostLabel(cNetSpeedBoost())),
|
rpl::single(NetBoostLabel(cNetSpeedBoost())),
|
||||||
st::settingsButton
|
st::settingsButton
|
||||||
)->addClickHandler([=] {
|
)->addClickHandler([=] {
|
||||||
Ui::show(Box<NetBoostBox>());
|
Ui::show(Box<::Kotato::RadioBox>(
|
||||||
|
tr::ktg_net_speed_boost_title(tr::now),
|
||||||
|
tr::ktg_net_speed_boost_desc(tr::now),
|
||||||
|
cNetSpeedBoost(),
|
||||||
|
netBoostOptions,
|
||||||
|
[=] (int value) {
|
||||||
|
SetNetworkBoost(value);
|
||||||
|
::Kotato::JsonSettings::Write();
|
||||||
|
App::restart();
|
||||||
|
}, true));
|
||||||
});
|
});
|
||||||
|
|
||||||
AddSkip(container);
|
AddSkip(container);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue