[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: playground/base/plasma/plasmate
From: Richard Dale <Richard_Dale () tipitina ! demon ! co ! uk>
Date: 2010-02-12 23:45:35
Message-ID: 1266018335.908451.28436.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 1089361 by rdale:
* For Ruby convert the name of the project in camel case to a folder name \
and main script name in snake case. For instance, if a project is given a \
name of FooBar, the folder will be foo_bar and the main script \
main_foo_bar.rb.
M +21 -5 startpage.cpp
M +1 -0 startpage.h
--- trunk/playground/base/plasma/plasmate/startpage.cpp #1089360:1089361
@@ -119,6 +119,13 @@
// connect(ui->newProjectButton, SIGNAL(clicked()), this, \
SLOT(launchNewProjectWizard())); }
+// Convert FooBar to foo_bar
+QString StartPage::camelToSnakeCase(const QString& name)
+{
+ QString result(name);
+ return result.replace(QRegExp("([A-Z])"), \
"_\\1").toLower().replace(QRegExp("^_"), ""); +}
+
void StartPage::processProjectName(const QString& name)
{
QRegExp validatePluginName("[a-zA-Z0-9_.]*");
@@ -267,12 +274,11 @@
// packagePath -> projectPath
QString projectNameLowerCase = ui->projectName->text().toLower();
+ QString projectNameSnakeCase = \
camelToSnakeCase(ui->projectName->text()); QString projectName = \
ui->projectName->text(); QString projectFileExtension;
QString templateFilePath = KStandardDirs::locate("appdata", \
"templates/");
- QString projectFolderName = \
generateProjectFolderName(projectNameLowerCase);
- QString projectPath = KStandardDirs::locateLocal("appdata", \
projectFolderName + '/');
Plasma::PackageMetadata metadata;
@@ -291,25 +297,35 @@
templateFilePath.append("mainPlasmoid");
}
+ QString projectFolderName;
+ QString mainScriptName;
+
// Append the desired extension
if (ui->radioButtonPy->isChecked()) {
metadata.setImplementationApi("python");
+ projectFolderName = \
generateProjectFolderName(projectNameLowerCase); projectFileExtension = \
".py"; + mainScriptName = projectNameLowerCase + \
projectFileExtension; } else if (ui->radioButtonRb->isChecked()) {
metadata.setImplementationApi("ruby-script");
+ projectFolderName = \
generateProjectFolderName(projectNameSnakeCase); projectFileExtension = \
".rb"; + mainScriptName = QString("main_") + projectNameSnakeCase + \
projectFileExtension; } else {
metadata.setImplementationApi("javascript");
+ projectFolderName = \
generateProjectFolderName(projectNameLowerCase); projectFileExtension = \
".js"; + mainScriptName = projectNameLowerCase + \
projectFileExtension; }
-
+
// Creating the corresponding folder
+ QString projectPath = KStandardDirs::locateLocal("appdata", \
projectFolderName + '/'); QDir packageSubDirs(projectPath);
packageSubDirs.mkpath("contents/code/");
// Create a QFile object that points to the template we need to copy
QFile sourceFile(templateFilePath + projectFileExtension);
- QFile destinationFile(projectPath + "contents/code/" + \
projectNameLowerCase + projectFileExtension); + QFile \
destinationFile(projectPath + "contents/code/" + mainScriptName);
// Now open these files, and substitute the main class, author, email \
and date fields sourceFile.open(QIODevice::ReadOnly);
@@ -381,7 +397,7 @@
// we add it manually until a patch is released.
KDesktopFile metaFile(projectPath + "metadata.desktop");
KConfigGroup metaDataGroup = metaFile.desktopGroup();
- metaDataGroup.writeEntry("X-Plasma-MainScript", "code/" + \
projectNameLowerCase + projectFileExtension); + \
metaDataGroup.writeEntry("X-Plasma-MainScript", "code/" + mainScriptName); \
metaDataGroup.writeEntry("X-Plasma-DefaultSize", QSize(200, 100)); \
metaFile.sync();
--- trunk/playground/base/plasma/plasmate/startpage.h #1089360:1089361
@@ -76,6 +76,7 @@
private:
void setupWidgets();
void refreshRecentProjectsList();
+ static QString camelToSnakeCase(const QString& name);
const QString generateProjectFolderName(const QString& suggestion);
Ui::StartPage *ui;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic