216 lines
		
	
	
	
		
			4.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			216 lines
		
	
	
	
		
			4.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
| 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 "ui/text_options.h"
 | |
| 
 | |
| #include "history/history.h"
 | |
| #include "history/history_item.h"
 | |
| #include "data/data_channel.h"
 | |
| #include "data/data_chat.h"
 | |
| #include "data/data_user.h"
 | |
| #include "styles/style_history.h"
 | |
| #include "styles/style_window.h"
 | |
| 
 | |
| namespace Ui {
 | |
| namespace {
 | |
| 
 | |
| TextParseOptions HistoryTextOptions = {
 | |
| 	TextParseLinks
 | |
| 		| TextParseMentions
 | |
| 		| TextParseHashtags
 | |
| 		| TextParseMultiline
 | |
| 		| TextParseRichText
 | |
| 		| TextParseMarkdown, // flags
 | |
| 	0, // maxw
 | |
| 	0, // maxh
 | |
| 	Qt::LayoutDirectionAuto, // dir
 | |
| };
 | |
| 
 | |
| TextParseOptions HistoryBotOptions = {
 | |
| 	TextParseLinks
 | |
| 		| TextParseMentions
 | |
| 		| TextParseHashtags
 | |
| 		| TextParseBotCommands
 | |
| 		| TextParseMultiline
 | |
| 		| TextParseRichText
 | |
| 		| TextParseMarkdown, // flags
 | |
| 	0, // maxw
 | |
| 	0, // maxh
 | |
| 	Qt::LayoutDirectionAuto, // dir
 | |
| };
 | |
| 
 | |
| TextParseOptions HistoryServiceOptions = {
 | |
| 	TextParseLinks
 | |
| 		| TextParseMentions
 | |
| 		| TextParseHashtags
 | |
| 		//| TextParseMultiline
 | |
| 		| TextParseRichText, // flags
 | |
| 	0, // maxw
 | |
| 	0, // maxh
 | |
| 	Qt::LayoutDirectionAuto, // lang-dependent
 | |
| };
 | |
| 
 | |
| TextParseOptions HistoryTextNoMonoOptions = {
 | |
| 	TextParseLinks
 | |
| 		| TextParseMentions
 | |
| 		| TextParseHashtags
 | |
| 		| TextParseMultiline
 | |
| 		| TextParseRichText, // flags
 | |
| 	0, // maxw
 | |
| 	0, // maxh
 | |
| 	Qt::LayoutDirectionAuto, // dir
 | |
| };
 | |
| 
 | |
| TextParseOptions HistoryBotNoMonoOptions = {
 | |
| 	TextParseLinks
 | |
| 		| TextParseMentions
 | |
| 		| TextParseHashtags
 | |
| 		| TextParseBotCommands
 | |
| 		| TextParseMultiline
 | |
| 		| TextParseRichText, // flags
 | |
| 	0, // maxw
 | |
| 	0, // maxh
 | |
| 	Qt::LayoutDirectionAuto, // dir
 | |
| };
 | |
| 
 | |
| TextParseOptions TextNameOptions = {
 | |
| 	0, // flags
 | |
| 	4096, // maxw
 | |
| 	1, // maxh
 | |
| 	Qt::LayoutDirectionAuto, // lang-dependent
 | |
| };
 | |
| 
 | |
| TextParseOptions TextDialogOptions = {
 | |
| 	TextParseRichText, // flags
 | |
| 	0, // maxw is style-dependent
 | |
| 	1, // maxh
 | |
| 	Qt::LayoutDirectionAuto, // lang-dependent
 | |
| };
 | |
| 
 | |
| TextParseOptions WebpageTitleOptions = {
 | |
| 	TextParseMultiline | TextParseRichText, // flags
 | |
| 	0, // maxw
 | |
| 	0, // maxh
 | |
| 	Qt::LayoutDirectionAuto, // dir
 | |
| };
 | |
| 
 | |
| TextParseOptions WebpageDescriptionOptions = {
 | |
| 	TextParseLinks
 | |
| 		| TextParseMentions
 | |
| 		| TextParseHashtags
 | |
| 		| TextParseMultiline
 | |
| 		| TextParseRichText
 | |
| 		| TextParseMarkdown, // flags
 | |
| 	0, // maxw
 | |
| 	0, // maxh
 | |
| 	Qt::LayoutDirectionAuto, // dir
 | |
| };
 | |
| 
 | |
| bool UseBotTextOptions(
 | |
| 		not_null<History*> history,
 | |
| 		not_null<PeerData*> author) {
 | |
| 	if (const auto user = history->peer->asUser()) {
 | |
| 		if (user->isBot()) {
 | |
| 			return true;
 | |
| 		}
 | |
| 	} else if (const auto chat = history->peer->asChat()) {
 | |
| 		if (chat->botStatus >= 0) {
 | |
| 			return true;
 | |
| 		}
 | |
| 	} else if (const auto group = history->peer->asMegagroup()) {
 | |
| 		if (group->mgInfo->botStatus >= 0) {
 | |
| 			return true;
 | |
| 		}
 | |
| 	}
 | |
| 	if (const auto user = author->asUser()) {
 | |
| 		if (user->isBot()) {
 | |
| 			return true;
 | |
| 		}
 | |
| 	}
 | |
| 	return false;
 | |
| }
 | |
| 
 | |
| } // namespace
 | |
| 
 | |
| void InitTextOptions() {
 | |
| 	HistoryServiceOptions.dir
 | |
| 		= TextNameOptions.dir
 | |
| 		= TextDialogOptions.dir
 | |
| 		= cLangDir();
 | |
| 	TextDialogOptions.maxw = st::columnMaximalWidthLeft * 2;
 | |
| 	WebpageTitleOptions.maxh = st::webPageTitleFont->height * 2;
 | |
| 	WebpageTitleOptions.maxw
 | |
| 		= WebpageDescriptionOptions.maxw
 | |
| 		= st::msgMaxWidth
 | |
| 		- st::msgPadding.left()
 | |
| 		- st::webPageLeft
 | |
| 		- st::msgPadding.right();
 | |
| 	WebpageDescriptionOptions.maxh = st::webPageDescriptionFont->height * 3;
 | |
| }
 | |
| 
 | |
| const TextParseOptions &ItemTextDefaultOptions() {
 | |
| 	return HistoryTextOptions;
 | |
| }
 | |
| 
 | |
| const TextParseOptions &ItemTextBotDefaultOptions() {
 | |
| 	return HistoryBotOptions;
 | |
| }
 | |
| 
 | |
| const TextParseOptions &ItemTextNoMonoOptions() {
 | |
| 	return HistoryTextNoMonoOptions;
 | |
| }
 | |
| 
 | |
| const TextParseOptions &ItemTextBotNoMonoOptions() {
 | |
| 	return HistoryBotNoMonoOptions;
 | |
| }
 | |
| 
 | |
| const TextParseOptions &ItemTextServiceOptions() {
 | |
| 	return HistoryServiceOptions;
 | |
| }
 | |
| 
 | |
| const TextParseOptions &WebpageTextTitleOptions() {
 | |
| 	return WebpageTitleOptions;
 | |
| }
 | |
| 
 | |
| const TextParseOptions &WebpageTextDescriptionOptions() {
 | |
| 	return WebpageDescriptionOptions;
 | |
| }
 | |
| 
 | |
| const TextParseOptions &NameTextOptions() {
 | |
| 	return TextNameOptions;
 | |
| }
 | |
| 
 | |
| const TextParseOptions &DialogTextOptions() {
 | |
| 	return TextDialogOptions;
 | |
| }
 | |
| 
 | |
| const TextParseOptions &ItemTextOptions(
 | |
| 		not_null<History*> history,
 | |
| 		not_null<PeerData*> author) {
 | |
| 	return UseBotTextOptions(history, author)
 | |
| 		? HistoryBotOptions
 | |
| 		: HistoryTextOptions;
 | |
| }
 | |
| 
 | |
| const TextParseOptions &ItemTextOptions(not_null<const HistoryItem*> item) {
 | |
| 	return ItemTextOptions(item->history(), item->author());
 | |
| }
 | |
| 
 | |
| const TextParseOptions &ItemTextNoMonoOptions(
 | |
| 		not_null<History*> history,
 | |
| 		not_null<PeerData*> author) {
 | |
| 	return UseBotTextOptions(history, author)
 | |
| 		? HistoryBotNoMonoOptions
 | |
| 		: HistoryTextNoMonoOptions;
 | |
| }
 | |
| 
 | |
| const TextParseOptions &ItemTextNoMonoOptions(
 | |
| 		not_null<const HistoryItem*> item) {
 | |
| 	return ItemTextNoMonoOptions(item->history(), item->author());
 | |
| }
 | |
| 
 | |
| } // namespace Ui
 | 
