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.
241 lines
6.7 KiB
241 lines
6.7 KiB
/*
|
|
* This file is part of the KDE project
|
|
* Copyright (C) 2002 Ian Reinhart Geiser <geiseri@kde.org>
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Library General Public
|
|
* License version 2.0 as published by the Free Software Foundation.
|
|
*
|
|
* 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.
|
|
*
|
|
* $Id$
|
|
*/
|
|
|
|
#include "weatherbar.h"
|
|
#include "dockwidget.h"
|
|
#include "sidebarwidget.h"
|
|
|
|
#include <tdeapplication.h>
|
|
#include <tqlabel.h>
|
|
#include <tqfont.h>
|
|
#include <tqlayout.h>
|
|
#include <tqscrollview.h>
|
|
#include <tqgroupbox.h>
|
|
#include <tdelocale.h>
|
|
#include <kdebug.h>
|
|
#include <tdeconfig.h>
|
|
#include <kstandarddirs.h>
|
|
#include <tdeglobalsettings.h>
|
|
#include <tdemessagebox.h>
|
|
#include <dcopclient.h>
|
|
#include <dcopref.h>
|
|
|
|
|
|
KonqSidebarWeather::KonqSidebarWeather(TDEInstance* inst, TQObject* parent,
|
|
TQWidget* widgetParent,
|
|
TQString& desktopName, const char* name)
|
|
|
|
: KonqSidebarPlugin(inst, parent, widgetParent, desktopName, name),
|
|
DCOPObject(name)
|
|
{
|
|
|
|
m_container = new sidebarwidget(widgetParent,"sidebarwidget");
|
|
|
|
kdDebug() << "Calling Get Widget" << endl;
|
|
|
|
kdDebug() << "Get weatherstation list... " << endl;
|
|
|
|
if (!(
|
|
connectDCOPSignal(0, 0, "fileUpdate(TQString)", "refresh(TQString)", false) &&
|
|
connectDCOPSignal(0, 0, "stationAdded(TQString)", "updateWidgets()", false) &&
|
|
connectDCOPSignal(0, 0, "stationRemoved(TQString)", "updateWidgets()", false)
|
|
))
|
|
kdDebug() << "Could not attach signal..." << endl;
|
|
else
|
|
kdDebug() << "attached dcop signals..." << endl;
|
|
|
|
timeOut = new TQTimer(this, "timeOut" );
|
|
connect(timeOut, TQT_SIGNAL(timeout()), this, TQT_SLOT(updateWidgets()));
|
|
|
|
updateWidgets();
|
|
}
|
|
|
|
|
|
KonqSidebarWeather::~KonqSidebarWeather()
|
|
{
|
|
}
|
|
|
|
void* KonqSidebarWeather::provides(const TQString&)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
void KonqSidebarWeather::emitStatusBarText(const TQString& s)
|
|
{
|
|
}
|
|
|
|
TQWidget* KonqSidebarWeather::getWidget()
|
|
{
|
|
return m_container;
|
|
}
|
|
|
|
void KonqSidebarWeather::refresh(TQString stationID)
|
|
{
|
|
kdDebug() << "refresh " << stationID << endl;
|
|
if(m_widgets.find(stationID))
|
|
{
|
|
/* These updates are seemingly now handled by dockwidget itself
|
|
DCOPRef dcopCall( "KWeatherService", "WeatherService" );
|
|
m_widgets[stationID]->setWeatherIcon(dcopCall.call("currentIcon(TQString)", stationID ,true ));
|
|
m_widgets[stationID]->setTemperature(dcopCall.call("temperature(TQString)", stationID,true ));
|
|
m_widgets[stationID]->setPressure(dcopCall.call("pressure(TQString)", stationID,true ));
|
|
m_widgets[stationID]->setWind(dcopCall.call("wind(TQString)", stationID,true ));
|
|
*/
|
|
|
|
m_widgets[stationID]->showWeather();
|
|
}
|
|
}
|
|
|
|
void KonqSidebarWeather::handleURL(const KURL& url)
|
|
{
|
|
}
|
|
|
|
void KonqSidebarWeather::handlePreview(const KFileItemList& items)
|
|
{
|
|
}
|
|
|
|
void KonqSidebarWeather::handlePreviewOnMouseOver(const KFileItem& item)
|
|
{
|
|
}
|
|
|
|
void KonqSidebarWeather::updateWidgets()
|
|
{
|
|
kdDebug() << "updating station widgets" << endl;
|
|
|
|
timeOut->stop();
|
|
|
|
DCOPRef dcopCall( "KWeatherService", "WeatherService" );
|
|
DCOPReply reply = dcopCall.call("listStations()", true );
|
|
|
|
// KWeatherService might not be active at this point
|
|
if( !reply.isValid() ) {
|
|
kdDebug() << "Starting KWeatherService" << endl;
|
|
if( !startWeatherService() ) {
|
|
KMessageBox::sorry(0, i18n("Could not start the weather service!"));
|
|
return;
|
|
}
|
|
|
|
reply = dcopCall.call("listStations()", true );
|
|
}
|
|
|
|
if ( reply.isValid() ) {
|
|
TQStringList replyList = reply;
|
|
|
|
// Check for new cities
|
|
for(int i = 0; i < replyList.size(); i++)
|
|
{
|
|
if(!m_widgets.find(replyList[i]))
|
|
{
|
|
TQLabel *city = new TQLabel(
|
|
dcopCall.call("stationName(TQString)", replyList[i], true),
|
|
m_container->viewport()
|
|
);
|
|
city->setPaletteBackgroundColor(TDEGlobalSettings::highlightColor());
|
|
city->setPaletteForegroundColor(TDEGlobalSettings::highlightedTextColor());
|
|
dockwidget *d = new dockwidget(replyList[i], m_container->viewport());
|
|
d->resizeView(TQSize(d->width(), 48));
|
|
city->show();
|
|
d->show();
|
|
m_labels.insert(replyList[i], city);
|
|
m_widgets.insert(replyList[i], d);
|
|
}
|
|
dcopCall.send("update(TQString)", replyList[i]);
|
|
}
|
|
|
|
// Check for removed cities
|
|
TQDictIterator<dockwidget> it(m_widgets);
|
|
for(; it.current(); ++it)
|
|
{
|
|
TQString current(it.currentKey());
|
|
if(!replyList.contains(current))
|
|
{
|
|
m_widgets[current]->~dockwidget();
|
|
m_labels[current]->~TQLabel();
|
|
m_widgets.remove(current);
|
|
m_labels.remove(current);
|
|
}
|
|
}
|
|
} else {
|
|
KMessageBox::sorry(0, i18n("The weather service is unreachable!"));
|
|
}
|
|
|
|
timeOut->start(15*60000);
|
|
}
|
|
|
|
bool KonqSidebarWeather::startWeatherService()
|
|
{
|
|
TQByteArray data, replyData;
|
|
TQCString replyType;
|
|
TQDataStream arg(data, IO_WriteOnly);
|
|
arg << TQString("KWeatherService") << TQStringList();
|
|
|
|
if ( !kapp->dcopClient()->call(
|
|
"tdelauncher", "tdelauncher",
|
|
"start_service_by_name(TQString,TQStringList)",
|
|
data, replyType, replyData) ) {
|
|
kdDebug() << "Cannot start weather service: tdelauncher call failed." << endl;
|
|
return false;
|
|
}
|
|
|
|
TQDataStream reply(replyData, IO_ReadOnly);
|
|
if ( replyType != "serviceResult" )
|
|
{
|
|
kdDebug() << "Cannot start weather service: unknown reply type by tdelauncher." << endl;
|
|
return false;
|
|
}
|
|
|
|
int result;
|
|
TQCString dcopName;
|
|
TQString error;
|
|
reply >> result >> dcopName >> error;
|
|
if (result != 0)
|
|
{
|
|
kdDebug() << "Cannot start weather service: " << error.local8Bit().data() << endl;
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
extern "C"
|
|
{
|
|
KDE_EXPORT void* create_weather_sidebar(TDEInstance* inst, TQObject* par, TQWidget*widp,
|
|
TQString& desktopname, const char* name)
|
|
{
|
|
return new KonqSidebarWeather(inst, par, widp, desktopname, name);
|
|
}
|
|
|
|
KDE_EXPORT bool add_weather_sidebar(TQString* fn, TQString* /*param*/,
|
|
TQMap<TQString, TQString>* map)
|
|
{
|
|
map->insert("Type","Link");
|
|
map->insert("Icon","kweather");
|
|
map->insert("Name",i18n("Weather"));
|
|
map->insert("Open","false");
|
|
map->insert("X-TDE-KonqSidebarModule","weather_sidebar");
|
|
fn->setLatin1("weatherbar%1.desktop");
|
|
return true;
|
|
}
|
|
}
|
|
|
|
#include "weatherbar.moc"
|
|
|