[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