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.
digikam/digikam/digikam/iconitem.cpp

172 lines
3.3 KiB

/* ============================================================
*
* This file is a part of digiKam project
* http://www.digikam.org
*
* Date : 2005-04-24
* Description : icon item.
*
* Copyright (C) 2005 by Renchi Raju <renchi@pooh.tam.uiuc.edu>
*
* 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, or (at your option)
* 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.
*
* ============================================================ */
// TQt includes.
#include <tqpixmap.h>
#include <tqpainter.h>
// Local includes.
#include "icongroupitem.h"
#include "iconview.h"
#include "iconitem.h"
namespace Digikam
{
IconItem::IconItem(IconGroupItem* parent)
: m_group(parent)
{
m_next = 0;
m_prev = 0;
m_x = 0;
m_y = 0;
m_selected = false;
m_group->insertItem(this);
}
IconItem::~IconItem()
{
m_group->takeItem(this);
}
IconItem* IconItem::nextItem() const
{
if (m_next)
return m_next;
if (m_group->nextGroup())
return m_group->nextGroup()->firstItem();
return 0;
}
IconItem* IconItem::prevItem() const
{
if (m_prev)
return m_prev;
if (m_group->prevGroup())
return m_group->prevGroup()->lastItem();
return 0;
}
int IconItem::x() const
{
return m_x;
}
int IconItem::y() const
{
return m_y;
}
TQRect IconItem::rect() const
{
IconView* view = m_group->iconView();
TQRect r(view->itemRect());
r.moveTopLeft(TQPoint(m_x, m_y));
return r;
}
TQRect IconItem::clickToOpenRect()
{
return rect();
}
bool IconItem::move(int x, int y)
{
if (m_x == x && m_y == y)
return false;
m_x = x; m_y = y;
return true;
}
void IconItem::setSelected(bool val, bool cb)
{
IconView* view = m_group->iconView();
if (cb)
{
view->blockSignals(true);
view->clearSelection();
view->blockSignals(false);
}
m_selected = val;
view->selectItem(this, val);
view->updateContents(rect());
}
bool IconItem::isSelected() const
{
return m_selected;
}
void IconItem::repaint(bool force)
{
if (force)
m_group->iconView()->repaintContents(rect());
else
m_group->iconView()->updateContents(rect());
}
IconView* IconItem::iconView() const
{
return m_group->iconView();
}
int IconItem::compare(IconItem* /*item*/)
{
return 0;
}
void IconItem::paintItem()
{
IconView* view = m_group->iconView();
TQRect r(rect());
TQPixmap pix(r.width(), r.height());
pix.fill(m_selected ? TQt::blue : TQt::gray);
if (this == iconView()->currentItem())
{
TQPainter p(&pix);
p.setPen(TQPen(m_selected ? TQt::white : TQt::black, 1, TQt::DotLine));
p.drawRect(2, 2, r.width()-4, r.width()-4);
p.end();
}
r = TQRect(view->contentsToViewport(TQPoint(r.x(), r.y())),
TQSize(r.width(), r.height()));
bitBlt(view->viewport(), r.x(), r.y(), &pix,
0, 0, r.width(), r.height());
}
} // namespace Digikam