diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.cpp index 3ad6b5feb7c..6a67e4f2c1e 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.cpp @@ -300,9 +300,11 @@ void MaemoDeployStep::handleDeviceConfigurationsUpdated() void MaemoDeployStep::setDeviceConfig(MaemoDeviceConfig::Id internalId) { - m_deviceConfig = MaemoDeviceConfigurations::instance()->find(internalId); - if (!m_deviceConfig && MaemoDeviceConfigurations::instance()->rowCount() > 0) - m_deviceConfig = MaemoDeviceConfigurations::instance()->deviceAt(0); + const MaemoDeviceConfigurations * const devConfs + = MaemoDeviceConfigurations::instance(); + m_deviceConfig = devConfs->find(internalId); + if (!m_deviceConfig) + m_deviceConfig = devConfs->defaultDeviceConfig(); emit deviceConfigChanged(); } diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodeviceconfigurations.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemodeviceconfigurations.cpp index c60c8730dea..acbb5be2da1 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemodeviceconfigurations.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemodeviceconfigurations.cpp @@ -63,6 +63,7 @@ namespace { const QLatin1String KeyFileKey("KeyFile"); const QLatin1String PasswordKey("Password"); const QLatin1String TimeoutKey("Timeout"); + const QLatin1String IsDefaultKey("IsDefault"); const QLatin1String InternalIdKey("InternalId"); const QLatin1String DefaultKeyFilePathKey("DefaultKeyFile"); @@ -178,13 +179,18 @@ private: MaemoDeviceConfig::Ptr MaemoDeviceConfig::create(const QString &name, DeviceType type, Id &nextId) { - return MaemoDeviceConfig::Ptr(new MaemoDeviceConfig(name, type, nextId)); + return Ptr(new MaemoDeviceConfig(name, type, nextId)); } MaemoDeviceConfig::Ptr MaemoDeviceConfig::create(const QSettings &settings, Id &nextId) { - return MaemoDeviceConfig::Ptr(new MaemoDeviceConfig(settings, nextId)); + return Ptr(new MaemoDeviceConfig(settings, nextId)); +} + +MaemoDeviceConfig::Ptr MaemoDeviceConfig::create(const ConstPtr &other) +{ + return Ptr(new MaemoDeviceConfig(other)); } MaemoDeviceConfig::MaemoDeviceConfig(const QString &name, DeviceType devType, @@ -193,8 +199,8 @@ MaemoDeviceConfig::MaemoDeviceConfig(const QString &name, DeviceType devType, m_name(name), m_type(devType), m_portsSpec(defaultPortsSpec(m_type)), - m_internalId(nextId++), - m_isDefault(false) + m_isDefault(false), + m_internalId(nextId++) { m_sshParameters.host = defaultHost(m_type); m_sshParameters.port = defaultSshPort(m_type); @@ -211,8 +217,8 @@ MaemoDeviceConfig::MaemoDeviceConfig(const QSettings &settings, m_name(settings.value(NameKey).toString()), m_type(static_cast(settings.value(TypeKey, DefaultDeviceType).toInt())), m_portsSpec(settings.value(PortsSpecKey, defaultPortsSpec(m_type)).toString()), - m_internalId(settings.value(InternalIdKey, nextId).toULongLong()), - m_isDefault(false) + m_isDefault(settings.value(IsDefaultKey, false).toBool()), + m_internalId(settings.value(InternalIdKey, nextId).toULongLong()) { if (m_internalId == nextId) ++nextId; @@ -227,6 +233,16 @@ MaemoDeviceConfig::MaemoDeviceConfig(const QSettings &settings, m_sshParameters.timeout = settings.value(TimeoutKey, DefaultTimeout).toInt(); } +MaemoDeviceConfig::MaemoDeviceConfig(const MaemoDeviceConfig::ConstPtr &other) + : m_sshParameters(other->m_sshParameters), + m_name(other->m_name), + m_type(other->type()), + m_portsSpec(other->m_portsSpec), + m_isDefault(other->m_isDefault), + m_internalId(other->m_internalId) +{ +} + QString MaemoDeviceConfig::portsRegExpr() { const QLatin1String portExpr("(\\d)+"); @@ -266,6 +282,7 @@ void MaemoDeviceConfig::save(QSettings &settings) const settings.setValue(PasswordKey, m_sshParameters.pwd); settings.setValue(KeyFileKey, m_sshParameters.privateKeyFile); settings.setValue(TimeoutKey, m_sshParameters.timeout); + settings.setValue(IsDefaultKey, m_isDefault); settings.setValue(InternalIdKey, m_internalId); } @@ -282,7 +299,7 @@ void MaemoDeviceConfigurations::replaceInstance(const MaemoDeviceConfigurations { Q_ASSERT(m_instance); m_instance->beginResetModel(); - copy(other, m_instance); + copy(other, m_instance, false); m_instance->save(); m_instance->endResetModel(); emit m_instance->updated(); @@ -291,14 +308,19 @@ void MaemoDeviceConfigurations::replaceInstance(const MaemoDeviceConfigurations MaemoDeviceConfigurations *MaemoDeviceConfigurations::cloneInstance() { MaemoDeviceConfigurations * const other = new MaemoDeviceConfigurations(0); - copy(m_instance, other); + copy(m_instance, other, true); return other; } void MaemoDeviceConfigurations::copy(const MaemoDeviceConfigurations *source, - MaemoDeviceConfigurations *target) + MaemoDeviceConfigurations *target, bool deep) { - target->m_devConfigs = source->m_devConfigs; + if (deep) { + foreach (const MaemoDeviceConfig::ConstPtr &devConf, source->m_devConfigs) + target->m_devConfigs << MaemoDeviceConfig::create(devConf); + } else { + target->m_devConfigs = source->m_devConfigs; + } target->m_defaultSshKeyFilePath = source->m_defaultSshKeyFilePath; target->m_nextId = source->m_nextId; target->initShadowDevConfs(); @@ -342,6 +364,7 @@ void MaemoDeviceConfigurations::setupShadowDevConf(int i) shadowConf->m_sshParameters.pwd = devConf->m_sshParameters.pwd; shadowConf->m_sshParameters.privateKeyFile = devConf->m_sshParameters.privateKeyFile; + shadowConf->m_isDefault = devConf->m_isDefault; shadowConf->m_internalId = devConf->m_internalId; m_shadowDevConfigs[i] = shadowConf; } @@ -350,7 +373,11 @@ void MaemoDeviceConfigurations::addConfiguration(const QString &name, MaemoDeviceConfig::DeviceType type) { beginInsertRows(QModelIndex(), rowCount(), rowCount()); - m_devConfigs << MaemoDeviceConfig::create(name, type, m_nextId); + const MaemoDeviceConfig::Ptr devConf + = MaemoDeviceConfig::create(name, type, m_nextId); + if (m_devConfigs.isEmpty()) + devConf->m_isDefault = true; + m_devConfigs << devConf; m_shadowDevConfigs << MaemoDeviceConfig::Ptr(); endInsertRows(); } @@ -359,9 +386,15 @@ void MaemoDeviceConfigurations::removeConfiguration(int i) { Q_ASSERT(i >= 0 && i < rowCount()); beginRemoveRows(QModelIndex(), i, i); + const bool wasDefault = deviceAt(i)->m_isDefault; m_devConfigs.removeAt(i); m_shadowDevConfigs.removeAt(i); endRemoveRows(); + if (wasDefault && !m_devConfigs.isEmpty()) { + m_devConfigs.first()->m_isDefault = true; + const QModelIndex changedIndex = index(0, 0); + emit dataChanged(changedIndex, changedIndex); + } } void MaemoDeviceConfigurations::setConfigurationName(int i, const QString &name) @@ -412,13 +445,19 @@ void MaemoDeviceConfigurations::load() m_defaultSshKeyFilePath = settings->value(DefaultKeyFilePathKey, DefaultKeyFile).toString(); int count = settings->beginReadArray(ConfigListKey); + bool hasDefault = false; for (int i = 0; i < count; ++i) { settings->setArrayIndex(i); - m_devConfigs.append(MaemoDeviceConfig::create(*settings, m_nextId)); + MaemoDeviceConfig::Ptr devConf + = MaemoDeviceConfig::create(*settings, m_nextId); + hasDefault |= devConf->m_isDefault; + m_devConfigs << devConf; } settings->endArray(); settings->endGroup(); initShadowDevConfs(); + if (!hasDefault && !m_devConfigs.isEmpty()) + m_devConfigs.first()->m_isDefault = true; } MaemoDeviceConfig::ConstPtr MaemoDeviceConfigurations::deviceAt(int i) const @@ -441,6 +480,16 @@ MaemoDeviceConfig::ConstPtr MaemoDeviceConfigurations::find(MaemoDeviceConfig::I return index == -1 ? MaemoDeviceConfig::ConstPtr() : deviceAt(index); } +MaemoDeviceConfig::ConstPtr MaemoDeviceConfigurations::defaultDeviceConfig() const +{ + foreach (const MaemoDeviceConfig::ConstPtr &devConf, m_devConfigs) { + if (devConf->m_isDefault) + return devConf; + } + Q_ASSERT(m_devConfigs.isEmpty()); + return MaemoDeviceConfig::ConstPtr(); +} + int MaemoDeviceConfigurations::indexForInternalId(MaemoDeviceConfig::Id internalId) const { for (int i = 0; i < m_devConfigs.count(); ++i) { diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodeviceconfigurations.h b/src/plugins/qt4projectmanager/qt-maemo/maemodeviceconfigurations.h index ef231b7a74c..7f889a27cdb 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemodeviceconfigurations.h +++ b/src/plugins/qt4projectmanager/qt-maemo/maemodeviceconfigurations.h @@ -114,12 +114,14 @@ private: MaemoDeviceConfig(const QString &name, DeviceType type, Id &nextId); MaemoDeviceConfig(const QSettings &settings, Id &nextId); + MaemoDeviceConfig(const ConstPtr &other); MaemoDeviceConfig(const MaemoDeviceConfig &); MaemoDeviceConfig &operator=(const MaemoDeviceConfig &); static Ptr create(const QString &name, DeviceType type, Id &nextId); static Ptr create(const QSettings &settings, Id &nextId); + static Ptr create(const ConstPtr &other); void save(QSettings &settings) const; int defaultSshPort(DeviceType type) const; @@ -130,8 +132,8 @@ private: QString m_name; DeviceType m_type; QString m_portsSpec; - Id m_internalId; bool m_isDefault; + Id m_internalId; }; @@ -147,6 +149,7 @@ public: MaemoDeviceConfig::ConstPtr deviceAt(int i) const; MaemoDeviceConfig::ConstPtr find(MaemoDeviceConfig::Id id) const; + MaemoDeviceConfig::ConstPtr defaultDeviceConfig() const; bool hasConfig(const QString &name) const; int indexForInternalId(MaemoDeviceConfig::Id internalId) const; MaemoDeviceConfig::Id internalId(MaemoDeviceConfig::ConstPtr devConf) const; @@ -175,7 +178,7 @@ private: void save(); void initShadowDevConfs(); static void copy(const MaemoDeviceConfigurations *source, - MaemoDeviceConfigurations *target); + MaemoDeviceConfigurations *target, bool deep); void setupShadowDevConf(int i); static MaemoDeviceConfigurations *m_instance;