void AdiumThemeView::addStatusMessage(const AdiumThemeStatusInfo& statusMessage) { QString styleHtml; bool consecutiveMessage = false; bool willAddMoreContentObjects = false; // TODO Find out how this is used in Adium bool replaceLastContent = false; // TODO use this // statusMessage is const, we need a non-const one to append message classes AdiumThemeStatusInfo message(statusMessage); if (m_lastContent.type() == message.type() && !m_chatStyle->disableCombineConsecutive()) { consecutiveMessage = true; message.appendMessageClass(QLatin1String("consecutive")); } m_lastContent = AdiumThemeContentInfo(statusMessage.type()); switch (message.type()) { case AdiumThemeMessageInfo::Status: styleHtml = m_chatStyle->getStatusHtml(); break; case AdiumThemeMessageInfo::HistoryStatus: styleHtml = m_chatStyle->getStatusHistoryHtml(); break; default: kWarning() << "Unexpected message type to addStatusMessage"; } replaceStatusKeywords(styleHtml, message); AppendMode mode = appendMode(message, consecutiveMessage, willAddMoreContentObjects, replaceLastContent); appendMessage(styleHtml, mode); }
void AppearanceConfigTab::sendDemoMessages() { //add a fake message AdiumThemeContentInfo message(AdiumThemeMessageInfo::HistoryRemoteToLocal); message.setMessage(i18nc("Example message in preview conversation","Ok!")); message.setSenderDisplayName(i18nc("Example email", "*****@*****.**")); message.setSenderScreenName(i18nc("Example name", "Larry Demo")); message.setService(i18nc("XMPP Protocol name" , "Jabber")); message.setTime(QDateTime::currentDateTime()); ui->chatView->addAdiumContentMessage(message); message = AdiumThemeContentInfo(AdiumThemeMessageInfo::HistoryRemoteToLocal); message.setMessage(i18nc("Example message in preview conversation","Bye Bye")); message.setSenderDisplayName(i18nc("Example email", "*****@*****.**")); message.setSenderScreenName(i18nc("Example name", "Larry Demo")); message.setService(i18n("Jabber")); message.setTime(QDateTime::currentDateTime()); ui->chatView->addAdiumContentMessage(message); message = AdiumThemeContentInfo(AdiumThemeMessageInfo::HistoryLocalToRemote); message.setMessage(i18nc("Example message in preview conversation","Have fun!")); message.setSenderDisplayName(i18nc("Example email", "*****@*****.**")); message.setSenderScreenName(i18nc("Example name", "Ted Example")); message.setService(i18n("Jabber")); message.setTime(QDateTime::currentDateTime()); ui->chatView->addAdiumContentMessage(message); message = AdiumThemeContentInfo(AdiumThemeMessageInfo::HistoryLocalToRemote); message.setMessage(i18nc("Example message in preview conversation","cya")); message.setSenderDisplayName(i18nc("Example email", "*****@*****.**")); message.setSenderScreenName(i18nc("Example name", "Ted Example")); message.setService(i18n("Jabber")); message.setTime(QDateTime::currentDateTime()); ui->chatView->addAdiumContentMessage(message); AdiumThemeStatusInfo statusMessage(true); statusMessage.setMessage(i18nc("Example message", "Ted Example waves.")); statusMessage.setTime(QDateTime::currentDateTime()); statusMessage.setService(i18n("Jabber")); ui->chatView->addAdiumStatusMessage(statusMessage); statusMessage = AdiumThemeStatusInfo(true); statusMessage.setMessage(i18nc("Example message in preview conversation","Ted Example has left the chat.")); //FIXME sync this with chat text logic. statusMessage.setTime(QDateTime::currentDateTime()); statusMessage.setService(i18n("Jabber")); statusMessage.setStatus(QLatin1String("away")); ui->chatView->addAdiumStatusMessage(statusMessage); message = AdiumThemeContentInfo(AdiumThemeMessageInfo::RemoteToLocal); message.setMessage(i18nc("Example message in preview conversation","Hello Ted")); message.setSenderDisplayName(i18nc("Example email", "*****@*****.**")); message.setSenderScreenName(i18nc("Example name", "Larry Demo")); message.setService(i18n("Jabber")); message.appendMessageClass(QLatin1String("mention")); message.setTime(QDateTime::currentDateTime()); ui->chatView->addAdiumContentMessage(message); message = AdiumThemeContentInfo(AdiumThemeMessageInfo::RemoteToLocal); message.setMessage(i18nc("Example message in preview conversation","What's up?")); message.setSenderDisplayName(i18nc("Example email", "*****@*****.**")); message.setSenderScreenName(i18nc("Example name", "Larry Demo")); message.setService(i18n("Jabber")); message.setTime(QDateTime::currentDateTime()); ui->chatView->addAdiumContentMessage(message); message = AdiumThemeContentInfo(AdiumThemeMessageInfo::LocalToRemote); message.setMessage(i18nc("Example message in preview conversation","Check out which cool adium themes work " "<a href=\"http://community.kde.org/KTp/Components/Chat_Window/Themes\">" "here</a>!")); message.setSenderDisplayName(i18nc("Example email", "*****@*****.**")); message.setSenderScreenName(i18nc("Example name", "Ted Example")); message.setService(i18n("Jabber")); message.setTime(QDateTime::currentDateTime()); ui->chatView->addAdiumContentMessage(message); if ( m_groupChat == true) { message = AdiumThemeContentInfo(AdiumThemeMessageInfo::RemoteToLocal); message.setMessage(i18nc("Example message in preview conversation","Hello")); message.setSenderDisplayName(i18nc("Example email", "*****@*****.**")); message.setSenderScreenName(i18nc("Example name", "Bob Example")); message.setService(i18n("Jabber")); message.setTime(QDateTime::currentDateTime()); ui->chatView->addAdiumContentMessage(message); } message = AdiumThemeContentInfo(AdiumThemeMessageInfo::LocalToRemote); message.setMessage(i18nc("Example message in preview conversation","A different example message")); message.setSenderDisplayName(i18nc("Example email", "*****@*****.**")); message.setSenderScreenName(i18nc("Example name", "Ted Example")); message.setService(i18n("Jabber")); message.setTime(QDateTime::currentDateTime()); ui->chatView->addAdiumContentMessage(message); if (ui->chatView->showPresenceChanges()) { statusMessage = AdiumThemeStatusInfo(); statusMessage.setMessage(i18nc("Example message in preview conversation","Ted Example is now Away.")); //FIXME sync this with chat text logic. statusMessage.setTime(QDateTime::currentDateTime()); statusMessage.setService(i18n("Jabber")); statusMessage.setStatus(QLatin1String("away")); ui->chatView->addAdiumStatusMessage(statusMessage); statusMessage = AdiumThemeStatusInfo(); statusMessage.setMessage(i18nc("Example message in preview conversations","Ted Example has left the chat.")); //FIXME sync this with chat text logic. statusMessage.setTime(QDateTime::currentDateTime()); statusMessage.setService(i18n("Jabber")); statusMessage.setStatus(QLatin1String("away")); ui->chatView->addAdiumStatusMessage(statusMessage); } }
void AdiumThemeView::initialise(const AdiumThemeHeaderInfo &chatInfo) { QString headerHtml; QString templateHtml = m_chatStyle->getTemplateHtml(); QString footerHtml = replaceHeaderKeywords(m_chatStyle->getFooterHtml(), chatInfo); QString extraStyleHtml = m_chatStyle->messageViewVersion() < 3 ? QLatin1String("") : QLatin1String("@import url( \"main.css\" );"); m_lastContent = AdiumThemeContentInfo(); if (templateHtml.isEmpty()) { // if templateHtml is empty, we failed to load the fallback template file KMessageBox::error(this, i18n("Missing required file Template.html - check your installation.")); } if (m_displayHeader) { if (chatInfo.isGroupChat()) { // In group chats header should be replaced by topic headerHtml = replaceHeaderKeywords(m_chatStyle->getTopicHtml(), chatInfo); } else { headerHtml = replaceHeaderKeywords(m_chatStyle->getHeaderHtml(), chatInfo); } } //otherwise leave as blank. // set fontFamily and fontSize if (m_useCustomFont) { // use user specified fontFamily and Size settings()->setFontFamily(QWebSettings::StandardFont, m_fontFamily); settings()->setFontSize(QWebSettings::DefaultFontSize, m_fontSize); // since some themes are pretty odd and hardcode fonts to the css we need to override that // with some extra css. this may not work for all themes! extraStyleHtml.append ( QString(QLatin1String("\n* {font-family:\"%1\" !important;font-size:%2pt !important};")) .arg( m_fontFamily ) .arg( m_fontSize ) ); } else { // FIXME: we should inform the user if the chatStyle want's to use a fontFamily which is not present on the system QFontDatabase fontDB = QFontDatabase(); kDebug() << "Theme font installed: " << m_chatStyle->defaultFontFamily() << fontDB.families().contains(m_chatStyle->defaultFontFamily()); // use theme fontFamily/Size, if not existent, it falls back to systems default font settings()->setFontFamily(QWebSettings::StandardFont, m_chatStyle->defaultFontFamily()); settings()->setFontSize(QWebSettings::DefaultFontSize, m_chatStyle->defaultFontSize()); } //The templateHtml is in a horrific NSString format. //Want to use this rather than roll our own, as that way we can get templates from themes too //"%@" is each argument. // all other %'s are escaped. // first is baseref // second is extra style code (This is sometimes missing !!!!) // third is variant CSS // 4th is header // 5th is footer templateHtml.replace(QLatin1String("%%"), QLatin1String("%")); int numberOfPlaceholders = templateHtml.count(QLatin1String("%@")); int index = 0; index = templateHtml.indexOf(QLatin1String("%@"), index); templateHtml.replace(index, 2, QString(QLatin1String("file:///")).append(m_chatStyle->getStyleBaseHref())); if (numberOfPlaceholders == 5) { index = templateHtml.indexOf(QLatin1String("%@"), index); templateHtml.replace(index, 2, extraStyleHtml); } index = templateHtml.indexOf(QLatin1String("%@"), index); templateHtml.replace(index, 2, m_variantPath); index = templateHtml.indexOf(QLatin1String("%@"), index); templateHtml.replace(index, 2, headerHtml); index = templateHtml.indexOf(QLatin1String("%@"), index); templateHtml.replace(index, 2, footerHtml); setHtml(templateHtml); //hidden HTML debugging mode. Should have no visible way to turn it on. if (m_webInspector) { QWebSettings::globalSettings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true); } }