diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-02-24 02:13:59 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-02-24 02:13:59 +0000 |
commit | a6d58bb6052ac8cb01805a48c4ad2f129126116f (patch) | |
tree | dd867a099fcbb263a8009a9fb22695b87855dad6 /src/modules/toolbareditor/toolbareditor.cpp | |
download | kvirc-a6d58bb6052ac8cb01805a48c4ad2f129126116f.tar.gz kvirc-a6d58bb6052ac8cb01805a48c4ad2f129126116f.zip |
Added KDE3 version of kvirc
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/kvirc@1095341 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'src/modules/toolbareditor/toolbareditor.cpp')
-rw-r--r-- | src/modules/toolbareditor/toolbareditor.cpp | 537 |
1 files changed, 537 insertions, 0 deletions
diff --git a/src/modules/toolbareditor/toolbareditor.cpp b/src/modules/toolbareditor/toolbareditor.cpp new file mode 100644 index 00000000..5b00f47a --- /dev/null +++ b/src/modules/toolbareditor/toolbareditor.cpp @@ -0,0 +1,537 @@ +//=============================================================================// +// File : toolbareditor.cpp +// Created on Wed 01 Dec 2004 14:42:20 by Szymon Stefanek +// +// This file is part of the KVIrc IRC client distribution +// Copyright (C) 2004 Szymon Stefanek <pragma at kvirc dot net> +// +// This program is FREE software. You can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your opinion) any later version. +// +// This program is distributed in the HOPE that it will be USEFUL, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, write to the Free Software Foundation, +// Inc. ,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//============================================================================= + +#include "toolbareditor.h" +#include "kvi_actiondrawer.h" +#include "kvi_locale.h" +#include "kvi_frame.h" +#include "kvi_iconmanager.h" +#include "kvi_actionmanager.h" +#include "kvi_customtoolbar.h" +#include "kvi_customtoolbarmanager.h" +#include "kvi_customtoolbardescriptor.h" +#include "kvi_imagedialog.h" +#include "kvi_fileutils.h" +#include "kvi_filedialog.h" +#include "kvi_kvs_useraction.h" +#include "kvi_draganddrop.h" + +#include <qpushbutton.h> +#include <qlayout.h> +#include <qapplication.h> +#include <qtooltip.h> + +#include <qlineedit.h> +#include <qlabel.h> +#include <qmessagebox.h> +#include <qframe.h> +#include <qdir.h> +#include <qtimer.h> +#include <qevent.h> + +KviCustomizeToolBarsDialog * KviCustomizeToolBarsDialog::m_pInstance = 0; +extern QRect g_rectToolBarEditorDialogGeometry; + + + +KviTrashcanLabel::KviTrashcanLabel(QWidget * p) +: QLabel(p) +{ + setPixmap(*(g_pIconManager->getBigIcon("kvi_bigicon_trashcan.png"))); + QToolTip::add(this,__tr2qs("Drop here the icons from the toolbars to remove them")); + setFrameStyle(QFrame::Sunken | QFrame::WinPanel); + setAcceptDrops(true); + setAlignment(Qt::AlignCenter); + setMinimumSize(40,40); + m_uFlashCount = 0; + m_pFlashTimer = 0; + m_clrOriginal = paletteBackgroundColor(); + connect(KviActionManager::instance(),SIGNAL(removeActionsHintRequest()),this,SLOT(flash())); +} + +KviTrashcanLabel::~KviTrashcanLabel() +{ + if(m_pFlashTimer) + { + m_pFlashTimer->stop(); + delete m_pFlashTimer; + } +} + +void KviTrashcanLabel::flash() +{ + m_uFlashCount = 0; + if(m_pFlashTimer)return; + m_pFlashTimer = new QTimer(); + connect(m_pFlashTimer,SIGNAL(timeout()),this,SLOT(heartbeat())); + m_pFlashTimer->start(200); +} + +void KviTrashcanLabel::heartbeat() +{ + m_uFlashCount++; + if(m_uFlashCount % 2) + setPaletteBackgroundColor(QColor(0,0,0)); + else + setPaletteBackgroundColor(m_clrOriginal); + update(); + if(m_uFlashCount == 8) + { + m_pFlashTimer->stop(); + delete m_pFlashTimer; + m_pFlashTimer = 0; + } +} + +void KviTrashcanLabel::dropEvent(QDropEvent * e) +{ + if(KviTextDrag::canDecode(e)) + e->accept(); +} + +void KviTrashcanLabel::dragEnterEvent(QDragEnterEvent * e) +{ + QString s; + if(KviTextDrag::decode(e,s)) + e->accept(); +} + + + +KviCustomToolBarPropertiesDialog::KviCustomToolBarPropertiesDialog(QWidget * p,const QString &szText,const QString &szId,const QString &szLabel,const QString &szIconId) +: QDialog(p) +{ + m_szId = szId; + m_szOriginalId = szId; + m_szLabel = szLabel; + + setCaption(__tr2qs("ToolBar Properties")); + setIcon(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_TOOLBAR))); + + QGridLayout * g = new QGridLayout(this,5,6,5,3); + + QLabel * l = new QLabel(szText,this); + g->addMultiCellWidget(l,0,0,0,5); + + l = new QLabel(__tr2qs("Label") + ":",this); + g->addWidget(l,1,0); + + m_pLabelEdit = new QLineEdit(this); + g->addMultiCellWidget(m_pLabelEdit,1,1,1,5); + m_pLabelEdit->setText(szLabel); + connect(m_pLabelEdit,SIGNAL(textChanged(const QString &)),this,SLOT(labelTextChanged(const QString &))); + + l = new QLabel(__tr2qs("Icon") + ":",this); + g->addWidget(l,2,0); + + m_pIconEdit = new QLineEdit(this); + m_pIconEdit->setReadOnly(true); + g->addMultiCellWidget(m_pIconEdit,2,2,1,4); + + m_pIconButton = new QPushButton(this); + g->addMultiCellWidget(m_pIconButton,2,2,5,5); + connect(m_pIconButton,SIGNAL(clicked()),this,SLOT(iconButtonClicked())); + + iconSelected(szIconId); + + m_pAdvanced = new QWidget(this); + QGridLayout * ag = new QGridLayout(m_pAdvanced,1,2,0,3); + + l = new QLabel(__tr2qs("Id") + ":",m_pAdvanced); + l->setMinimumWidth(100); + ag->addWidget(l,0,0); + + m_pIdEdit = new QLineEdit(m_pAdvanced); + ag->addWidget(m_pIdEdit,0,1); + ag->setRowStretch(0,1); + + m_pIdEdit->setText(szId); + + g->addMultiCellWidget(m_pAdvanced,3,3,0,5); + m_pAdvanced->hide(); + + m_pLabelEdit->setFocus(); + + QPushButton * pb = new QPushButton(__tr2qs("OK"),this); + connect(pb,SIGNAL(clicked()),this,SLOT(okClicked())); + pb->setMinimumWidth(80); + g->addMultiCellWidget(pb,4,4,4,5); + + pb = new QPushButton(__tr2qs("Cancel"),this); + connect(pb,SIGNAL(clicked()),this,SLOT(reject())); + pb->setMinimumWidth(80); + g->addWidget(pb,4,3); + + m_pAdvancedButton = new QPushButton(__tr2qs("Advanced..."),this); + connect(m_pAdvancedButton,SIGNAL(clicked()),this,SLOT(advancedClicked())); + m_pAdvancedButton->setMinimumWidth(100); + g->addMultiCellWidget(m_pAdvancedButton,4,4,0,1); + + g->setRowStretch(0,1); + g->setColStretch(2,1); + + +} + +KviCustomToolBarPropertiesDialog::~KviCustomToolBarPropertiesDialog() +{ +} + +void KviCustomToolBarPropertiesDialog::iconSelected(const QString &szIconId) +{ + QPixmap * p = g_pIconManager->getImage(szIconId.utf8().data()); + if(p) + { + m_pIconButton->setPixmap(*p); + m_szIconId = szIconId; + m_pIconEdit->setText(szIconId); + } else { + m_pIconButton->setText("..."); + m_szIconId = ""; + m_pIconEdit->setText(""); + } +} + +void KviCustomToolBarPropertiesDialog::iconButtonClicked() +{ + KviImageDialog * dlg = new KviImageDialog(this,__tr2qs("Please choose the icon for the ToolBar")); + if(dlg->exec() != QDialog::Accepted) + { + delete dlg; + return; + } + QString s = dlg->selectedImage(); + delete dlg; + iconSelected(s); +} + + +void KviCustomToolBarPropertiesDialog::labelTextChanged(const QString &s) +{ + if(m_szOriginalId.isEmpty()) + { + QString szId = KviCustomToolBarManager::instance()->idForNewToolBar(s); + m_pIdEdit->setText(szId); + } +} + + +void KviCustomToolBarPropertiesDialog::okClicked() +{ + if(m_szLabel.isEmpty()) + { + QMessageBox::information(this,__tr2qs("Invalid ToolBar Label"),__tr2qs("The ToolBar Label can't be empty!"),__tr2qs("OK")); + return; + } + + if(m_szId.isEmpty()) + { + m_szId = KviCustomToolBarManager::instance()->idForNewToolBar(m_szLabel); + } + + if(KviCustomToolBarManager::instance()->find(m_szId)) + { + if(m_szId != m_szOriginalId) + { + if(QMessageBox::information(this,__tr2qs("Duplicate ToolBar Id"), + __tr2qs("The specified ToolBar Id already exists.<br>" \ + "Would you like KVIrc to assign it automatically (so it doesn't " + "collide with any other toolbar) or you prefer to do it manually ?"), + __tr2qs("Manually"),__tr2qs("Automatically")) == 0)return; + m_szId = KviCustomToolBarManager::instance()->idForNewToolBar(m_szLabel); + } + } + + m_szId = m_pIdEdit->text(); + m_szLabel = m_pLabelEdit->text(); + accept(); +} + +void KviCustomToolBarPropertiesDialog::advancedClicked() +{ + if(m_pAdvanced->isVisible()) + { + m_pAdvanced->hide(); + m_pAdvancedButton->setText(__tr2qs("Advanced...")); + } else { + m_pAdvanced->show(); + m_pAdvancedButton->setText(__tr2qs("Hide Advanced")); + } + +} + + +KviCustomizeToolBarsDialog::KviCustomizeToolBarsDialog(QWidget * p) +: QDialog(p,"" /*,WType_TopLevel | WStyle_Customize | WStyle_Title | WStyle_StaysOnTop | WStyle_DialogBorder*/) +{ + setCaption(__tr2qs("Customize Toolbars")); + setIcon(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_TOOLBAR))); + + m_pInstance = this; + + QGridLayout * g = new QGridLayout(this,8,2,4,5); + m_pDrawer = new KviActionDrawer(this); + g->addMultiCellWidget(m_pDrawer,0,6,0,0); + + QPushButton * b = new QPushButton(__tr2qs("New ToolBar"),this); + connect(b,SIGNAL(clicked()),this,SLOT(newToolBar())); + g->addWidget(b,0,1); + + m_pDeleteToolBarButton = new QPushButton(__tr2qs("Delete ToolBar"),this); + connect(m_pDeleteToolBarButton,SIGNAL(clicked()),this,SLOT(deleteToolBar())); + g->addWidget(m_pDeleteToolBarButton,1,1); + + m_pRenameToolBarButton = new QPushButton(__tr2qs("Edit ToolBar"),this); + connect(m_pRenameToolBarButton,SIGNAL(clicked()),this,SLOT(renameToolBar())); + g->addWidget(m_pRenameToolBarButton,2,1); + + QFrame * f = new QFrame(this); + f->setFrameStyle(QFrame::HLine | QFrame::Sunken); + g->addWidget(f,3,1); + + m_pExportToolBarButton = new QPushButton(__tr2qs("Export ToolBar"),this); + connect(m_pExportToolBarButton,SIGNAL(clicked()),this,SLOT(exportToolBar())); + g->addWidget(m_pExportToolBarButton,4,1); + + KviTrashcanLabel * t = new KviTrashcanLabel(this); + g->addWidget(t,6,1); + + b = new QPushButton(__tr2qs("Close"),this); + connect(b,SIGNAL(clicked()),this,SLOT(closeClicked())); + g->addWidget(b,7,1); + + g->setRowStretch(5,1); + g->setColStretch(0,1); + + m_pDrawer->fill(); + + connect(KviActionManager::instance(),SIGNAL(currentToolBarChanged()),this,SLOT(currentToolBarChanged())); + KviActionManager::instance()->customizeToolBarsDialogCreated(); + + currentToolBarChanged(); + + if(g_rectToolBarEditorDialogGeometry.y() < 5) + { + g_rectToolBarEditorDialogGeometry.setY(5); + } + //setGeometry(KVI_OPTION_RECT(KviOption_rectRegisteredUsersDialogGeometry)); + resize(g_rectToolBarEditorDialogGeometry.width(), + g_rectToolBarEditorDialogGeometry.height()); + move(g_rectToolBarEditorDialogGeometry.x(), + g_rectToolBarEditorDialogGeometry.y()); +} + +KviCustomizeToolBarsDialog::~KviCustomizeToolBarsDialog() +{ + g_rectToolBarEditorDialogGeometry = QRect(pos().x(),pos().y(),size().width(),size().height()); + + KviActionManager::instance()->customizeToolBarsDialogDestroyed(); + m_pInstance = 0; +} + +void KviCustomizeToolBarsDialog::currentToolBarChanged() +{ + m_pDeleteToolBarButton->setEnabled(KviActionManager::instance()->currentToolBar()); + m_pRenameToolBarButton->setEnabled(KviActionManager::instance()->currentToolBar()); +} + +void KviCustomizeToolBarsDialog::showEvent(QShowEvent * e) +{ +// repaintContents(); +// QRect r = parentWidget() ? parentWidget()->rect() : QApplication::desktop()->rect(); +// int x = (r.width() - width()) / 2; +// int y = (r.height() - height()) / 2; +// move(x,y); +} + + +void KviCustomizeToolBarsDialog::deleteToolBar() +{ + KviCustomToolBar * t = KviActionManager::currentToolBar(); + if(!t)return; + if(QMessageBox::question(this, + __tr2qs("Confirm ToolBar Deletion"), + __tr2qs("Do you really want to delete toolbar \"%1\" ?").arg(t->label()), + __tr2qs("No"), + __tr2qs("Yes")) == 0)return; + KviCustomToolBarManager::instance()->destroyDescriptor(t->descriptor()->id()); +} + +void KviCustomizeToolBarsDialog::exportToolBar() +{ + KviCustomToolBar * t = KviActionManager::currentToolBar(); + if(!t)return; + + QString szName = QDir::homeDirPath(); + if(!szName.endsWith(QString(KVI_PATH_SEPARATOR)))szName += KVI_PATH_SEPARATOR; + szName += t->descriptor()->id(); + szName += ".kvs"; + + QString szFile; + + if(!KviFileDialog::askForSaveFileName(szFile,__tr2qs("Choose a Filename - KVIrc"),szName,"*.kvs",true,true,true))return; + + QString szCode; + + int ret = QMessageBox::question(this, + __tr2qs("ToolBar Export"), + __tr2qs("Do you want the associated actions to be exported with the toolbar ?"), + __tr2qs("Yes"), + __tr2qs("No"), + __tr2qs("Cancel")); + + if(ret == 2)return; + + bool bExportActions = ret == 0; + + if(bExportActions) + { + KviPointerList<QString> * a = t->descriptor()->actions(); + if(a) + { + for(QString * s = a->first();s;s = a->next()) + { + KviAction * act = KviActionManager::instance()->getAction(*s); + if(act) + { + if(act->isKviUserActionNeverOverrideThis()) + { + ((KviKvsUserAction *)act)->exportToKvs(szCode); + szCode += "\n\n"; + } + } + } + } + } + + szCode += "toolbar.create "; + szCode += t->descriptor()->id(); + szCode += " "; + szCode += t->descriptor()->labelCode(); + szCode += " "; + szCode += t->descriptor()->iconId(); + szCode += "\n"; + + KviPointerList<QString> * aa = t->descriptor()->actions(); + if(aa) + { + for(QString * ss = aa->first();ss;ss = aa->next()) + { + szCode += "toolbar.additem "; + szCode += t->descriptor()->id(); + szCode += " "; + szCode += *ss; + szCode += "\n"; + } + } + + szCode += "toolbar.show "; + szCode += t->descriptor()->id(); + szCode += "\n"; + + if(!KviFileUtils::writeFile(szFile,szCode)) + { + QMessageBox::warning(this,__tr2qs("Write Failed - KVIrc"),__tr2qs("Unable to write to the toolbar file."),__tr2qs("OK")); + } + +} + +void KviCustomizeToolBarsDialog::renameToolBar() +{ + KviCustomToolBar * t = KviActionManager::currentToolBar(); + if(!t)return; + + KviCustomToolBarPropertiesDialog * dlg = new KviCustomToolBarPropertiesDialog(this, + __tr2qs("Please specify the properties for the toolbar \"%1\"").arg(t->label()), + t->descriptor()->id(), + t->descriptor()->labelCode(), + t->descriptor()->iconId()); + + dlg->show(); + if(dlg->exec() != QDialog::Accepted) + { + delete dlg; + return; + } + + QString id = dlg->id(); + QString label = dlg->label(); + QString icon = dlg->iconId(); + delete dlg; + + if((id == t->descriptor()->id()) && (label == t->descriptor()->labelCode()) && (icon == t->descriptor()->iconId()))return; + + KviCustomToolBarManager::instance()->renameDescriptor(t->descriptor()->id(),id,label); + t->descriptor()->setIconId(icon); +} + +void KviCustomizeToolBarsDialog::newToolBar() +{ + KviCustomToolBarPropertiesDialog * dlg = new KviCustomToolBarPropertiesDialog(this, + __tr2qs("Please specify the properties for the new toolbar"), + KviCustomToolBarManager::instance()->idForNewToolBar(__tr2qs("My ToolBar")), + __tr2qs("My ToolBar")); + + dlg->show(); + if(dlg->exec() != QDialog::Accepted) + { + delete dlg; + return; + } + + QString id = dlg->id(); + QString label = dlg->label(); + QString icon = dlg->iconId(); + delete dlg; + + KviCustomToolBarDescriptor * d = KviCustomToolBarManager::instance()->create(id,label); + d->setIconId(icon); + KviCustomToolBar * t = d->createToolBar(); + KviActionManager::instance()->setCurrentToolBar(t); +} + +void KviCustomizeToolBarsDialog::closeClicked() +{ + delete this; +} + +void KviCustomizeToolBarsDialog::cleanup() +{ + if(!m_pInstance)return; + delete m_pInstance; + m_pInstance = 0; +} + +void KviCustomizeToolBarsDialog::display() +{ + if(m_pInstance)return; + m_pInstance = new KviCustomizeToolBarsDialog(g_pFrame); + m_pInstance->show(); +} + +void KviCustomizeToolBarsDialog::closeEvent(QCloseEvent * e) +{ + e->ignore(); + delete this; +} + |