mirror of
https://github.com/telegramdesktop/tdesktop
synced 2025-09-05 00:46:08 +00:00
ClickHandler, TopBarWidget and Overview layouts moved to separate files.
Xcode and QtCreator builds are currently broken.
This commit is contained in:
@@ -21,7 +21,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
|
||||
#include "stdafx.h"
|
||||
|
||||
#include "lang.h"
|
||||
#include "window.h"
|
||||
#include "mainwindow.h"
|
||||
#include "mainwidget.h"
|
||||
#include "overviewwidget.h"
|
||||
#include "boxes/addcontactbox.h"
|
||||
@@ -29,6 +29,9 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
|
||||
#include "boxes/photocropbox.h"
|
||||
#include "application.h"
|
||||
#include "ui/filedialog.h"
|
||||
#include "playerwidget.h"
|
||||
#include "window/top_bar_widget.h"
|
||||
#include "overview/overview_layout.h"
|
||||
|
||||
// flick scroll taken from http://qt-project.org/doc/qt-4.8/demos-embedded-anomaly-src-flickcharm-cpp.html
|
||||
|
||||
@@ -333,7 +336,7 @@ void OverviewInner::moveToNextItem(MsgId &msgId, int32 &index, MsgId upTo, int32
|
||||
}
|
||||
|
||||
index += delta;
|
||||
while (index >= 0 && index < _items.size() && !_items.at(index)->toLayoutMediaItem()) {
|
||||
while (index >= 0 && index < _items.size() && !_items.at(index)->toMediaItem()) {
|
||||
index += (delta > 0) ? 1 : -1;
|
||||
}
|
||||
if (index < 0 || index >= _items.size()) {
|
||||
@@ -354,7 +357,7 @@ void OverviewInner::repaintItem(MsgId itemId, int32 itemIndex) {
|
||||
int32 row = (_photosToAdd + shownAtIndex) / _photosInRow, col = (_photosToAdd + shownAtIndex) % _photosInRow;
|
||||
update(int32(col * w), _marginTop + int32(row * vsize), qCeil(w), vsize);
|
||||
} else {
|
||||
int32 top = _items.at(itemIndex)->Get<OverviewItemInfo>()->top;
|
||||
int32 top = _items.at(itemIndex)->Get<Overview::Layout::Info>()->top;
|
||||
if (_reversed) top = _height - top;
|
||||
update(_rowsLeft, _marginTop + top, _rowWidth, _items.at(itemIndex)->height());
|
||||
}
|
||||
@@ -698,7 +701,7 @@ QPoint OverviewInner::mapMouseToItem(QPoint p, MsgId itemId, int32 itemIndex) {
|
||||
p.setX(p.x() - int32(col * w) - st::overviewPhotoSkip);
|
||||
p.setY(p.y() - _marginTop - row * (_rowWidth + st::overviewPhotoSkip) - st::overviewPhotoSkip);
|
||||
} else {
|
||||
int32 top = _items.at(itemIndex)->Get<OverviewItemInfo>()->top;
|
||||
int32 top = _items.at(itemIndex)->Get<Overview::Layout::Info>()->top;
|
||||
if (_reversed) top = _height - top;
|
||||
p.setY(p.y() - _marginTop - top);
|
||||
}
|
||||
@@ -734,7 +737,7 @@ int32 OverviewInner::itemTop(const FullMsgId &msgId) const {
|
||||
int32 itemIndex = -1;
|
||||
fixItemIndex(itemIndex, (msgId.channel == _channel) ? msgId.msg : ((_migrated && msgId.channel == _migrated->channelId()) ? -msgId.msg : 0));
|
||||
if (itemIndex >= 0) {
|
||||
int32 top = _items.at(itemIndex)->Get<OverviewItemInfo>()->top;
|
||||
int32 top = _items.at(itemIndex)->Get<Overview::Layout::Info>()->top;
|
||||
if (_reversed) top = _height - top;
|
||||
return _marginTop + top;
|
||||
}
|
||||
@@ -785,7 +788,7 @@ uint32 OverviewInner::itemSelectedValue(int32 index) const {
|
||||
selfrom = _dragSelToIndex;
|
||||
selto = _dragSelFromIndex;
|
||||
}
|
||||
if (_items.at(index)->toLayoutMediaItem()) { // draw item
|
||||
if (_items.at(index)->toMediaItem()) { // draw item
|
||||
if (index >= _dragSelToIndex && index <= _dragSelFromIndex && _dragSelToIndex >= 0) {
|
||||
return (_dragSelecting && _items.at(index)->msgId() > 0) ? FullSelection : 0;
|
||||
} else if (!_selected.isEmpty()) {
|
||||
@@ -809,7 +812,7 @@ void OverviewInner::paintEvent(QPaintEvent *e) {
|
||||
p.setClipRect(r);
|
||||
}
|
||||
uint64 ms = getms();
|
||||
PaintContextOverview context(ms, _selMode);
|
||||
Overview::Layout::PaintContext context(ms, _selMode);
|
||||
|
||||
if (_history->overview[_type].isEmpty() && (!_migrated || !_history->overviewLoaded(_type) || _migrated->overview[_type].isEmpty())) {
|
||||
QPoint dogPos((_width - st::msgDogImg.pxWidth()) / 2, ((height() - st::msgDogImg.pxHeight()) * 4) / 9);
|
||||
@@ -854,15 +857,15 @@ void OverviewInner::paintEvent(QPaintEvent *e) {
|
||||
int32 y = 0, w = _rowWidth;
|
||||
for (int32 j = 0, l = _items.size(); j < l; ++j) {
|
||||
int32 i = _reversed ? (l - j - 1) : j, nexti = _reversed ? (i - 1) : (i + 1);
|
||||
int32 nextItemTop = (j + 1 == l) ? (_reversed ? 0 : _height) : _items.at(nexti)->Get<OverviewItemInfo>()->top;
|
||||
int32 nextItemTop = (j + 1 == l) ? (_reversed ? 0 : _height) : _items.at(nexti)->Get<Overview::Layout::Info>()->top;
|
||||
if (_reversed) nextItemTop = _height - nextItemTop;
|
||||
if (_marginTop + nextItemTop > r.top()) {
|
||||
OverviewItemInfo *info = _items.at(i)->Get<OverviewItemInfo>();
|
||||
auto info = _items.at(i)->Get<Overview::Layout::Info>();
|
||||
int32 curY = info->top;
|
||||
if (_reversed) curY = _height - curY;
|
||||
if (_marginTop + curY >= r.y() + r.height()) break;
|
||||
|
||||
context.isAfterDate = (j > 0) ? !_items.at(j - 1)->toLayoutMediaItem() : false;
|
||||
context.isAfterDate = (j > 0) ? !_items.at(j - 1)->toMediaItem() : false;
|
||||
p.translate(0, curY - y);
|
||||
_items.at(i)->paint(p, r.translated(-_rowsLeft, -_marginTop - curY), itemSelectedValue(i), &context);
|
||||
y = curY;
|
||||
@@ -908,7 +911,7 @@ void OverviewInner::onUpdateSelected() {
|
||||
upon = false;
|
||||
}
|
||||
if (i >= 0) {
|
||||
if (LayoutMediaItemBase *media = _items.at(i)->toLayoutMediaItem()) {
|
||||
if (auto media = _items.at(i)->toMediaItem()) {
|
||||
item = media->getItem();
|
||||
index = i;
|
||||
if (upon) {
|
||||
@@ -921,23 +924,23 @@ void OverviewInner::onUpdateSelected() {
|
||||
for (int32 j = 0, l = _items.size(); j < l; ++j) {
|
||||
bool lastItem = (j + 1 == l);
|
||||
int32 i = _reversed ? (l - j - 1) : j, nexti = _reversed ? (i - 1) : (i + 1);
|
||||
int32 nextItemTop = lastItem ? (_reversed ? 0 : _height) : _items.at(nexti)->Get<OverviewItemInfo>()->top;
|
||||
int32 nextItemTop = lastItem ? (_reversed ? 0 : _height) : _items.at(nexti)->Get<Overview::Layout::Info>()->top;
|
||||
if (_reversed) nextItemTop = _height - nextItemTop;
|
||||
if (_marginTop + nextItemTop > m.y() || lastItem) {
|
||||
int32 top = _items.at(i)->Get<OverviewItemInfo>()->top;
|
||||
int32 top = _items.at(i)->Get<Overview::Layout::Info>()->top;
|
||||
if (_reversed) top = _height - top;
|
||||
if (!_items.at(i)->toLayoutMediaItem()) { // day item
|
||||
if (!_items.at(i)->toMediaItem()) { // day item
|
||||
int32 h = _items.at(i)->height();
|
||||
bool beforeItem = (_marginTop + top + h / 2) >= m.y();
|
||||
if (_reversed) beforeItem = !beforeItem;
|
||||
if (i > 0 && (beforeItem || i == _items.size() - 1)) {
|
||||
--i;
|
||||
if (!_items.at(i)->toLayoutMediaItem()) break; // wtf
|
||||
top = _items.at(i)->Get<OverviewItemInfo>()->top;
|
||||
if (!_items.at(i)->toMediaItem()) break; // wtf
|
||||
top = _items.at(i)->Get<Overview::Layout::Info>()->top;
|
||||
} else if (i < _items.size() - 1 && (!beforeItem || !i)) {
|
||||
++i;
|
||||
if (!_items.at(i)->toLayoutMediaItem()) break; // wtf
|
||||
top = _items.at(i)->Get<OverviewItemInfo>()->top;
|
||||
if (!_items.at(i)->toMediaItem()) break; // wtf
|
||||
top = _items.at(i)->Get<Overview::Layout::Info>()->top;
|
||||
} else {
|
||||
break; // wtf
|
||||
}
|
||||
@@ -945,7 +948,7 @@ void OverviewInner::onUpdateSelected() {
|
||||
j = _reversed ? (l - i - 1) : i;
|
||||
}
|
||||
|
||||
if (LayoutMediaItemBase *media = _items.at(i)->toLayoutMediaItem()) {
|
||||
if (auto media = _items.at(i)->toMediaItem()) {
|
||||
item = media->getItem();
|
||||
index = i;
|
||||
media->getState(lnk, cursorState, m.x() - _rowsLeft, m.y() - _marginTop - top);
|
||||
@@ -1325,7 +1328,7 @@ int32 OverviewInner::resizeToWidth(int32 nwidth, int32 scrollTop, int32 minHeigh
|
||||
for (int32 i = 0, l = _items.size(); i < l; ++i) {
|
||||
int32 h = _items.at(i)->resizeGetHeight(_rowWidth);
|
||||
if (resize) {
|
||||
_items.at(i)->Get<OverviewItemInfo>()->top = _height + (_reversed ? h : 0);
|
||||
_items.at(i)->Get<Overview::Layout::Info>()->top = _height + (_reversed ? h : 0);
|
||||
_height += h;
|
||||
}
|
||||
}
|
||||
@@ -1632,7 +1635,7 @@ void OverviewInner::mediaOverviewUpdated() {
|
||||
allGood = false;
|
||||
}
|
||||
HistoryItem *item = App::histItemById(itemChannel(msgid), itemMsgId(msgid));
|
||||
LayoutMediaItemBase *layout = layoutPrepare(item);
|
||||
auto layout = layoutPrepare(item);
|
||||
if (!layout) continue;
|
||||
|
||||
setLayoutItem(index, layout, 0);
|
||||
@@ -1658,17 +1661,17 @@ void OverviewInner::mediaOverviewUpdated() {
|
||||
if (allGood) {
|
||||
if (_items.size() > index && complexMsgId(_items.at(index)->getItem()) == msgid) {
|
||||
if (withDates) prevDate = _items.at(index)->getItem()->date.date();
|
||||
top = _items.at(index)->Get<OverviewItemInfo>()->top;
|
||||
top = _items.at(index)->Get<Overview::Layout::Info>()->top;
|
||||
if (!_reversed) {
|
||||
top += _items.at(index)->height();
|
||||
}
|
||||
++index;
|
||||
continue;
|
||||
}
|
||||
if (_items.size() > index + 1 && !_items.at(index)->toLayoutMediaItem() && complexMsgId(_items.at(index + 1)->getItem()) == msgid) { // day item
|
||||
if (_items.size() > index + 1 && !_items.at(index)->toMediaItem() && complexMsgId(_items.at(index + 1)->getItem()) == msgid) { // day item
|
||||
++index;
|
||||
if (withDates) prevDate = _items.at(index)->getItem()->date.date();
|
||||
top = _items.at(index)->Get<OverviewItemInfo>()->top;
|
||||
top = _items.at(index)->Get<Overview::Layout::Info>()->top;
|
||||
if (!_reversed) {
|
||||
top += _items.at(index)->height();
|
||||
}
|
||||
@@ -1678,7 +1681,7 @@ void OverviewInner::mediaOverviewUpdated() {
|
||||
allGood = false;
|
||||
}
|
||||
HistoryItem *item = App::histItemById(itemChannel(msgid), itemMsgId(msgid));
|
||||
LayoutMediaItemBase *layout = layoutPrepare(item);
|
||||
auto layout = layoutPrepare(item);
|
||||
if (!layout) continue;
|
||||
|
||||
if (withDates) {
|
||||
@@ -1795,7 +1798,7 @@ void OverviewInner::repaintItem(const HistoryItem *msg) {
|
||||
if (history == _migrated) msgid = -msgid;
|
||||
for (int32 i = 0, l = _items.size(); i != l; ++i) {
|
||||
if (complexMsgId(_items.at(i)->getItem()) == msgid) {
|
||||
int32 top = _items.at(i)->Get<OverviewItemInfo>()->top;
|
||||
int32 top = _items.at(i)->Get<Overview::Layout::Info>()->top;
|
||||
if (_reversed) top = _height - top;
|
||||
update(_rowsLeft, _marginTop + top, _rowWidth, _items.at(i)->height());
|
||||
break;
|
||||
@@ -1840,7 +1843,7 @@ void OverviewInner::recountMargins() {
|
||||
}
|
||||
}
|
||||
|
||||
LayoutMediaItemBase *OverviewInner::layoutPrepare(HistoryItem *item) {
|
||||
Overview::Layout::ItemBase *OverviewInner::layoutPrepare(HistoryItem *item) {
|
||||
if (!item) return nullptr;
|
||||
|
||||
LayoutItems::const_iterator i = _layoutItems.cend();
|
||||
@@ -1848,59 +1851,59 @@ LayoutMediaItemBase *OverviewInner::layoutPrepare(HistoryItem *item) {
|
||||
if (_type == OverviewPhotos) {
|
||||
if (media && media->type() == MediaTypePhoto) {
|
||||
if ((i = _layoutItems.constFind(item)) == _layoutItems.cend()) {
|
||||
i = _layoutItems.insert(item, new LayoutOverviewPhoto(static_cast<HistoryPhoto*>(media)->photo(), item));
|
||||
i = _layoutItems.insert(item, new Overview::Layout::Photo(static_cast<HistoryPhoto*>(media)->photo(), item));
|
||||
i.value()->initDimensions();
|
||||
}
|
||||
}
|
||||
} else if (_type == OverviewVideos) {
|
||||
if (media && media->type() == MediaTypeVideo) {
|
||||
if ((i = _layoutItems.constFind(item)) == _layoutItems.cend()) {
|
||||
i = _layoutItems.insert(item, new LayoutOverviewVideo(media->getDocument(), item));
|
||||
i = _layoutItems.insert(item, new Overview::Layout::Video(media->getDocument(), item));
|
||||
i.value()->initDimensions();
|
||||
}
|
||||
}
|
||||
} else if (_type == OverviewVoiceFiles) {
|
||||
if (media && (media->type() == MediaTypeVoiceFile)) {
|
||||
if ((i = _layoutItems.constFind(item)) == _layoutItems.cend()) {
|
||||
i = _layoutItems.insert(item, new LayoutOverviewVoice(media->getDocument(), item));
|
||||
i = _layoutItems.insert(item, new Overview::Layout::Voice(media->getDocument(), item));
|
||||
i.value()->initDimensions();
|
||||
}
|
||||
}
|
||||
} else if (_type == OverviewFiles || _type == OverviewMusicFiles) {
|
||||
if (media && (media->type() == MediaTypeFile || media->type() == MediaTypeMusicFile || media->type() == MediaTypeGif)) {
|
||||
if ((i = _layoutItems.constFind(item)) == _layoutItems.cend()) {
|
||||
i = _layoutItems.insert(item, new LayoutOverviewDocument(media->getDocument(), item));
|
||||
i = _layoutItems.insert(item, new Overview::Layout::Document(media->getDocument(), item));
|
||||
i.value()->initDimensions();
|
||||
}
|
||||
}
|
||||
} else if (_type == OverviewLinks) {
|
||||
if ((i = _layoutItems.constFind(item)) == _layoutItems.cend()) {
|
||||
i = _layoutItems.insert(item, new LayoutOverviewLink(media, item));
|
||||
i = _layoutItems.insert(item, new Overview::Layout::Link(media, item));
|
||||
i.value()->initDimensions();
|
||||
}
|
||||
}
|
||||
return (i == _layoutItems.cend()) ? nullptr : i.value();
|
||||
}
|
||||
|
||||
LayoutOverviewItemBase *OverviewInner::layoutPrepare(const QDate &date, bool month) {
|
||||
Overview::Layout::AbstractItem *OverviewInner::layoutPrepare(const QDate &date, bool month) {
|
||||
int32 key = date.year() * 100 + date.month();
|
||||
if (!month) key = key * 100 + date.day();
|
||||
LayoutDates::const_iterator i = _layoutDates.constFind(key);
|
||||
if (i == _layoutDates.cend()) {
|
||||
i = _layoutDates.insert(key, new LayoutOverviewDate(date, month));
|
||||
i = _layoutDates.insert(key, new Overview::Layout::Date(date, month));
|
||||
i.value()->initDimensions();
|
||||
}
|
||||
return i.value();
|
||||
}
|
||||
|
||||
int32 OverviewInner::setLayoutItem(int32 index, LayoutOverviewItemBase *item, int32 top) {
|
||||
int32 OverviewInner::setLayoutItem(int32 index, Overview::Layout::AbstractItem *item, int32 top) {
|
||||
if (_items.size() > index) {
|
||||
_items[index] = item;
|
||||
} else {
|
||||
_items.push_back(item);
|
||||
}
|
||||
int32 h = item->resizeGetHeight(_rowWidth);
|
||||
if (OverviewItemInfo *info = item->Get<OverviewItemInfo>()) {
|
||||
if (auto info = item->Get<Overview::Layout::Info>()) {
|
||||
info->top = top + (_reversed ? h : 0);
|
||||
}
|
||||
return h;
|
||||
|
Reference in New Issue
Block a user