From 8988bde2c41f314acbe7c8409ce8e9c1465fdee8 Mon Sep 17 00:00:00 2001 From: Szymon Tomasz Stefanek Date: Sat, 5 Mar 2011 03:27:15 +0000 Subject: More file renaming git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@5537 17fca916-40b9-46aa-a4ea-0a15b648b75c --- src/modules/theme/CMakeLists.txt | 4 +- src/modules/theme/ThemeManagementDialog.cpp | 457 ++++++++++++++++++++++++++++ src/modules/theme/ThemeManagementDialog.h | 97 ++++++ src/modules/theme/libkvitheme.cpp | 2 +- src/modules/theme/managementdialog.cpp | 457 ---------------------------- src/modules/theme/managementdialog.h | 97 ------ 6 files changed, 557 insertions(+), 557 deletions(-) create mode 100644 src/modules/theme/ThemeManagementDialog.cpp create mode 100644 src/modules/theme/ThemeManagementDialog.h delete mode 100644 src/modules/theme/managementdialog.cpp delete mode 100644 src/modules/theme/managementdialog.h (limited to 'src/modules/theme') diff --git a/src/modules/theme/CMakeLists.txt b/src/modules/theme/CMakeLists.txt index 600ec61cf..9605b5abe 100644 --- a/src/modules/theme/CMakeLists.txt +++ b/src/modules/theme/CMakeLists.txt @@ -1,14 +1,14 @@ # CMakeLists for src/modules/theme SET(kvitheme_MOC_HDRS - managementdialog.h + ThemeManagementDialog.h PackThemeDialog.h SaveThemeDialog.h ) SET(kvitheme_SRCS libkvitheme.cpp - managementdialog.cpp + ThemeManagementDialog.cpp PackThemeDialog.cpp SaveThemeDialog.cpp ThemeFunctions.cpp diff --git a/src/modules/theme/ThemeManagementDialog.cpp b/src/modules/theme/ThemeManagementDialog.cpp new file mode 100644 index 000000000..182dd64d8 --- /dev/null +++ b/src/modules/theme/ThemeManagementDialog.cpp @@ -0,0 +1,457 @@ +//============================================================================= +// +// File : ThemeManagementDialog.cpp +// Creation date : Sat 30 Dec 2006 14:54:56 by Szymon Stefanek +// +// This file is part of the KVIrc IRC Client distribution +// Copyright (C) 2006-2010 Szymon Stefanek +// +// 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 "ThemeManagementDialog.h" +#include "PackThemeDialog.h" +#include "SaveThemeDialog.h" +#include "ThemeFunctions.h" + +#include "KviOptions.h" +#include "KviLocale.h" +#include "KviConfigurationFile.h" +#include "KviFileUtils.h" +#include "KviApplication.h" +#include "KviMainWindow.h" +#include "KviIconManager.h" +#include "KviInternalCommand.h" +#include "KviPackageReader.h" +#include "kvi_fileextensions.h" +#include "KviFileDialog.h" +#include "KviDynamicToolTip.h" +#include "KviIconManager.h" +#include "KviMessageBox.h" +#include "KviTalPopupMenu.h" +#include "KviTalListWidget.h" + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +extern QRect g_rectManagementDialogGeometry; + + +ThemeListWidgetItem::ThemeListWidgetItem(KviTalListWidget * box,KviThemeInfo * inf) +: KviTalListWidgetItem(box) +{ + m_pThemeInfo = inf; + QString t; + t = ""; + t += inf->name(); + t += ""; + + if(!inf->version().isEmpty()) { + t += "["; + t += inf->version(); + t += "]"; + } + + if(!inf->author().isEmpty()) { + t += " "; + t += __tr2qs_ctx("by","theme"); + t += " "; + t += inf->author(); + t += ""; + } + + t += ""; + t += "
"; + t += inf->description(); + t += ""; + setText(t); +} + +ThemeListWidgetItem::~ThemeListWidgetItem() +{ + delete m_pThemeInfo; + +} + +ThemeManagementDialog * ThemeManagementDialog::m_pInstance = 0; + + +ThemeManagementDialog::ThemeManagementDialog(QWidget * parent) +: QWidget(parent) +{ + m_pItemDelegate=0; + setObjectName("theme_options_widget"); + setWindowTitle(__tr2qs_ctx("Manage Themes - KVIrc","theme")); + setWindowIcon(*(g_pIconManager->getSmallIcon(KviIconManager::Theme))); + + m_pInstance = this; + + QGridLayout * g = new QGridLayout(this); + + KviTalHBox *hb = new KviTalHBox(this); + hb->setMargin(1); + hb->setSpacing(1); + g->addWidget(hb,0,0); + + QToolButton * tb; + QFrame * sep; + + tb = new QToolButton(hb); + tb->setIcon(*(g_pIconManager->getBigIcon(KVI_BIGICON_SAVE))); + tb->setIconSize(QSize(32,32)); + tb->setToolTip(__tr2qs_ctx("Save Current Theme...","theme")); + connect(tb,SIGNAL(clicked()),this,SLOT(saveCurrentTheme())); + + sep = new QFrame(hb); + sep->setFrameStyle(QFrame::VLine | QFrame::Sunken); + sep->setMinimumWidth(12); + + m_pPackThemeButton = new QToolButton(hb); + m_pPackThemeButton->setIcon(*(g_pIconManager->getBigIcon(KVI_BIGICON_PACK))); + + m_pPackThemeButton->setIconSize(QSize(32,32)); + m_pPackThemeButton->setToolTip(__tr2qs_ctx("Export Selected Themes to a Distributable Package","theme")); + connect(m_pPackThemeButton,SIGNAL(clicked()),this,SLOT(packTheme())); + + m_pDeleteThemeButton = new QToolButton(hb); + m_pDeleteThemeButton->setIcon(*(g_pIconManager->getBigIcon(KVI_BIGICON_REMOVE))); + m_pDeleteThemeButton->setIconSize(QSize(32,32)); + m_pDeleteThemeButton->setToolTip(__tr2qs_ctx("Delete Selected Themes","theme")); + connect(m_pDeleteThemeButton,SIGNAL(clicked()),this,SLOT(deleteTheme())); + + sep = new QFrame(hb); + sep->setFrameStyle(QFrame::VLine | QFrame::Sunken); + sep->setMinimumWidth(12); + + tb = new QToolButton(hb); + tb->setIcon(*(g_pIconManager->getBigIcon(KVI_BIGICON_OPEN))); + tb->setIconSize(QSize(32,32)); + tb->setToolTip(__tr2qs_ctx("Install Theme Package From Disk","theme")); + connect(tb,SIGNAL(clicked()),this,SLOT(installFromFile())); + + tb = new QToolButton(hb); + tb->setIcon(*(g_pIconManager->getBigIcon(KVI_BIGICON_WWW))); + tb->setIconSize(QSize(32,32)); + tb->setToolTip(__tr2qs_ctx("Get More Themes...","theme")); + connect(tb,SIGNAL(clicked()),this,SLOT(getMoreThemes())); + + QWidget *w= new QWidget(hb); + w->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Minimum); + + m_pListWidget = new KviTalListWidget(this); + m_pListWidget->setContextMenuPolicy(Qt::CustomContextMenu); + m_pItemDelegate = new KviTalIconAndRichTextItemDelegate(m_pListWidget); + m_pItemDelegate->setDefaultIcon(g_pIconManager->getBigIcon(QString(KVI_BIGICON_THEME))); + m_pListWidget->setItemDelegate(m_pItemDelegate); + m_pListWidget->setMinimumHeight(400); + m_pListWidget->setMinimumWidth(400); + + m_pListWidget->setSelectionMode(QAbstractItemView::ExtendedSelection); + m_pListWidget->setSortingEnabled(true); + connect(m_pListWidget,SIGNAL(itemDoubleClicked(QListWidgetItem *)),this,SLOT(applyTheme(QListWidgetItem *))); + + //FIXME tooltip + //connect(m_pListWidget,SIGNAL(tipRequest(QListWidgetItem *,const QPoint &)),this,SLOT(tipRequest(QListWidgetItem *,const QPoint &))); + connect(m_pListWidget,SIGNAL(customContextMenuRequested(const QPoint &)), + this,SLOT(contextMenuRequested(const QPoint &))); + connect(m_pListWidget,SIGNAL(itemSelectionChanged()),this,SLOT(enableDisableButtons())); + g->addWidget(m_pListWidget,1,0); + +// KviDynamicToolTip * tip = new KviDynamicToolTip(m_pListWidget); +// connect(tip,SIGNAL(tipRequest(KviDynamicToolTip *,const QPoint &)),this,SLOT(tipRequest(KviDynamicToolTip *,const QPoint &))); + + QPushButton * b = new QPushButton(__tr2qs("Close"),this); + b->setMaximumSize(b->sizeHint().width(),b->sizeHint().height()); + connect(b,SIGNAL(clicked()),this,SLOT(closeClicked())); + g->addWidget(b,2,0); + + g->setMargin(1); + g->setSpacing(1); + g->setAlignment(b,Qt::AlignRight); + fillThemeBox(); + m_pContextPopup = new KviTalPopupMenu(this); + + if(g_rectManagementDialogGeometry.y() < 5) + { + g_rectManagementDialogGeometry.setY(5); + } + resize(g_rectManagementDialogGeometry.width(), + g_rectManagementDialogGeometry.height()); + + QRect rect = g_pApp->desktop()->screenGeometry(g_pMainWindow); + move(rect.x() + ((rect.width() - g_rectManagementDialogGeometry.width())/2),rect.y() + ((rect.height() - g_rectManagementDialogGeometry.height())/2)); +} + +ThemeManagementDialog::~ThemeManagementDialog() +{ + if (m_pItemDelegate) delete m_pItemDelegate; + g_rectManagementDialogGeometry = QRect(pos().x(),pos().y(),size().width(),size().height()); + m_pInstance = 0; +} + +void ThemeManagementDialog::closeClicked() +{ + delete this; + m_pInstance = 0; +} + +void ThemeManagementDialog::display(bool bTopLevel) +{ + if(m_pInstance) + { + if(bTopLevel) + { + if(m_pInstance->parent()) + { + m_pInstance->setParent(0); + } + } else { + if(m_pInstance->parent() != g_pMainWindow->splitter()) + { + m_pInstance->setParent(g_pMainWindow->splitter()); + } + } + } else { + if(bTopLevel) + { + m_pInstance = new ThemeManagementDialog(0); + } else { + m_pInstance = new ThemeManagementDialog(g_pMainWindow->splitter()); + } + } + m_pInstance->show(); + m_pInstance->raise(); + m_pInstance->setFocus(); +} + +void ThemeManagementDialog::cleanup() +{ + if(!m_pInstance)return; + delete m_pInstance; + m_pInstance = 0; +} + +void ThemeManagementDialog::packTheme() +{ + KviPointerList dl; + dl.setAutoDelete(false); + QList itemsSelected = m_pListWidget->selectedItems (); + for(int i=0;ithemeInfo()); + if(dl.isEmpty())return; + + PackThemeDialog * pDialog = new PackThemeDialog(this,&dl); + pDialog->exec(); + delete pDialog; +} + +void ThemeManagementDialog::contextMenuRequested(const QPoint & pos) +{ + if(m_pListWidget->itemAt(pos)!=0) + { + m_pListWidget->setCurrentItem(m_pListWidget->itemAt(pos)); + m_pContextPopup->clear(); + m_pContextPopup->insertItem(*(g_pIconManager->getSmallIcon(KviIconManager::Minus)),__tr2qs_ctx("&Remove Theme","theme"),this,SLOT(deleteTheme())); + m_pContextPopup->insertItem(*(g_pIconManager->getSmallIcon(KviIconManager::Accept)),__tr2qs_ctx("&Apply Theme","theme"),this,SLOT(applyCurrentTheme())); + m_pContextPopup->popup(m_pListWidget->viewport()->mapToGlobal(pos)); + } +} + +void ThemeManagementDialog::applyTheme ( QListWidgetItem * it) +{ + if(it)m_pListWidget->setCurrentItem(it); + applyCurrentTheme(); +} + +void ThemeManagementDialog::applyCurrentTheme() +{ + ThemeListWidgetItem * it = (ThemeListWidgetItem *)m_pListWidget->currentItem(); + if(!it)return; + + if(KviMessageBox::yesNo(__tr2qs_ctx("Apply theme - KVIrc","theme"), + __tr2qs_ctx("Do you wish to apply theme \"%Q\" (version %Q)?","theme"), + &(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 = QString(__tr2qs_ctx("Failed to apply the specified theme: %1","theme")).arg(szErr); + QMessageBox::critical(this,__tr2qs_ctx("Apply theme - KVIrc","theme"),szMsg, + QMessageBox::Ok,QMessageBox::NoButton,QMessageBox::NoButton); + + } + m_pItemDelegate->setDefaultIcon(g_pIconManager->getBigIcon(QString(KVI_BIGICON_THEME))); + } +} + +void ThemeManagementDialog::deleteTheme() +{ + QList itemsSelected = m_pListWidget->selectedItems (); + for(int i=0;ithemeInfo()->name()),&(((ThemeListWidgetItem *)itemsSelected.at(i))->themeInfo()->version())))goto jump_out; + KviFileUtils::deleteDir(((ThemeListWidgetItem *)itemsSelected.at(i))->themeInfo()->absoluteDirectory()); + } +jump_out: + fillThemeBox(); +} + +void ThemeManagementDialog::installFromFile() +{ + QString szFileName; + QString szError; + + if(!KviFileDialog::askForOpenFileName(szFileName,__tr2qs_ctx("Open Theme - KVIrc","theme"),QString(),KVI_FILTER_THEME)) + return; + if(!ThemeFunctions::installThemePackage(szFileName,szError,this)) + { + KviMessageBox::information(szError); + return; + } + fillThemeBox(); +} + +void ThemeManagementDialog::getMoreThemes() +{ + if(!g_pMainWindow)return; + g_pMainWindow->executeInternalCommand(KVI_INTERNALCOMMAND_OPENURL_KVIRC_THEMES); +} + +void ThemeManagementDialog::saveCurrentTheme() +{ + SaveThemeDialog * pSaveThemeDialog = new SaveThemeDialog(this); + pSaveThemeDialog->exec(); + delete pSaveThemeDialog; + fillThemeBox(); +} + +void ThemeManagementDialog::fillThemeBox(const QString &szDir) +{ + QDir d(szDir); + + QStringList sl = d.entryList(QDir::Dirs); + + for(QStringList::Iterator it = sl.begin();it != sl.end();++it) + { + if(*it == ".")continue; + if(*it == "..")continue; + + QString szTest = szDir; + szTest += KVI_PATH_SEPARATOR_CHAR; + szTest += *it; + + KviThemeInfo * inf = new KviThemeInfo(); + if(inf->loadFromDirectory(szTest)) + { + inf->setSubdirectory(*it); + new ThemeListWidgetItem(m_pListWidget,inf); + } else { + delete inf; + } + } +} + +void ThemeManagementDialog::fillThemeBox() +{ + m_pListWidget->clear(); + + QString szDir; + g_pApp->getGlobalKvircDirectory(szDir,KviApplication::Themes); + fillThemeBox(szDir); + g_pApp->getLocalKvircDirectory(szDir,KviApplication::Themes); + fillThemeBox(szDir); + + enableDisableButtons(); +} + +bool ThemeManagementDialog::hasSelectedItems() +{ + QList itemsSelected = m_pListWidget->selectedItems (); + return itemsSelected.count()?true:false; + +} + +void ThemeManagementDialog::enableDisableButtons() +{ + bool b = hasSelectedItems(); + m_pPackThemeButton->setEnabled(b); + m_pDeleteThemeButton->setEnabled(b); +} + +void ThemeManagementDialog::closeEvent(QCloseEvent * e) +{ + e->ignore(); + delete this; +} + +void ThemeManagementDialog::tipRequest(QListWidgetItem *,const QPoint &) +{ + // FIXME + /* + //ThemeListWidgetItem * it = (ThemeListWidgetItem *)(m_pListWidget->itemAt(pnt)); + + //if(!it)return; + + KviThemeInfo * pThemeInfo = ((ThemeListWidgetItem *)it)->themeInfo(); + + QString szThemeDescription; + + ThemeFunctions::getThemeHtmlDescription( + szThemeDescription, + pThemeInfo->name(), + pThemeInfo->version(), + pThemeInfo->description(), + pThemeInfo->subdirectory(), + pThemeInfo->application(), + pThemeInfo->author(), + pThemeInfo->date(), + pThemeInfo->themeEngineVersion(), + pThemeInfo->mediumScreenshot(), + 0 + ); + QLabel *wid=new QLabel(0); + wid->setWindowFlags(Qt::Popup); + wid->setText("Prova del tooltip"); + wid->move(pnt); + wid->show(); +// pTip->tip(m_pListWidget->visualItemRect(it),szThemeDescription); +*/ +} + diff --git a/src/modules/theme/ThemeManagementDialog.h b/src/modules/theme/ThemeManagementDialog.h new file mode 100644 index 000000000..5c6d46de8 --- /dev/null +++ b/src/modules/theme/ThemeManagementDialog.h @@ -0,0 +1,97 @@ +#ifndef _MANAGEMENTDIALOG_H_ +#define _MANAGEMENTDIALOG_H_ +//============================================================================= +// +// File : ThemeManagementDialog.h +// Creation date : Sat 30 Dec 2006 14:54:56 by Szymon Stefanek +// +// This file is part of the KVIrc IRC Client distribution +// Copyright (C) 2006-2010 Szymon Stefanek +// +// 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 "KviOptionsWidget.h" +#include "KviPointerList.h" +#include "KviTheme.h" +#include "KviTalPopupMenu.h" +#include "KviTalWizard.h" +#include "KviTalListWidget.h" + +#include +#include +#include +#include +#include +#include +#include + +class QLineEdit; +class QPushButton; +class QLabel; +class KviDynamicToolTip; + + +class ThemeListWidgetItem : public KviTalListWidgetItem +{ +public: + ThemeListWidgetItem(KviTalListWidget * box,KviThemeInfo * inf); + virtual ~ThemeListWidgetItem(); +public: + KviThemeInfo * m_pThemeInfo; +public: + KviThemeInfo * themeInfo(){ return m_pThemeInfo; }; +}; + + +class ThemeManagementDialog : public QWidget +{ + Q_OBJECT +public: + ThemeManagementDialog(QWidget * parent); + virtual ~ThemeManagementDialog(); +protected: + static ThemeManagementDialog * m_pInstance; + KviTalIconAndRichTextItemDelegate * m_pItemDelegate; + KviTalListWidget * m_pListWidget; + KviTalPopupMenu * m_pContextPopup; + QToolButton * m_pDeleteThemeButton; + QToolButton * m_pPackThemeButton; +public: + static ThemeManagementDialog * instance(){ return m_pInstance; }; + static void display(bool bTopLevel); + static void cleanup(); +protected: + void fillThemeBox(const QString &szDir); + bool hasSelectedItems(); + virtual void closeEvent(QCloseEvent * e); +protected slots: + void saveCurrentTheme(); + void getMoreThemes(); + void installFromFile(); + void fillThemeBox(); + void deleteTheme(); + void closeClicked(); + void packTheme(); + void applyTheme(QListWidgetItem *); + void applyCurrentTheme(); + void enableDisableButtons(); + void contextMenuRequested(const QPoint & pos); + //void tipRequest(KviDynamicToolTip *pTip,const QPoint &pnt); + void tipRequest(QListWidgetItem *item,const QPoint &pnt); +}; + +#endif //!_MANAGEMENTDIALOG_H_ diff --git a/src/modules/theme/libkvitheme.cpp b/src/modules/theme/libkvitheme.cpp index 3019deb37..86425b9a7 100644 --- a/src/modules/theme/libkvitheme.cpp +++ b/src/modules/theme/libkvitheme.cpp @@ -22,7 +22,7 @@ // //============================================================================= -#include "managementdialog.h" +#include "ThemeManagementDialog.h" #include "ThemeFunctions.h" #include "KviMessageBox.h" diff --git a/src/modules/theme/managementdialog.cpp b/src/modules/theme/managementdialog.cpp deleted file mode 100644 index 0aa1a4d15..000000000 --- a/src/modules/theme/managementdialog.cpp +++ /dev/null @@ -1,457 +0,0 @@ -//============================================================================= -// -// File : managementdialog.cpp -// Creation date : Sat 30 Dec 2006 14:54:56 by Szymon Stefanek -// -// This file is part of the KVIrc IRC Client distribution -// Copyright (C) 2006-2010 Szymon Stefanek -// -// 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 "managementdialog.h" -#include "PackThemeDialog.h" -#include "SaveThemeDialog.h" -#include "ThemeFunctions.h" - -#include "KviOptions.h" -#include "KviLocale.h" -#include "KviConfigurationFile.h" -#include "KviFileUtils.h" -#include "KviApplication.h" -#include "KviMainWindow.h" -#include "KviIconManager.h" -#include "KviInternalCommand.h" -#include "KviPackageReader.h" -#include "kvi_fileextensions.h" -#include "KviFileDialog.h" -#include "KviDynamicToolTip.h" -#include "KviIconManager.h" -#include "KviMessageBox.h" -#include "KviTalPopupMenu.h" -#include "KviTalListWidget.h" - - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -extern QRect g_rectManagementDialogGeometry; - - -ThemeListWidgetItem::ThemeListWidgetItem(KviTalListWidget * box,KviThemeInfo * inf) -: KviTalListWidgetItem(box) -{ - m_pThemeInfo = inf; - QString t; - t = ""; - t += inf->name(); - t += ""; - - if(!inf->version().isEmpty()) { - t += "["; - t += inf->version(); - t += "]"; - } - - if(!inf->author().isEmpty()) { - t += " "; - t += __tr2qs_ctx("by","theme"); - t += " "; - t += inf->author(); - t += ""; - } - - t += ""; - t += "
"; - t += inf->description(); - t += ""; - setText(t); -} - -ThemeListWidgetItem::~ThemeListWidgetItem() -{ - delete m_pThemeInfo; - -} - -ThemeManagementDialog * ThemeManagementDialog::m_pInstance = 0; - - -ThemeManagementDialog::ThemeManagementDialog(QWidget * parent) -: QWidget(parent) -{ - m_pItemDelegate=0; - setObjectName("theme_options_widget"); - setWindowTitle(__tr2qs_ctx("Manage Themes - KVIrc","theme")); - setWindowIcon(*(g_pIconManager->getSmallIcon(KviIconManager::Theme))); - - m_pInstance = this; - - QGridLayout * g = new QGridLayout(this); - - KviTalHBox *hb = new KviTalHBox(this); - hb->setMargin(1); - hb->setSpacing(1); - g->addWidget(hb,0,0); - - QToolButton * tb; - QFrame * sep; - - tb = new QToolButton(hb); - tb->setIcon(*(g_pIconManager->getBigIcon(KVI_BIGICON_SAVE))); - tb->setIconSize(QSize(32,32)); - tb->setToolTip(__tr2qs_ctx("Save Current Theme...","theme")); - connect(tb,SIGNAL(clicked()),this,SLOT(saveCurrentTheme())); - - sep = new QFrame(hb); - sep->setFrameStyle(QFrame::VLine | QFrame::Sunken); - sep->setMinimumWidth(12); - - m_pPackThemeButton = new QToolButton(hb); - m_pPackThemeButton->setIcon(*(g_pIconManager->getBigIcon(KVI_BIGICON_PACK))); - - m_pPackThemeButton->setIconSize(QSize(32,32)); - m_pPackThemeButton->setToolTip(__tr2qs_ctx("Export Selected Themes to a Distributable Package","theme")); - connect(m_pPackThemeButton,SIGNAL(clicked()),this,SLOT(packTheme())); - - m_pDeleteThemeButton = new QToolButton(hb); - m_pDeleteThemeButton->setIcon(*(g_pIconManager->getBigIcon(KVI_BIGICON_REMOVE))); - m_pDeleteThemeButton->setIconSize(QSize(32,32)); - m_pDeleteThemeButton->setToolTip(__tr2qs_ctx("Delete Selected Themes","theme")); - connect(m_pDeleteThemeButton,SIGNAL(clicked()),this,SLOT(deleteTheme())); - - sep = new QFrame(hb); - sep->setFrameStyle(QFrame::VLine | QFrame::Sunken); - sep->setMinimumWidth(12); - - tb = new QToolButton(hb); - tb->setIcon(*(g_pIconManager->getBigIcon(KVI_BIGICON_OPEN))); - tb->setIconSize(QSize(32,32)); - tb->setToolTip(__tr2qs_ctx("Install Theme Package From Disk","theme")); - connect(tb,SIGNAL(clicked()),this,SLOT(installFromFile())); - - tb = new QToolButton(hb); - tb->setIcon(*(g_pIconManager->getBigIcon(KVI_BIGICON_WWW))); - tb->setIconSize(QSize(32,32)); - tb->setToolTip(__tr2qs_ctx("Get More Themes...","theme")); - connect(tb,SIGNAL(clicked()),this,SLOT(getMoreThemes())); - - QWidget *w= new QWidget(hb); - w->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Minimum); - - m_pListWidget = new KviTalListWidget(this); - m_pListWidget->setContextMenuPolicy(Qt::CustomContextMenu); - m_pItemDelegate = new KviTalIconAndRichTextItemDelegate(m_pListWidget); - m_pItemDelegate->setDefaultIcon(g_pIconManager->getBigIcon(QString(KVI_BIGICON_THEME))); - m_pListWidget->setItemDelegate(m_pItemDelegate); - m_pListWidget->setMinimumHeight(400); - m_pListWidget->setMinimumWidth(400); - - m_pListWidget->setSelectionMode(QAbstractItemView::ExtendedSelection); - m_pListWidget->setSortingEnabled(true); - connect(m_pListWidget,SIGNAL(itemDoubleClicked(QListWidgetItem *)),this,SLOT(applyTheme(QListWidgetItem *))); - - //FIXME tooltip - //connect(m_pListWidget,SIGNAL(tipRequest(QListWidgetItem *,const QPoint &)),this,SLOT(tipRequest(QListWidgetItem *,const QPoint &))); - connect(m_pListWidget,SIGNAL(customContextMenuRequested(const QPoint &)), - this,SLOT(contextMenuRequested(const QPoint &))); - connect(m_pListWidget,SIGNAL(itemSelectionChanged()),this,SLOT(enableDisableButtons())); - g->addWidget(m_pListWidget,1,0); - -// KviDynamicToolTip * tip = new KviDynamicToolTip(m_pListWidget); -// connect(tip,SIGNAL(tipRequest(KviDynamicToolTip *,const QPoint &)),this,SLOT(tipRequest(KviDynamicToolTip *,const QPoint &))); - - QPushButton * b = new QPushButton(__tr2qs("Close"),this); - b->setMaximumSize(b->sizeHint().width(),b->sizeHint().height()); - connect(b,SIGNAL(clicked()),this,SLOT(closeClicked())); - g->addWidget(b,2,0); - - g->setMargin(1); - g->setSpacing(1); - g->setAlignment(b,Qt::AlignRight); - fillThemeBox(); - m_pContextPopup = new KviTalPopupMenu(this); - - if(g_rectManagementDialogGeometry.y() < 5) - { - g_rectManagementDialogGeometry.setY(5); - } - resize(g_rectManagementDialogGeometry.width(), - g_rectManagementDialogGeometry.height()); - - QRect rect = g_pApp->desktop()->screenGeometry(g_pMainWindow); - move(rect.x() + ((rect.width() - g_rectManagementDialogGeometry.width())/2),rect.y() + ((rect.height() - g_rectManagementDialogGeometry.height())/2)); -} - -ThemeManagementDialog::~ThemeManagementDialog() -{ - if (m_pItemDelegate) delete m_pItemDelegate; - g_rectManagementDialogGeometry = QRect(pos().x(),pos().y(),size().width(),size().height()); - m_pInstance = 0; -} - -void ThemeManagementDialog::closeClicked() -{ - delete this; - m_pInstance = 0; -} - -void ThemeManagementDialog::display(bool bTopLevel) -{ - if(m_pInstance) - { - if(bTopLevel) - { - if(m_pInstance->parent()) - { - m_pInstance->setParent(0); - } - } else { - if(m_pInstance->parent() != g_pMainWindow->splitter()) - { - m_pInstance->setParent(g_pMainWindow->splitter()); - } - } - } else { - if(bTopLevel) - { - m_pInstance = new ThemeManagementDialog(0); - } else { - m_pInstance = new ThemeManagementDialog(g_pMainWindow->splitter()); - } - } - m_pInstance->show(); - m_pInstance->raise(); - m_pInstance->setFocus(); -} - -void ThemeManagementDialog::cleanup() -{ - if(!m_pInstance)return; - delete m_pInstance; - m_pInstance = 0; -} - -void ThemeManagementDialog::packTheme() -{ - KviPointerList dl; - dl.setAutoDelete(false); - QList itemsSelected = m_pListWidget->selectedItems (); - for(int i=0;ithemeInfo()); - if(dl.isEmpty())return; - - PackThemeDialog * pDialog = new PackThemeDialog(this,&dl); - pDialog->exec(); - delete pDialog; -} - -void ThemeManagementDialog::contextMenuRequested(const QPoint & pos) -{ - if(m_pListWidget->itemAt(pos)!=0) - { - m_pListWidget->setCurrentItem(m_pListWidget->itemAt(pos)); - m_pContextPopup->clear(); - m_pContextPopup->insertItem(*(g_pIconManager->getSmallIcon(KviIconManager::Minus)),__tr2qs_ctx("&Remove Theme","theme"),this,SLOT(deleteTheme())); - m_pContextPopup->insertItem(*(g_pIconManager->getSmallIcon(KviIconManager::Accept)),__tr2qs_ctx("&Apply Theme","theme"),this,SLOT(applyCurrentTheme())); - m_pContextPopup->popup(m_pListWidget->viewport()->mapToGlobal(pos)); - } -} - -void ThemeManagementDialog::applyTheme ( QListWidgetItem * it) -{ - if(it)m_pListWidget->setCurrentItem(it); - applyCurrentTheme(); -} - -void ThemeManagementDialog::applyCurrentTheme() -{ - ThemeListWidgetItem * it = (ThemeListWidgetItem *)m_pListWidget->currentItem(); - if(!it)return; - - if(KviMessageBox::yesNo(__tr2qs_ctx("Apply theme - KVIrc","theme"), - __tr2qs_ctx("Do you wish to apply theme \"%Q\" (version %Q)?","theme"), - &(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 = QString(__tr2qs_ctx("Failed to apply the specified theme: %1","theme")).arg(szErr); - QMessageBox::critical(this,__tr2qs_ctx("Apply theme - KVIrc","theme"),szMsg, - QMessageBox::Ok,QMessageBox::NoButton,QMessageBox::NoButton); - - } - m_pItemDelegate->setDefaultIcon(g_pIconManager->getBigIcon(QString(KVI_BIGICON_THEME))); - } -} - -void ThemeManagementDialog::deleteTheme() -{ - QList itemsSelected = m_pListWidget->selectedItems (); - for(int i=0;ithemeInfo()->name()),&(((ThemeListWidgetItem *)itemsSelected.at(i))->themeInfo()->version())))goto jump_out; - KviFileUtils::deleteDir(((ThemeListWidgetItem *)itemsSelected.at(i))->themeInfo()->absoluteDirectory()); - } -jump_out: - fillThemeBox(); -} - -void ThemeManagementDialog::installFromFile() -{ - QString szFileName; - QString szError; - - if(!KviFileDialog::askForOpenFileName(szFileName,__tr2qs_ctx("Open Theme - KVIrc","theme"),QString(),KVI_FILTER_THEME)) - return; - if(!ThemeFunctions::installThemePackage(szFileName,szError,this)) - { - KviMessageBox::information(szError); - return; - } - fillThemeBox(); -} - -void ThemeManagementDialog::getMoreThemes() -{ - if(!g_pMainWindow)return; - g_pMainWindow->executeInternalCommand(KVI_INTERNALCOMMAND_OPENURL_KVIRC_THEMES); -} - -void ThemeManagementDialog::saveCurrentTheme() -{ - SaveThemeDialog * pSaveThemeDialog = new SaveThemeDialog(this); - pSaveThemeDialog->exec(); - delete pSaveThemeDialog; - fillThemeBox(); -} - -void ThemeManagementDialog::fillThemeBox(const QString &szDir) -{ - QDir d(szDir); - - QStringList sl = d.entryList(QDir::Dirs); - - for(QStringList::Iterator it = sl.begin();it != sl.end();++it) - { - if(*it == ".")continue; - if(*it == "..")continue; - - QString szTest = szDir; - szTest += KVI_PATH_SEPARATOR_CHAR; - szTest += *it; - - KviThemeInfo * inf = new KviThemeInfo(); - if(inf->loadFromDirectory(szTest)) - { - inf->setSubdirectory(*it); - new ThemeListWidgetItem(m_pListWidget,inf); - } else { - delete inf; - } - } -} - -void ThemeManagementDialog::fillThemeBox() -{ - m_pListWidget->clear(); - - QString szDir; - g_pApp->getGlobalKvircDirectory(szDir,KviApplication::Themes); - fillThemeBox(szDir); - g_pApp->getLocalKvircDirectory(szDir,KviApplication::Themes); - fillThemeBox(szDir); - - enableDisableButtons(); -} - -bool ThemeManagementDialog::hasSelectedItems() -{ - QList itemsSelected = m_pListWidget->selectedItems (); - return itemsSelected.count()?true:false; - -} - -void ThemeManagementDialog::enableDisableButtons() -{ - bool b = hasSelectedItems(); - m_pPackThemeButton->setEnabled(b); - m_pDeleteThemeButton->setEnabled(b); -} - -void ThemeManagementDialog::closeEvent(QCloseEvent * e) -{ - e->ignore(); - delete this; -} - -void ThemeManagementDialog::tipRequest(QListWidgetItem *,const QPoint &) -{ - // FIXME - /* - //ThemeListWidgetItem * it = (ThemeListWidgetItem *)(m_pListWidget->itemAt(pnt)); - - //if(!it)return; - - KviThemeInfo * pThemeInfo = ((ThemeListWidgetItem *)it)->themeInfo(); - - QString szThemeDescription; - - ThemeFunctions::getThemeHtmlDescription( - szThemeDescription, - pThemeInfo->name(), - pThemeInfo->version(), - pThemeInfo->description(), - pThemeInfo->subdirectory(), - pThemeInfo->application(), - pThemeInfo->author(), - pThemeInfo->date(), - pThemeInfo->themeEngineVersion(), - pThemeInfo->mediumScreenshot(), - 0 - ); - QLabel *wid=new QLabel(0); - wid->setWindowFlags(Qt::Popup); - wid->setText("Prova del tooltip"); - wid->move(pnt); - wid->show(); -// pTip->tip(m_pListWidget->visualItemRect(it),szThemeDescription); -*/ -} - diff --git a/src/modules/theme/managementdialog.h b/src/modules/theme/managementdialog.h deleted file mode 100644 index beed4ade9..000000000 --- a/src/modules/theme/managementdialog.h +++ /dev/null @@ -1,97 +0,0 @@ -#ifndef _MANAGEMENTDIALOG_H_ -#define _MANAGEMENTDIALOG_H_ -//============================================================================= -// -// File : managementdialog.h -// Creation date : Sat 30 Dec 2006 14:54:56 by Szymon Stefanek -// -// This file is part of the KVIrc IRC Client distribution -// Copyright (C) 2006-2010 Szymon Stefanek -// -// 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 "KviOptionsWidget.h" -#include "KviPointerList.h" -#include "KviTheme.h" -#include "KviTalPopupMenu.h" -#include "KviTalWizard.h" -#include "KviTalListWidget.h" - -#include -#include -#include -#include -#include -#include -#include - -class QLineEdit; -class QPushButton; -class QLabel; -class KviDynamicToolTip; - - -class ThemeListWidgetItem : public KviTalListWidgetItem -{ -public: - ThemeListWidgetItem(KviTalListWidget * box,KviThemeInfo * inf); - virtual ~ThemeListWidgetItem(); -public: - KviThemeInfo * m_pThemeInfo; -public: - KviThemeInfo * themeInfo(){ return m_pThemeInfo; }; -}; - - -class ThemeManagementDialog : public QWidget -{ - Q_OBJECT -public: - ThemeManagementDialog(QWidget * parent); - virtual ~ThemeManagementDialog(); -protected: - static ThemeManagementDialog * m_pInstance; - KviTalIconAndRichTextItemDelegate * m_pItemDelegate; - KviTalListWidget * m_pListWidget; - KviTalPopupMenu * m_pContextPopup; - QToolButton * m_pDeleteThemeButton; - QToolButton * m_pPackThemeButton; -public: - static ThemeManagementDialog * instance(){ return m_pInstance; }; - static void display(bool bTopLevel); - static void cleanup(); -protected: - void fillThemeBox(const QString &szDir); - bool hasSelectedItems(); - virtual void closeEvent(QCloseEvent * e); -protected slots: - void saveCurrentTheme(); - void getMoreThemes(); - void installFromFile(); - void fillThemeBox(); - void deleteTheme(); - void closeClicked(); - void packTheme(); - void applyTheme(QListWidgetItem *); - void applyCurrentTheme(); - void enableDisableButtons(); - void contextMenuRequested(const QPoint & pos); - //void tipRequest(KviDynamicToolTip *pTip,const QPoint &pnt); - void tipRequest(QListWidgetItem *item,const QPoint &pnt); -}; - -#endif //!_MANAGEMENTDIALOG_H_ -- cgit v1.3.1-10-gc9f91