summaryrefslogtreecommitdiffstats
path: root/konq-plugins/sidebar/newsticker/nspanel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'konq-plugins/sidebar/newsticker/nspanel.cpp')
-rw-r--r--konq-plugins/sidebar/newsticker/nspanel.cpp181
1 files changed, 181 insertions, 0 deletions
diff --git a/konq-plugins/sidebar/newsticker/nspanel.cpp b/konq-plugins/sidebar/newsticker/nspanel.cpp
new file mode 100644
index 0000000..8086b35
--- /dev/null
+++ b/konq-plugins/sidebar/newsticker/nspanel.cpp
@@ -0,0 +1,181 @@
+// -*- Mode: C++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 8; -*-
+
+/***************************************************************************
+ Copyright: nspanel.cpp
+ Marcus Camen <mcamen@mcamen.de>
+***************************************************************************/
+
+/*
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include <qlistview.h>
+#include <qfontmetrics.h>
+#include <qtimer.h>
+#include <kdebug.h>
+#include <klistbox.h>
+#include "nspanel.h"
+
+
+namespace KSB_News {
+
+////////////////////////////////////////////////////////////////
+// ListBox including ToolTip for item
+////////////////////////////////////////////////////////////////
+ TTListBox::TTListBox(QWidget *parent, const char *name, WFlags f)
+ : KListBox(parent, name, f),
+ QToolTip(this) {
+ }
+
+ void TTListBox::clear() {
+ KListBox::clear();
+ }
+
+ void TTListBox::maybeTip(const QPoint &point) {
+ QListBoxItem *item = itemAt(point);
+ if (item) {
+ QString text = item->text();
+ if (!text.isEmpty()) {
+ // Show ToolTip only if necessary
+ QFontMetrics fm(fontMetrics());
+ int textWidth = fm.width(text);
+ int widgetSpace = visibleWidth();
+ if ((textWidth > widgetSpace) || (contentsX() > 0))
+ tip(itemRect(item), text);
+ }
+ }
+ }
+
+
+
+ NSPanel::NSPanel(QObject *parent, const char *name, const QString &key,
+ DCOPRef *rssservice)
+ :QObject(parent, name)
+ ,DCOPObject(QString(QString("sidebar-newsticker-")+key).latin1())
+ ,m_listbox()
+ ,m_pixmap()
+{
+ kdDebug(90140) << "NSPanel: CTOR " << key << " " << rssservice << endl;
+
+ m_rssservice = rssservice;
+ m_key = key;
+ m_rssdocument = m_rssservice->call("document(QString)", m_key);
+ m_isValid = false;
+
+ connectDCOPSignal("rssservice", m_rssdocument.obj(),
+ "documentUpdated(DCOPRef)",
+ "emitDocumentUpdated(DCOPRef)", false);
+ connectDCOPSignal("rssservice", m_rssdocument.obj(),
+ "documentUpdated(DCOPRef)",
+ "emitTitleUpdated(DCOPRef)", false);
+ connectDCOPSignal("rssservice", m_rssdocument.obj(),
+ "pixmapUpdated(DCOPRef)",
+ "emitPixmapUpdated(DCOPRef)", false);
+
+ // updating of RSS documents
+ m_timeoutinterval = 10 * 60 * 1000; // 10 mins
+ m_timer = new QTimer(this);
+ connect(m_timer, SIGNAL(timeout()), this, SLOT(refresh()));
+ m_timer->start(m_timeoutinterval);
+ refresh();
+ }
+
+
+ void NSPanel::refresh() {
+ m_rssdocument.call("refresh()");
+ }
+
+
+ NSPanel::~NSPanel() {
+ }
+
+
+ void NSPanel::setTitle(const QString &tit) {
+ m_title = tit;
+ }
+
+
+ void NSPanel::setListbox(TTListBox *lb) {
+ m_listbox = lb;
+ }
+
+
+ void NSPanel::setPixmap(const QPixmap &pm) {
+ m_pixmap = pm;
+ }
+
+
+ TTListBox *NSPanel::listbox() const {
+ return m_listbox;
+ }
+
+
+ QPixmap NSPanel::pixmap() {
+ return m_pixmap;
+ }
+
+
+ QString NSPanel::key() const {
+ return m_key;
+ }
+
+ QString NSPanel::title() const {
+ return m_title;
+ }
+
+ QStringList NSPanel::articles() {
+ return m_articles;
+ }
+
+ QStringList NSPanel::articleLinks() {
+ return m_articlelinks;
+ }
+
+ bool NSPanel::isValid() const {
+ return m_isValid;
+ }
+
+
+ void NSPanel::emitDocumentUpdated(DCOPRef /*dcopref*/) {
+ kdDebug(90140) << "NSPanel::emitDocumentUpdated" << endl;
+
+ m_articles.clear();
+ m_articlelinks.clear();
+ m_count = m_rssdocument.call("count()");
+ QString temp = m_rssdocument.call("title()");
+ m_title = temp;
+ m_isValid = true;
+ for (int idx = 0; idx < m_count; ++idx) {
+ DCOPRef rss_article = m_rssdocument.call("article(int)", idx);
+ m_articles.append(rss_article.call("title()"));
+ m_articlelinks.append(rss_article.call("link()"));
+ }
+
+ emit documentUpdated(this);
+ }
+
+ void NSPanel::emitPixmapUpdated(DCOPRef /*dcopref*/) {
+ if (m_rssdocument.call("pixmapValid()")) {
+ QPixmap tmp = m_rssdocument.call("pixmap()");
+ m_pixmap = tmp;
+
+ emit pixmapUpdated(this);
+ }
+ }
+
+} // namespace KSB_News
+
+#include "nspanel.moc"