[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: playground/base/plasma/applets/previewer
From: Alessandro Diaferia <alediaferia () gmail ! com>
Date: 2008-10-03 8:31:21
Message-ID: 1223022681.031030.5606.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 867253 by adiaferia:
qgw complited.. hope
M +1 -1 CMakeLists.txt
M +125 -0 previewwidget.cpp
M +4 -0 previewwidget.h
--- trunk/playground/base/plasma/applets/previewer/CMakeLists.txt #867252:867253
@@ -17,7 +17,7 @@
set(previewer_SRCS plasma-previewer.cpp
previewitemmodel.cpp
previewdialog.cpp
-# previewwidget.cpp
+ previewwidget.cpp
)
QT4_ADD_DBUS_ADAPTOR(Previewer_SRCS org.kde.Previewer.xml
--- trunk/playground/base/plasma/applets/previewer/previewwidget.cpp #867252:867253
@@ -17,8 +17,12 @@
#include "previewwidget.h"
+#include "previewitemmodel.h"
+
// Qt
#include <QGraphicsSceneWheelEvent>
+#include <QPainter>
+#include <QStyleOptionGraphicsItem>
// KDE
#include <KDebug>
@@ -28,11 +32,13 @@
#include <KIconLoader>
#include <KIO/PreviewJob>
#include <KUrl>
+#include <KFileItemDelegate>
// Plasma
#include <Plasma/Svg>
#include <Plasma/PanelSvg>
#include <Plasma/ScrollBar>
+#include <Plasma/Theme>
static const int s_spacing = 2;
@@ -286,3 +292,122 @@
m_scrollBar->setGeometry(r);
m_layoutIsValid = false;
}
+
+void PreviewWidget::paint(QPainter *painter,
+ const QStyleOptionGraphicsItem *opt,
+ QWidget *widget)
+{
+ Q_UNUSED(widget);
+
+ if (!opt->rect.isValid()) {
+ return;
+ }
+
+ QRect contentsRect = this->contentsRect().toRect();
+ painter->translate(contentsRect.topLeft());
+ painter->setRenderHint(QPainter::Antialiasing);
+
+ m_panel->setEnabledBorders(Plasma::PanelSvg::TopBorder | \
Plasma::PanelSvg::LeftBorder | Plasma::PanelSvg::RightBorder); + \
m_panel->resizePanel(QSize(contentsRect.width(), s_topBorder)); + \
m_panel->paintPanel(painter); +
+ m_logo->paint(painter, QRect(10, 5, s_logoSize, s_logoSize));
+
+ painter->save();
+ QFont font = painter->font();
+ font.setBold(true);
+ painter->setFont(font);
+ painter->setPen(Plasma::Theme::defaultTheme()->color(Plasma::Theme::TextColor));
+ painter->drawText(QRect(39, 3, contentsRect.width() - 39, 30), Qt::AlignBottom | \
Qt::AlignLeft, + " " + i18n("Previewer"));
+// painter->setFont(KGlobalSettings::smallestReadableFont());
+ QFontMetrics fm(font);
+ int length = fm.width(i18n("Previewer") + " ");
+ font.setBold(false);
+ painter->setFont(font);
+ painter->drawText(QRect(39 + length, 3, contentsRect.width() - 39, 30),
+ Qt::AlignBottom | Qt::AlignLeft,
+ i18n("Drop files on me to preview them."));
+ painter->restore();
+
+ //kDebug() <<"contentsRect" <<contentsRect;
+ // let's draw items..
+ if (!m_layoutIsValid) {
+ layoutItems();
+ }
+
+ painter->save();
+ painter->setClipping(true);
+ painter->setClipRect(m_itemsRect);
+
+ PreviewItemModel *model = new PreviewItemModel(m_previewHistory);
+ KFileItemDelegate *m_delegate = new KFileItemDelegate(this);
+ m_delegate->setShadowColor(Plasma::Theme::defaultTheme()->color(Plasma::Theme::TextColor));
+
+ //TODO: this could look a lot nicer with a gradient
+ painter->fillRect(m_itemsRect.intersected(opt->rect), QColor(0, 0, 0, 80));
+
+ for (int i = 0; i < m_items.count(); i++) {
+ QRect r = m_items[i];
+
+ if (!r.intersects(opt->rect)) {
+ continue;
+ }
+
+ m_option.state &= ~(QStyle::State_Selected | QStyle::State_MouseOver) ;
+ if (m_selectedIndex == i) {
+ m_option.state |= QStyle::State_Selected;
+ }
+
+ if (m_hoveredIndex == i) {
+ m_option.state |= QStyle::State_MouseOver;
+ }
+
+ m_option.rect = r;
+ m_option.palette.setColor(QPalette::All, QPalette::Text,
+ \
Plasma::Theme::defaultTheme()->color(Plasma::Theme::TextColor)); + \
m_option.decorationSize = iconSize(); + \
m_delegate->setShadowColor(Plasma::Theme::defaultTheme()->color(Plasma::Theme::BackgroundColor));
+ m_delegate->paint(painter, m_option, model->index(i, 0));
+ }
+
+ delete model;
+ delete m_delegate;
+
+ painter->restore();
+
+ // let's draw the preview section..
+ m_panel->setEnabledBorders(Plasma::PanelSvg::NoBorder);
+ //kDebug() << "m_itemsRect" << m_itemsRect;
+ //kDebug() << "m_previewRect" << m_previewRect;
+ m_panel->resizePanel(m_previewRect.size());
+ m_panel->paintPanel(painter, m_previewRect.topLeft());
+
+ // let's draw the bottom border of the applet
+ m_panel->setEnabledBorders(Plasma::PanelSvg::BottomBorder | \
Plasma::PanelSvg::LeftBorder | Plasma::PanelSvg::RightBorder); + \
m_panel->resizePanel(QSize(contentsRect.width(), s_bottomBorder)); + \
m_panel->paintPanel(painter, QPoint(0, contentsRect.height() - s_bottomBorder)); +
+ // hovering rect
+ if (m_previewReady && !m_hoveredUrl.isEmpty()) {
+ QPixmap pmap;
+ if (m_previews.contains(m_hoveredUrl)) {
+ pmap = m_previews[m_hoveredUrl];
+ QRect itemNameRect = QRect(m_itemsRect.right(), m_itemsRect.bottom(),
+ contentsRect.width() - m_itemsRect.right(), \
s_bottomBorder); + // here we paint the file name
+ painter->setPen(Plasma::Theme::defaultTheme()->color(Plasma::Theme::TextColor));
+ painter->drawText(itemNameRect, Qt::AlignVCenter | Qt::AlignLeft, \
m_hoveredUrl.fileName()); + }
+
+ if (m_previewRect.width() >= pmap.width()) {
+ QRect p_rect = QRect(m_previewRect.x() + abs(m_previewRect.width() - \
pmap.width())/2, + m_previewRect.y() + abs(m_previewRect.height() \
- pmap.height())/2, + pmap.width(), pmap.height());
+ painter->drawPixmap(p_rect, pmap);
+ } else {
+ //TODO: draw the preview even smaller in this case
+ painter->drawPixmap(m_previewRect, pmap);
+ }
+ }
+}
--- trunk/playground/base/plasma/applets/previewer/previewwidget.h #867252:867253
@@ -42,6 +42,10 @@
~PreviewWidget();
void paint( QPainter * painter, const QStyleOptionGraphicsItem * option, \
QWidget * widget = 0 ); +
+ /**
+ * Call this method whenever the item list changes
+ */
void setItemsList(const QList<QUrl> &);
/**
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic