[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