propagate with signal sources removal, connection and disconnection
svn path=/trunk/KDE/kdebase/runtime/; revision=1194425
This commit is contained in:
parent
6165b3cf6e
commit
29f4ac0d99
@ -179,6 +179,8 @@ void DataModel::setDataSource(QObject *object)
|
|||||||
m_dataSource = source;
|
m_dataSource = source;
|
||||||
connect(m_dataSource, SIGNAL(newData(const QString &, const Plasma::DataEngine::Data &)),
|
connect(m_dataSource, SIGNAL(newData(const QString &, const Plasma::DataEngine::Data &)),
|
||||||
this, SLOT(dataUpdated(const QString &, const Plasma::DataEngine::Data &)));
|
this, SLOT(dataUpdated(const QString &, const Plasma::DataEngine::Data &)));
|
||||||
|
connect(m_dataSource, SIGNAL(sourceRemoved(const QString &)), this, SLOT(removeSource(const QString &)));
|
||||||
|
connect(m_dataSource, SIGNAL(sourceDisconnected(const QString &)), this, SLOT(removeSource(const QString &)));
|
||||||
}
|
}
|
||||||
|
|
||||||
QObject *DataModel::dataSource() const
|
QObject *DataModel::dataSource() const
|
||||||
@ -234,6 +236,14 @@ void DataModel::setItems(const QString &sourceName, const QVariantList &list)
|
|||||||
emit modelReset();
|
emit modelReset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DataModel::removeSource(const QString &sourceName)
|
||||||
|
{
|
||||||
|
//FIXME: this could be way more efficient by not resetting the whole model
|
||||||
|
emit modelAboutToBeReset();
|
||||||
|
m_items.remove(sourceName);
|
||||||
|
emit modelReset();
|
||||||
|
}
|
||||||
|
|
||||||
QVariant DataModel::data(const QModelIndex &index, int role) const
|
QVariant DataModel::data(const QModelIndex &index, int role) const
|
||||||
{
|
{
|
||||||
if (!index.isValid() || index.column() > 0 ||
|
if (!index.isValid() || index.column() > 0 ||
|
||||||
|
@ -114,6 +114,7 @@ Q_SIGNALS:
|
|||||||
|
|
||||||
private Q_SLOTS:
|
private Q_SLOTS:
|
||||||
void dataUpdated(const QString &sourceName, const Plasma::DataEngine::Data &data);
|
void dataUpdated(const QString &sourceName, const Plasma::DataEngine::Data &data);
|
||||||
|
void removeSource(const QString &sourceName);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DataSource *m_dataSource;
|
DataSource *m_dataSource;
|
||||||
|
@ -53,7 +53,7 @@ void DataSource::setConnectedSources(const QStringList &sources)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
foreach (const QString &source, m_connectedSources) {
|
foreach (const QString &source, m_connectedSources) {
|
||||||
if (!m_connectedSources.contains(source)) {
|
if (!sources.contains(source)) {
|
||||||
m_oldSources.append(source);
|
m_oldSources.append(source);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -86,6 +86,7 @@ void DataSource::setInterval(const int interval)
|
|||||||
emit intervalChanged();
|
emit intervalChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//TODO: event compression for this
|
||||||
void DataSource::setupData()
|
void DataSource::setupData()
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -108,10 +109,13 @@ void DataSource::setupData()
|
|||||||
|
|
||||||
connect(m_dataEngine, SIGNAL(sourceAdded(const QString&)), this, SIGNAL(sourceAdded(const QString&)));
|
connect(m_dataEngine, SIGNAL(sourceAdded(const QString&)), this, SIGNAL(sourceAdded(const QString&)));
|
||||||
connect(m_dataEngine, SIGNAL(sourceRemoved(const QString&)), this, SLOT(removeSource(const QString&)));
|
connect(m_dataEngine, SIGNAL(sourceRemoved(const QString&)), this, SLOT(removeSource(const QString&)));
|
||||||
|
connect(m_dataEngine, SIGNAL(sourceRemoved(const QString&)), this, SIGNAL(sourceRemoved(const QString&)));
|
||||||
|
|
||||||
|
//TODO: remove after event compression done
|
||||||
if (!(m_changes & SourcesChanged)) {
|
if (!(m_changes & SourcesChanged)) {
|
||||||
foreach (const QString &source, m_connectedSources) {
|
foreach (const QString &source, m_connectedSources) {
|
||||||
m_dataEngine->connectSource(source, this, m_interval);
|
m_dataEngine->connectSource(source, this, m_interval);
|
||||||
|
emit sourceConnected(source);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -120,9 +124,11 @@ void DataSource::setupData()
|
|||||||
if (m_dataEngine) {
|
if (m_dataEngine) {
|
||||||
foreach (const QString &source, m_oldSources) {
|
foreach (const QString &source, m_oldSources) {
|
||||||
m_dataEngine->disconnectSource(source, this);
|
m_dataEngine->disconnectSource(source, this);
|
||||||
|
emit sourceDisconnected(source);
|
||||||
}
|
}
|
||||||
foreach (const QString &source, m_newSources) {
|
foreach (const QString &source, m_newSources) {
|
||||||
m_dataEngine->connectSource(source, this, m_interval);
|
m_dataEngine->connectSource(source, this, m_interval);
|
||||||
|
emit sourceConnected(source);
|
||||||
}
|
}
|
||||||
m_oldSources.clear();
|
m_oldSources.clear();
|
||||||
m_newSources.clear();
|
m_newSources.clear();
|
||||||
@ -143,7 +149,9 @@ void DataSource::removeSource(const QString &source)
|
|||||||
{
|
{
|
||||||
m_data.remove(source);
|
m_data.remove(source);
|
||||||
|
|
||||||
|
//TODO: emit those signals as last thing
|
||||||
if (m_connectedSources.contains(source)) {
|
if (m_connectedSources.contains(source)) {
|
||||||
|
emit sourceDisconnected(source);
|
||||||
emit connectedSourcesChanged();
|
emit connectedSourcesChanged();
|
||||||
}
|
}
|
||||||
if (m_dataEngine) {
|
if (m_dataEngine) {
|
||||||
@ -152,7 +160,6 @@ void DataSource::removeSource(const QString &source)
|
|||||||
m_oldSources.removeAll(source);
|
m_oldSources.removeAll(source);
|
||||||
//TODO: delete it?
|
//TODO: delete it?
|
||||||
m_services.remove(source);
|
m_services.remove(source);
|
||||||
emit connectedSourcesChanged();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -178,6 +185,7 @@ void DataSource::connectSource(const QString &source)
|
|||||||
m_newSources.append(source);
|
m_newSources.append(source);
|
||||||
m_connectedSources.append(source);
|
m_connectedSources.append(source);
|
||||||
m_changes |= SourcesChanged;
|
m_changes |= SourcesChanged;
|
||||||
|
emit sourceConnected(source);
|
||||||
emit connectedSourcesChanged();
|
emit connectedSourcesChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -186,6 +194,7 @@ void DataSource::disconnectSource(const QString &source)
|
|||||||
m_oldSources.append(source);
|
m_oldSources.append(source);
|
||||||
m_connectedSources.removeAll(source);
|
m_connectedSources.removeAll(source);
|
||||||
m_changes |= SourcesChanged;
|
m_changes |= SourcesChanged;
|
||||||
|
emit sourceDisconnected(source);
|
||||||
emit connectedSourcesChanged();
|
emit connectedSourcesChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -81,19 +81,19 @@ public:
|
|||||||
Q_INVOKABLE void connectSource(const QString &source);
|
Q_INVOKABLE void connectSource(const QString &source);
|
||||||
Q_INVOKABLE void disconnectSource(const QString &source);
|
Q_INVOKABLE void disconnectSource(const QString &source);
|
||||||
|
|
||||||
public Q_SLOTS:
|
|
||||||
void removeSource(const QString &source);
|
|
||||||
|
|
||||||
protected Q_SLOTS:
|
protected Q_SLOTS:
|
||||||
void dataUpdated(const QString &sourceName, const Plasma::DataEngine::Data &data);
|
void dataUpdated(const QString &sourceName, const Plasma::DataEngine::Data &data);
|
||||||
|
void removeSource(const QString &source);
|
||||||
void setupData();
|
void setupData();
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void newData(const QString &sourceName, const Plasma::DataEngine::Data &data);
|
void newData(const QString &sourceName, const Plasma::DataEngine::Data &data);
|
||||||
void sourceAdded(const QString &source);
|
void sourceAdded(const QString &source);
|
||||||
|
void sourceRemoved(const QString &source);
|
||||||
|
void sourceConnected(const QString &source);
|
||||||
|
void sourceDisconnected(const QString &source);
|
||||||
void intervalChanged();
|
void intervalChanged();
|
||||||
void engineChanged();
|
void engineChanged();
|
||||||
void sourceChanged();
|
|
||||||
void dataChanged();
|
void dataChanged();
|
||||||
void connectedSourcesChanged();
|
void connectedSourcesChanged();
|
||||||
void sourcesChanged();
|
void sourcesChanged();
|
||||||
|
Loading…
Reference in New Issue
Block a user