aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules/theme/managementdialog.cpp
diff options
context:
space:
mode:
authorGravatar Szymon Tomasz Stefanek2007-01-10 01:34:47 +0000
committerGravatar Szymon Tomasz Stefanek2007-01-10 01:34:47 +0000
commitc7caa2579263eb0ec07625627e9d090f1292a0b0 (patch)
treee6744b330ed28b0a319edd172a86c605de68a99d /src/modules/theme/managementdialog.cpp
parentctrl+w, alt+backspace shortcuts (diff)
downloadKVIrc-c7caa2579263eb0ec07625627e9d090f1292a0b0.tar.gz
KVIrc-c7caa2579263eb0ec07625627e9d090f1292a0b0.tar.bz2
KVIrc-c7caa2579263eb0ec07625627e9d090f1292a0b0.zip
More work on the themeing engine
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@150 17fca916-40b9-46aa-a4ea-0a15b648b75c
Diffstat (limited to 'src/modules/theme/managementdialog.cpp')
-rw-r--r--src/modules/theme/managementdialog.cpp834
1 files changed, 41 insertions, 793 deletions
diff --git a/src/modules/theme/managementdialog.cpp b/src/modules/theme/managementdialog.cpp
index 17822fe0c..3f96ab13b 100644
--- a/src/modules/theme/managementdialog.cpp
+++ b/src/modules/theme/managementdialog.cpp
@@ -29,7 +29,10 @@
#define LVI_MINIMUM_CELL_WIDTH (LVI_MINIMUM_TEXT_WIDTH + LVI_BORDER + LVI_ICON_SIZE + LVI_SPACING + LVI_BORDER)
#include "managementdialog.h"
-#include "kvi_xmladdonloader.h"
+#include "packthemedialog.h"
+#include "savethemedialog.h"
+#include "themefunctions.h"
+
#include "kvi_iconmanager.h"
#include "kvi_msgbox.h"
@@ -71,676 +74,6 @@
extern QRect g_rectManagementDialogGeometry;
-KviSaveThemeDialog::KviSaveThemeDialog(QWidget * par)
-: QDialog(par)
-{
- setCaption(__tr2qs_ctx("Save Current Theme","theme"));
-
- QGridLayout * g = new QGridLayout(this,8,2,4,4);
-
- QLabel * l;
-
- l = new QLabel(__tr2qs_ctx("Theme name:","theme"),this);
- g->addWidget(l,0,0);
-
- m_pThemeNameEdit = new QLineEdit(this);
- g->addMultiCellWidget(m_pThemeNameEdit,0,0,1,2);
- connect(m_pThemeNameEdit,SIGNAL(textChanged(const QString &)),this,SLOT(themeNameChanged(const QString &)));
-
-
- l = new QLabel(__tr2qs_ctx("Version:","theme"),this);
- g->addWidget(l,1,0);
-
- m_pVersionEdit = new QLineEdit(this);
- g->addMultiCellWidget(m_pVersionEdit,1,1,1,2);
-
-
- l = new QLabel(__tr2qs_ctx("Author:","theme"),this);
- g->addWidget(l,2,0);
-
- m_pAuthorEdit = new QLineEdit(this);
- g->addMultiCellWidget(m_pAuthorEdit,2,2,1,2);
-
- l = new QLabel(__tr2qs_ctx("Description:","theme"),this);
- g->addWidget(l,3,0);
-
- m_pDescriptionEdit = new QTextEdit(this);
- g->addMultiCellWidget(m_pDescriptionEdit,3,4,1,2);
-
- m_pIncludeMsgcolors = new KviStyledCheckBox( __tr2qs_ctx("Include message colors information","theme"), this );
- m_pIncludeMsgcolors->setChecked(TRUE);
- g->addMultiCellWidget(m_pIncludeMsgcolors,5,5,0,1);
-
-// l = new QLabel(__tr2qs_ctx("Package type:","theme"),this);
-// g->addWidget(l,6,0);
-
-// m_pFormatCombo = new QComboBox(this);
-// m_pFormatCombo->insertItem(__tr2qs_ctx("KVIrc Package","theme"),0);
-// m_pFormatCombo->insertItem(__tr2qs_ctx("New multi-file format","theme"),1);
-// m_pFormatCombo->insertItem(__tr2qs_ctx("Dublicate Theme","theme"),1);
-// g->addWidget(m_pFormatCombo,6,1);
-
- QHBox * h = new QHBox(this);
- h->setSpacing(7);
- g->addWidget(h,7,2);
- m_pOkButton = new QPushButton(__tr2qs_ctx("OK","theme"),h);
- m_pOkButton->setEnabled(false);
- connect(m_pOkButton,SIGNAL(clicked()),this,SLOT(saveTheme()));
- m_pOkButton->setIconSet(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_ACCEPT)));
-
- QPushButton * pb = new QPushButton(__tr2qs_ctx("Cancel","theme"),h);
- connect(pb,SIGNAL(clicked()),this,SLOT(reject()));
- pb->setIconSet(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_DISCARD)));
-
-}
-
-KviSaveThemeDialog::~KviSaveThemeDialog()
-{
-
-}
-
-void KviSaveThemeDialog::themeNameChanged(const QString &txt)
-{
- m_pOkButton->setEnabled(!txt.isEmpty());
-}
-
-void KviSaveThemeDialog::saveThemeInOldFormat(KviThemeInfo& sto)
-{
- if(!KviFileUtils::directoryExists(sto.szAbsoluteDirectory))
- {
- g_pApp->getLocalKvircDirectory(sto.szAbsoluteDirectory,KviApp::Themes,sto.szSubdirectory,true);
- if(!KviFileUtils::makeDir(sto.szAbsoluteDirectory))
- {
- QMessageBox::critical(this,__tr2qs_ctx("Save Theme - KVIrc","theme"),__tr2qs_ctx("Unable to create theme directory.","theme"),
- QMessageBox::Ok,QMessageBox::NoButton,QMessageBox::NoButton);
- return;
- }
- }
- g_pApp->saveTheme(sto);
- // write down the images
-
- QString szMsg = __tr2qs_ctx("Theme saved successfully to ","theme");
- szMsg += sto.szAbsoluteDirectory;
-
- QMessageBox::information(this,__tr2qs_ctx("Save Theme - KVIrc","theme"),szMsg,QMessageBox::Ok,
- QMessageBox::NoButton,QMessageBox::NoButton);
-}
-
-void KviSaveThemeDialog::saveThemeInNewFormat(KviThemeInfo& sto)
-{
- QString szBaseDir;
- QFileDialog * d = new QFileDialog(this);
- d->setCaption(__tr2qs_ctx("Choose save directory","theme"));
- d->setMode(QFileDialog::DirectoryOnly);
- if(d->exec() == QDialog::Accepted)
- {
- szBaseDir = d->selectedFile();
- KviFileUtils::adjustFilePath(szBaseDir);
- delete d;
- if(szBaseDir.isEmpty())
- {
- QMessageBox::critical(this,__tr2qs_ctx("Save Theme - KVIrc","theme"),__tr2qs_ctx("You must select save directory","theme"),
- QMessageBox::Ok,QMessageBox::NoButton,QMessageBox::NoButton);
- return;
- }
- } else {
- delete d;
- QMessageBox::critical(this,__tr2qs_ctx("Save Theme - KVIrc","theme"),__tr2qs_ctx("You must select save directory","theme"),
- QMessageBox::Ok,QMessageBox::NoButton,QMessageBox::NoButton);
- return;
- }
- KviQString::ensureLastCharIs(szBaseDir,KVI_PATH_SEPARATOR_CHAR);
- sto.szAbsoluteDirectory=szBaseDir+sto.szSubdirectory;
- KviQString::ensureLastCharIs(sto.szAbsoluteDirectory,KVI_PATH_SEPARATOR_CHAR);
- QString szThemeDir=sto.szAbsoluteDirectory;
- sto.szAbsoluteDirectory+="files";
-
- if(!KviFileUtils::makeDir(sto.szAbsoluteDirectory))
- {
- QMessageBox::critical(this,__tr2qs_ctx("Save Theme - KVIrc","theme"),__tr2qs_ctx("Unable to create theme files directory.","theme"),
- QMessageBox::Ok,QMessageBox::NoButton,QMessageBox::NoButton);
- return;
- }
-
- g_pApp->saveTheme(sto);
-
- if(!KviFileUtils::makeDir(szThemeDir+"utils"))
- {
- QMessageBox::critical(this,__tr2qs_ctx("Save Theme - KVIrc","theme"),__tr2qs_ctx("Unable to create theme utils directory.","theme"),
- QMessageBox::Ok,QMessageBox::NoButton,QMessageBox::NoButton);
- return;
- }
-
- QString szInstallerScript;
- g_pApp->getGlobalKvircDirectory(szInstallerScript,KviApp::DefScript,"installer.kvs");
- if(!KviFileUtils::fileExists(szInstallerScript))
- {
- QMessageBox::critical(this,__tr2qs_ctx("Save Theme - KVIrc","theme"),__tr2qs_ctx("Cannot find installer.kvs.","theme"),
- QMessageBox::Ok,QMessageBox::NoButton,QMessageBox::NoButton);
- return;
- }
-
- if(!KviFileUtils::copyFile(szInstallerScript,szThemeDir+"utils/installer.kvs"))
- {
- QMessageBox::critical(this,__tr2qs_ctx("Save Theme - KVIrc","theme"),__tr2qs_ctx("Cannot write installer.kvs.","theme"),
- QMessageBox::Ok,QMessageBox::NoButton,QMessageBox::NoButton);
- return;
- }
-
- g_pApp->getGlobalKvircDirectory(szInstallerScript,KviApp::DefScript,"theme-install.kvs");
- QString szMainScript=szThemeDir+"install.kvs";
- if(!KviFileUtils::copyFile(szInstallerScript,szMainScript))
- {
- QMessageBox::critical(this,__tr2qs_ctx("Save Theme - KVIrc","theme"),__tr2qs_ctx("Cannot write install.kvs.","theme"),
- QMessageBox::Ok,QMessageBox::NoButton,QMessageBox::NoButton);
- return;
- }
- QFile installFile(szMainScript);
- if(!installFile.open(IO_ReadOnly))
- {
- QMessageBox::critical(this,__tr2qs_ctx("Save Theme - KVIrc","theme"),__tr2qs_ctx("Cannot open install.kvs for reading.","theme"),
- QMessageBox::Ok,QMessageBox::NoButton,QMessageBox::NoButton);
- return;
- }
-
- QCString szFileContents;
- szFileContents=installFile.readAll();
- installFile.close();
-
- sto.szName.replace("\"","\\\"");
-
- szFileContents.replace("@THEMENAME@",sto.szName.utf8().data());
-// szFileContents.replace("@THEMENAME@",sto.szName.utf8().data());
- sto.szDescription.replace("\"","\\\"");
- if(sto.szDescription.isEmpty()) sto.szDescription="empty";
- szFileContents.replace("@THEMEDESCRIPTION@",sto.szDescription.utf8().data());
- sto.szVersion.replace("\"","\\\"");
- szFileContents.replace("@THEMEVERSION@",sto.szVersion.utf8().data());
- szFileContents.replace("@SUBDIR@",sto.szSubdirectory.utf8().data());
-
- QString szAliasName="";
- QString m_szId;
-
- struct timeval tv;
- kvi_gettimeofday(&tv,0);
-
- KviQString::sprintf(m_szId,"theme_%d%d%d",tv.tv_usec,rand() % 1000,rand() % 1000);
- szAliasName.prepend(m_szId);
- szFileContents.replace("@ALIASNAME@",szAliasName.utf8().data());
- if(!installFile.open(IO_WriteOnly))
- {
- QMessageBox::critical(this,__tr2qs_ctx("Save Theme - KVIrc","theme"),__tr2qs_ctx("Cannot open install.kvs for writing.","theme"),
- QMessageBox::Ok,QMessageBox::NoButton,QMessageBox::NoButton);
- return;
- }
- installFile.writeBlock(szFileContents.data(),szFileContents.length());
- installFile.close();
-
- QString szMsg = __tr2qs_ctx("Theme saved successfully to ","theme");
- szMsg += szThemeDir;
-
- QMessageBox::information(this,__tr2qs_ctx("Save Theme - KVIrc","theme"),szMsg,QMessageBox::Ok,
- QMessageBox::NoButton,QMessageBox::NoButton);
-}
-
-void KviSaveThemeDialog::saveThemeInXmlFormat(KviThemeInfo& sto)
-{
- QString szFilename;
- QFileDialog * d = new QFileDialog(this);
- d->setCaption(__tr2qs_ctx("Choose filaname","theme"));
- d->setMode(QFileDialog::AnyFile);
- d->setFilter( "KVIrc Packages (*.kvp)" );
- if(d->exec() == QDialog::Accepted)
- {
- szFilename = d->selectedFile();
- KviFileUtils::adjustFilePath(szFilename);
- delete d;
- if(szFilename.isEmpty())
- {
- QMessageBox::critical(this,__tr2qs_ctx("Save Theme - KVIrc","theme"),__tr2qs_ctx("You must select filename","theme"),
- QMessageBox::Ok,QMessageBox::NoButton,QMessageBox::NoButton);
- return;
- }
- } else {
- delete d;
- QMessageBox::critical(this,__tr2qs_ctx("Save Theme - KVIrc","theme"),__tr2qs_ctx("You must select filename","theme"),
- QMessageBox::Ok,QMessageBox::NoButton,QMessageBox::NoButton);
- return;
- }
- if(QFileInfo(szFilename).extension()!="kvp") szFilename.append(".kvp");
- g_pApp->saveXmlTheme(sto,szFilename);
-}
-
-void KviSaveThemeDialog::saveTheme()
-{
- KviThemeInfo sto;
- sto.szName = m_pThemeNameEdit->text();
- if(sto.szName.isEmpty())
- {
- QMessageBox::critical(this,__tr2qs_ctx("Save Theme - KVIrc","theme"),__tr2qs_ctx("You must choose a theme name!","theme"),QMessageBox::Ok,
- QMessageBox::NoButton,QMessageBox::NoButton);
- return;
- }
-
- sto.szAuthor = m_pAuthorEdit->text();
- sto.szDescription = m_pDescriptionEdit->text();
- sto.szDate = QDateTime::currentDateTime().toString();
- sto.szVersion = m_pVersionEdit->text();
- sto.szKvircVersion = KVI_VERSION;
- sto.bIncludeMsgColors=m_pIncludeMsgcolors->isChecked();
-
- if(sto.szVersion.isEmpty())sto.szVersion = "1.0.0";
-
- sto.szSubdirectory = sto.szName + QString("-") + sto.szVersion;
- sto.szSubdirectory.replace(QRegExp("[ \\\\/:][ \\\\/:]*"),"_");
-
-/*
- switch(m_pFormatCombo->currentItem())
- {
- case 0:
- saveThemeInXmlFormat(sto);
- break;
- case 1:
- saveThemeInNewFormat(sto);
- break;
- case 2:*/
- saveThemeInOldFormat(sto);
-/* break;
- }
-*/
- accept();
-}
-
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-KviPackThemeDialog::KviPackThemeDialog(QWidget * pParent,KviPtrList<KviThemeInfo> * pThemeInfoList)
-: QWizard(pParent)
-{
- m_pThemeInfoList = pThemeInfoList;
-
- KviThemeInfo * pThemeInfo;
- QString szPackageName;
- QString szPackageAuthor;
- QString szPackageDescription;
- QString szPackageVersion;
- if(m_pThemeInfoList->count() > 1)
- {
- szPackageName = "MyThemes";
- szPackageAuthor = __tr2qs_ctx("Your name here","theme");
- szPackageVersion = "1.0";
- szPackageDescription = __tr2qs_ctx("Put a package description here...","theme");
- } else {
- if(m_pThemeInfoList->count() > 0)
- {
- pThemeInfo = m_pThemeInfoList->first();
- szPackageName = pThemeInfo->szSubdirectory;
- szPackageAuthor = pThemeInfo->szAuthor;
- szPackageDescription = pThemeInfo->szDescription;
- szPackageVersion = pThemeInfo->szVersion;
- }
- }
-
-
- 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 szAuthor = __tr2qs_ctx("Author","theme");
- QString szCreatedAt = __tr2qs_ctx("Created at","theme");
- QString szCreatedOn = __tr2qs_ctx("Created on","theme");
- QString szSubdirectory = __tr2qs_ctx("Subdirectory","theme");
-
- QString szThemesDescription = "<html><body bgcolor=\"#ffffff\">";
-
- int iIdx = 0;
- for(pThemeInfo = m_pThemeInfoList->first();pThemeInfo;pThemeInfo = m_pThemeInfoList->next())
- {
- QString szThemeDescription;
- KviQString::sprintf(
- szThemeDescription,
- "<p>" \
- "<h2>%Q %Q</h2>" \
- "</p>" \
- "<p>" \
- "<i>%Q</i>" \
- "</p>" \
- "<p>" \
- "%Q: <b>%Q</b><br>" \
- "%Q: <b>%Q</b><br>" \
- "</p>" \
- "<p>" \
- "<font color=\"#808080\">" \
- "%Q: KVIrc %Q<br>" \
- "%Q: %Q<br>" \
- "</font>" \
- "</p>",
- &(pThemeInfo->szName),
- &(pThemeInfo->szVersion),
- &(pThemeInfo->szDescription),
- &szAuthor,
- &(pThemeInfo->szAuthor),
- &szCreatedAt,
- &(pThemeInfo->szDate),
- &szCreatedOn,
- &(pThemeInfo->szKvircVersion),
- &szSubdirectory,
- &(pThemeInfo->szSubdirectory)
- );
- if(iIdx > 0)
- szThemesDescription += "<hr>";
- szThemesDescription += szThemeDescription;
- iIdx++;
- }
-
- szThemesDescription += "</body></html>";
-
- QTextEdit * pTextEdit = new QTextEdit(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 QMultiLineEdit(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);
-
- m_szPackagePath = QDir::homeDirPath();
- KviQString::ensureLastCharIs(m_szPackagePath,QChar(KVI_PATH_SEPARATOR_CHAR));
-
- m_szPackagePath += szPackageName;
- m_szPackagePath += "-";
- m_szPackagePath += szPackageVersion;
- m_szPackagePath += ".";
- m_szPackagePath += KVI_FILEEXTENSION_THEMEPACKAGE;
-
- 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);
-
-}
-
-KviPackThemeDialog::~KviPackThemeDialog()
-{
-}
-
-void KviPackThemeDialog::imageSelectionChanged(const QString &szImagePath)
-{
- QImage pix(szImagePath);
- if(!pix.isNull())
- {
- QPixmap out;
- if(pix.width() > 300 || pix.height() > 225)
- out.convertFromImage(pix.smoothScale(300,225,QImage::ScaleMin));
- 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;
- QWizard::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)
- out.convertFromImage(pix.smoothScale(300,225,QImage::ScaleMin));
- 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);
- showPage(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("KVIrcVersion",KVI_VERSION);
-
- if(!out.isNull())
- {
- QByteArray * pba = new QByteArray();
- QBuffer buffer(*pba);
- 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->szName);
- KviQString::sprintf(szTmp,"Theme%dVersion",iIdx);
- f.addInfoField(szTmp,pInfo->szVersion);
- KviQString::sprintf(szTmp,"Theme%dDescription",iIdx);
- f.addInfoField(szTmp,pInfo->szDescription);
- KviQString::sprintf(szTmp,"Theme%dDate",iIdx);
- f.addInfoField(szTmp,pInfo->szDate);
- KviQString::sprintf(szTmp,"Theme%dSubdirectory",iIdx);
- f.addInfoField(szTmp,pInfo->szSubdirectory);
- KviQString::sprintf(szTmp,"Theme%dAuthor",iIdx);
- f.addInfoField(szTmp,pInfo->szAuthor);
- KviQString::sprintf(szTmp,"Theme%dKVIrcVersion",iIdx);
- f.addInfoField(szTmp,pInfo->szKvircVersion);
- if(!f.addDirectory(pInfo->szAbsoluteDirectory,pInfo->szSubdirectory))
- {
- 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;
-}
-
-
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
KviThemeListBoxItem::KviThemeListBoxItem(QListBox * box,KviThemeInfo * inf)
@@ -749,26 +82,26 @@ KviThemeListBoxItem::KviThemeListBoxItem(QListBox * box,KviThemeInfo * inf)
m_pThemeInfo = inf;
QString t;
t = "<nobr><b>";
- t += inf->szName;
+ t += inf->name();
t += "</b>";
- if(!inf->szVersion.isEmpty()) {
+ if(!inf->version().isEmpty()) {
t += "[";
- t += inf->szVersion;
+ t += inf->version();
t += "]";
}
- if(!inf->szAuthor.isEmpty()) {
+ if(!inf->author().isEmpty()) {
t += " <font color=\"#a0a0a0\"> ";
t += __tr2qs_ctx("by","theme");
t += " ";
- t += inf->szAuthor;
+ t += inf->author();
t += "</font>";
}
t += "</nobr>";
t += "<br><nobr><font size=\"-1\">";
- t += inf->szDescription;
+ t += inf->description();
t += "</font></nobr>";
m_pText = new QSimpleRichText(t,box->font());
int iWidth = box->visibleWidth();
@@ -813,8 +146,6 @@ KviThemeManagementDialog::KviThemeManagementDialog(QWidget * parent)
m_pInstance = this;
- m_pSaveThemeDialog = 0;
-
QGridLayout * g = new QGridLayout(this,3,2,4,4);
QHBox *hb = new QHBox(this);
@@ -853,7 +184,7 @@ KviThemeManagementDialog::KviThemeManagementDialog(QWidget * parent)
tb->setIconSet(*(g_pIconManager->getBigIcon(KVI_BIGICON_OPEN)));
tb->setUsesBigPixmap(true);
QToolTip::add(tb,__tr2qs_ctx("Install Theme Package From Disk","theme"));
- connect(tb,SIGNAL(clicked()),this,SLOT(installFromXml()));
+ connect(tb,SIGNAL(clicked()),this,SLOT(installFromFile()));
tb = new KviStyledToolButton(hb);
tb->setIconSet(*(g_pIconManager->getBigIcon(KVI_BIGICON_WWW)));
@@ -898,19 +229,13 @@ KviThemeManagementDialog::KviThemeManagementDialog(QWidget * parent)
KviThemeManagementDialog::~KviThemeManagementDialog()
{
g_rectManagementDialogGeometry = QRect(pos().x(),pos().y(),size().width(),size().height());
-
- if(m_pSaveThemeDialog)
- {
- delete m_pSaveThemeDialog;
- m_pSaveThemeDialog = 0;
- }
-
m_pInstance = 0;
}
void KviThemeManagementDialog::closeClicked()
{
delete this;
+ m_pInstance = 0;
}
@@ -945,7 +270,7 @@ void KviThemeManagementDialog::packTheme()
}
-void KviThemeManagementDialog::contextMenuRequested ( QListBoxItem * it, const QPoint & pos )
+void KviThemeManagementDialog::contextMenuRequested(QListBoxItem * it,const QPoint & pos)
{
if(it)
{
@@ -959,7 +284,7 @@ void KviThemeManagementDialog::contextMenuRequested ( QListBoxItem * it, const Q
void KviThemeManagementDialog::applyTheme ( QListBoxItem * it)
{
- if(it) m_pListBox->setCurrentItem(it);
+ if(it)m_pListBox->setCurrentItem(it);
applyCurrentTheme();
}
@@ -970,12 +295,21 @@ void KviThemeManagementDialog::applyCurrentTheme()
if(KviMessageBox::yesNo(__tr2qs_ctx("Apply theme - KVIrc","theme"),
__tr2qs_ctx("Do you wish to apply theme \"%Q\" (version %Q)?","theme"),
- &(it->themeInfo()->szName),&(it->themeInfo()->szVersion))) {
-
- QString szPath = it->themeInfo()->szAbsoluteDirectory;
- if(szPath.isEmpty())return;
+ &(it->themeInfo()->name()),&(it->themeInfo()->version())))
+ {
+ QString szPath = it->themeInfo()->absoluteDirectory();
+ if(szPath.isEmpty())return;
+
+ KviThemeInfo out;
+ if(!KviTheme::load(szPath,out))
+ {
+ QString szErr = out.lastError();
+ QString szMsg;
+ KviQString::sprintf(szMsg,__tr2qs_ctx("Failed to apply the specified theme: %Q","theme"),&szErr);
+ QMessageBox::critical(this,__tr2qs_ctx("Apply theme - KVIrc","theme"),szMsg,
+ QMessageBox::Ok,QMessageBox::NoButton,QMessageBox::NoButton);
- g_pApp->loadTheme(szPath);
+ }
}
}
@@ -987,105 +321,30 @@ void KviThemeManagementDialog::deleteTheme()
{
if(!KviMessageBox::yesNo(__tr2qs_ctx("Delete Theme - KVIrc","theme"),
__tr2qs_ctx("Do you really wish to delete theme \"%Q\" (version %Q)?","theme"),
- &(pItem->themeInfo()->szName),&(pItem->themeInfo()->szVersion)))goto jump_out;
+ &(pItem->themeInfo()->name()),&(pItem->themeInfo()->version())))goto jump_out;
- KviFileUtils::deleteDir(pItem->themeInfo()->szAbsoluteDirectory);
+ KviFileUtils::deleteDir(pItem->themeInfo()->absoluteDirectory());
}
}
jump_out:
fillThemeBox();
}
-void KviThemeManagementDialog::installFromXml()
+void KviThemeManagementDialog::installFromFile()
{
int iThemeCount=0;
QString szFileName;
- QDict<QString> * pInfoFields;
- QString * pValue;
- bool bInstall;
- QPixmap pix;
- QByteArray * pByteArray;
-
- const char * check_fields[] = { "Name", "Version", "Author", "Description", "Date", "KVIrcVersion" };
+ QString szError;
if(!KviFileDialog::askForOpenFileName(szFileName,__tr2qs_ctx("Open Theme - KVIrc","theme"),QString::null,"*.kvt"))
return;
- // check if it is a valid theme file
- KviPackageReader r;
- if(!r.readHeader(szFileName))
+ if(!KviThemeFunctions::installThemePackage(szFileName,szError,this))
{
- QString szErr = r.lastError();
- KviMessageBox::information(__tr2qs_ctx("The selected file does not seem to be a valid KVIrc package: %Q","theme"),&szErr);
+ KviMessageBox::information(szError);
return;
}
-
- pInfoFields = r.stringInfoFields();
-
- pValue = pInfoFields->find("PackageType");
- if(!pValue)goto not_a_valid_theme_package;
- if(!KviQString::equalCI(*pValue,"ThemePack"))goto not_a_valid_theme_package;
- pValue = pInfoFields->find("ThemePackVersion");
- if(!pValue)goto not_a_valid_theme_package;
- if(!KviQString::equalCI(*pValue,"1"))goto not_a_valid_theme_package;
-
- // make sure the default fields exist
- for(int i=0;i<6;i++)
- {
- pValue = pInfoFields->find(check_fields[i]);
- if(!pValue)goto not_a_valid_theme_package;
- }
-
- pValue = pInfoFields->find("ThemeCount");
- if(!pValue)goto not_a_valid_theme_package;
- bool bOk;
- iThemeCount = pValue->toInt(&bOk);
- if(!bOk)goto not_a_valid_theme_package;
- if(iThemeCount < 1)goto not_a_valid_theme_package;
-
- // ok.. it should be really valid at this point
-
- // load its picture
- pByteArray = r.binaryInfoFields()->find("Image");
- if(pByteArray)
- {
- pix.loadFromData(*pByteArray,0,0);
- }
-
- if(pix.isNull())
- {
- // load the default icon
- }
-
- /*
- KviUnpackThemeDialog * pDialog = new KviUnpackThemeDialog(this,szFileName);
- bool bInstall = pDialog->exec() == QDialog::Accepted;
- delete pDialog;
- */
-
- bInstall = true;
-
- if(bInstall)
- {
- QString szUnpackPath;
- g_pApp->getLocalKvircDirectory(szUnpackPath,KviApp::Themes);
- if(!r.unpack(szFileName,szUnpackPath))
- {
- QString szErr2 = r.lastError();
- KviMessageBox::information(__tr2qs_ctx("Failed to unpack the selected file: %Q","theme"),&szErr2);
- return;
- }
- }
-
- /*
- KviXmlAddonLoader * pLoader = new KviXmlAddonLoader(szFilename,this);
- pLoader->exec();
- */
fillThemeBox();
- return;
-not_a_valid_theme_package:
- KviMessageBox::information(__tr2qs_ctx("The selected file does not seem to be a valid KVIrc theme package","theme"));
- return;
}
void KviThemeManagementDialog::getMoreThemes()
@@ -1096,15 +355,10 @@ void KviThemeManagementDialog::getMoreThemes()
void KviThemeManagementDialog::saveCurrentTheme()
{
- if(m_pSaveThemeDialog)return;
- m_pSaveThemeDialog = new KviSaveThemeDialog(this);
- m_pSaveThemeDialog->exec();
- if(m_pSaveThemeDialog)
- {
- delete m_pSaveThemeDialog;
- m_pSaveThemeDialog = 0;
- fillThemeBox();
- }
+ KviSaveThemeDialog * pSaveThemeDialog = new KviSaveThemeDialog(this);
+ pSaveThemeDialog->exec();
+ delete pSaveThemeDialog;
+ fillThemeBox();
}
void KviThemeManagementDialog::fillThemeBox(const QString &szDir)
@@ -1122,10 +376,10 @@ void KviThemeManagementDialog::fillThemeBox(const QString &szDir)
szTest += KVI_PATH_SEPARATOR_CHAR;
szTest += *it;
- KviThemeInfo * inf = new KviThemeInfo;
- inf->szSubdirectory = *it;
- if(g_pApp->loadThemeInfo(szTest,*inf))
+ KviThemeInfo * inf = new KviThemeInfo();
+ if(inf->loadFromDirectory(szTest))
{
+ inf->setSubdirectory(*it);
KviThemeListBoxItem * item = 0;
item = new KviThemeListBoxItem(m_pListBox,inf);
} else {
@@ -1138,18 +392,12 @@ void KviThemeManagementDialog::fillThemeBox()
{
m_pListBox->clear();
-// KviThemeInfo * ti = new KviThemeInfo;
-// ti->szName = __tr2qs_ctx("Current Theme","theme");
-
-// KviThemeListBoxItem * itewrq = new KviThemeListBoxItem(m_pListBox,ti);
-
QString szDir;
g_pApp->getGlobalKvircDirectory(szDir,KviApp::Themes);
fillThemeBox(szDir);
g_pApp->getLocalKvircDirectory(szDir,KviApp::Themes);
fillThemeBox(szDir);
-// m_pListBox->setCurrentItem(itewrq);
enableDisableButtons();
}