Added display of full filenames for documents in tooltips.
This commit is contained in:
		
							parent
							
								
									c1b2d7ed4c
								
							
						
					
					
						commit
						38f5cda800
					
				
					 5 changed files with 77 additions and 2 deletions
				
			
		|  | @ -15,6 +15,7 @@ constexpr auto kPhotoLinkMediaProperty = 0x02; | ||||||
| constexpr auto kDocumentLinkMediaProperty = 0x03; | constexpr auto kDocumentLinkMediaProperty = 0x03; | ||||||
| constexpr auto kSendReactionEmojiProperty = 0x04; | constexpr auto kSendReactionEmojiProperty = 0x04; | ||||||
| constexpr auto kReactionsCountEmojiProperty = 0x05; | constexpr auto kReactionsCountEmojiProperty = 0x05; | ||||||
|  | constexpr auto kDocumentFilenameTooltipProperty = 0x06; | ||||||
| 
 | 
 | ||||||
| namespace Ui { | namespace Ui { | ||||||
| class Show; | class Show; | ||||||
|  |  | ||||||
|  | @ -53,6 +53,10 @@ DocumentClickHandler::DocumentClickHandler( | ||||||
| 		reinterpret_cast<qulonglong>(_document.get())); | 		reinterpret_cast<qulonglong>(_document.get())); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | QString DocumentClickHandler::tooltip() const { | ||||||
|  | 	return property(kDocumentFilenameTooltipProperty).value<QString>(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| DocumentOpenClickHandler::DocumentOpenClickHandler( | DocumentOpenClickHandler::DocumentOpenClickHandler( | ||||||
| 	not_null<DocumentData*> document, | 	not_null<DocumentData*> document, | ||||||
| 	Fn<void(FullMsgId)> &&callback, | 	Fn<void(FullMsgId)> &&callback, | ||||||
|  |  | ||||||
|  | @ -33,6 +33,8 @@ public: | ||||||
| 		not_null<DocumentData*> document, | 		not_null<DocumentData*> document, | ||||||
| 		FullMsgId context = FullMsgId()); | 		FullMsgId context = FullMsgId()); | ||||||
| 
 | 
 | ||||||
|  | 	QString tooltip() const override; | ||||||
|  | 
 | ||||||
| 	[[nodiscard]] not_null<DocumentData*> document() const; | 	[[nodiscard]] not_null<DocumentData*> document() const; | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|  |  | ||||||
|  | @ -14,6 +14,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL | ||||||
| #include "media/player/media_player_instance.h" | #include "media/player/media_player_instance.h" | ||||||
| #include "history/history_item_components.h" | #include "history/history_item_components.h" | ||||||
| #include "history/history.h" | #include "history/history.h" | ||||||
|  | #include "core/click_handler_types.h" // kDocumentFilenameTooltipProperty.
 | ||||||
| #include "history/view/history_view_element.h" | #include "history/view/history_view_element.h" | ||||||
| #include "history/view/history_view_cursor_state.h" | #include "history/view/history_view_cursor_state.h" | ||||||
| #include "history/view/history_view_transcribe_button.h" | #include "history/view/history_view_transcribe_button.h" | ||||||
|  | @ -178,6 +179,7 @@ Document::Document( | ||||||
| 	createComponents(!caption.isEmpty()); | 	createComponents(!caption.isEmpty()); | ||||||
| 	if (const auto named = Get<HistoryDocumentNamed>()) { | 	if (const auto named = Get<HistoryDocumentNamed>()) { | ||||||
| 		fillNamedFromData(named); | 		fillNamedFromData(named); | ||||||
|  | 		_tooltipFilename.setTooltipText(named->name); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	setDocumentLinks(_data, realParent); | 	setDocumentLinks(_data, realParent); | ||||||
|  | @ -647,11 +649,13 @@ void Document::draw( | ||||||
| 	} else if (auto named = Get<HistoryDocumentNamed>()) { | 	} else if (auto named = Get<HistoryDocumentNamed>()) { | ||||||
| 		p.setFont(st::semiboldFont); | 		p.setFont(st::semiboldFont); | ||||||
| 		p.setPen(stm->historyFileNameFg); | 		p.setPen(stm->historyFileNameFg); | ||||||
| 		if (namewidth < named->namew) { | 		const auto elided = (namewidth < named->namew); | ||||||
|  | 		if (elided) { | ||||||
| 			p.drawTextLeft(nameleft, nametop, width, st::semiboldFont->elided(named->name, namewidth, Qt::ElideMiddle)); | 			p.drawTextLeft(nameleft, nametop, width, st::semiboldFont->elided(named->name, namewidth, Qt::ElideMiddle)); | ||||||
| 		} else { | 		} else { | ||||||
| 			p.drawTextLeft(nameleft, nametop, width, named->name, named->namew); | 			p.drawTextLeft(nameleft, nametop, width, named->name, named->namew); | ||||||
| 		} | 		} | ||||||
|  | 		_tooltipFilename.setElided(elided); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	auto statusText = voiceStatusOverride.isEmpty() ? _statusText : voiceStatusOverride; | 	auto statusText = voiceStatusOverride.isEmpty() ? _statusText : voiceStatusOverride; | ||||||
|  | @ -926,11 +930,15 @@ TextState Document::textState( | ||||||
| 	const auto nameleft = st.padding.left() + st.thumbSize + st.thumbSkip; | 	const auto nameleft = st.padding.left() + st.thumbSize + st.thumbSkip; | ||||||
| 	const auto nametop = st.nameTop - topMinus; | 	const auto nametop = st.nameTop - topMinus; | ||||||
| 	const auto nameright = st.padding.right(); | 	const auto nameright = st.padding.right(); | ||||||
|  | 	auto namewidth = width - nameleft - nameright; | ||||||
| 	const auto linktop = st.linkTop - topMinus; | 	const auto linktop = st.linkTop - topMinus; | ||||||
| 	auto bottom = st.padding.top() + st.thumbSize + st.padding.bottom() - topMinus; | 	auto bottom = st.padding.top() + st.thumbSize + st.padding.bottom() - topMinus; | ||||||
| 	const auto rthumb = style::rtlrect(st.padding.left(), st.padding.top() - topMinus, st.thumbSize, st.thumbSize, width); | 	const auto rthumb = style::rtlrect(st.padding.left(), st.padding.top() - topMinus, st.thumbSize, st.thumbSize, width); | ||||||
| 	const auto innerSize = st::msgFileLayout.thumbSize; | 	const auto innerSize = st::msgFileLayout.thumbSize; | ||||||
| 	const auto inner = QRect(rthumb.x() + (rthumb.width() - innerSize) / 2, rthumb.y() + (rthumb.height() - innerSize) / 2, innerSize, innerSize); | 	const auto inner = QRect(rthumb.x() + (rthumb.width() - innerSize) / 2, rthumb.y() + (rthumb.height() - innerSize) / 2, innerSize, innerSize); | ||||||
|  | 
 | ||||||
|  | 	const auto filenameMoused = QRect(nameleft, nametop, namewidth, st::semiboldFont->height).contains(point); | ||||||
|  | 	_tooltipFilename.setMoused(filenameMoused); | ||||||
| 	if (const auto thumbed = Get<HistoryDocumentThumbed>()) { | 	if (const auto thumbed = Get<HistoryDocumentThumbed>()) { | ||||||
| 		if ((_data->loading() || _data->uploading()) && rthumb.contains(point)) { | 		if ((_data->loading() || _data->uploading()) && rthumb.contains(point)) { | ||||||
| 			result.link = _cancell; | 			result.link = _cancell; | ||||||
|  | @ -958,7 +966,6 @@ TextState Document::textState( | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	const auto voice = Get<HistoryDocumentVoice>(); | 	const auto voice = Get<HistoryDocumentVoice>(); | ||||||
| 	auto namewidth = width - nameleft - nameright; |  | ||||||
| 	auto transcribeLength = 0; | 	auto transcribeLength = 0; | ||||||
| 	auto transcribeHeight = 0; | 	auto transcribeHeight = 0; | ||||||
| 	auto painth = layout.height(); | 	auto painth = layout.height(); | ||||||
|  | @ -1035,8 +1042,10 @@ TextState Document::textState( | ||||||
| 		} else { | 		} else { | ||||||
| 			result.link = _savel; | 			result.link = _savel; | ||||||
| 		} | 		} | ||||||
|  | 		_tooltipFilename.updateTooltipForLink(result.link.get()); | ||||||
| 		return result; | 		return result; | ||||||
| 	} | 	} | ||||||
|  | 	_tooltipFilename.updateTooltipForState(result); | ||||||
| 	return result; | 	return result; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -1388,6 +1397,48 @@ Ui::Text::String Document::createCaption() { | ||||||
| 	return File::createCaption(_realParent); | 	return File::createCaption(_realParent); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void Document::TooltipFilename::setElided(bool value) { | ||||||
|  | 	if (_elided != value) { | ||||||
|  | 		_elided = value; | ||||||
|  | 		_stale = true; | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void Document::TooltipFilename::setMoused(bool value) { | ||||||
|  | 	if (_moused != value) { | ||||||
|  | 		_moused = value; | ||||||
|  | 		_stale = true; | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void Document::TooltipFilename::setTooltipText(QString text) { | ||||||
|  | 	if (_tooltip != text) { | ||||||
|  | 		_tooltip = text; | ||||||
|  | 		_stale = true; | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void Document::TooltipFilename::updateTooltipForLink(ClickHandler *link) { | ||||||
|  | 	if (_lastLink != link) { | ||||||
|  | 		_lastLink = link; | ||||||
|  | 		_stale = true; | ||||||
|  | 	} | ||||||
|  | 	if (_stale && link) { | ||||||
|  | 		_stale = false; | ||||||
|  | 		link->setProperty( | ||||||
|  | 			kDocumentFilenameTooltipProperty, | ||||||
|  | 			(_elided && _moused) ? _tooltip : QString()); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void Document::TooltipFilename::updateTooltipForState( | ||||||
|  | 		TextState &state) const { | ||||||
|  | 	if (_elided && _moused) { | ||||||
|  | 		state.customTooltip = true; | ||||||
|  | 		state.customTooltipText = _tooltip; | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
| bool DrawThumbnailAsSongCover( | bool DrawThumbnailAsSongCover( | ||||||
| 		Painter &p, | 		Painter &p, | ||||||
| 		const style::color &colored, | 		const style::color &colored, | ||||||
|  |  | ||||||
|  | @ -157,6 +157,23 @@ private: | ||||||
| 	mutable QImage _iconCache; | 	mutable QImage _iconCache; | ||||||
| 	mutable QImage _cornerDownloadCache; | 	mutable QImage _cornerDownloadCache; | ||||||
| 
 | 
 | ||||||
|  | 	class TooltipFilename { | ||||||
|  | 	public: | ||||||
|  | 		void setElided(bool value); | ||||||
|  | 		void setMoused(bool value); | ||||||
|  | 		void setTooltipText(QString text); | ||||||
|  | 		void updateTooltipForLink(ClickHandler *link); | ||||||
|  | 		void updateTooltipForState(TextState &state) const; | ||||||
|  | 	private: | ||||||
|  | 		ClickHandler *_lastLink = nullptr; | ||||||
|  | 		bool _elided = false; | ||||||
|  | 		bool _moused = false; | ||||||
|  | 		bool _stale = false; | ||||||
|  | 		QString _tooltip; | ||||||
|  | 	}; | ||||||
|  | 
 | ||||||
|  | 	mutable TooltipFilename _tooltipFilename; | ||||||
|  | 
 | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| bool DrawThumbnailAsSongCover( | bool DrawThumbnailAsSongCover( | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 23rd
						23rd