diff options
Diffstat (limited to 'src/kvirc/ui/kvi_actiondrawer.cpp')
-rw-r--r-- | src/kvirc/ui/kvi_actiondrawer.cpp | 227 |
1 files changed, 227 insertions, 0 deletions
diff --git a/src/kvirc/ui/kvi_actiondrawer.cpp b/src/kvirc/ui/kvi_actiondrawer.cpp new file mode 100644 index 0000000..a465914 --- /dev/null +++ b/src/kvirc/ui/kvi_actiondrawer.cpp @@ -0,0 +1,227 @@ +//============================================================================= +// +// File : kvi_actiondrawer.cpp +// Created on Sun 21 Nov 2004 05:44:22 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. +// +//============================================================================= + +#define __KVIRC__ + +#include "kvi_actiondrawer.h" +#include "kvi_action.h" +#include "kvi_actionmanager.h" +#include "kvi_iconmanager.h" +#include "kvi_locale.h" + +#include <qlayout.h> +#include <qlabel.h> +//#include <qscrollview.h> +#include <qpainter.h> +#include <qpixmap.h> +#ifdef COMPILE_USE_QT4 + #include <q3header.h> + #include <q3simplerichtext.h> + #include <qmime.h> + #include <qevent.h> +#else + #include <qheader.h> + #include <qsimplerichtext.h> +#endif + +#include "kvi_draganddrop.h" + +#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) + +KviActionDrawerPageListViewItem::KviActionDrawerPageListViewItem(KviTalListView * v,KviAction * a) +: KviTalListViewItem(v,"") +{ + m_pListView = v; + setDragEnabled(true); + m_szName = a->name(); + QString t = "<b>" + a->visibleName() + "</b>"; + if(a->isKviUserActionNeverOverrideThis()) + t += " <font color=\"#a0a0a0\">[" + __tr2qs("Script") + "]</font>"; + t += "<br><font size=\"-1\">" + a->description()+ "</font>"; + m_szKey = a->visibleName().upper(); +#ifdef COMPILE_USE_QT4 + m_pText = new Q3SimpleRichText(t,v->font()); +#else + m_pText = new QSimpleRichText(t,v->font()); +#endif + QPixmap * p = a->bigIcon(); + m_pIcon = p ? new QPixmap(*p) : new QPixmap(LVI_ICON_SIZE,LVI_ICON_SIZE); +} + +KviActionDrawerPageListViewItem::~KviActionDrawerPageListViewItem() +{ + delete m_pIcon; + delete m_pText; +} + +QString KviActionDrawerPageListViewItem::key(int,bool) const +{ + return m_szKey; +} + +void KviActionDrawerPageListViewItem::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; + m_pText->setWidth(iWidth); + int iHeight = m_pText->height() + (2 * LVI_BORDER); + if(iHeight < (LVI_ICON_SIZE + (2 * LVI_BORDER)))iHeight = LVI_ICON_SIZE + (2 * LVI_BORDER); + setHeight(iHeight); +} + +void KviActionDrawerPageListViewItem::paintCell(QPainter * p,const QColorGroup & cg,int column,int width,int align) +{ + KviTalListViewItem::paintCell(p,cg,column,width,align); + //p->fillRect(QRect(0,0,width,height()),isSelected() ? cg.highlight() : cg.base()); + 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()) + { + QColorGroup cg2(cg); + cg2.setColor(QColorGroup::HighlightedText,cg.text()); + m_pText->draw(p,afterIcon,LVI_BORDER,QRect(afterIcon,LVI_BORDER,www,height() - (LVI_BORDER * 2)),cg2); + } else { + m_pText->draw(p,afterIcon,LVI_BORDER,QRect(afterIcon,LVI_BORDER,www,height() - (LVI_BORDER * 2)),cg); + } +} + +KviActionDrawerPageListView::KviActionDrawerPageListView(KviActionDrawerPage * pParent) +: KviListView(pParent) +{ + QPixmap * p = g_pIconManager->getImage("kvi_actiondrawer.png"); + if(p)setBackgroundOverlayPixmap(p,Qt::AlignRight | Qt::AlignBottom); + +// m_pPage = pParent; + setSelectionMode(Single); + header()->hide(); + int iWidth = visibleWidth(); + if(iWidth < LVI_MINIMUM_CELL_WIDTH)iWidth = LVI_MINIMUM_CELL_WIDTH; + addColumn("",iWidth); + setSorting(0,true); +} + +KviActionDrawerPageListView::~KviActionDrawerPageListView() +{ +} + + +void KviActionDrawerPageListView::contentsMousePressEvent(QMouseEvent * e) +{ + KviListView::contentsMousePressEvent(e); + KviActionDrawerPageListViewItem * i = (KviActionDrawerPageListViewItem *)itemAt(QPoint(5,contentsToViewport(e->pos()).y())); + if(!i)return; + KviTextDrag * dr = new KviTextDrag(i->name(),this); // does this leak memory ? + if(i->icon())dr->setPixmap(*(i->icon()),QPoint(3,3)); + dr->dragCopy(); +} + +void KviActionDrawerPageListView::resizeEvent(QResizeEvent * e) +{ + KviListView::resizeEvent(e); + int iWidth = visibleWidth(); + if(iWidth < LVI_MINIMUM_CELL_WIDTH)iWidth = LVI_MINIMUM_CELL_WIDTH; + setColumnWidth(0,iWidth); +} + + +KviActionDrawerPage::KviActionDrawerPage(QWidget * pParent,const QString &szDescription) +: QWidget(pParent) +{ + QGridLayout * g = new QGridLayout(this,2,1,4,4); + + QString t = "<b>" + szDescription + "</b>"; + QLabel * l = new QLabel(t,this); + g->addWidget(l,0,0); + + m_pListView = new KviActionDrawerPageListView(this); + + g->addWidget(m_pListView,1,0); + + g->setRowStretch(1,1); +} + +KviActionDrawerPage::~KviActionDrawerPage() +{ +} + +void KviActionDrawerPage::add(KviAction * a) +{ + (void)new KviActionDrawerPageListViewItem(m_pListView,a); +} + +KviActionDrawer::KviActionDrawer(QWidget * pParent) +: QTabWidget(pParent) +{ + setMinimumWidth(400); + setMinimumHeight(300); +} + +KviActionDrawer::~KviActionDrawer() +{ +} + +void KviActionDrawer::fill() +{ + KviActionManager::loadAllAvailableActions(); + + KviPointerHashTable<QString,KviActionDrawerPage> pages; + pages.setAutoDelete(false); + + KviPointerHashTable<QString,KviAction> * d = KviActionManager::instance()->actions(); + if(!d)return; // ooops + + KviPointerHashTableIterator<QString,KviAction> it(*d); + while(KviAction * a = it.current()) + { + KviActionCategory * c = a->category(); + if(!c)c = KviActionManager::categoryGeneric(); + KviActionDrawerPage * p = pages.find(c->visibleName()); + if(!p) + { + p = new KviActionDrawerPage(this,c->description()); + pages.replace(c->visibleName(),p); + addTab(p,c->visibleName()); + //p->show(); + } + p->add(a); + ++it; + } + + KviActionDrawerPage * p = pages.find(KviActionManager::categoryIrc()->visibleName()); + if(p) + { + int iii = indexOf(p); + if(iii >= 0)setCurrentPage(iii); + } +} + + |