You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kbfx/src/kbfxplasmaindexview.cpp

437 lines
9.9 KiB

/*
* Copyright (C) 2006
* Siraj Razick <siraj@kdemail.net>
* PhobosK <phobosk@mail.kbfx.org>
* see Also AUTHORS
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Library General Public License version 2 as
* published by the Free Software Foundation
*
* 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 Library 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 "kbfxplasmaindexview.h"
KbfxPlasmaIndexView::KbfxPlasmaIndexView ( TQWidget * tqparent, const char *name,
WFlags l ) :
TQCanvasView ( tqparent, name, l )
{
m_itemGroup = new KbfxPlasmaCanvasGroup ();
m_itemGroupList = new KbfxPlasmaCanvasGroupView ();
m_itemStack = new KbfxPlasmaCanvasStack ();
m_pluginLoaded = "";
m_itemStack->addGroup ( m_itemGroupList );
viewport ()->setMouseTracking ( TRUE );
m_currentPos = TQPoint ( 0, 0 );
m_mousePollTimer = new TQTimer ( this );
m_pluginList = KbfxPlasmaPluginLoader::scanPlugins ();
viewport ()->setAcceptDrops ( true );
this->setVScrollBarMode ( TQScrollView::AlwaysOff );
this->setHScrollBarMode ( TQScrollView::AlwaysOff );
setFrameShape ( TQFrame::NoFrame );
m_currentItem = 0L;
m_selectedItem = 0L;
// m_pluginList = "";
connect ( this, TQT_SIGNAL ( clicked ( KbfxPlasmaIndexItem * ) ), this,
TQT_SLOT ( slotClicked ( KbfxPlasmaIndexItem * ) ) );
m_currentView = 0;
setDragAutoScroll ( true );
}
KbfxPlasmaIndexView::~KbfxPlasmaIndexView ()
{
}
void
KbfxPlasmaIndexView::checkMousePos ()
{
KbfxPlasmaCanvasGroup *tmp = 0;
if ( TQCursor::pos () == mapToGlobal ( contentsToViewport ( m_currentPos ) ) )
{
TQMouseEvent me ( TQEvent::MouseButtonPress,
this->mapToGlobal ( m_currentPos ), Qt::LeftButton,
Qt::LeftButton );
clearAll ();
TQCanvasItemList l = canvas ()->collisions ( m_currentPos );
for ( TQCanvasItemList::Iterator it = l.begin (); it != l.end (); ++it )
{
if ( ( *it )->rtti () == CANVASITEM )
{
KbfxPlasmaIndexItem *t = ( KbfxPlasmaIndexItem * ) ( *it );
if ( t->type () != KbfxPlasmaCanvasItem::SEPARATOR )
{
emit clearSelected();
t->mousePressEvent ( &me );
m_selectedItem = t;
t->setSelected ( true );
emit clicked ( t );
}
if ( t->type () == KbfxPlasmaCanvasItem::SEPARATOR )
tmp = KbfxPlasmaCanvasGroup::groupContaining ( t );
// groupContaining ((KbfxPlasmaCanvasItem *) l.first ());
}
}
}
// if (tmp != 0)
// tmp->shade();
}
void
KbfxPlasmaIndexView::setView ( KbfxPlasmaCanvasView * view )
{
if ( view == NULL )
return;
m_currentView = view;
}
void
KbfxPlasmaIndexView::clearAllButOne ( KbfxPlasmaIndexItem * i )
{
i = i;
TQCanvasItemList list = canvas ()->allItems ();
TQCanvasItemList::Iterator it = list.begin ();
for ( ; it != list.end (); ++it )
{
if ( *it )
{
if ( *it != m_selectedItem )
{
KbfxPlasmaIndexItem *t = ( KbfxPlasmaIndexItem * ) ( *it );
t->setCurrent ( false );
}
}
}
canvas ()->update ();
}
void
KbfxPlasmaIndexView::clearSelection ()
{
TQCanvasItemList list = canvas ()->allItems ();
TQCanvasItemList::Iterator it = list.begin ();
for ( ; it != list.end (); ++it )
{
if ( *it )
{
KbfxPlasmaIndexItem *t = ( KbfxPlasmaIndexItem * ) ( *it );
t->setCurrent ( false );
t->setSelected ( false );
}
}
canvas ()->update ();
}
void
KbfxPlasmaIndexView::leaveEvent ( TQEvent * e )
{
e = e;
clearAllButOne ( m_currentItem );
emit expand ();
}
void
KbfxPlasmaIndexView::contextMenuSlot ( int id )
{
id = id;
/*
m_pluginList.remove ( m_pluginList.at ( id - 1 ) );
if ( m_currentView != 0 )
emit pluginRequest ( m_pluginMenu->text ( id ), m_currentView );
*/
}
void
KbfxPlasmaIndexView::contentsContextMenuEvent ( TQContextMenuEvent * event )
{
event = event;
/*
m_pluginMenu = new KPopupMenu ( this );;
connect ( m_pluginMenu, TQT_SIGNAL ( activated ( int ) ), this,
TQT_SLOT ( contextMenuSlot ( int ) ) );
m_pluginMenu->insertTitle ( "Insert Plugin", 0, 0 );
int _index = 1;
for ( TQStringList::Iterator it = m_pluginList.begin ();
it != m_pluginList.end (); ++it )
{
m_pluginMenu->insertItem ( *it, _index, _index );
_index++;
}
m_pluginMenu->exec ( event->globalPos () );
*/
}
void
KbfxPlasmaIndexView::loadList ( KbfxDataStack * stkPtr )
{
if ( stkPtr == NULL )
{
kdDebug() << "Loading Stack Failed:KbfxListBox->loadList()" << endl;
return;
}
int _height = 0;
KbfxPlasmaCanvasItem *box = 0;
KbfxPlasmaCanvasItemWrapper *boxwrapper = 0;
KbfxPlasmaCanvasItemWrapper *indexitemwrap =
new KbfxPlasmaCanvasItemWrapper ( canvas () );
m_itemGroup = new KbfxPlasmaCanvasGroup ();
boxwrapper = new KbfxPlasmaCanvasItemWrapper ( canvas () );
box =
( KbfxPlasmaCanvasItem * ) boxwrapper->
itemIndex ( KbfxPlasmaCanvasItem::SEPARATOR );
box->setLabelText ( stkPtr->name () );
m_itemGroup->addItem ( box );
_height += box->height ();
KbfxDataStack::DataDict _dict = stkPtr->getDataDict ();
KbfxDataStack::DataDict::Iterator it;
for ( it = _dict.begin (); it != _dict.end (); ++it )
{
KbfxPlasmaIndexItem *item =
( KbfxPlasmaIndexItem * ) indexitemwrap->
itemIndex ( KbfxPlasmaCanvasItem::INDEX );
if ( item == 0 )
return;
item->setType ( KbfxPlasmaCanvasItem::INDEX );
item->setText ( it.data ().name );
item->setName ( it.data ().name );
item->setLabelText ( it.data ().name );
item->setIcon ( it.data ().icon );
item->setId ( it.key () );
m_itemGroup->addItem ( item );
item->setBelongsTo ( stkPtr->name () );
}
m_itemGroupList->addGroup ( m_itemGroup );
if ( m_itemGroupList->height () > this->height () )
canvas ()->resize ( this->width (), m_itemGroupList->height () );
canvas ()->update ();
m_itemStack->raise ( 0 );
for ( TQStringList::Iterator it = m_pluginList.begin ();
it != m_pluginList.end (); ++it )
{
if ( *it == stkPtr->name() )
{
m_pluginList.remove ( it );
break;
}
}
}
void
KbfxPlasmaIndexView::setKbfxCanvas ( TQCanvas * cnv )
{
setCanvas ( cnv );
canvas ()->tqsetBackgroundPixmap ( ( *KbfxPlasmaPixmapProvider::pixmap ( "listboxbg" )) );
canvas ()->update ();
}
void
KbfxPlasmaIndexView::loadPlugin ( TQString name, KbfxPlasmaCanvasView * view )
{
if ( m_pluginList.tqcontains ( name ) <= 0 )
{
KbfxPlasmaPluginLoader *m_loader = new KbfxPlasmaPluginLoader ();
KbfxDataStack *m_stack_R = m_loader->getView ( name );
if ( m_stack_R == NULL )
return;
if ( m_currentView != 0 )
view->addStack ( m_stack_R, name );
this->loadList ( m_stack_R );
canvas ()->update ();
m_pluginLoaded += name;
delete m_loader;
return;
}
else
{
kdDebug() << "Plugin already loaded" << endl;
return;
}
}
void
KbfxPlasmaIndexView::mouseMoveEvent ( TQMouseEvent * me )
{
me = me;
}
void
KbfxPlasmaIndexView::contentsMouseMoveEvent ( TQMouseEvent * me )
{
if ( canvas () == NULL )
return;
m_currentPos = me->pos ();
// TODO: Get wait time from config
this->setCursor ( TQCursor ( TQt::PointingHandCursor ) );
TQTimer::singleShot ( 800, this, TQT_SLOT ( checkMousePos () ) );
if ( contentsToViewport ( me->pos () ).y () < this->height () / 5 )
{
scrollBy ( -10, -10 );
}
else if ( contentsToViewport ( me->pos () ).y () > ( ( this->height () * 2 ) / 3 ) )
{
scrollBy ( 10, 10 );
}
TQScrollView::contentsMouseMoveEvent ( me );
// KbfxPlasmaCanvasGroup *tmp = 0;
TQCanvasItemList l = canvas ()->collisions ( me->pos () );
if ( l.count () <= 0 )
return;
for ( TQCanvasItemList::Iterator it = l.begin (); it != l.end (); ++it )
{
if ( *it == 0 )
return;
if ( ( *it )->rtti () == CANVASITEM )
{
KbfxPlasmaIndexItem *t = ( KbfxPlasmaIndexItem * ) ( *it );
t->mouseMoveEvent ( me );
if ( m_currentItem != NULL )
{
if ( !m_currentItem->isSelected () )
m_currentItem->setCurrent ( false );
}
m_currentItem = t;
t->setCurrent ( true );
}
}
canvas ()->update ();
}
void
KbfxPlasmaIndexView::contentsMousePressEvent ( TQMouseEvent * me )
{
if ( me->button () == Qt::RightButton )
return;
clearAll ();
this->setCursor ( TQCursor ( TQt::WaitCursor ) );
KbfxPlasmaCanvasGroup *tmp = 0;
TQCanvasItemList l = canvas ()->collisions ( me->pos () );
for ( TQCanvasItemList::Iterator it = l.begin (); it != l.end (); ++it )
{
if ( ( *it )->rtti () == CANVASITEM )
{
KbfxPlasmaIndexItem *t = ( KbfxPlasmaIndexItem * ) ( *it );
if ( t->type () != KbfxPlasmaCanvasItem::SEPARATOR )
{
t->mousePressEvent ( me );
m_selectedItem = t;
t->setSelected ( true );
emit clicked ( t );
}
if ( t->type () == KbfxPlasmaCanvasItem::SEPARATOR )
tmp = KbfxPlasmaCanvasGroup::groupContaining ( t );
// groupContaining ((KbfxPlasmaCanvasItem *) l.first ());
}
}
if ( tmp != 0 )
tmp->shade ();
// m_clickPos = me->pos ();
TQScrollView::contentsMousePressEvent ( me );
canvas ()->update ();
this->setCursor ( TQCursor ( TQt::PointingHandCursor ) );
}
void
KbfxPlasmaIndexView::slotClicked ( KbfxPlasmaIndexItem * it )
{
if ( it == NULL )
return;
KbfxPlasmaIndexItem *_it = ( KbfxPlasmaIndexItem * ) it;
KbfxSignal signal ( _it->belongsTo (), _it->Id () );
this->setCursor ( TQCursor ( TQt::WaitCursor ) );
emit loadRequest ( signal );
this->setCursor ( TQCursor ( TQt::PointingHandCursor ) );
}
void
KbfxPlasmaIndexView::clearAll ()
{
TQCanvasItemList list = canvas ()->allItems ();
TQCanvasItemList::Iterator it = list.begin ();
for ( ; it != list.end (); ++it )
{
if ( *it )
{
KbfxPlasmaIndexItem *t = ( KbfxPlasmaIndexItem * ) ( *it );
t->setSelected ( false );
}
}
canvas ()->update ();
}
#include "kbfxplasmaindexview.moc"