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.
182 lines
4.7 KiB
182 lines
4.7 KiB
// -*- 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"
|