diff --git a/.gitignore b/.gitignore index 49f5f96..af6d7a1 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,8 @@ # Gradle: # .idea/gradle.xml # .idea/libraries +.gradle +build/ # Mongo Explorer plugin: # .idea/mongoSettings.xml diff --git a/.gitmodules b/.gitmodules index 6b9c183..460ded0 100644 --- a/.gitmodules +++ b/.gitmodules @@ -2,3 +2,6 @@ path = src/io/github/francoiscambell/clionarduinoplugin/resources/arduino-cmake url = git://github.com/francoiscampbell/arduino-cmake.git ignore = dirty +[submodule "src/main/resources/arduino-cmake"] + path = src/main/resources/arduino-cmake + url = https://github.com/francoiscampbell/arduino-cmake.git diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..31b08ec --- /dev/null +++ b/build.gradle @@ -0,0 +1,20 @@ +plugins { + id "org.jetbrains.intellij" version "0.2.13" +} +apply plugin: 'org.jetbrains.intellij' +apply plugin: 'java' + +repositories { + mavenLocal() + mavenCentral() +} + +dependencies { + compile 'commons-io:commons-io:2.5' + compileOnly files("${clionHome}/lib/clion.jar") +} + +intellij { + alternativeIdePath = clionHome +} + diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..a6ea6f3 --- /dev/null +++ b/gradle.properties @@ -0,0 +1 @@ +clionHome=/opt/clion-eap diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..180ffb6 Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..f756f43 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Tue Jun 20 19:00:17 EDT 2017 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.0-bin.zip diff --git a/gradlew b/gradlew new file mode 100755 index 0000000..4453cce --- /dev/null +++ b/gradlew @@ -0,0 +1,172 @@ +#!/usr/bin/env sh + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn ( ) { + echo "$*" +} + +die ( ) { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save ( ) { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..e95643d --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/lib/commons-io-2.4-javadoc.jar b/lib/commons-io-2.4-javadoc.jar deleted file mode 100644 index e388f28..0000000 Binary files a/lib/commons-io-2.4-javadoc.jar and /dev/null differ diff --git a/lib/commons-io-2.4-sources.jar b/lib/commons-io-2.4-sources.jar deleted file mode 100644 index f4ebc7b..0000000 Binary files a/lib/commons-io-2.4-sources.jar and /dev/null differ diff --git a/lib/commons-io-2.4.jar b/lib/commons-io-2.4.jar deleted file mode 100644 index 90035a4..0000000 Binary files a/lib/commons-io-2.4.jar and /dev/null differ diff --git a/src/io/github/francoiscambell/clionarduinoplugin/actions/NewArduinoProject.java b/src/io/github/francoiscambell/clionarduinoplugin/actions/NewArduinoProject.java deleted file mode 100644 index 5fc95db..0000000 --- a/src/io/github/francoiscambell/clionarduinoplugin/actions/NewArduinoProject.java +++ /dev/null @@ -1,28 +0,0 @@ -package io.github.francoiscambell.clionarduinoplugin.actions; - -import com.intellij.icons.*; -import com.intellij.openapi.actionSystem.*; -import com.intellij.openapi.wm.impl.welcomeScreen.*; -import io.github.francoiscambell.clionarduinoplugin.wizards.*; - -/** - * Created by francois on 15-08-14. - */ -public class NewArduinoProject extends AnAction { - public void update(AnActionEvent event) { - Presentation presentation = event.getPresentation(); - if (ActionPlaces.isMainMenuOrActionSearch(event.getPlace())) { - presentation.setIcon(null); - } - - if (NewWelcomeScreen.isNewWelcomeScreen(event)) { - event.getPresentation().setIcon(AllIcons.Welcome.CreateNewProject); - } - - } - - @Override - public void actionPerformed(AnActionEvent e) { - (new NewArduinoProjectWizard()).runWizard(); - } -} diff --git a/src/io/github/francoiscambell/clionarduinoplugin/wizards/NewArduinoProjectWizard.java b/src/io/github/francoiscambell/clionarduinoplugin/wizards/NewArduinoProjectWizard.java deleted file mode 100644 index 5c26b58..0000000 --- a/src/io/github/francoiscambell/clionarduinoplugin/wizards/NewArduinoProjectWizard.java +++ /dev/null @@ -1,129 +0,0 @@ -package io.github.francoiscambell.clionarduinoplugin.wizards; - -import com.intellij.ide.*; -import com.intellij.openapi.fileEditor.*; -import com.intellij.openapi.project.*; -import com.intellij.openapi.ui.*; -import com.intellij.openapi.util.io.*; -import com.intellij.openapi.vfs.*; -import com.jetbrains.cidr.cpp.*; -import com.jetbrains.cidr.cpp.cmake.projectWizard.*; -import com.jetbrains.cidr.cpp.cmake.workspace.*; -import io.github.francoiscambell.clionarduinoplugin.*; -import io.github.francoiscambell.clionarduinoplugin.resources.*; - -import java.io.*; - -/** - * Created by francois on 15-08-14. - */ -public class NewArduinoProjectWizard extends CMakeProjectWizard { - private NewCMakeProjectStepAdapter adapter = new NewCMakeProjectStepAdapter(); - - public NewArduinoProjectWizard() { - super("New Arduino Sketch Project", "NewArduinoSketchProject"); - initWithStep(adapter); - } - - @Override - protected boolean tryFinish() { - String projectRootPath = this.adapter.getLocation(); - File projectRootDir = new File(projectRootPath); - if (projectRootDir.exists()) { - String[] fileList = projectRootDir.list(new FilenameFilter() { - public boolean accept(File dir, String name) { - return !".DS_Store".equalsIgnoreCase(name) && !"Thumbs.db".equalsIgnoreCase(name); - } - }); - if (fileList != null && fileList.length > 0) { - int dialogAnswer = Messages.showYesNoDialog(String - .format("Directory \'%s\' already exists and not empty.\nWould you like to continue?", projectRootPath), "Project Directory Already Exists", Messages - .getQuestionIcon()); - if (dialogAnswer != 0) { - return false; - } - } - } else { - try { - VfsUtil.createDirectories(projectRootPath); - } catch (RuntimeException e) { - e.printStackTrace(); - throw e; - } catch (IOException e) { - return false; - } - } - - String projectRootDirParentPath = projectRootDir.getParent(); - if (projectRootDirParentPath != null) { - RecentProjectsManager.getInstance().setLastProjectCreationLocation(projectRootDirParentPath); - } - - try { - createProject(this.adapter.getName(), projectRootPath); - return true; - } catch (IOException e) { - CPPLog.LOG.warn(e); - return false; - } - } - - public static String createProject(String projectName, String projectRootPath) throws IOException { - File projectRoot = new File(projectRootPath); - File cMakeLists = new File(projectRoot, "CMakeLists.txt"); - if (!cMakeLists.exists() && !cMakeLists.createNewFile()) { - throw new IOException("Cannot create file " + cMakeLists); - } else { - projectName = FileUtil.sanitizeFileName(projectName); - File mainSketchFile = new File(projectRoot, projectName + ".ino"); - if (!mainSketchFile.exists() && !mainSketchFile.createNewFile()) { - throw new IOException("Cannot create file " + mainSketchFile); - } else { - FileUtil.writeToFile(mainSketchFile, Strings.DEFAULT_ARDUINO_SKETCH_CONTENTS); - - VirtualFile cMakeListsVirtualFile = VfsUtil.findFileByIoFile(cMakeLists, true); - CMakeListsEditor cMakeListsEditor = CMakeListsEditor.getInstance(cMakeListsVirtualFile); - cMakeListsEditor.clear(); - cMakeListsEditor.minVersion("2.8.4"); - cMakeListsEditor.set("CMAKE_TOOLCHAIN_FILE", "${CMAKE_SOURCE_DIR}/cmake/ArduinoToolchain.cmake"); - cMakeListsEditor.set("PROJECT_NAME", projectName); - cMakeListsEditor.project("${PROJECT_NAME}"); - cMakeListsEditor.blankLine(); - cMakeListsEditor.set("${CMAKE_PROJECT_NAME}_SKETCH", projectName + ".ino"); - cMakeListsEditor.method("generate_arduino_firmware", "${CMAKE_PROJECT_NAME}"); - - ArduinoToolchainFiles.copyToDirectory(VfsUtil.findFileByIoFile(projectRoot, true)); - - return projectName; - } - } - } - - @Override - protected void doRunWizard() { - VirtualFile projectRoot = LocalFileSystem.getInstance().refreshAndFindFileByPath(this.adapter.getLocation()); - if (projectRoot == null) { - return; - } - refreshProjectDir(projectRoot); - final VirtualFile cMakeLists = projectRoot.findChild("CMakeLists.txt"); - if (cMakeLists == null) { - return; - } - final VirtualFile mainSketchFile = projectRoot.findChild(this.adapter.getName() + ".ino"); - if (mainSketchFile == null) { - return; - } - final Project project = CMakeWorkspace.openProject(cMakeLists, null, false); - if (project == null) { - return; - } - deleteBuildOutputDir(project); - (new OpenFileDescriptor(project, cMakeLists)).navigate(false); - (new OpenFileDescriptor(project, mainSketchFile)).navigate(true); - } - - private void deleteBuildOutputDir(Project project) { - FileUtil.delete(CMakeWorkspace.getInstance(project).getProjectGeneratedDir()); - } -} diff --git a/src/io/github/francoiscambell/clionarduinoplugin/ArduinoSketchFileCreator.java b/src/main/java/io/github/francoiscambell/clionarduinoplugin/ArduinoSketchFileCreator.java similarity index 100% rename from src/io/github/francoiscambell/clionarduinoplugin/ArduinoSketchFileCreator.java rename to src/main/java/io/github/francoiscambell/clionarduinoplugin/ArduinoSketchFileCreator.java diff --git a/src/io/github/francoiscambell/clionarduinoplugin/CMakeListsEditor.java b/src/main/java/io/github/francoiscambell/clionarduinoplugin/CMakeListsEditor.java similarity index 100% rename from src/io/github/francoiscambell/clionarduinoplugin/CMakeListsEditor.java rename to src/main/java/io/github/francoiscambell/clionarduinoplugin/CMakeListsEditor.java diff --git a/src/main/java/io/github/francoiscambell/clionarduinoplugin/actions/NewArduinoProject.java b/src/main/java/io/github/francoiscambell/clionarduinoplugin/actions/NewArduinoProject.java new file mode 100644 index 0000000..096cdce --- /dev/null +++ b/src/main/java/io/github/francoiscambell/clionarduinoplugin/actions/NewArduinoProject.java @@ -0,0 +1,38 @@ +package io.github.francoiscambell.clionarduinoplugin.actions; + +import com.intellij.icons.AllIcons; +import com.intellij.ide.util.projectWizard.AbstractNewProjectDialog; +import com.intellij.openapi.actionSystem.ActionPlaces; +import com.intellij.openapi.actionSystem.AnAction; +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.DefaultActionGroup; +import com.intellij.openapi.actionSystem.Presentation; +import com.intellij.openapi.wm.impl.welcomeScreen.NewWelcomeScreen; +import io.github.francoiscambell.clionarduinoplugin.wizards.NewArduinoProjectStep; + +/** + * Created by francois on 15-08-14. + */ +public class NewArduinoProject extends AnAction { + public void update(AnActionEvent event) { + Presentation presentation = event.getPresentation(); + if (ActionPlaces.isMainMenuOrActionSearch(event.getPlace())) { + presentation.setIcon(null); + } + + if (NewWelcomeScreen.isNewWelcomeScreen(event)) { + event.getPresentation().setIcon(AllIcons.Welcome.CreateNewProject); + } + + } + + @Override + public void actionPerformed(AnActionEvent e) { + new AbstractNewProjectDialog() { + @Override + protected DefaultActionGroup createRootStep() { + return new NewArduinoProjectStep(); + } + }.show(); + } +} diff --git a/src/io/github/francoiscambell/clionarduinoplugin/actions/NewSketchFile.java b/src/main/java/io/github/francoiscambell/clionarduinoplugin/actions/NewSketchFile.java similarity index 100% rename from src/io/github/francoiscambell/clionarduinoplugin/actions/NewSketchFile.java rename to src/main/java/io/github/francoiscambell/clionarduinoplugin/actions/NewSketchFile.java diff --git a/src/io/github/francoiscambell/clionarduinoplugin/components/ArduinoFileTypeRegistration.java b/src/main/java/io/github/francoiscambell/clionarduinoplugin/components/ArduinoFileTypeRegistration.java similarity index 100% rename from src/io/github/francoiscambell/clionarduinoplugin/components/ArduinoFileTypeRegistration.java rename to src/main/java/io/github/francoiscambell/clionarduinoplugin/components/ArduinoFileTypeRegistration.java diff --git a/src/io/github/francoiscambell/clionarduinoplugin/resources/ArduinoToolchainFiles.java b/src/main/java/io/github/francoiscambell/clionarduinoplugin/resources/ArduinoToolchainFiles.java similarity index 96% rename from src/io/github/francoiscambell/clionarduinoplugin/resources/ArduinoToolchainFiles.java rename to src/main/java/io/github/francoiscambell/clionarduinoplugin/resources/ArduinoToolchainFiles.java index ebde626..a00ac60 100644 --- a/src/io/github/francoiscambell/clionarduinoplugin/resources/ArduinoToolchainFiles.java +++ b/src/main/java/io/github/francoiscambell/clionarduinoplugin/resources/ArduinoToolchainFiles.java @@ -14,11 +14,11 @@ */ public class ArduinoToolchainFiles { public static InputStream getArduinoToolchainCmake() { - return ArduinoToolchainFiles.class.getResourceAsStream("arduino-cmake/cmake/ArduinoToolchain.cmake"); + return ArduinoToolchainFiles.class.getResourceAsStream("/arduino-cmake/cmake/ArduinoToolchain.cmake"); } public static InputStream getArduinoCmake() { - return ArduinoToolchainFiles.class.getResourceAsStream("arduino-cmake/cmake/Platform/Arduino.cmake"); + return ArduinoToolchainFiles.class.getResourceAsStream("/arduino-cmake/cmake/Platform/Arduino.cmake"); } public static void copyToDirectory(final VirtualFile projectRoot) { diff --git a/src/io/github/francoiscambell/clionarduinoplugin/resources/Strings.java b/src/main/java/io/github/francoiscambell/clionarduinoplugin/resources/Strings.java similarity index 100% rename from src/io/github/francoiscambell/clionarduinoplugin/resources/Strings.java rename to src/main/java/io/github/francoiscambell/clionarduinoplugin/resources/Strings.java diff --git a/src/io/github/francoiscambell/clionarduinoplugin/resources/icons/ArduinoIcon.java b/src/main/java/io/github/francoiscambell/clionarduinoplugin/resources/icons/ArduinoIcon.java similarity index 100% rename from src/io/github/francoiscambell/clionarduinoplugin/resources/icons/ArduinoIcon.java rename to src/main/java/io/github/francoiscambell/clionarduinoplugin/resources/icons/ArduinoIcon.java diff --git a/src/io/github/francoiscambell/clionarduinoplugin/resources/icons/Arduino_Logo.png b/src/main/java/io/github/francoiscambell/clionarduinoplugin/resources/icons/Arduino_Logo.png similarity index 100% rename from src/io/github/francoiscambell/clionarduinoplugin/resources/icons/Arduino_Logo.png rename to src/main/java/io/github/francoiscambell/clionarduinoplugin/resources/icons/Arduino_Logo.png diff --git a/src/io/github/francoiscambell/clionarduinoplugin/resources/icons/Arduino_Logo@2x.png b/src/main/java/io/github/francoiscambell/clionarduinoplugin/resources/icons/Arduino_Logo@2x.png similarity index 100% rename from src/io/github/francoiscambell/clionarduinoplugin/resources/icons/Arduino_Logo@2x.png rename to src/main/java/io/github/francoiscambell/clionarduinoplugin/resources/icons/Arduino_Logo@2x.png diff --git a/src/io/github/francoiscambell/clionarduinoplugin/resources/icons/Arduino_Logo@2x_dark.png b/src/main/java/io/github/francoiscambell/clionarduinoplugin/resources/icons/Arduino_Logo@2x_dark.png similarity index 100% rename from src/io/github/francoiscambell/clionarduinoplugin/resources/icons/Arduino_Logo@2x_dark.png rename to src/main/java/io/github/francoiscambell/clionarduinoplugin/resources/icons/Arduino_Logo@2x_dark.png diff --git a/src/io/github/francoiscambell/clionarduinoplugin/resources/icons/Arduino_Logo_dark.png b/src/main/java/io/github/francoiscambell/clionarduinoplugin/resources/icons/Arduino_Logo_dark.png similarity index 100% rename from src/io/github/francoiscambell/clionarduinoplugin/resources/icons/Arduino_Logo_dark.png rename to src/main/java/io/github/francoiscambell/clionarduinoplugin/resources/icons/Arduino_Logo_dark.png diff --git a/src/main/java/io/github/francoiscambell/clionarduinoplugin/wizards/ArduinoProjectGenerator.java b/src/main/java/io/github/francoiscambell/clionarduinoplugin/wizards/ArduinoProjectGenerator.java new file mode 100644 index 0000000..3fea956 --- /dev/null +++ b/src/main/java/io/github/francoiscambell/clionarduinoplugin/wizards/ArduinoProjectGenerator.java @@ -0,0 +1,50 @@ +package io.github.francoiscambell.clionarduinoplugin.wizards; + +import com.intellij.openapi.vfs.VirtualFile; +import com.jetbrains.cidr.cpp.cmake.projectWizard.generators.CMakeAbstractCPPProjectGenerator; +import io.github.francoiscambell.clionarduinoplugin.CMakeListsEditor; +import io.github.francoiscambell.clionarduinoplugin.resources.ArduinoToolchainFiles; +import io.github.francoiscambell.clionarduinoplugin.resources.Strings; +import org.jetbrains.annotations.Nls; +import org.jetbrains.annotations.NotNull; + +import java.io.IOException; + +public class ArduinoProjectGenerator extends CMakeAbstractCPPProjectGenerator { + + @NotNull + @Override + protected VirtualFile createCMakeFile(@NotNull String projectName, @NotNull VirtualFile projectRoot) throws IOException { + VirtualFile cMakeListsVirtualFile = projectRoot.findOrCreateChildData(this, "CMakeLists.txt"); + CMakeListsEditor cMakeListsEditor = CMakeListsEditor.getInstance(cMakeListsVirtualFile); + cMakeListsEditor.clear(); + cMakeListsEditor.minVersion("2.8.4"); + cMakeListsEditor.set("CMAKE_TOOLCHAIN_FILE", "${CMAKE_SOURCE_DIR}/cmake/ArduinoToolchain.cmake"); + cMakeListsEditor.set("PROJECT_NAME", projectName); + cMakeListsEditor.project("${PROJECT_NAME}"); + cMakeListsEditor.blankLine(); + cMakeListsEditor.set("${CMAKE_PROJECT_NAME}_SKETCH", projectName + ".ino"); + cMakeListsEditor.method("generate_arduino_firmware", "${CMAKE_PROJECT_NAME}"); + ArduinoToolchainFiles.copyToDirectory(projectRoot); + return cMakeListsVirtualFile; + } + + @NotNull + @Override + protected String getCMakeFileContent(@NotNull String s) { + return null; + } + + @NotNull + @Override + protected VirtualFile[] createSourceFiles(@NotNull String name, @NotNull VirtualFile virtualFile) throws IOException { + return new VirtualFile[] {createProjectFileWithContent(virtualFile, name + ".ino", Strings.DEFAULT_ARDUINO_SKETCH_CONTENTS)}; + } + + @Nls + @NotNull + @Override + public String getName() { + return "Arduino Sketch"; + } +} diff --git a/src/main/java/io/github/francoiscambell/clionarduinoplugin/wizards/NewArduinoProjectStep.java b/src/main/java/io/github/francoiscambell/clionarduinoplugin/wizards/NewArduinoProjectStep.java new file mode 100644 index 0000000..124af35 --- /dev/null +++ b/src/main/java/io/github/francoiscambell/clionarduinoplugin/wizards/NewArduinoProjectStep.java @@ -0,0 +1,20 @@ +package io.github.francoiscambell.clionarduinoplugin.wizards; + +import com.intellij.ide.util.projectWizard.AbstractNewProjectStep; +import com.intellij.platform.DirectoryProjectGenerator; +import com.jetbrains.cidr.cpp.cmake.projectWizard.CLionCMakeNewProjectStep; +import org.jetbrains.annotations.NotNull; + +public class NewArduinoProjectStep extends AbstractNewProjectStep { + public NewArduinoProjectStep() { + super(new Customization()); + } + + public static class Customization extends CLionCMakeNewProjectStep.Customization { + @NotNull + @Override + protected DirectoryProjectGenerator createEmptyProjectGenerator() { + return new ArduinoProjectGenerator(); + } + } +} diff --git a/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml similarity index 100% rename from META-INF/plugin.xml rename to src/main/resources/META-INF/plugin.xml diff --git a/src/io/github/francoiscambell/clionarduinoplugin/resources/arduino-cmake b/src/main/resources/arduino-cmake similarity index 100% rename from src/io/github/francoiscambell/clionarduinoplugin/resources/arduino-cmake rename to src/main/resources/arduino-cmake