All pastes #545913 Raw Edit

Something

public cpp v1 · immutable
·published 2007-06-06 22:14 UTC
rendered paste body
#include "batterysrc.h"#include <klocale.h>#include <kdebug.h>#include <iostream>BatterySrc::BatterySrc(QWidget* inParent, QString inUDI):		LabelSource(inParent),		mTrigger(this, 5000),		mUDI(inUDI),		mLibHalContext(NULL){	mID = mUDI.section('/', -1);	mName = mID;	mDescription = i18n("This source displays the current state of charge of your battery.");	dbus_error_init(&mDBusError);	if((mLibHalContext = libhal_ctx_new()) == NULL){		mLibHalContext = NULL;		std::cerr << "error: libmLibHalContext_new" << std::endl;		return;	}	if(!libhal_ctx_set_dbus_connection(mLibHalContext, dbus_bus_get (DBUS_BUS_SYSTEM, &mDBusError))){		std::cerr << "error: libmLibHalContext_set_dbus_connection: " << mDBusError.name << ", " << mDBusError.message << std::endl;		dbus_error_free(&mDBusError);		mLibHalContext = NULL;		mLibHalContext = 0;		return;	}	if(!libhal_ctx_init(mLibHalContext, &mDBusError)){		std::cerr << "error: libmLibHalContext_init: " << mDBusError.name << ", " << mDBusError.message << std::endl;		dbus_error_free(&mDBusError);		mLibHalContext = NULL;		mLibHalContext = 0;		return;	}}BatterySrc::~BatterySrc(){	if(mLibHalContext != NULL && !libhal_ctx_shutdown(mLibHalContext, &mDBusError)){		std::cerr << "error: libmLibHalContext_shutdown: " << mDBusError.name << ", " << mDBusError.message << std::endl;	}	libhal_ctx_free(mLibHalContext);}std::list<Source*>BatterySrc::createInstances(QWidget* inParent){	std::list<Source*> list;		LibHalContext* libHalContext;	DBusError dBusError;	dbus_error_init(&dBusError);	if((libHalContext = libhal_ctx_new()) == NULL){		std::cerr << "error: libmLibHalContext_new" << std::endl;	}	if(libHalContext != 0 && !libhal_ctx_set_dbus_connection(libHalContext, dbus_bus_get (DBUS_BUS_SYSTEM, &dBusError))){		std::cerr << "error: libmLibHalContext_set_dbus_connection: " << dBusError.name << ", " << dBusError.message << std::endl;		dbus_error_free(&dBusError);		libHalContext = 0;	}	if(libHalContext != 0 && !libhal_ctx_init(libHalContext, &dBusError)){		std::cerr << "error: libmLibHalContext_init: " << dBusError.name << ", " << dBusError.message << std::endl;		dbus_error_free(&dBusError);		libHalContext = 0;	}	if(libHalContext){		int num = 0;		char** udis = libhal_manager_find_device_string_match(libHalContext, "info.category", "battery", &num, &dBusError);		if(!dbus_error_is_set(&dBusError)){			//cout << "num devices: " << num << std::endl;			for(int i = 0; i < num; ++i){				if(libhal_device_get_property_type(libHalContext, udis[i], "battery.charge_level.last_full", &dBusError) == LIBHAL_PROPERTY_TYPE_INT32 && libhal_device_get_property_type(libHalContext, udis[i], "battery.charge_level.current", &dBusError) == LIBHAL_PROPERTY_TYPE_INT32){					if(!dbus_error_is_set(&dBusError)) // todo: check whether this check is redundant						list.push_back(new BatterySrc(inParent, udis[i]));				}                if(dbus_error_is_set(&dBusError)) {                    std::cerr << "error: " << dBusError.name << ", " << dBusError.message << std::endl;                    dbus_error_free(&dBusError);                }			}		}else{			std::cerr << "error: " << dBusError.name << ", " << dBusError.message << std::endl;			dbus_error_free(&dBusError);		}		if(!libhal_ctx_shutdown(libHalContext, &dBusError)){			std::cerr << "error: libmLibHalContext_shutdown: " << dBusError.name << ", " << dBusError.message << std::endl;		}		libhal_ctx_free(libHalContext);		libhal_free_string_array(udis);	}	return list;}QString BatterySrc::fetchValue() {	QString s = i18n("n/a");	if(mLibHalContext != NULL){		int last_full = 0;		int current = 0;			last_full = libhal_device_get_property_int(mLibHalContext, mUDI.ascii(), "battery.charge_level.last_full", &mDBusError);		if(dbus_error_is_set(&mDBusError)){			dbus_error_free(&mDBusError);			return s;		}		current = libhal_device_get_property_int(mLibHalContext, mUDI.ascii(), "battery.charge_level.current", &mDBusError);		if(dbus_error_is_set(&mDBusError)){			dbus_error_free(&mDBusError);			return s;		}		s = QString::number(qRound((current * 100.0) / last_full)) + " %";	}	return s;}