bool KDE4ProfileWriter::writeProfile(const QString& path , const Profile::Ptr profile) { KConfig config(path, KConfig::NoGlobals); KConfigGroup general = config.group(GENERAL_GROUP); // Parent profile if set, when loading the profile in future, the parent // must be loaded as well if it exists. if (profile->parent()) general.writeEntry("Parent", profile->parent()->path()); if (profile->isPropertySet(Profile::Command) || profile->isPropertySet(Profile::Arguments)) general.writeEntry("Command", ShellCommand(profile->command(), profile->arguments()).fullCommand()); // Write remaining properties writeProperties(config, profile, Profile::DefaultPropertyNames); return true; }
QString KDE4ProfileWriter::getPath(const Profile::Ptr profile) { // both location have trailing slash static const QString localDataLocation = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QStringLiteral("/konsole/"); static const QString systemDataLocation = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation).last() + QStringLiteral("konsole/"); const QString candidateLocalPath = localDataLocation + profile->untranslatedName() + ".profile"; QString newPath; // when the path property is not set, it means the profile has just // been created in memory and has never been saved into disk before. // // use "name.profile" as filename and save it under $KDEHOME if (!profile->isPropertySet(Profile::Path)) { return candidateLocalPath; } // for a system wide profile, save the modified version as // a local profile under $KDEHOME if (profile->path().startsWith(systemDataLocation)) { return candidateLocalPath; } // for a local profile, use its existing path if (profile->path().startsWith(localDataLocation)) { newPath = profile->path(); } else { // for the ad-hoc profiles in non-standard places // // * if its path is writable for user, use its existing path // * if its path is not writable for user, save it under $KDEHOME // QFileInfo fileInfo(profile->path()); if (fileInfo.isWritable()) { newPath = profile->path(); } else { newPath = candidateLocalPath; } } return newPath; }
void KDE4ProfileWriter::writeProperties(KConfig& config, const Profile::Ptr profile, const Profile::PropertyInfo* properties) { const char* groupName = 0; KConfigGroup group; while (properties->name != 0) { if (properties->group != 0) { if (groupName == 0 || qstrcmp(groupName, properties->group) != 0) { group = config.group(properties->group); groupName = properties->group; } if (profile->isPropertySet(properties->property)) group.writeEntry(QString(properties->name), profile->property<QVariant>(properties->property)); } properties++; } }