diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-02-24 02:13:59 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-02-24 02:13:59 +0000 |
commit | a6d58bb6052ac8cb01805a48c4ad2f129126116f (patch) | |
tree | dd867a099fcbb263a8009a9fb22695b87855dad6 /src/modules/theme/packthemedialog.cpp | |
download | kvirc-a6d58bb6052ac8cb01805a48c4ad2f129126116f.tar.gz kvirc-a6d58bb6052ac8cb01805a48c4ad2f129126116f.zip |
Added KDE3 version of kvirc
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/kvirc@1095341 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'src/modules/theme/packthemedialog.cpp')
-rw-r--r-- | src/modules/theme/packthemedialog.cpp | 489 |
1 files changed, 489 insertions, 0 deletions
diff --git a/src/modules/theme/packthemedialog.cpp b/src/modules/theme/packthemedialog.cpp new file mode 100644 index 00000000..88b248a8 --- /dev/null +++ b/src/modules/theme/packthemedialog.cpp @@ -0,0 +1,489 @@ +//============================================================================= +// +// File : packthemedialog.cpp +// Created on Wed 03 Jan 2007 01:11:44 by Szymon Stefanek +// +// This file is part of the KVIrc IRC Client distribution +// Copyright (C) 2007 Szymon Stefanek <pragma at kvirc dot net> +// +// 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 opinion) any later version. +// +// This program is distributed in the HOPE that it will be USEFUL, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, write to the Free Software Foundation, +// Inc. ,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//============================================================================= + +#include "packthemedialog.h" +#include "themefunctions.h" + +#include <qlayout.h> +#include <qpushbutton.h> +#include <qlineedit.h> +#include <qregexp.h> +#include <qmessagebox.h> +#include <qdir.h> +#include <qcombobox.h> +#include <qpainter.h> +#include <qtooltip.h> +#include <qimage.h> +#include <kvi_tal_textedit.h> +#ifdef COMPILE_USE_QT4 +#include <q3multilineedit.h> +#include <QDateTime> +#else +#include <qmultilineedit.h> +#endif +#include <qbuffer.h> +#include <qlabel.h> +#include <qregexp.h> + + +#include "kvi_options.h" +#include "kvi_locale.h" +#include "kvi_config.h" +#include "kvi_fileutils.h" +#include "kvi_app.h" +#include "kvi_frame.h" +#include "kvi_iconmanager.h" +#include "kvi_styled_controls.h" +#include "kvi_packagefile.h" +#include "kvi_fileextensions.h" +#include "kvi_filedialog.h" +#include "kvi_msgbox.h" +#include "kvi_selectors.h" +#include "kvi_miscutils.h" +#include "kvi_sourcesdate.h" + + + +KviPackThemeDialog::KviPackThemeDialog(QWidget * pParent,KviPointerList<KviThemeInfo> * pThemeInfoList) +: KviTalWizard(pParent) +{ + m_pThemeInfoList = pThemeInfoList; + + KviThemeInfo * pThemeInfo; + QString szPackageName; + QString szPackageAuthor; + QString szPackageDescription; + QString szPackageVersion; + + m_szPackagePath = QDir::homeDirPath(); + KviQString::ensureLastCharIs(m_szPackagePath,QChar(KVI_PATH_SEPARATOR_CHAR)); + + bool bPackagePathSet = false; + + if(m_pThemeInfoList->count() > 1) + { + szPackageName = "MyThemes"; + szPackageAuthor = __tr2qs_ctx("Your name here","theme"); + szPackageVersion = "1.0.0"; + szPackageDescription = __tr2qs_ctx("Put a package description here...","theme"); + } else { + if(m_pThemeInfoList->count() > 0) + { + pThemeInfo = m_pThemeInfoList->first(); + szPackageName = pThemeInfo->subdirectory(); + szPackageAuthor = pThemeInfo->author(); + szPackageDescription = pThemeInfo->description(); + szPackageVersion = pThemeInfo->version(); + + m_szPackagePath += pThemeInfo->subdirectory(); + if(m_szPackagePath.find(QRegExp("[0-9]\\.[0-9]")) == -1) + { + m_szPackagePath += "-"; + m_szPackagePath += szPackageVersion; + } + m_szPackagePath += "."; + m_szPackagePath += KVI_FILEEXTENSION_THEMEPACKAGE; + + bPackagePathSet = true; + } + } + + if(!bPackagePathSet) + { + m_szPackagePath += szPackageName; + m_szPackagePath += "-"; + m_szPackagePath += szPackageVersion; + m_szPackagePath += "."; + m_szPackagePath += KVI_FILEEXTENSION_THEMEPACKAGE; + } + + setCaption(__tr2qs_ctx("Export Theme - KVIrc","theme")); + setMinimumSize(400,350); + + // welcome page ================================================================================== + QWidget * pPage = new QWidget(this); + QGridLayout * pLayout = new QGridLayout(pPage,2,1,4,4); + + QLabel * pLabel = new QLabel(pPage); + QString szText = "<p>"; + szText += __tr2qs_ctx("This procedure allows you to export the selected themes to a single package. It is useful when you want to distribute your themes to the public.","theme"); + szText += "</p><p>"; + szText += __tr2qs_ctx("You will be asked to provide a package name, a description and, if you want, an icon/screenshot.","theme"); + szText += "</p><p>"; + szText += __tr2qs_ctx("Hit the \"Next\" button to begin.","theme"); + szText += "<p>"; + + pLabel->setText(szText); + pLayout->addWidget(pLabel,0,0); + pLayout->setRowStretch(1,1); + + addPage(pPage,__tr2qs_ctx("Welcome","theme")); + setBackEnabled(pPage,false); + setNextEnabled(pPage,true); + setHelpEnabled(pPage,false); + setFinishEnabled(pPage,false); + + // theme data name ================================================================================ + + pPage = new QWidget(this); + pLayout = new QGridLayout(pPage,2,1,4,4); + + pLabel = new QLabel(pPage); + pLabel->setText(__tr2qs_ctx("This is the information list for the themes you're packaging. If it looks OK press \"Next\" to continue, otherwise press \"Cancel\" and rewiew your themes first.","theme")); + pLabel->setTextFormat(Qt::RichText); + pLayout->addWidget(pLabel,0,0); + + QString szThemesDescription = "<html><body bgcolor=\"#ffffff\">"; + + int iIdx = 0; + QPixmap pixScreenshot; + QString szScreenshotPath; + + for(pThemeInfo = m_pThemeInfoList->first();pThemeInfo;pThemeInfo = m_pThemeInfoList->next()) + { + QString szThemeDescription; + + if(pixScreenshot.isNull()) + { + pixScreenshot = pThemeInfo->smallScreenshot(); + if(!pixScreenshot.isNull()) + szScreenshotPath = pThemeInfo->smallScreenshotPath(); + } + + KviThemeFunctions::getThemeHtmlDescription( + szThemeDescription, + pThemeInfo->name(), + pThemeInfo->version(), + pThemeInfo->description(), + pThemeInfo->subdirectory(), + pThemeInfo->application(), + pThemeInfo->author(), + pThemeInfo->date(), + pThemeInfo->themeEngineVersion(), + pThemeInfo->smallScreenshot(), + iIdx + ); + + if(iIdx > 0) + szThemesDescription += "<hr>"; + szThemesDescription += szThemeDescription; + iIdx++; + } + + szThemesDescription += "</body></html>"; + + KviTalTextEdit * pTextEdit = new KviTalTextEdit(pPage); + pTextEdit->setPaper(QBrush(QColor(255,255,255))); + pTextEdit->setReadOnly(true); + pTextEdit->setText(szThemesDescription); + pLayout->addWidget(pTextEdit,1,0); + pLayout->setRowStretch(1,1); + + addPage(pPage,__tr2qs_ctx("Theme Data","theme")); + setBackEnabled(pPage,true); + setHelpEnabled(pPage,false); + setNextEnabled(pPage,true); + setFinishEnabled(pPage,false); + + // packager informations ================================================================================ + + pPage = new QWidget(this); + pLayout = new QGridLayout(pPage,5,2,4,4); + + pLabel = new QLabel(pPage); + pLabel->setText(__tr2qs_ctx("Here you need to provide informations about you (the packager) and a short description of the package you're creating.","theme")); + pLabel->setTextFormat(Qt::RichText); + pLayout->addMultiCellWidget(pLabel,0,0,0,1); + + pLabel = new QLabel(pPage); + pLabel->setText(__tr2qs_ctx("Package Name:","theme")); + pLayout->addWidget(pLabel,1,0); + + m_pPackageNameEdit = new QLineEdit(pPage); + m_pPackageNameEdit->setText(szPackageName); + pLayout->addWidget(m_pPackageNameEdit,1,1); + + pLabel = new QLabel(pPage); + pLabel->setText(__tr2qs_ctx("Version:","theme")); + pLayout->addWidget(pLabel,2,0); + + m_pPackageVersionEdit = new QLineEdit(pPage); + m_pPackageVersionEdit->setText(szPackageVersion); + pLayout->addWidget(m_pPackageVersionEdit,2,1); + + pLabel = new QLabel(pPage); + pLabel->setText(__tr2qs_ctx("Description:","theme")); + pLayout->addWidget(pLabel,3,0); + + m_pPackageDescriptionEdit = new KviTalTextEdit(pPage); + m_pPackageDescriptionEdit->setText(szPackageDescription); + pLayout->addWidget(m_pPackageDescriptionEdit,3,1); + + pLabel = new QLabel(pPage); + pLabel->setText(__tr2qs_ctx("Package Author:","theme")); + pLayout->addWidget(pLabel,4,0); + + m_pPackagerNameEdit = new QLineEdit(pPage); + m_pPackagerNameEdit->setText(szPackageAuthor); + pLayout->addWidget(m_pPackagerNameEdit,4,1); + + + pLayout->setRowStretch(3,1); + pLayout->setColStretch(1,1); + + addPage(pPage,__tr2qs_ctx("Package Informations","theme")); + setBackEnabled(pPage,true); + setHelpEnabled(pPage,false); + setNextEnabled(pPage,true); + setFinishEnabled(pPage,false); + + // screenshot/logo/icon ================================================================================ + + pPage = new QWidget(this); + pLayout = new QGridLayout(pPage,3,1,4,4); + + pLabel = new QLabel(pPage); + pLabel->setText(__tr2qs_ctx("Here you can choose the image that will appear in the installation dialog for your theme package. It can be an icon, a logo or a screenshot and it should be not larger than 300x225. If you don't provide an image a simple default icon will be used at installation stage.","theme")); + pLabel->setTextFormat(Qt::RichText); + pLayout->addWidget(pLabel,0,0); + + m_pImageLabel = new QLabel(pPage); + m_pImageLabel->setFrameStyle(QFrame::Sunken | QFrame::Panel); + m_pImageLabel->setMinimumSize(300,225); + m_pImageLabel->setAlignment(Qt::AlignCenter | Qt::AlignVCenter); + pLayout->addWidget(m_pImageLabel,1,0); + + QString szFilter = "*.png *.jpg *.xpm"; + m_pImageSelector = new KviFileSelector(pPage,"",&m_szImagePath,true,0,szFilter); + connect(m_pImageSelector,SIGNAL(selectionChanged(const QString &)),this,SLOT(imageSelectionChanged(const QString &))); + pLayout->addWidget(m_pImageSelector,2,0); + pLayout->setRowStretch(1,1); + + m_pImageSelectionPage = pPage; + addPage(pPage,__tr2qs_ctx("Icon/Screenshot","theme")); + setBackEnabled(pPage,true); + setHelpEnabled(pPage,false); + setNextEnabled(pPage,true); + setFinishEnabled(pPage,false); + + // save file name ================================================================================ + + pPage = new QWidget(this); + pLayout = new QGridLayout(pPage,4,1,4,4); + + pLabel = new QLabel(pPage); + pLabel->setText(__tr2qs_ctx("Here you must choose the file name for the theme package. It should have a *.%1 extension.","theme").arg(KVI_FILEEXTENSION_THEMEPACKAGE)); + pLabel->setTextFormat(Qt::RichText); + pLayout->addWidget(pLabel,0,0); + + szFilter = "*."; + szFilter += KVI_FILEEXTENSION_THEMEPACKAGE; + m_pPathSelector = new KviFileSelector(pPage,"",&m_szPackagePath,true,KviFileSelector::ChooseSaveFileName,szFilter); + pLayout->addWidget(m_pPathSelector,1,0); + + pLabel = new QLabel(pPage); + pLabel->setText(__tr2qs_ctx("Finally hit the \"Finish\" button to complete the packaging operation.","theme")); + pLabel->setTextFormat(Qt::RichText); + pLayout->addWidget(pLabel,3,0); + + pLayout->setRowStretch(2,1); + + addPage(pPage,__tr2qs_ctx("Package Path","theme")); + setBackEnabled(pPage,true); + setHelpEnabled(pPage,false); + setNextEnabled(pPage,false); + setFinishEnabled(pPage,true); + + if(!szScreenshotPath.isEmpty()) + { + m_pImageSelector->setSelection(szScreenshotPath); + imageSelectionChanged(szScreenshotPath); + } +} + +KviPackThemeDialog::~KviPackThemeDialog() +{ +} + +void KviPackThemeDialog::imageSelectionChanged(const QString &szImagePath) +{ + QImage pix(szImagePath); + if(!pix.isNull()) + { + QPixmap out; + if(pix.width() > 300 || pix.height() > 225) +#ifdef COMPILE_USE_QT4 + out.convertFromImage(pix.scaled(300,225,Qt::KeepAspectRatio,Qt::SmoothTransformation)); +#else + out.convertFromImage(pix.smoothScale(300,225,QImage::ScaleMin)); +#endif + else + out.convertFromImage(pix); + m_pImageLabel->setPixmap(out); + return; + } + + QMessageBox::critical(this,__tr2qs_ctx("Export Theme - KVIrc","theme"),__tr2qs_ctx("Failed to load the selected image","theme"), + QMessageBox::Ok,QMessageBox::NoButton,QMessageBox::NoButton); + + m_pImageSelector->setSelection(""); + m_pImageLabel->setPixmap(QPixmap()); +} + + +void KviPackThemeDialog::accept() +{ + if(!packTheme())return; + KviTalWizard::accept(); +} + + +bool KviPackThemeDialog::packTheme() +{ + m_pImageSelector->commit(); + m_pPathSelector->commit(); + + QString szPackageAuthor = m_pPackagerNameEdit->text(); + QString szPackageName = m_pPackageNameEdit->text(); + QString szPackageDescription = m_pPackageDescriptionEdit->text(); + QString szPackageVersion = m_pPackageVersionEdit->text(); + + QImage pix(m_szImagePath); + QPixmap out; + if(!pix.isNull()) + { + if(pix.width() > 300 || pix.height() > 225) + #ifdef COMPILE_USE_QT4 + out.convertFromImage(pix.scaled(300,225,Qt::KeepAspectRatio)); + #else + out.convertFromImage(pix.smoothScale(300,225,QImage::ScaleMin)); +#endif + else + out.convertFromImage(pix); + } else { + if(!m_szImagePath.isEmpty()) + { + QMessageBox::critical(this,__tr2qs_ctx("Export Theme - KVIrc","theme"),__tr2qs_ctx("Failed to load the selected image: please fix it","theme"), + QMessageBox::Ok,QMessageBox::NoButton,QMessageBox::NoButton); + setCurrentPage(m_pImageSelectionPage); + return false; + } + } + + KviPackageWriter f; + + QString szTmp = QDateTime::currentDateTime().toString(); + + f.addInfoField("PackageType","ThemePack"); + f.addInfoField("ThemePackVersion","1"); + f.addInfoField("Name",szPackageName); + f.addInfoField("Version",szPackageVersion); + f.addInfoField("Author",szPackageAuthor); + f.addInfoField("Description",szPackageDescription); + f.addInfoField("Date",szTmp); + f.addInfoField("Application","KVIrc " KVI_VERSION "." KVI_SOURCES_DATE); + + if(!out.isNull()) + { + QByteArray * pba = new QByteArray(); +#ifdef COMPILE_USE_QT4 + QBuffer buffer(pba,0); +#else + QBuffer buffer(*pba); +#endif + buffer.open(IO_WriteOnly); + out.save(&buffer,"PNG"); + buffer.close(); + f.addInfoField("Image",pba); // cool :) [no disk access needed] + } + + szTmp.setNum(m_pThemeInfoList->count()); + f.addInfoField("ThemeCount",szTmp); + + int iIdx = 0; + for(KviThemeInfo * pInfo = m_pThemeInfoList->first();pInfo;pInfo = m_pThemeInfoList->next()) + { + KviQString::sprintf(szTmp,"Theme%dName",iIdx); + f.addInfoField(szTmp,pInfo->name()); + KviQString::sprintf(szTmp,"Theme%dVersion",iIdx); + f.addInfoField(szTmp,pInfo->version()); + KviQString::sprintf(szTmp,"Theme%dDescription",iIdx); + f.addInfoField(szTmp,pInfo->description()); + KviQString::sprintf(szTmp,"Theme%dDate",iIdx); + f.addInfoField(szTmp,pInfo->date()); + KviQString::sprintf(szTmp,"Theme%dSubdirectory",iIdx); + f.addInfoField(szTmp,pInfo->subdirectory()); + KviQString::sprintf(szTmp,"Theme%dAuthor",iIdx); + f.addInfoField(szTmp,pInfo->author()); + KviQString::sprintf(szTmp,"Theme%dApplication",iIdx); + f.addInfoField(szTmp,pInfo->application()); + KviQString::sprintf(szTmp,"Theme%dThemeEngineVersion",iIdx); + f.addInfoField(szTmp,pInfo->themeEngineVersion()); + QPixmap pixScreenshot = pInfo->smallScreenshot(); + if(!pixScreenshot.isNull()) + { + KviQString::sprintf(szTmp,"Theme%dScreenshot",iIdx); + QByteArray * pba = new QByteArray(); +#ifdef COMPILE_USE_QT4 + QBuffer bufferz(pba,0); +#else + QBuffer bufferz(*pba); +#endif + bufferz.open(IO_WriteOnly); + pixScreenshot.save(&bufferz,"PNG"); + bufferz.close(); + f.addInfoField(szTmp,pba); + } + + if(!f.addDirectory(pInfo->absoluteDirectory(),pInfo->subdirectory())) + { + szTmp = __tr2qs_ctx("Packaging failed","theme"); + szTmp += ": "; + szTmp += f.lastError(); + QMessageBox::critical(this,__tr2qs_ctx("Export Theme - KVIrc","theme"),szTmp, + QMessageBox::Ok,QMessageBox::NoButton,QMessageBox::NoButton); + } + + iIdx++; + } + + if(!f.pack(m_szPackagePath)) + { + szTmp = __tr2qs_ctx("Packaging failed","theme"); + szTmp += ": "; + szTmp += f.lastError(); + QMessageBox::critical(this,__tr2qs_ctx("Export Theme - KVIrc","theme"),szTmp, + QMessageBox::Ok,QMessageBox::NoButton,QMessageBox::NoButton); + return false; + } + + //KviPackageReader r; + //r.unpack("/root/test.kvt","/root/unpacked_test_kvt"); + + QMessageBox::information(this,__tr2qs_ctx("Export Theme - KVIrc","theme"),__tr2qs("Package saved succesfully"), + QMessageBox::Ok,QMessageBox::NoButton,QMessageBox::NoButton); + + return true; +} + |