|
|
|
//=============================================================================
|
|
|
|
//
|
|
|
|
// File : managementdialog.cpp
|
|
|
|
// Created on Fri 08 Apr 2005 14:54:56 by Szymon Stefanek
|
|
|
|
//
|
|
|
|
// This file is part of the KVIrc IRC Client distribution
|
|
|
|
// Copyright (C) 2005 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 "managementdialog.h"
|
|
|
|
|
|
|
|
#include "kvi_listview.h"
|
|
|
|
#include "kvi_locale.h"
|
|
|
|
#include "kvi_frame.h"
|
|
|
|
#include "kvi_iconmanager.h"
|
|
|
|
#include "kvi_kvs_scriptaddonmanager.h"
|
|
|
|
#include "kvi_window.h"
|
|
|
|
|
|
|
|
#include "kvi_filedialog.h"
|
|
|
|
#include "kvi_fileutils.h"
|
|
|
|
#include "kvi_kvs_script.h"
|
|
|
|
#include "kvi_sourcesdate.h"
|
|
|
|
|
|
|
|
#include <tqpushbutton.h>
|
|
|
|
#include <tqlayout.h>
|
|
|
|
#include <tqapplication.h>
|
|
|
|
#include <tqtooltip.h>
|
|
|
|
#include <tqlineedit.h>
|
|
|
|
#include <tqlabel.h>
|
|
|
|
#include <tqmessagebox.h>
|
|
|
|
#include <tqframe.h>
|
|
|
|
#include "kvi_tal_scrollview.h"
|
|
|
|
#ifdef COMPILE_USE_QT4
|
|
|
|
#include <tq3header.h>
|
|
|
|
|
|
|
|
#else
|
|
|
|
#include <tqheader.h>
|
|
|
|
#endif
|
|
|
|
#include "kvi_draganddrop.h"
|
|
|
|
#include <tqpainter.h>
|
|
|
|
#include <tqpixmap.h>
|
|
|
|
#include <tqmessagebox.h>
|
|
|
|
#include <tqevent.h>
|
|
|
|
|
|
|
|
KviScriptManagementDialog * KviScriptManagementDialog::m_pInstance = 0;
|
|
|
|
extern TQRect g_rectManagementDialogGeometry;
|
|
|
|
|
|
|
|
|
|
|
|
#define LVI_ICON_SIZE 32
|
|
|
|
#define LVI_BORDER 4
|
|
|
|
#define LVI_SPACING 8
|
|
|
|
#define LVI_MINIMUM_TEXT_WIDTH 300
|
|
|
|
#define LVI_MINIMUM_CELL_WIDTH (LVI_MINIMUM_TEXT_WIDTH + LVI_BORDER + LVI_ICON_SIZE + LVI_SPACING + LVI_BORDER)
|
|
|
|
|
|
|
|
KviScriptAddonListViewItem::KviScriptAddonListViewItem(KviTalListView * v,KviKvsScriptAddon * a)
|
|
|
|
: KviTalListViewItem(v,"")
|
|
|
|
{
|
|
|
|
m_pAddon = new KviKvsScriptAddon(*a);
|
|
|
|
m_pListView = v;
|
|
|
|
TQString t = "<nobr><b>";
|
|
|
|
t += a->visibleName();
|
|
|
|
t += "</b> [";
|
|
|
|
t += a->version();
|
|
|
|
t += "]";
|
|
|
|
t += " <font color=\"#a0a0a0\">[";
|
|
|
|
t += a->name();
|
|
|
|
t += "]</font></nobr>";
|
|
|
|
t += "<br><nobr><font size=\"-1\">";
|
|
|
|
t += a->description();
|
|
|
|
t += "</font></nobr>";
|
|
|
|
m_szKey = a->visibleName().upper();
|
|
|
|
#ifdef COMPILE_USE_QT4
|
|
|
|
m_pText = new TQTextDocument();
|
|
|
|
m_pText->setHtml(t);
|
|
|
|
m_pText->setDefaultFont(v->font());
|
|
|
|
#else
|
|
|
|
m_pText = new TQSimpleRichText(t,v->font());
|
|
|
|
#endif
|
|
|
|
|
|
|
|
TQPixmap * p = a->icon();
|
|
|
|
m_pIcon = p ? new TQPixmap(*p) : new TQPixmap(LVI_ICON_SIZE,LVI_ICON_SIZE);
|
|
|
|
}
|
|
|
|
|
|
|
|
KviScriptAddonListViewItem::~KviScriptAddonListViewItem()
|
|
|
|
{
|
|
|
|
delete m_pIcon;
|
|
|
|
delete m_pText;
|
|
|
|
delete m_pAddon;
|
|
|
|
}
|
|
|
|
|
|
|
|
TQString KviScriptAddonListViewItem::key(int,bool) const
|
|
|
|
{
|
|
|
|
return m_szKey;
|
|
|
|
}
|
|
|
|
|
|
|
|
void KviScriptAddonListViewItem::setup()
|
|
|
|
{
|
|
|
|
KviTalListViewItem::setup();
|
|
|
|
int iWidth = m_pListView->visibleWidth();
|
|
|
|
if(iWidth < LVI_MINIMUM_CELL_WIDTH)iWidth = LVI_MINIMUM_CELL_WIDTH;
|
|
|
|
iWidth -= LVI_BORDER + LVI_ICON_SIZE + LVI_SPACING + LVI_BORDER;
|
|
|
|
|
|
|
|
#ifdef COMPILE_USE_QT4
|
|
|
|
int iHeight = m_pText->size().height() + (2 * LVI_BORDER);
|
|
|
|
#else
|
|
|
|
m_pText->setWidth(iWidth);
|
|
|
|
int iHeight = m_pText->height() + (2 * LVI_BORDER);
|
|
|
|
#endif
|
|
|
|
if(iHeight < (LVI_ICON_SIZE + (2 * LVI_BORDER)))iHeight = LVI_ICON_SIZE + (2 * LVI_BORDER);
|
|
|
|
setHeight(iHeight+2);
|
|
|
|
}
|
|
|
|
|
|
|
|
void KviScriptAddonListViewItem::paintCell(TQPainter * p,const TQColorGroup & cg,int column,int width,int align)
|
|
|
|
{
|
|
|
|
#ifdef COMPILE_USE_QT4
|
|
|
|
if (isSelected())
|
|
|
|
{
|
|
|
|
TQColor col(m_pListView->palette().highlight());
|
|
|
|
col.setAlpha(127);
|
|
|
|
p->setBrush(col);
|
|
|
|
p->drawRect(0, 0, m_pListView->visibleWidth(), height());
|
|
|
|
}
|
|
|
|
p->drawPixmap(LVI_BORDER,LVI_BORDER,*m_pIcon);
|
|
|
|
int afterIcon = LVI_BORDER + LVI_ICON_SIZE + LVI_SPACING;
|
|
|
|
int www = m_pListView->visibleWidth() - (afterIcon + LVI_BORDER);
|
|
|
|
p->translate(afterIcon,LVI_BORDER);
|
|
|
|
m_pText->setPageSize(TQSizeF(www,height() - (LVI_BORDER * 2)));
|
|
|
|
m_pText->drawContents(p);
|
|
|
|
#else
|
|
|
|
p->drawPixmap(LVI_BORDER,LVI_BORDER,*m_pIcon);
|
|
|
|
int afterIcon = LVI_BORDER + LVI_ICON_SIZE + LVI_SPACING;
|
|
|
|
int www = m_pListView->visibleWidth() - (afterIcon + LVI_BORDER);
|
|
|
|
m_pText->setWidth(www);
|
|
|
|
if(isSelected())
|
|
|
|
{
|
|
|
|
TQColorGroup cg2(cg);
|
|
|
|
cg2.setColor(TQColorGroup::HighlightedText,cg.text());
|
|
|
|
|
|
|
|
m_pText->draw(p,afterIcon,LVI_BORDER,TQRect(afterIcon,LVI_BORDER,www,height() - (LVI_BORDER * 2)),cg2);
|
|
|
|
} else {
|
|
|
|
m_pText->draw(p,afterIcon,LVI_BORDER,TQRect(afterIcon,LVI_BORDER,www,height() - (LVI_BORDER * 2)),cg);
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
KviScriptAddonListView::KviScriptAddonListView(TQWidget * pParent)
|
|
|
|
: KviListView(pParent)
|
|
|
|
{
|
|
|
|
TQPixmap * p = g_pIconManager->getImage("kvi_dialog_addons.png");
|
|
|
|
if(p)setBackgroundOverlayPixmap(p,TQt::AlignRight | TQt::AlignBottom);
|
|
|
|
|
|
|
|
setSelectionMode(Single);
|
|
|
|
header()->hide();
|
|
|
|
int iWidth = visibleWidth();
|
|
|
|
if(iWidth < LVI_MINIMUM_CELL_WIDTH)iWidth = LVI_MINIMUM_CELL_WIDTH;
|
|
|
|
addColumn("",iWidth);
|
|
|
|
setSorting(0,true);
|
|
|
|
}
|
|
|
|
|
|
|
|
KviScriptAddonListView::~KviScriptAddonListView()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void KviScriptAddonListView::resizeEvent(TQResizeEvent * e)
|
|
|
|
{
|
|
|
|
KviListView::resizeEvent(e);
|
|
|
|
int iWidth = visibleWidth();
|
|
|
|
if(iWidth < LVI_MINIMUM_CELL_WIDTH)iWidth = LVI_MINIMUM_CELL_WIDTH;
|
|
|
|
setColumnWidth(0,iWidth);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
KviScriptManagementDialog::KviScriptManagementDialog(TQWidget * p)
|
|
|
|
: TQDialog(p,"" /*,WType_TopLevel | WStyle_Customize | WStyle_Title | WStyle_StaysOnTop | WStyle_DialogBorder*/)
|
|
|
|
{
|
|
|
|
setCaption(__tr2qs("Manage Script-Based Addons"));
|
|
|
|
setIcon(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_ADDONS)));
|
|
|
|
setModal(true);
|
|
|
|
|
|
|
|
m_pInstance = this;
|
|
|
|
|
|
|
|
TQGridLayout * g = new TQGridLayout(this,11,3,4,5);
|
|
|
|
|
|
|
|
/*TQLabel * lb = new TQLabel(this);
|
|
|
|
lb->setFrameStyle(TQFrame::WinPanel | TQFrame::Sunken);
|
|
|
|
|
|
|
|
g->addMultiCellWidget(lb,0,10,0,0);
|
|
|
|
TQPixmap * pix = g_pIconManager->getImage("kvi_dialog_addons.png");
|
|
|
|
if(pix)
|
|
|
|
{
|
|
|
|
lb->setPixmap(*pix);
|
|
|
|
lb->setFixedWidth(pix->width());
|
|
|
|
}
|
|
|
|
lb->setBackgroundColor(TQt::black);
|
|
|
|
lb->tqsetAlignment(TQt::AlignBottom | TQt::AlignRight);
|
|
|
|
*/
|
|
|
|
m_pListView = new KviScriptAddonListView(this);
|
|
|
|
g->addMultiCellWidget(m_pListView,0,10,1,1);
|
|
|
|
|
|
|
|
m_pConfigureButton = new TQPushButton(__tr2qs("Configure"),this);
|
|
|
|
connect(m_pConfigureButton,TQT_SIGNAL(clicked()),this,TQT_SLOT(configureScript()));
|
|
|
|
g->addWidget(m_pConfigureButton,0,2);
|
|
|
|
|
|
|
|
m_pHelpButton = new TQPushButton(__tr2qs("Show Help"),this);
|
|
|
|
connect(m_pHelpButton,TQT_SIGNAL(clicked()),this,TQT_SLOT(showScriptHelp()));
|
|
|
|
g->addWidget(m_pHelpButton,1,2);
|
|
|
|
|
|
|
|
g->addRowSpacing(2,40);
|
|
|
|
|
|
|
|
m_pUninstallButton = new TQPushButton(__tr2qs("Uninstall"),this);
|
|
|
|
connect(m_pUninstallButton,TQT_SIGNAL(clicked()),this,TQT_SLOT(uninstallScript()));
|
|
|
|
g->addWidget(m_pUninstallButton,3,2);
|
|
|
|
|
|
|
|
g->addRowSpacing(4,15);
|
|
|
|
|
|
|
|
TQFrame *f = new TQFrame(this);
|
|
|
|
f->setFrameStyle(TQFrame::HLine | TQFrame::Sunken);
|
|
|
|
g->addWidget(f,5,2);
|
|
|
|
|
|
|
|
g->addRowSpacing(6,15);
|
|
|
|
|
|
|
|
m_pInstallButton = new TQPushButton(__tr2qs("Install Addon..."),this);
|
|
|
|
connect(m_pInstallButton,TQT_SIGNAL(clicked()),this,TQT_SLOT(installScript()));
|
|
|
|
g->addWidget(m_pInstallButton,7,2);
|
|
|
|
|
|
|
|
m_pGetScriptsButton = new TQPushButton(__tr2qs("More Addons..."),this);
|
|
|
|
connect(m_pGetScriptsButton,TQT_SIGNAL(clicked()),this,TQT_SLOT(getMoreScripts()));
|
|
|
|
g->addWidget(m_pGetScriptsButton,8,2);
|
|
|
|
|
|
|
|
TQPushButton * b = new TQPushButton(__tr2qs("Close"),this);
|
|
|
|
connect(b,TQT_SIGNAL(clicked()),this,TQT_SLOT(closeClicked()));
|
|
|
|
g->addWidget(b,10,2);
|
|
|
|
|
|
|
|
g->setRowStretch(9,1);
|
|
|
|
g->setColStretch(1,1);
|
|
|
|
|
|
|
|
fillListView();
|
|
|
|
|
|
|
|
currentChanged(0);
|
|
|
|
connect(m_pListView,TQT_SIGNAL(currentChanged(KviTalListViewItem *)),this,TQT_SLOT(currentChanged(KviTalListViewItem *)));
|
|
|
|
//currentToolBarChanged();
|
|
|
|
|
|
|
|
if(g_rectManagementDialogGeometry.y() < 5)
|
|
|
|
{
|
|
|
|
g_rectManagementDialogGeometry.setY(5);
|
|
|
|
}
|
|
|
|
resize(g_rectManagementDialogGeometry.width(),
|
|
|
|
g_rectManagementDialogGeometry.height());
|
|
|
|
move(g_rectManagementDialogGeometry.x(),
|
|
|
|
g_rectManagementDialogGeometry.y());
|
|
|
|
}
|
|
|
|
|
|
|
|
KviScriptManagementDialog::~KviScriptManagementDialog()
|
|
|
|
{
|
|
|
|
g_rectManagementDialogGeometry = TQRect(pos().x(),pos().y(),size().width(),size().height());
|
|
|
|
|
|
|
|
//KviActionManager::instance()->customizeToolBarsDialogDestroyed();
|
|
|
|
m_pInstance = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
void KviScriptManagementDialog::fillListView()
|
|
|
|
{
|
|
|
|
m_pListView->clear();
|
|
|
|
KviPointerHashTable<TQString,KviKvsScriptAddon> * d = KviKvsScriptAddonManager::instance()->addonDict();
|
|
|
|
if(!d)return;
|
|
|
|
KviPointerHashTableIterator<TQString,KviKvsScriptAddon> it(*d);
|
|
|
|
KviScriptAddonListViewItem * item;
|
|
|
|
while(KviKvsScriptAddon * a = it.current())
|
|
|
|
{
|
|
|
|
item = new KviScriptAddonListViewItem(m_pListView,a);
|
|
|
|
++it;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void KviScriptManagementDialog::currentChanged(KviTalListViewItem *)
|
|
|
|
{
|
|
|
|
KviScriptAddonListViewItem * it = (KviScriptAddonListViewItem *)m_pListView->currentItem();
|
|
|
|
if(!it)
|
|
|
|
{
|
|
|
|
m_pConfigureButton->setEnabled(false);
|
|
|
|
m_pUninstallButton->setEnabled(false);
|
|
|
|
m_pHelpButton->setEnabled(false);
|
|
|
|
} else {
|
|
|
|
m_pConfigureButton->setEnabled(!(it->addon()->configureCallbackCode().isEmpty()));
|
|
|
|
m_pHelpButton->setEnabled(!(it->addon()->helpCallbackCode().isEmpty()));
|
|
|
|
m_pUninstallButton->setEnabled(true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void KviScriptManagementDialog::showScriptHelp()
|
|
|
|
{
|
|
|
|
KviScriptAddonListViewItem * it = (KviScriptAddonListViewItem *)m_pListView->currentItem();
|
|
|
|
if(!it)return;
|
|
|
|
if(it->addon()->helpCallbackCode().isEmpty())return;
|
|
|
|
it->addon()->executeHelpCallback(g_pActiveWindow);
|
|
|
|
}
|
|
|
|
|
|
|
|
void KviScriptManagementDialog::configureScript()
|
|
|
|
{
|
|
|
|
KviScriptAddonListViewItem * it = (KviScriptAddonListViewItem *)m_pListView->currentItem();
|
|
|
|
if(!it)return;
|
|
|
|
if(it->addon()->configureCallbackCode().isEmpty())return;
|
|
|
|
it->addon()->executeConfigureCallback(g_pActiveWindow);
|
|
|
|
}
|
|
|
|
|
|
|
|
void KviScriptManagementDialog::uninstallScript()
|
|
|
|
{
|
|
|
|
KviScriptAddonListViewItem * it = (KviScriptAddonListViewItem *)m_pListView->currentItem();
|
|
|
|
if(!it)return;
|
|
|
|
|
|
|
|
TQString txt = "<p>";
|
|
|
|
txt += __tr2qs("Do you really want to uninstall the addon \"%1\" ?").tqarg(it->addon()->visibleName());
|
|
|
|
txt += "</p>";
|
|
|
|
|
|
|
|
if(TQMessageBox::question(this,
|
|
|
|
__tr2qs("Confirm addon uninstallation"),txt,__tr2qs("&Yes"),__tr2qs("&No"),0,1) != 0)return;
|
|
|
|
|
|
|
|
KviKvsScriptAddonManager::instance()->unregisterAddon(it->addon()->name(),g_pActiveWindow);
|
|
|
|
|
|
|
|
fillListView();
|
|
|
|
currentChanged(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
void KviScriptManagementDialog::getMoreScripts()
|
|
|
|
{
|
|
|
|
KviKvsScript::run("openurl http://www.kvirc.net/?id=addons&version=" KVI_VERSION "." KVI_SOURCES_DATE,g_pActiveWindow);
|
|
|
|
}
|
|
|
|
|
|
|
|
void KviScriptManagementDialog::installScript()
|
|
|
|
{
|
|
|
|
TQString buffer;
|
|
|
|
|
|
|
|
if(!KviFileDialog::askForOpenFileName(buffer,__tr2qs("Please select the addon installation file"),TQString(),"install.kvs",false,true))return;
|
|
|
|
|
|
|
|
buffer.tqreplace("\\","\\\\");
|
|
|
|
|
|
|
|
TQString szCmd = "parse \"";
|
|
|
|
szCmd += buffer;
|
|
|
|
szCmd += "\"";
|
|
|
|
|
|
|
|
KviKvsScript::run(szCmd,g_pActiveWindow);
|
|
|
|
|
|
|
|
fillListView();
|
|
|
|
currentChanged(0);
|
|
|
|
|
|
|
|
m_pListView->publicUpdateContents();
|
|
|
|
//m_pListView->triggerUpdate();
|
|
|
|
}
|
|
|
|
|
|
|
|
void KviScriptManagementDialog::showEvent(TQShowEvent * e)
|
|
|
|
{
|
|
|
|
// TQRect r = parentWidget() ? parentWidget()->rect() : TQApplication::desktop()->rect();
|
|
|
|
// int x = (r.width() - width()) / 2;
|
|
|
|
// int y = (r.height() - height()) / 2;
|
|
|
|
// move(x,y);
|
|
|
|
}
|
|
|
|
|
|
|
|
void KviScriptManagementDialog::closeClicked()
|
|
|
|
{
|
|
|
|
delete this;
|
|
|
|
}
|
|
|
|
|
|
|
|
void KviScriptManagementDialog::cleanup()
|
|
|
|
{
|
|
|
|
if(!m_pInstance)return;
|
|
|
|
delete m_pInstance;
|
|
|
|
m_pInstance = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
void KviScriptManagementDialog::display()
|
|
|
|
{
|
|
|
|
if(m_pInstance)return;
|
|
|
|
m_pInstance = new KviScriptManagementDialog(g_pFrame);
|
|
|
|
m_pInstance->show();
|
|
|
|
}
|
|
|
|
|
|
|
|
void KviScriptManagementDialog::closeEvent(TQCloseEvent * e)
|
|
|
|
{
|
|
|
|
e->ignore();
|
|
|
|
delete this;
|
|
|
|
}
|
|
|
|
|