/* kopetechatwindowstyle.cpp - A Chat Window Style. Copyright (c) 2005 by Michaƫl Larouche Kopete (c) 2002-2005 by the Kopete developers ************************************************************************* * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ************************************************************************* */ #include "kopetechatwindowstyle.h" // TQt includes #include #include #include #include // KDE includes #include class ChatWindowStyle::Private { public: TQString stylePath; StyleVariants variantsList; TQString baseHref; TQString currentVariantPath; TQString headerHtml; TQString footerHtml; TQString incomingHtml; TQString nextIncomingHtml; TQString outgoingHtml; TQString nextOutgoingHtml; TQString statusHtml; TQString actionIncomingHtml; TQString actionOutgoingHtml; }; ChatWindowStyle::ChatWindowStyle(const TQString &stylePath, int styleBuildMode) : d(new Private) { init(stylePath, styleBuildMode); } ChatWindowStyle::ChatWindowStyle(const TQString &stylePath, const TQString &variantPath, int styleBuildMode) : d(new Private) { d->currentVariantPath = variantPath; init(stylePath, styleBuildMode); } void ChatWindowStyle::init(const TQString &stylePath, int styleBuildMode) { d->stylePath = stylePath; d->baseHref = stylePath + TQString::fromUtf8("/Contents/Resources/"); readStyleFiles(); if(styleBuildMode & StyleBuildNormal) { listVariants(); } } ChatWindowStyle::~ChatWindowStyle() { kdDebug(14000) << k_funcinfo << endl; delete d; } ChatWindowStyle::StyleVariants ChatWindowStyle::getVariants() { // If the variantList is empty, list available variants. if( d->variantsList.isEmpty() ) { listVariants(); } return d->variantsList; } TQString ChatWindowStyle::getStylePath() const { return d->stylePath; } TQString ChatWindowStyle::getStyleBaseHref() const { return d->baseHref; } TQString ChatWindowStyle::getHeaderHtml() const { return d->headerHtml; } TQString ChatWindowStyle::getFooterHtml() const { return d->footerHtml; } TQString ChatWindowStyle::getIncomingHtml() const { return d->incomingHtml; } TQString ChatWindowStyle::getNextIncomingHtml() const { return d->nextIncomingHtml; } TQString ChatWindowStyle::getOutgoingHtml() const { return d->outgoingHtml; } TQString ChatWindowStyle::getNextOutgoingHtml() const { return d->nextOutgoingHtml; } TQString ChatWindowStyle::getStatusHtml() const { return d->statusHtml; } TQString ChatWindowStyle::getActionIncomingHtml() const { return d->actionIncomingHtml; } TQString ChatWindowStyle::getActionOutgoingHtml() const { return d->actionOutgoingHtml; } bool ChatWindowStyle::hasActionTemplate() const { return ( !d->actionIncomingHtml.isEmpty() && !d->actionOutgoingHtml.isEmpty() ); } void ChatWindowStyle::listVariants() { TQString variantDirPath = d->baseHref + TQString::fromUtf8("Variants/"); TQDir variantDir(variantDirPath); TQStringList variantList = variantDir.entryList("*.css"); TQStringList::ConstIterator it, itEnd = variantList.constEnd(); for(it = variantList.constBegin(); it != itEnd; ++it) { TQString variantName = *it, variantPath; // Retrieve only the file name. variantName = variantName.left(variantName.findRev(".")); // variantPath is relative to baseHref. variantPath = TQString("Variants/%1").arg(*it); d->variantsList.insert(variantName, variantPath); } } void ChatWindowStyle::readStyleFiles() { TQString headerFile = d->baseHref + TQString("Header.html"); TQString footerFile = d->baseHref + TQString("Footer.html"); TQString incomingFile = d->baseHref + TQString("Incoming/Content.html"); TQString nextIncomingFile = d->baseHref + TQString("Incoming/NextContent.html"); TQString outgoingFile = d->baseHref + TQString("Outgoing/Content.html"); TQString nextOutgoingFile = d->baseHref + TQString("Outgoing/NextContent.html"); TQString statusFile = d->baseHref + TQString("Status.html"); TQString actionIncomingFile = d->baseHref + TQString("Incoming/Action.html"); TQString actionOutgoingFile = d->baseHref + TQString("Outgoing/Action.html"); TQFile fileAccess; // First load header file. if( TQFile::exists(headerFile) ) { fileAccess.setName(headerFile); fileAccess.open(IO_ReadOnly); TQTextStream headerStream(&fileAccess); headerStream.setEncoding(TQTextStream::UnicodeUTF8); d->headerHtml = headerStream.read(); kdDebug(14000) << k_funcinfo << "Header HTML: " << d->headerHtml << endl; fileAccess.close(); } // Load Footer file if( TQFile::exists(footerFile) ) { fileAccess.setName(footerFile); fileAccess.open(IO_ReadOnly); TQTextStream headerStream(&fileAccess); headerStream.setEncoding(TQTextStream::UnicodeUTF8); d->footerHtml = headerStream.read(); kdDebug(14000) << k_funcinfo << "Footer HTML: " << d->footerHtml << endl; fileAccess.close(); } // Load incoming file if( TQFile::exists(incomingFile) ) { fileAccess.setName(incomingFile); fileAccess.open(IO_ReadOnly); TQTextStream headerStream(&fileAccess); headerStream.setEncoding(TQTextStream::UnicodeUTF8); d->incomingHtml = headerStream.read(); kdDebug(14000) << k_funcinfo << "Incoming HTML: " << d->incomingHtml << endl; fileAccess.close(); } // Load next Incoming file if( TQFile::exists(nextIncomingFile) ) { fileAccess.setName(nextIncomingFile); fileAccess.open(IO_ReadOnly); TQTextStream headerStream(&fileAccess); headerStream.setEncoding(TQTextStream::UnicodeUTF8); d->nextIncomingHtml = headerStream.read(); kdDebug(14000) << k_funcinfo << "NextIncoming HTML: " << d->nextIncomingHtml << endl; fileAccess.close(); } // Load outgoing file if( TQFile::exists(outgoingFile) ) { fileAccess.setName(outgoingFile); fileAccess.open(IO_ReadOnly); TQTextStream headerStream(&fileAccess); headerStream.setEncoding(TQTextStream::UnicodeUTF8); d->outgoingHtml = headerStream.read(); kdDebug(14000) << k_funcinfo << "Outgoing HTML: " << d->outgoingHtml << endl; fileAccess.close(); } // Load next outgoing file if( TQFile::exists(nextOutgoingFile) ) { fileAccess.setName(nextOutgoingFile); fileAccess.open(IO_ReadOnly); TQTextStream headerStream(&fileAccess); headerStream.setEncoding(TQTextStream::UnicodeUTF8); d->nextOutgoingHtml = headerStream.read(); kdDebug(14000) << k_funcinfo << "NextOutgoing HTML: " << d->nextOutgoingHtml << endl; fileAccess.close(); } // Load status file if( TQFile::exists(statusFile) ) { fileAccess.setName(statusFile); fileAccess.open(IO_ReadOnly); TQTextStream headerStream(&fileAccess); headerStream.setEncoding(TQTextStream::UnicodeUTF8); d->statusHtml = headerStream.read(); kdDebug(14000) << k_funcinfo << "Status HTML: " << d->statusHtml << endl; fileAccess.close(); } // Load Action Incoming file if( TQFile::exists(actionIncomingFile) ) { fileAccess.setName(actionIncomingFile); fileAccess.open(IO_ReadOnly); TQTextStream headerStream(&fileAccess); headerStream.setEncoding(TQTextStream::UnicodeUTF8); d->actionIncomingHtml = headerStream.read(); kdDebug(14000) << k_funcinfo << "ActionIncoming HTML: " << d->actionIncomingHtml << endl; fileAccess.close(); } // Load Action Outgoing file if( TQFile::exists(actionOutgoingFile) ) { fileAccess.setName(actionOutgoingFile); fileAccess.open(IO_ReadOnly); TQTextStream headerStream(&fileAccess); headerStream.setEncoding(TQTextStream::UnicodeUTF8); d->actionOutgoingHtml = headerStream.read(); kdDebug(14000) << k_funcinfo << "ActionOutgoing HTML: " << d->actionOutgoingHtml << endl; fileAccess.close(); } } void ChatWindowStyle::reload() { d->variantsList.clear(); readStyleFiles(); listVariants(); }