summaryrefslogtreecommitdiffstats
path: root/kopete/libkopete/ui/kopetelistviewitem.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kopete/libkopete/ui/kopetelistviewitem.cpp')
-rw-r--r--kopete/libkopete/ui/kopetelistviewitem.cpp358
1 files changed, 338 insertions, 20 deletions
diff --git a/kopete/libkopete/ui/kopetelistviewitem.cpp b/kopete/libkopete/ui/kopetelistviewitem.cpp
index 888f9d5b..e02b14b3 100644
--- a/kopete/libkopete/ui/kopetelistviewitem.cpp
+++ b/kopete/libkopete/ui/kopetelistviewitem.cpp
@@ -20,6 +20,7 @@
#include "config.h"
#endif
+#include "kopeteprefs.h"
#include "kopetecontact.h"
#include "kopetelistviewitem.h"
#include "kopeteemoticons.h"
@@ -291,7 +292,7 @@ public:
Private( BoxComponent::Direction dir ) : direction( dir ) {}
BoxComponent::Direction direction;
- static const int padding = 2;
+ static const int padding = 0;
};
BoxComponent::BoxComponent( ComponentBase *parent, Direction dir )
@@ -459,6 +460,284 @@ void BoxComponent::componentResized( Component *component )
calcMinSize();
}
+
+
+/*= ContactBoxComponent =====================================================*/
+
+class ContactBoxComponent::Private
+{
+public:
+ TQRect sub;
+
+ TQPixmap back_pixmap;
+
+ TQPixmap corner_tl_pixmap;
+ TQPixmap corner_bl_pixmap;
+ TQPixmap corner_tr_pixmap;
+ TQPixmap corner_br_pixmap;
+
+ TQPixmap top_pixmap;
+ TQPixmap left_pixmap;
+ TQPixmap right_pixmap;
+ TQPixmap bottom_pixmap;
+};
+
+ContactBoxComponent::ContactBoxComponent(ComponentBase *parent, Direction dir)
+ : BoxComponent(parent, dir), d(new Private())
+{}
+
+ContactBoxComponent::~ContactBoxComponent()
+{
+ delete d;
+}
+
+void ContactBoxComponent::reloadTheme()
+{
+ TQString path = KopetePrefs::prefs()->themeURL();
+ TQString str;
+
+ str = path + "ContactBackground.png";
+ d->back_pixmap.load(str);
+
+ str = path + "ContactTopLeft.png";
+ d->corner_tl_pixmap.load(str);
+ str = path + "ContactBottomLeft.png";
+ d->corner_bl_pixmap.load(str);
+ str = path + "ContactTopRight.png";
+ d->corner_tr_pixmap.load(str);
+ str = path + "ContactBottomRight.png";
+ d->corner_br_pixmap.load(str);
+
+ str = path + "ContactTop.png";
+ d->top_pixmap.load(str);
+ str = path + "ContactLeft.png";
+ d->left_pixmap.load(str);
+ str = path + "ContactRight.png";
+ d->right_pixmap.load(str);
+ str = path + "ContactBottom.png";
+ d->bottom_pixmap.load(str);
+}
+
+void ContactBoxComponent::layout(const TQRect &rect)
+{
+ d->sub.setLeft(rect.left() +
+ d->left_pixmap.width());
+ d->sub.setTop(rect.top() +
+ d->top_pixmap.height());
+ d->sub.setRight(rect.right() -
+ d->right_pixmap.width());
+ d->sub.setBottom(rect.bottom() -
+ d->bottom_pixmap.height());
+
+ BoxComponent::layout(d->sub);
+ Component::layout(rect);
+}
+
+int ContactBoxComponent::widthForHeight(int height)
+{
+ return BoxComponent::widthForHeight(height) +
+ d->left_pixmap.width() +
+ d->right_pixmap.width();
+}
+
+int ContactBoxComponent::heightForWidth(int width)
+{
+ return BoxComponent::heightForWidth(width) +
+ d->top_pixmap.height() +
+ d->bottom_pixmap.height();
+}
+
+void ContactBoxComponent::paint(TQPainter *painter, const TQColorGroup &cg)
+{
+ painter->drawPixmap(0,
+ 0,
+ d->corner_tl_pixmap);
+
+ painter->drawPixmap(0,
+ d->sub.bottom()+1,
+ d->corner_bl_pixmap);
+
+ painter->drawPixmap(d->sub.right()+1,
+ 0,
+ d->corner_tr_pixmap);
+
+ painter->drawPixmap(d->sub.right()+1,
+ d->sub.bottom()+1,
+ d->corner_br_pixmap);
+
+ painter->drawTiledPixmap(0,
+ d->sub.top(),
+ d->left_pixmap.width(),
+ d->sub.height(),
+ d->left_pixmap);
+
+ painter->drawTiledPixmap(d->sub.left(),
+ 0,
+ d->sub.width(),
+ d->top_pixmap.height(),
+ d->top_pixmap);
+
+ painter->drawTiledPixmap(d->sub.left(),
+ d->sub.bottom()+1,
+ d->sub.width(),
+ d->bottom_pixmap.height(),
+ d->bottom_pixmap);
+
+ painter->drawTiledPixmap(d->sub.right()+1,
+ d->sub.top(),
+ d->right_pixmap.width(),
+ d->sub.height(),
+ d->right_pixmap);
+
+ painter->drawTiledPixmap(d->sub,
+ d->back_pixmap);
+
+ return BoxComponent::paint(painter, cg);
+}
+
+
+
+/*= GroupBoxComponent =======================================================*/
+
+class GroupBoxComponent::Private
+{
+public:
+ TQRect sub;
+
+ TQPixmap back_pixmap;
+
+ TQPixmap open_pixmap;
+ TQPixmap closed_pixmap;
+
+ TQPixmap corner_tl_pixmap;
+ TQPixmap corner_bl_pixmap;
+ TQPixmap corner_tr_pixmap;
+ TQPixmap corner_br_pixmap;
+
+ TQPixmap top_pixmap;
+ TQPixmap left_pixmap;
+ TQPixmap right_pixmap;
+ TQPixmap bottom_pixmap;
+};
+
+GroupBoxComponent::GroupBoxComponent(ComponentBase *parent, Direction dir)
+ : BoxComponent(parent, dir), d(new Private())
+{}
+
+GroupBoxComponent::~GroupBoxComponent()
+{
+ delete d;
+}
+
+void GroupBoxComponent::reloadTheme()
+{
+ TQString path = KopetePrefs::prefs()->themeURL();
+ TQString str;
+
+ str = path + "GroupBackground.png";
+ d->back_pixmap.load(str);
+
+ str = path + "GroupOpen.png";
+ d->open_pixmap.load(str);
+ str = path + "GroupClosed.png";
+ d->closed_pixmap.load(str);
+
+ str = path + "GroupTopLeft.png";
+ d->corner_tl_pixmap.load(str);
+ str = path + "GroupBottomLeft.png";
+ d->corner_bl_pixmap.load(str);
+ str = path + "GroupTopRight.png";
+ d->corner_tr_pixmap.load(str);
+ str = path + "GroupBottomRight.png";
+ d->corner_br_pixmap.load(str);
+
+ str = path + "GroupTop.png";
+ d->top_pixmap.load(str);
+ str = path + "GroupLeft.png";
+ d->left_pixmap.load(str);
+ str = path + "GroupRight.png";
+ d->right_pixmap.load(str);
+ str = path + "GroupBottom.png";
+ d->bottom_pixmap.load(str);
+}
+
+void GroupBoxComponent::layout(const TQRect &rect)
+{
+ d->sub.setLeft(rect.left() +
+ d->left_pixmap.width());
+ d->sub.setTop(rect.top() +
+ d->top_pixmap.height());
+ d->sub.setRight(rect.right() -
+ d->right_pixmap.width());
+ d->sub.setBottom(rect.bottom() -
+ d->bottom_pixmap.height());
+
+ BoxComponent::layout(d->sub);
+ Component::layout(rect);
+}
+
+int GroupBoxComponent::widthForHeight(int height)
+{
+ return BoxComponent::widthForHeight(height) +
+ d->left_pixmap.width() +
+ d->right_pixmap.width();
+}
+
+int GroupBoxComponent::heightForWidth( int width )
+{
+ return BoxComponent::heightForWidth(width) +
+ d->top_pixmap.height() +
+ d->bottom_pixmap.height();
+}
+
+void GroupBoxComponent::paint( TQPainter *painter, const TQColorGroup &cg )
+{
+ painter->drawPixmap(0,
+ 0,
+ d->corner_tl_pixmap);
+
+ painter->drawPixmap(0,
+ d->sub.bottom()+1,
+ d->corner_bl_pixmap);
+
+ painter->drawPixmap(d->sub.right()+1,
+ 0,
+ d->corner_tr_pixmap);
+
+ painter->drawPixmap(d->sub.right()+1,
+ d->sub.bottom()+1,
+ d->corner_br_pixmap);
+
+ painter->drawTiledPixmap(0,
+ d->sub.top(),
+ d->left_pixmap.width(),
+ d->sub.height(),
+ d->left_pixmap);
+
+ painter->drawTiledPixmap(d->sub.left(),
+ 0,
+ d->sub.width(),
+ d->top_pixmap.height(),
+ d->top_pixmap);
+
+ painter->drawTiledPixmap(d->sub.left(),
+ d->sub.bottom()+1,
+ d->sub.width(),
+ d->bottom_pixmap.height(),
+ d->bottom_pixmap);
+
+ painter->drawTiledPixmap(d->sub.right()+1,
+ d->sub.top(),
+ d->right_pixmap.width(),
+ d->sub.height(),
+ d->right_pixmap);
+
+ painter->drawTiledPixmap(d->sub,
+ d->back_pixmap);
+
+ return BoxComponent::paint(painter, cg);
+}
+
// ImageComponent --------
class ImageComponent::Private
@@ -492,33 +771,21 @@ TQPixmap ImageComponent::pixmap()
return d->image;
}
-void ImageComponent::setPixmap( const TQPixmap &img, bool adjustSize)
+void ImageComponent::setPixmap( const TQPixmap &img, bool)
{
d->image = img;
- if ( adjustSize )
- {
- setMinWidth( img.width() );
- setMinHeight( img.height() );
- }
- repaint();
-}
+ setMinWidth(d->image.width());
+ setMinHeight(d->image.height());
-static TQPoint operator+( const TQPoint &pt, const TQSize &sz )
-{
- return TQPoint( pt.x() + sz.width(), pt.y() + sz.height() );
+ repaint();
}
-/*static TQPoint operator+( const TQSize &sz, const TQPoint &pt )
-{
- return pt + sz;
-}*/
-
void ImageComponent::paint( TQPainter *painter, const TQColorGroup & )
{
TQRect ourRc = rect();
TQRect rc = d->image.rect();
// center rc within our rect
- rc.moveTopLeft( ourRc.topLeft() + (ourRc.size() - rc.size()) / 2 );
+ rc.moveTopLeft(ourRc.topLeft());
// paint, shrunk to be within our rect
painter->drawPixmap( rc & ourRc, d->image );
}
@@ -528,6 +795,57 @@ void ImageComponent::scale( int w, int h, TQImage::ScaleMode mode )
TQImage im = d->image.convertToImage();
setPixmap( TQPixmap( im.smoothScale( w, h, mode ) ) );
}
+
+
+
+/*= FaceComponent ===========================================================*/
+
+void FaceComponent::setPixmap(const TQPixmap &img, bool)
+{
+ d->image = img;
+
+ setMinWidth(d->image.width());
+ setMinHeight(d->image.height());
+
+ if (img.width() >= 30)
+ {
+ d->image = TQPixmap(img.convertToImage().smoothScale(30, 30));
+ setMinWidth(d->image.width() + 4);
+ setMinHeight(d->image.height() + 4);
+ }
+
+ repaint();
+}
+
+static TQPoint operator+(const TQPoint &pt, const TQSize &sz)
+{
+ return TQPoint(pt.x() + sz.width(), pt.y() + sz.height());
+}
+
+void FaceComponent::paint(TQPainter *painter, const TQColorGroup &)
+{
+ TQRect outRc = rect();
+ TQRect pixRc = d->image.rect();
+
+ pixRc.moveTopLeft(outRc.topLeft() + (outRc.size() - pixRc.size()) / 2);
+
+ if (d->image.width() == 30)
+ {
+ TQPixmap pixBorder;
+ TQString path = KopetePrefs::prefs()->themeURL();
+ TQString str = path + "ContactFace.png";
+
+ pixBorder.load(str);
+ TQRect pixRc2 = pixBorder.rect();
+
+ pixRc2.moveTopLeft(outRc.topLeft() + (outRc.size() - pixRc2.size()) / 2);
+ painter->drawPixmap(pixRc2, pixBorder);
+ }
+
+ painter->drawPixmap(pixRc, d->image);
+}
+
+
// TextComponent
class TextComponent::Private
@@ -813,10 +1131,10 @@ public:
int iconSize;
};
-ContactComponent::ContactComponent( ComponentBase *parent, Kopete::Contact *contact, int iconSize) : ImageComponent( parent ) , d( new Private )
+ContactComponent::ContactComponent( ComponentBase *parent, Kopete::Contact *contact, int) : ImageComponent( parent ) , d( new Private )
{
d->contact = contact;
- d->iconSize = iconSize;
+ d->iconSize = 12; // size of the image is fixed to 12 pixels
updatePixmap();
}