mirror of https://github.com/procxx/kepka.git
Support saved messages in filters edit.
This commit is contained in:
parent
48f67d27f1
commit
0063edb14f
|
@ -234,19 +234,35 @@ void FilterChatsPreview::paintEvent(QPaintEvent *e) {
|
|||
top += st.height;
|
||||
}
|
||||
for (const auto &[history, button] : _removePeer) {
|
||||
history->peer->paintUserpicLeft(
|
||||
p,
|
||||
iconLeft,
|
||||
top + iconTop,
|
||||
width(),
|
||||
st.photoSize);
|
||||
p.setPen(st::contactsNameFg);
|
||||
history->peer->nameText().drawLeftElided(
|
||||
p,
|
||||
nameLeft,
|
||||
top + nameTop,
|
||||
button->x() - nameLeft,
|
||||
width());
|
||||
const auto savedMessages = history->peer->isSelf();
|
||||
if (savedMessages) {
|
||||
Ui::EmptyUserpic::PaintSavedMessages(
|
||||
p,
|
||||
iconLeft,
|
||||
top + iconTop,
|
||||
width(),
|
||||
st.photoSize);
|
||||
p.setPen(st::contactsNameFg);
|
||||
p.drawTextLeft(
|
||||
nameLeft,
|
||||
top + nameTop,
|
||||
width(),
|
||||
tr::lng_saved_messages(tr::now));
|
||||
} else {
|
||||
history->peer->paintUserpicLeft(
|
||||
p,
|
||||
iconLeft,
|
||||
top + iconTop,
|
||||
width(),
|
||||
st.photoSize);
|
||||
p.setPen(st::contactsNameFg);
|
||||
history->peer->nameText().drawLeftElided(
|
||||
p,
|
||||
nameLeft,
|
||||
top + nameTop,
|
||||
button->x() - nameLeft,
|
||||
width());
|
||||
}
|
||||
top += st.height;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -52,6 +52,16 @@ private:
|
|||
|
||||
};
|
||||
|
||||
class ExceptionRow final : public ChatsListBoxController::Row {
|
||||
public:
|
||||
explicit ExceptionRow(not_null<History*> history);
|
||||
|
||||
QString generateName() override;
|
||||
QString generateShortName() override;
|
||||
PaintRoundImageCallback generatePaintUserpicCallback() override;
|
||||
|
||||
};
|
||||
|
||||
class TypeDelegate final : public PeerListContentDelegate {
|
||||
public:
|
||||
void peerListSetTitle(rpl::producer<QString> title) override;
|
||||
|
@ -151,6 +161,34 @@ Flag TypeRow::flag() const {
|
|||
return static_cast<Flag>(id() & 0xFF);
|
||||
}
|
||||
|
||||
ExceptionRow::ExceptionRow(not_null<History*> history) : Row(history) {
|
||||
if (peer()->isSelf()) {
|
||||
setCustomStatus(tr::lng_saved_forward_here(tr::now));
|
||||
}
|
||||
}
|
||||
|
||||
QString ExceptionRow::generateName() {
|
||||
return peer()->isSelf()
|
||||
? tr::lng_saved_messages(tr::now)
|
||||
: Row::generateName();
|
||||
}
|
||||
|
||||
QString ExceptionRow::generateShortName() {
|
||||
return generateName();
|
||||
}
|
||||
|
||||
PaintRoundImageCallback ExceptionRow::generatePaintUserpicCallback() {
|
||||
const auto peer = this->peer();
|
||||
const auto saved = peer->isSelf();
|
||||
return [=](Painter &p, int x, int y, int outerWidth, int size) {
|
||||
if (saved) {
|
||||
Ui::EmptyUserpic::PaintSavedMessages(p, x, y, outerWidth, size);
|
||||
} else {
|
||||
peer->paintUserpicLeft(p, x, y, outerWidth, size);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
void TypeDelegate::peerListSetTitle(rpl::producer<QString> title) {
|
||||
}
|
||||
|
||||
|
@ -349,8 +387,19 @@ bool EditFilterChatsListController::handleDeselectForeignRow(
|
|||
void EditFilterChatsListController::prepareViewHook() {
|
||||
delegate()->peerListSetTitle(std::move(_title));
|
||||
delegate()->peerListSetAboveWidget(prepareTypesList());
|
||||
delegate()->peerListAddSelectedPeers(
|
||||
_peers | ranges::view::transform(&History::peer));
|
||||
|
||||
const auto count = int(_peers.size());
|
||||
const auto rows = std::make_unique<std::optional<ExceptionRow>[]>(count);
|
||||
auto i = 0;
|
||||
for (const auto history : _peers) {
|
||||
rows[i++].emplace(history);
|
||||
}
|
||||
auto pointers = std::vector<ExceptionRow*>();
|
||||
pointers.reserve(count);
|
||||
for (auto i = 0; i != count; ++i) {
|
||||
pointers.push_back(&*rows[i]);
|
||||
}
|
||||
delegate()->peerListAddSelectedRows(pointers);
|
||||
updateTitle();
|
||||
}
|
||||
|
||||
|
@ -416,7 +465,9 @@ object_ptr<Ui::RpWidget> EditFilterChatsListController::prepareTypesList() {
|
|||
|
||||
auto EditFilterChatsListController::createRow(not_null<History*> history)
|
||||
-> std::unique_ptr<Row> {
|
||||
return history->inChatList() ? std::make_unique<Row>(history) : nullptr;
|
||||
return history->inChatList()
|
||||
? std::make_unique<ExceptionRow>(history)
|
||||
: nullptr;
|
||||
}
|
||||
|
||||
void EditFilterChatsListController::updateTitle() {
|
||||
|
|
|
@ -87,14 +87,6 @@ private:
|
|||
|
||||
class ChatsListBoxController : public PeerListController {
|
||||
public:
|
||||
ChatsListBoxController(not_null<Window::SessionNavigation*> navigation);
|
||||
ChatsListBoxController(
|
||||
std::unique_ptr<PeerListSearchController> searchController);
|
||||
|
||||
void prepare() override final;
|
||||
std::unique_ptr<PeerListRow> createSearchRow(not_null<PeerData*> peer) override final;
|
||||
|
||||
protected:
|
||||
class Row : public PeerListRow {
|
||||
public:
|
||||
Row(not_null<History*> history);
|
||||
|
@ -107,6 +99,15 @@ protected:
|
|||
not_null<History*> _history;
|
||||
|
||||
};
|
||||
|
||||
ChatsListBoxController(not_null<Window::SessionNavigation*> navigation);
|
||||
ChatsListBoxController(
|
||||
std::unique_ptr<PeerListSearchController> searchController);
|
||||
|
||||
void prepare() override final;
|
||||
std::unique_ptr<PeerListRow> createSearchRow(not_null<PeerData*> peer) override final;
|
||||
|
||||
protected:
|
||||
virtual std::unique_ptr<Row> createRow(not_null<History*> history) = 0;
|
||||
virtual void prepareViewHook() = 0;
|
||||
virtual void updateRowHook(not_null<Row*> row) {
|
||||
|
|
Loading…
Reference in New Issue