Implement basic ImageMessages in qml timeline
I suck at sizing so the images in the message are currently hardcoded to 300 pixels in width...
This commit is contained in:
parent
ebeb1eb772
commit
86f4119a05
6 changed files with 90 additions and 2 deletions
|
|
@ -58,6 +58,20 @@ eventFormattedBody(const mtx::events::RoomEvent<T> &e)
|
|||
return QString::fromStdString(e.content.body);
|
||||
}
|
||||
|
||||
template<class T>
|
||||
QString
|
||||
eventUrl(const T &)
|
||||
{
|
||||
return "";
|
||||
}
|
||||
template<class T>
|
||||
auto
|
||||
eventUrl(const mtx::events::RoomEvent<T> &e)
|
||||
-> std::enable_if_t<std::is_same<decltype(e.content.url), std::string>::value, QString>
|
||||
{
|
||||
return QString::fromStdString(e.content.url);
|
||||
}
|
||||
|
||||
template<class T>
|
||||
qml_mtx_events::EventType
|
||||
toRoomEventType(const mtx::events::Event<T> &e)
|
||||
|
|
@ -146,6 +160,41 @@ toRoomEventType(const mtx::events::Event<mtx::events::msg::Video> &)
|
|||
}
|
||||
// ::EventType::Type toRoomEventType(const Event<mtx::events::msg::Location> &e) { return
|
||||
// ::EventType::LocationMessage; }
|
||||
|
||||
template<class T>
|
||||
uint64_t
|
||||
eventHeight(const mtx::events::Event<T> &)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
template<class T>
|
||||
auto
|
||||
eventHeight(const mtx::events::RoomEvent<T> &e) -> decltype(e.content.info.h)
|
||||
{
|
||||
return e.content.info.h;
|
||||
}
|
||||
template<class T>
|
||||
uint64_t
|
||||
eventWidth(const mtx::events::Event<T> &)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
template<class T>
|
||||
auto
|
||||
eventWidth(const mtx::events::RoomEvent<T> &e) -> decltype(e.content.info.w)
|
||||
{
|
||||
return e.content.info.w;
|
||||
}
|
||||
|
||||
template<class T>
|
||||
double
|
||||
eventPropHeight(const mtx::events::RoomEvent<T> &e)
|
||||
{
|
||||
auto w = eventWidth(e);
|
||||
if (w == 0)
|
||||
w = 1;
|
||||
return eventHeight(e) / (double)w;
|
||||
}
|
||||
}
|
||||
|
||||
TimelineModel::TimelineModel(QString room_id, QObject *parent)
|
||||
|
|
@ -167,6 +216,10 @@ TimelineModel::roleNames() const
|
|||
{UserId, "userId"},
|
||||
{UserName, "userName"},
|
||||
{Timestamp, "timestamp"},
|
||||
{Url, "url"},
|
||||
{Height, "height"},
|
||||
{Width, "width"},
|
||||
{ProportionalHeight, "proportionalHeight"},
|
||||
};
|
||||
}
|
||||
int
|
||||
|
|
@ -228,6 +281,19 @@ TimelineModel::data(const QModelIndex &index, int role) const
|
|||
return QVariant(utils::replaceEmoji(boost::apply_visitor(
|
||||
[](const auto &e) -> QString { return eventFormattedBody(e); },
|
||||
events.value(id))));
|
||||
case Url:
|
||||
return QVariant(boost::apply_visitor(
|
||||
[](const auto &e) -> QString { return eventUrl(e); }, events.value(id)));
|
||||
case Height:
|
||||
return QVariant(boost::apply_visitor(
|
||||
[](const auto &e) -> qulonglong { return eventHeight(e); }, events.value(id)));
|
||||
case Width:
|
||||
return QVariant(boost::apply_visitor(
|
||||
[](const auto &e) -> qulonglong { return eventWidth(e); }, events.value(id)));
|
||||
case ProportionalHeight:
|
||||
return QVariant(boost::apply_visitor(
|
||||
[](const auto &e) -> double { return eventPropHeight(e); }, events.value(id)));
|
||||
|
||||
default:
|
||||
return QVariant();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue