From 9da6b24b5684270fc96eed34cffb969b786fa389 Mon Sep 17 00:00:00 2001 From: Elvio Basello Date: Wed, 28 Oct 2009 01:48:31 +0000 Subject: moar work on addon packaging system (wip), updated its doc; removed useless filter; I somehow introduced a glitch in the installer creation, I'll investigate on this git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@3580 17fca916-40b9-46aa-a4ea-0a15b648b75c --- src/modules/addon/managementdialog.cpp | 13 +- src/modules/addon/packaddondialog.cpp | 362 ++++++++++++++++++--------------- src/modules/addon/packaddondialog.h | 80 +++++--- 3 files changed, 250 insertions(+), 205 deletions(-) (limited to 'src/modules') diff --git a/src/modules/addon/managementdialog.cpp b/src/modules/addon/managementdialog.cpp index 8acfd3e53..6f01d26da 100644 --- a/src/modules/addon/managementdialog.cpp +++ b/src/modules/addon/managementdialog.cpp @@ -277,20 +277,13 @@ void KviScriptManagementDialog::installScript() if(!KviFileDialog::askForOpenFileName( szFileName, __tr2qs("Please select the addon installation file"), - QString(),KVI_FILTER_SCRIPTS,false,true + QString(),KVI_FILTER_ADDON,false,true )) return; szFileName.replace("\\","\\\\"); - // Switch between script and addon - if(szFileName.endsWith(".kvs")) - { - QString szCmd = "parse \""; - szCmd += szFileName; - szCmd += "\""; - - KviKvsScript::run(szCmd,g_pActiveWindow); - } else if(szFileName.endsWith(".kva")) + // Sanity check + if(szFileName.endsWith(".kva")) { if(!KviAddonFunctions::installAddonPackage(szFileName,szError,this)) { diff --git a/src/modules/addon/packaddondialog.cpp b/src/modules/addon/packaddondialog.cpp index bbbbfc028..c51e9542d 100644 --- a/src/modules/addon/packaddondialog.cpp +++ b/src/modules/addon/packaddondialog.cpp @@ -25,28 +25,21 @@ #include "packaddondialog.h" #include "addonfunctions.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_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" #include #include +#include #include #include +#include #include -#include -#include KviPackAddonDialog::KviPackAddonDialog(QWidget * pParent) @@ -81,10 +74,8 @@ KviPackAddonDialog::KviPackAddonDialog(QWidget * pParent) setPixmap(QWizard::LogoPixmap,*pLogo); #endif - // Add the properties to handle fields - setDefaultProperty("QTextEdit","plainText","textChanged()"); - setDefaultProperty("KviFileSelector","file","selectionChanged()"); - setDefaultProperty("KviDirectorySelector","dir","selectionChanged()"); + // Add a default property for file selectors + setDefaultProperty("KviFileSelector","tmpFile",SIGNAL(selectionChanged(const QString &))); // Welcome page QWizardPage * pPage = new QWizardPage(this); @@ -118,9 +109,9 @@ KviPackAddonDialog::KviPackAddonDialog(QWidget * pParent) m_pPackAddonSaveSelectionWidget = new KviPackAddonSaveSelectionWidget(this); addPage(m_pPackAddonSaveSelectionWidget); - // Final results - m_pPackAddonSummaryWidget = new KviPackAddonSummaryWidget(this); - addPage(m_pPackAddonSummaryWidget); + // Summary info + m_pPackAddonSummaryInfoWidget = new KviPackAddonSummaryInfoWidget(this); + addPage(m_pPackAddonSummaryInfoWidget); } KviPackAddonDialog::~KviPackAddonDialog() @@ -133,114 +124,87 @@ void KviPackAddonDialog::accept() QWizard::accept(); } -bool KviPackAddonDialog::checkDirTree(QString & szAddonDir, QString * pszError) +bool KviPackAddonDialog::checkDirTree(QString * pszError) { if(pszError) *pszError = ""; - QDir addon(szAddonDir); + QDir addon(m_szDirPath); if(!addon.exists()) { *pszError = __tr2qs_ctx("The selected directory does not exist.","addon"); return false; } - QDir source(szAddonDir + "/src"); + QDir source(m_szDirPath + "/src"); if(!source.exists()) { *pszError = __tr2qs_ctx("The sources directory (src) does not exist.","addon"); return false; } - QDir locale(szAddonDir + "/locale"); + QDir locale(m_szDirPath + "/locale"); if(!locale.exists()) { *pszError = __tr2qs_ctx("The translations directory (locale) does not exist.","addon"); return false; } - QDir sound(szAddonDir + "/sound"); + QDir sound(m_szDirPath + "/sound"); if(!sound.exists()) { *pszError = __tr2qs_ctx("The sounds directory (sound) does not exist.","addon"); return false; } - QDir pics(szAddonDir + "/pics"); + QDir pics(m_szDirPath + "/pics"); if(!pics.exists()) { *pszError = __tr2qs_ctx("The pictures directory (pics) does not exist.","addon"); return false; } - QDir config(szAddonDir + "/config"); + QDir config(m_szDirPath + "/config"); if(!config.exists()) { *pszError = __tr2qs_ctx("The configurations directory (config) does not exist.","addon"); return false; } - QDir help(szAddonDir + "/help"); + QDir help(m_szDirPath + "/help"); if(!help.exists()) { *pszError = __tr2qs_ctx("The help directory (help) does not exist.","addon"); return false; } + QFileInfo init(m_szDirPath + "/init.kvs"); + if(!init.exists()) + { + *pszError = __tr2qs_ctx("The initialization script (init.kvs) does not exist.","addon"); + return false; + } + return true; } -bool KviPackAddonDialog::createInstaller(QString & szAddonDir, QString * pszError) +bool KviPackAddonDialog::createInstaller(QString * pszError) { if(pszError) *pszError = ""; - // We don't need to check dir existance since it was checked just before - QDir addon(szAddonDir); - - // Open file for writing - QFile installer(addon.filePath("install.kvs")); - if(!installer.open(QIODevice::ReadWrite)) - { - *pszError = __tr2qs_ctx("Cannot open file for writing.","addon"); - return false; - } -#if 0 - // Get widgets data - KviPackAddonInfoPackageWidget * pInfo = infoWidget(); - if(!pInfo) - { - *pszError = __tr2qs_ctx("The info widget does not exist","addon"); - return false; - } - - KviPackAddonFileSelectionWidget * pFile = fileWidget(); - if(!pFile) - { - *pszError = __tr2qs_ctx("The file widget does not exist","addon"); - return false; - } -#endif - // Get data from registered fields - QString szAuthor = field("packageAuthor").toString(); - QString szName = field("packageName").toString(); - QString szVersion = field("packageVersion").toString(); - QString szDescription = field("packageDescription").toString(); - QString szMinVersion = field("packageMinVersion").toString(); - QString szIcon = field("packageIcon").toString(); - // Start creating install.kvs: header QString szTmp; szTmp += QString("# This file is generated automatically. Do NOT touch unless you know what are you doing\n#\n"); - szTmp += QString("# %1\n# Written by %2\n# %3\n\n").arg(szName) \ - .arg(szAuthor).arg(szDescription); + szTmp += QString("# %1 %2\n# Written by %3\n# %4\n\n").arg(m_szName) \ + .arg(m_szVersion).arg(m_szAuthor).arg(m_szDescription); szTmp += "# Register the script: this must be the first instruction executed\n# since it will abort with an error when a greater version is already installed\n"; // install.kvs: addon registration szTmp += QString("addon.register(\"%1\",\"%2\",\"%1\",\"%3\",\"%4\",\"%5\")\n") \ - .arg(szName).arg(szVersion) \ - .arg(szDescription).arg(szMinVersion) \ - .arg(szIcon); + .arg(m_szName).arg(m_szVersion) \ + .arg(m_szDescription).arg(m_szMinVersion) \ + .arg(m_szIcon); szTmp += "{\n\t# This is our uninstall callback: it will be called by KVIrc when addon.uninstall is invoked\n\t"; - szTmp += QString("%1::uninstall::uninstall\n}\n\n").arg(szName); + szTmp += QString("%1::uninstall::uninstall\n}\n\n").arg(m_szName); szTmp += "# Ok, addon.register succeeded. We can go on with the installation.\n\n"; // install.kvs: run path @@ -253,16 +217,16 @@ bool KviPackAddonDialog::createInstaller(QString & szAddonDir, QString * pszErro // install.kvs: copy files szTmp += "# Copy files in each subdirectory\n# the pics\n"; - szTmp += QString("%installer->$copyFiles(\"%mypath/pics/\",\"*.png\",$file.localdir(\"pics/%1\"))\n\n").arg(szName); + szTmp += QString("%installer->$copyFiles(\"%mypath/pics/\",\"*.png\",$file.localdir(\"pics/%1\"))\n\n").arg(m_szName); szTmp += "# the translations\n"; szTmp += "%installer->$copyFiles(\"%mypath/locale/\",\"*.mo\",$file.localdir(\"locale\"))\n\n"; szTmp += "# the documentation\n"; - szTmp += QString("%installer->$copyFiles(\"%mypath/help/en/%1/\",\"*.html\",$file.localdir(\"help/en/%1\"))\n\n").arg(szName); + szTmp += QString("%installer->$copyFiles(\"%mypath/help/en/%1/\",\"*.html\",$file.localdir(\"help/en/%1\"))\n\n").arg(m_szName); // install.kvs: generate uninstall alias szTmp += "# Generate the uninstall alias\n"; szTmp += QString("%installer->$generateUninstallAlias(\"%1::uninstall::uninstallfiles\")\n\n") \ - .arg(szName); + .arg(m_szName); // install.kvs: kill the installer class szTmp += "# Kill the installer helper\n"; @@ -272,14 +236,14 @@ bool KviPackAddonDialog::createInstaller(QString & szAddonDir, QString * pszErro szTmp += "# Fetch the complete script\n"; szTmp += "%files[] = $file.ls($file.extractpath($0)/src,f)\n"; szTmp += QString("%alias = \"alias(%1::uninstall::uninstallaliases){$lf\"\n") \ - .arg(szName); + .arg(m_szName); szTmp += "for(%i=0; %i<$length(%files[]); %i++)\n{\n"; szTmp += "\tinclude $file.extractpath($0)/src/%files[%i]\n"; szTmp += "\t%flt = $str.left(%files[%i],$($str.len(%files[%i])-4))\n"; szTmp += "\t%file = $str.replace(%flt,\"::\",\"_\")\n"; szTmp += "\t%alias .= \"alias(%file){};$lf\"\n}\n"; szTmp += QString("%alias .= \"alias(%1::uninstall::uninstallaliases){};$lf\"\n") \ - .arg(szName); + .arg(m_szName); szTmp += "%alias .= \"}\"\n"; szTmp += "eval %alias\n\n"; @@ -291,7 +255,18 @@ bool KviPackAddonDialog::createInstaller(QString & szAddonDir, QString * pszErro QByteArray buffer; buffer.append(szTmp.toUtf8()); - // Finally, write the buffer to the file descriptor + // We don't need to check dir existance since it was checked just before + QDir addon(m_szDirPath); + + // Open file for writing + QFile installer(addon.filePath("install.kvs")); + if(!installer.open(QIODevice::ReadWrite)) + { + *pszError = __tr2qs_ctx("Cannot open file for writing.","addon"); + return false; + } + + // Write the buffer to the file descriptor if(installer.write(buffer) == -1) { *pszError = __tr2qs_ctx("Cannot write to the file descriptor.","addon"); @@ -306,31 +281,35 @@ bool KviPackAddonDialog::packAddon() QString szError; // Get data from registered fields - QString szAuthor = field("packageAuthor").toString(); - QString szName = field("packageName").toString(); - QString szVersion = field("packageVersion").toString(); - QString szDescription = field("packageDescription").toString(); - QString szDirPath = field("packageDirPath").toString(); - QString szSavePath = field("packageSavePath").toString(); -/* - QString szPackageAuthor = m_pPackAddonInfoPackageWidget->packageAuthor(); - QString szPackageName = m_pPackAddonInfoPackageWidget->packageName(); - QString szPackageVersion = m_pPackAddonInfoPackageWidget->packageVersion(); - QString szPackageDescription = m_pPackAddonInfoPackageWidget->packageDescription(); - QString szDirPath = m_pPackAddonFileSelectionWidget->dirPath(); -*//* + m_szAuthor = field("packageAuthor").toString(); + m_szName = field("packageName").toString(); + m_szVersion = field("packageVersion").toString(); + m_szDescription = field("packageDescription").toString(); + m_szMinVersion = field("packageMinVersion").toString(); + m_szIcon = field("packageIcon").toString().section("/",-1); + m_szDirPath = field("packageDirPath").toString(); + m_szSavePath = field("packageSavePath").toString(); + // Check the addon tree - if(!checkDirTree(szDirPath,&szError)) + if(!checkDirTree(&szError)) { QMessageBox::critical(this, __tr2qs_ctx("Addon Packaging Error","addon"), szError,QMessageBox::Ok,QMessageBox::NoButton,QMessageBox::NoButton ); return false; - }*/ + } + + // Raise the files summary dialog + m_pPackAddonSummaryFilesWidget = new KviPackAddonSummaryFilesWidget(this); + m_pPackAddonSummaryFilesWidget->setPath(m_szDirPath); + if(m_pPackAddonSummaryFilesWidget->exec() == QDialog::Rejected) + { + return false; + } // Create the installer file - if(!createInstaller(szDirPath,&szError)) + if(!createInstaller(&szError)) { QMessageBox::critical(this, __tr2qs_ctx("Addon Packaging Error","addon"), @@ -338,45 +317,24 @@ bool KviPackAddonDialog::packAddon() return false; } -return false; -#if 0 -/* - QString szSourcePath = m_pPackAddonFileSelectionWidget->sourcePath(); - QString szConfigPath = m_pPackAddonFileSelectionWidget->configPath(); - QString szImagePath = m_pPackAddonFileSelectionWidget->imagePath(); - QString szLocalePath = m_pPackAddonFileSelectionWidget->localePath(); - QString szHelpPath = m_pPackAddonFileSelectionWidget->helpPath(); - QString szSoundPath = m_pPackAddonFileSelectionWidget->soundPath(); - QString szInstallPath = m_pPackAddonFileSelectionWidget->installerPath(); -*/ - QString szPackagePath = m_pPackAddonSaveSelectionWidget->savePath(); - - // We need mandatory unix like path separator -/* - szSourcePath.replace('\\',"/"); - szConfigPath.replace('\\',"/"); - szImagePath.replace('\\',"/"); - szLocalePath.replace('\\',"/"); - szHelpPath.replace('\\',"/"); - szSoundPath.replace('\\',"/"); - szInstallPath.replace('\\',"/"); -*/ - szPackagePath.replace('\\',"/"); + // We need mandatory UNIX like path separators + m_szDirPath.replace("\\","/"); + m_szSavePath.replace("\\","/"); QString szTmp = QDateTime::currentDateTime().toString(); KviPackageWriter pw; pw.addInfoField("PackageType","AddonPack"); pw.addInfoField("AddonPackVersion",KVI_CURRENT_ADDONS_ENGINE_VERSION); - pw.addInfoField("Name",szPackageName); - pw.addInfoField("Version",szPackageVersion); - pw.addInfoField("Author",szPackageAuthor); - pw.addInfoField("Description",szPackageDescription); + pw.addInfoField("Name",m_szName); + pw.addInfoField("Version",m_szVersion); + pw.addInfoField("Author",m_szAuthor); + pw.addInfoField("Description",m_szDescription); pw.addInfoField("Date",szTmp); pw.addInfoField("Application","KVIrc " KVI_VERSION "." KVI_SOURCES_DATE); // Add source dir - if(!pw.addDirectory(szSourcePath,"src/")) + if(!pw.addDirectory(m_szDirPath + "/src","src/")) { szTmp = __tr2qs_ctx("Packaging failed","addon"); szTmp += ": "; @@ -386,7 +344,7 @@ return false; } // Add config dir - if(!pw.addDirectory(szConfigPath,"config/scripts/")) + if(!pw.addDirectory(m_szDirPath + "/config","config/scripts/" + m_szName)) { szTmp = __tr2qs_ctx("Packaging failed","addon"); szTmp += ": "; @@ -396,7 +354,17 @@ return false; } // Add image dir - if(!pw.addDirectory(szImagePath,"pics/")) + if(!pw.addDirectory(m_szDirPath + "/pics","pics/" + m_szName)) + { + szTmp = __tr2qs_ctx("Packaging failed","addon"); + szTmp += ": "; + szTmp += pw.lastError(); + QMessageBox::critical(this,__tr2qs_ctx("Export Addon - KVIrc","addon"),szTmp,QMessageBox::Ok,QMessageBox::NoButton,QMessageBox::NoButton); + return false; + } + + // Add sound dir + if(!pw.addDirectory(m_szDirPath + "/sound","sound/" + m_szName)) { szTmp = __tr2qs_ctx("Packaging failed","addon"); szTmp += ": "; @@ -406,7 +374,7 @@ return false; } // Add localization dir - if(!pw.addDirectory(szLocalePath,"locale/")) + if(!pw.addDirectory(m_szDirPath + "/locale","locale/" + m_szName)) { szTmp = __tr2qs_ctx("Packaging failed","addon"); szTmp += ": "; @@ -414,9 +382,9 @@ return false; QMessageBox::critical(this,__tr2qs_ctx("Export Addon - KVIrc","addon"),szTmp,QMessageBox::Ok,QMessageBox::NoButton,QMessageBox::NoButton); return false; } - +#if 0 // Add help dir - if(!pw.addDirectory(szImagePath,"help/en/")) + if(!pw.addDirectory(m_szDirPath + "/help","help/")) { szTmp = __tr2qs_ctx("Packaging failed","addon"); szTmp += ": "; @@ -424,9 +392,9 @@ return false; QMessageBox::critical(this,__tr2qs_ctx("Export Addon - KVIrc","addon"),szTmp,QMessageBox::Ok,QMessageBox::NoButton,QMessageBox::NoButton); return false; } - - // Add sound dir - if(!pw.addDirectory(szImagePath,"audio/")) +#endif + // Add initialization script + if(!pw.addFile(m_szDirPath + "/init.kvs","init.kvs")) { szTmp = __tr2qs_ctx("Packaging failed","addon"); szTmp += ": "; @@ -434,9 +402,9 @@ return false; QMessageBox::critical(this,__tr2qs_ctx("Export Addon - KVIrc","addon"),szTmp,QMessageBox::Ok,QMessageBox::NoButton,QMessageBox::NoButton); return false; } - + // Add installer script - if(!pw.addFile(szInstallPath,"install.kvs")) + if(!pw.addFile(m_szDirPath + "/install.kvs","install.kvs")) { szTmp = __tr2qs_ctx("Packaging failed","addon"); szTmp += ": "; @@ -446,18 +414,17 @@ return false; } // Create the addon package - if(szPackagePath.isEmpty()) + if(m_szSavePath.isEmpty()) { - szPackagePath = QDir::homePath(); - KviQString::ensureLastCharIs(szPackagePath,QChar(KVI_PATH_SEPARATOR_CHAR)); - szPackagePath += szPackageName; - szPackagePath += "-"; - szPackagePath += szPackageVersion; - szPackagePath += KVI_FILEEXTENSION_ADDONPACKAGE; - qDebug("Addon name used: %s",szPackagePath.toUtf8().data()); + m_szSavePath = QDir::homePath(); + KviQString::ensureLastCharIs(m_szSavePath,QChar(KVI_PATH_SEPARATOR_CHAR)); + m_szSavePath += m_szName; + m_szSavePath += "-"; + m_szSavePath += m_szVersion; + m_szSavePath += KVI_FILEEXTENSION_ADDONPACKAGE; } - if(!pw.pack(szPackagePath)) + if(!pw.pack(m_szSavePath)) { szTmp = __tr2qs_ctx("Packaging failed","addon"); szTmp += ": "; @@ -466,16 +433,20 @@ return false; return false; } - QMessageBox::information(this,__tr2qs_ctx("Export Addon - KVIrc","addon"),__tr2qs("Package saved successfully in ") + szPackagePath,QMessageBox::Ok,QMessageBox::NoButton,QMessageBox::NoButton); + // Debug purpose + KviPackageReader pr; + pr.unpack("/home/hellvis69/Test-2.0.3.kva","/home/hellvis69/unpacked_test_kva"); + + QMessageBox::information(this,__tr2qs_ctx("Export Addon - KVIrc","addon"),__tr2qs("Package saved successfully in ") + m_szSavePath,QMessageBox::Ok,QMessageBox::NoButton,QMessageBox::NoButton); return true; -#endif } KviPackAddonInfoPackageWidget::KviPackAddonInfoPackageWidget(KviPackAddonDialog * pParent) : QWizardPage(pParent) { + setObjectName("addon_package_info_page"); setTitle(__tr2qs_ctx("Package Informations","addon")); setSubTitle(__tr2qs_ctx("Here you need to provide informations about you (the packager) and a short description of the package you're creating.","addon")); @@ -511,13 +482,11 @@ KviPackAddonInfoPackageWidget::KviPackAddonInfoPackageWidget(KviPackAddonDialog pLabel = new QLabel(this); pLabel->setText(__tr2qs_ctx("Package &Description:","addon")); pLayout->addWidget(pLabel,3,0); - - m_pPackageDescriptionEdit = new QTextEdit(this); - m_pPackageDescriptionEdit->setBackgroundRole(QPalette::Window); - m_pPackageDescriptionEdit->setText(__tr2qs_ctx("Put a package description here...","addon")); + + m_pPackageDescriptionEdit = new QLineEdit(this); + m_pPackageDescriptionEdit->setText(__tr2qs_ctx("Description must be short","addon")); pLabel->setBuddy(m_pPackageDescriptionEdit); - pLayout->addWidget(m_pPackageDescriptionEdit,3,1,1,2); - pLayout->setRowStretch(1,1); + pLayout->addWidget(m_pPackageDescriptionEdit,3,1); pLabel = new QLabel(this); pLabel->setText(__tr2qs_ctx("Minimum &KVIrc Version:","addon")); @@ -532,9 +501,7 @@ KviPackAddonInfoPackageWidget::KviPackAddonInfoPackageWidget(KviPackAddonDialog registerField("packageAuthor*",m_pPackageAuthorEdit); registerField("packageName*",m_pPackageNameEdit); registerField("packageVersion*",m_pPackageVersionEdit); - // FIXME: if the description field is changed before the others, it work, otherwise not - //registerField("packageDescription*",m_pPackageDescriptionEdit); - registerField("packageDescription",m_pPackageDescriptionEdit); + registerField("packageDescription*",m_pPackageDescriptionEdit); registerField("packageMinVersion",m_pPackageMinVersionEdit); } @@ -546,6 +513,7 @@ KviPackAddonInfoPackageWidget::~KviPackAddonInfoPackageWidget() KviPackAddonFileSelectionWidget::KviPackAddonFileSelectionWidget(KviPackAddonDialog * pParent) : QWizardPage(pParent) { + setObjectName("addon_package_file_page"); setTitle(__tr2qs_ctx("Package Files","addon")); setSubTitle(__tr2qs_ctx("Here you need to select the directory where the addon files are.","addon")); @@ -560,11 +528,8 @@ KviPackAddonFileSelectionWidget::KviPackAddonFileSelectionWidget(KviPackAddonDia pLayout->addWidget(m_pPackageIconEdit); // Store data in the fields - // FIXME they seem to ignore KviFile/DirSelector properties - //registerField("packageDirPath*",m_pPackageIconEdit); - //registerField("packageIcon*",m_pPackageIconEdit); - registerField("packageDirPath",m_pDirPathSelector); - registerField("packageIcon",m_pPackageIconEdit); + registerField("packageDirPath*",m_pDirPathSelector); + registerField("packageIcon*",m_pPackageIconEdit); } KviPackAddonFileSelectionWidget::~KviPackAddonFileSelectionWidget() @@ -575,19 +540,20 @@ KviPackAddonFileSelectionWidget::~KviPackAddonFileSelectionWidget() KviPackAddonSaveSelectionWidget::KviPackAddonSaveSelectionWidget(KviPackAddonDialog * pParent) : QWizardPage(pParent) { + setObjectName("addon_package_save_page"); setTitle(__tr2qs_ctx("Save Package","addon")); setSubTitle(__tr2qs_ctx("Here you need to provide the path where to save the addon package","addon")); QVBoxLayout * pLayout = new QVBoxLayout(this); + QString szDummy; + // Select save path - m_pSavePathSelector = new KviFileSelector(this,__tr2qs_ctx("Select save path:","addon"),&m_szSavePath,true,KviFileSelector::ChooseSaveFileName,KVI_FILTER_ADDON); + m_pSavePathSelector = new KviFileSelector(this,__tr2qs_ctx("Select save path:","addon"),&szDummy,true,KviFileSelector::ChooseSaveFileName,KVI_FILTER_ADDON); pLayout->addWidget(m_pSavePathSelector); // Store data in the fields - // FIXME they seem to ignore KviFile/DirSelector properties - //registerField("packageSavePath*",m_pSavePathSelector); - registerField("packageSavePath",m_pSavePathSelector); + registerField("packageSavePath*",m_pSavePathSelector); } KviPackAddonSaveSelectionWidget::~KviPackAddonSaveSelectionWidget() @@ -601,33 +567,33 @@ void KviPackAddonSaveSelectionWidget::initializePage() QString szVersion = field("packageVersion").toString(); // Create addon name - QString m_szSavePath = QDir::homePath(); - KviQString::ensureLastCharIs(m_szSavePath,QChar(KVI_PATH_SEPARATOR_CHAR)); - m_szSavePath += szName; - m_szSavePath += "-"; - m_szSavePath += szVersion; - m_szSavePath += KVI_FILEEXTENSION_ADDONPACKAGE; + QString szSavePath = QDir::homePath(); + KviQString::ensureLastCharIs(szSavePath,QChar(KVI_PATH_SEPARATOR_CHAR)); + szSavePath += szName; + szSavePath += "-"; + szSavePath += szVersion; + szSavePath += KVI_FILEEXTENSION_ADDONPACKAGE; + m_pSavePathSelector->setTmpFile(szSavePath); } -KviPackAddonSummaryWidget::KviPackAddonSummaryWidget(KviPackAddonDialog * pParent) +KviPackAddonSummaryInfoWidget::KviPackAddonSummaryInfoWidget(KviPackAddonDialog * pParent) : QWizardPage(pParent) { + setObjectName("addon_package_summary_info_page"); setTitle(__tr2qs_ctx("Final Informations","addon")); - setSubTitle(__tr2qs_ctx("Here there are the informations you provided. If they are correct, hit the \"Finish\" button to complete the packaging operations.","addon")); - - m_pParent = pParent; + setSubTitle(__tr2qs_ctx("Here there are the informations you provided. If these informations are correct, hit the \"Finish\" button to complete the packaging operations.","addon")); QVBoxLayout * pLayout = new QVBoxLayout(this); m_pLabelInfo = new QLabel(this); pLayout->addWidget(m_pLabelInfo); } -KviPackAddonSummaryWidget::~KviPackAddonSummaryWidget() +KviPackAddonSummaryInfoWidget::~KviPackAddonSummaryInfoWidget() { } -void KviPackAddonSummaryWidget::initializePage() +void KviPackAddonSummaryInfoWidget::initializePage() { // Get data from registered fields QString szAuthor = field("packageAuthor").toString(); @@ -675,3 +641,65 @@ void KviPackAddonSummaryWidget::initializePage() m_pLabelInfo->setText(szText); } + + +KviPackAddonSummaryFilesWidget::KviPackAddonSummaryFilesWidget(KviPackAddonDialog * pParent) +: QDialog(pParent) +{ + setObjectName("addon_package_summary_file_dialog"); + setWindowTitle(__tr2qs_ctx("File Summary","addon")); + setWindowModality(Qt::WindowModal); + setModal(true); + + QVBoxLayout * pLayout = new QVBoxLayout(this); + + QLabel * pLabel = new QLabel(this); + pLabel->setText(__tr2qs_ctx("Here there are the files I found in the directories you provided.\nIf these and the informations showed in the previous page are correct, hit the \"Finish\" button to complete\nthe packaging operations.","addon")); + pLayout->addWidget(pLabel); + + m_pFiles = new QTextEdit(this); + m_pFiles->setReadOnly(true); + pLayout->addWidget(m_pFiles); + + KviTalHBox * pBox = new KviTalHBox(this); + QPushButton * pCancel = new QPushButton(pBox); + pCancel->setText(__tr2qs_ctx("Cancel","addon")); + connect(pCancel,SIGNAL(clicked()),this,SLOT(reject())); + + QPushButton * pAccept = new QPushButton(pBox); + pAccept->setText(__tr2qs_ctx("Finish","addon")); + connect(pAccept,SIGNAL(clicked()),this,SLOT(accept())); + pLayout->addWidget(pBox); +} + +KviPackAddonSummaryFilesWidget::~KviPackAddonSummaryFilesWidget() +{ +} + +void KviPackAddonSummaryFilesWidget::accept() +{ + QDialog::accept(); +} + +void KviPackAddonSummaryFilesWidget::reject() +{ + QDialog::reject(); +} + +void KviPackAddonSummaryFilesWidget::showEvent(QShowEvent *) +{ + QStringList list; + + QDirIterator it(m_szPath,QDir::AllEntries | QDir::NoDotAndDotDot,QDirIterator::Subdirectories); + + // Iterate through the addon dir and its subdirs + while(it.hasNext()) + { + list.append(it.next()); + } + + // QDirIterator does not support sorting, so do it manually + list.sort(); + + m_pFiles->setPlainText(list.join("\n")); +} diff --git a/src/modules/addon/packaddondialog.h b/src/modules/addon/packaddondialog.h index c4943e757..fea728d0f 100644 --- a/src/modules/addon/packaddondialog.h +++ b/src/modules/addon/packaddondialog.h @@ -47,7 +47,8 @@ class QLabel; class KviPackAddonInfoPackageWidget; class KviPackAddonFileSelectionWidget; class KviPackAddonSaveSelectionWidget; -class KviPackAddonSummaryWidget; +class KviPackAddonSummaryInfoWidget; +class KviPackAddonSummaryFilesWidget; /** * \class KviPackAddonDialog @@ -68,11 +69,20 @@ public: * \brief Destroys the wizard object */ ~KviPackAddonDialog(); -public: +protected: KviPackAddonInfoPackageWidget * m_pPackAddonInfoPackageWidget; KviPackAddonFileSelectionWidget * m_pPackAddonFileSelectionWidget; KviPackAddonSaveSelectionWidget * m_pPackAddonSaveSelectionWidget; - KviPackAddonSummaryWidget * m_pPackAddonSummaryWidget; + KviPackAddonSummaryInfoWidget * m_pPackAddonSummaryInfoWidget; + KviPackAddonSummaryFilesWidget * m_pPackAddonSummaryFilesWidget; + QString m_szAuthor; + QString m_szName; + QString m_szVersion; + QString m_szDescription; + QString m_szMinVersion; + QString m_szIcon; + QString m_szDirPath; + QString m_szSavePath; protected: /** * \brief Runs the packAddon() function and closes the wizard @@ -81,26 +91,24 @@ protected: virtual void accept(); /** - * \brief Create the addon package + * \brief Creates the addon package * \return bool */ bool packAddon(); /** * \brief Ensures the source directory is complete - * \param szSourceDir The sources' directory * \param pszError The buffer containing errors * \return bool */ - bool checkDirTree(QString & szSourceDir, QString * pszError); + bool checkDirTree(QString * pszError); /** * \brief Creates the installer file - * \param szSourceDir The sources' directory * \param pszError The buffer containing errors * \return bool */ - bool createInstaller(QString & szSourceDir, QString * pszError); + bool createInstaller(QString * pszError); }; /** @@ -123,11 +131,11 @@ public: */ ~KviPackAddonInfoPackageWidget(); protected: - QLineEdit * m_pPackageAuthorEdit; - QLineEdit * m_pPackageNameEdit; - QLineEdit * m_pPackageVersionEdit; - QTextEdit * m_pPackageDescriptionEdit; - QLineEdit * m_pPackageMinVersionEdit; + QLineEdit * m_pPackageAuthorEdit; + QLineEdit * m_pPackageNameEdit; + QLineEdit * m_pPackageVersionEdit; + QLineEdit * m_pPackageDescriptionEdit; + QLineEdit * m_pPackageMinVersionEdit; }; /** @@ -157,7 +165,7 @@ protected: }; /** -* \class KviPackAddonCreateInfoPackageWidget +* \class KviPackAddonSaveSelectionWidget * \brief Wizard page for saving package */ class KviPackAddonSaveSelectionWidget : public QWizardPage @@ -177,7 +185,6 @@ public: ~KviPackAddonSaveSelectionWidget(); protected: KviFileSelector * m_pSavePathSelector; - QString m_szSavePath; protected: /** * \brief Perform initial tasks before showing the widget @@ -187,31 +194,30 @@ protected: }; /** -* \class KviPackAddonSummaryWidget +* \class KviPackAddonSummaryInfoWidget * \brief Wizard page for showing informations inserted */ -class KviPackAddonSummaryWidget : public QWizardPage +class KviPackAddonSummaryInfoWidget : public QWizardPage { Q_OBJECT public: /** - * \brief Create the wizard save page object + * \brief Create the wizard summary info page object * \param pParent The parent widget - * \return KviPackAddonSaveSelectionWidget + * \return KviPackAddonSummaryInfoWidget */ - KviPackAddonSummaryWidget(KviPackAddonDialog * pParent); + KviPackAddonSummaryInfoWidget(KviPackAddonDialog * pParent); /** - * \brief Destroys the wizard save page object + * \brief Destroys the wizard summary info page object */ - ~KviPackAddonSummaryWidget(); + ~KviPackAddonSummaryInfoWidget(); protected: - KviPackAddonDialog * m_pParent; - QLabel * m_pLabelInfo; - QLabel * m_pLabelAuthor; - QLabel * m_pPackageName; - QLabel * m_pPackageVersion; - QLabel * m_pPackageDescription; + QLabel * m_pLabelInfo; + QLabel * m_pLabelAuthor; + QLabel * m_pPackageName; + QLabel * m_pPackageVersion; + QLabel * m_pPackageDescription; protected: /** * \brief Perform initial tasks before showing the widget @@ -220,4 +226,22 @@ protected: virtual void initializePage(); }; + +class KviPackAddonSummaryFilesWidget : public QDialog +{ + Q_OBJECT +public: + KviPackAddonSummaryFilesWidget(KviPackAddonDialog * pParent); + ~KviPackAddonSummaryFilesWidget(); +protected: + QTextEdit * m_pFiles; + QString m_szPath; +public: + void setPath(QString & szPath){ m_szPath = szPath; }; +protected: + virtual void showEvent(QShowEvent *); + virtual void accept(); + virtual void reject(); +}; + #endif //!_PACKADDONDIALOG_H_ -- cgit v1.3.1-10-gc9f91