Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
.DS_Store
*.cache
*.pyc
6 changes: 6 additions & 0 deletions Commands/Default.sublime-commands
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[
{
"caption": "Processing: New Java Ant project",
"command": "new_java_ant_project"
}
]
13 changes: 13 additions & 0 deletions Commands/templates/new_java_ant_project/Main.java.template
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package $package_name;

import processing.core.*;

class Main {

private final static String[] OPTIONS = new String[] { "--present", "$package_name.Sketch" };

public static void main(String[] args) {
PApplet.main(OPTIONS);
}

}
15 changes: 15 additions & 0 deletions Commands/templates/new_java_ant_project/Sketch.java.template
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package $package_name;

import processing.core.*;

public class Sketch extends PApplet {

public void setup() {

}

public void draw() {

}

}
55 changes: 55 additions & 0 deletions Commands/templates/new_java_ant_project/build.xml.template
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
<project name="$ant_project_name" basedir="." default="run">

<property name="processing.dir"
value="$processing_library_path" />
<property name="src.dir" value="src" />
<property name="build.dir" value="build" />
<property name="classes.dir" value="$${build.dir}/classes" />
<property name="jar.dir" value="dist" />
<property name="main-class" value="$package_name.Main" />

<fileset id="processing.library" dir="$${processing.dir}">
<include name="*.jar" />
</fileset>

<path id="build.classpath">
<fileset refid="processing.library" />
</path>

<pathconvert property="manifest.classpath" pathsep=" ">
<path refid="build.classpath"/>
<mapper>
<chainedmapper>
<flattenmapper />
<globmapper from="*.jar" to="$${processing.dir}/*.jar"/>
</chainedmapper>
</mapper>
</pathconvert>

<target name="build" depends="clean, compile, jar" />

<target name="clean">
<delete dir="$${build.dir}" />
</target>

<target name="compile">
<mkdir dir="$${classes.dir}" />
<javac srcdir="$${src.dir}" destdir="$${classes.dir}" classpathref="build.classpath"
includeantruntime="false" />
</target>

<target name="jar">
<mkdir dir="$${jar.dir}" />
<jar destfile="$${jar.dir}/$${ant.project.name}.jar" basedir="$${classes.dir}">
<manifest>
<attribute name="Main-Class" value="$${main-class}" />
<attribute name="Class-Path" value="$${manifest.classpath}" />
</manifest>
</jar>
</target>

<target name="run" depends="build">
<java jar="$${jar.dir}/$${ant.project.name}.jar" fork="true" />
</target>

</project>
21 changes: 21 additions & 0 deletions Menus/Main.sublime-menu
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
[
{
"caption": "Tools",
"mnemonic": "T",
"id": "tools",
"children":
[
{
"caption": "Processing",
"mnemonic": "P",
"id": "Processing",
"children":
[
{ "caption": "New Java Ant Project", "command": "new_java_ant_project"}
]
}
]

}
]

70 changes: 70 additions & 0 deletions Processing.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import sublime, sublime_plugin, sys, functools, os, re, string

# NOTE: Change this next line to match the correct library path for your system.
DEFAULT_PROCESSING_LIBRARY_PATH = "/Applications/Processing.app/Contents/Java/core/library"
PROJECT_TEMPLATE_PATH = os.path.dirname(os.path.abspath(__file__)) + "/Commands/templates/new_java_ant_project"
SOURCE_DIRECTORY_NAME = "src"
BUILDFILE_TEMPLATE_NAME = "build.xml.template"
GENERATED_BUILDFILE_NAME = "build.xml"
JAVA_TEMPLATE_FILENAMES = ["Main.java.template", "Sketch.java.template"]
SKETCH_FILE_NAME = "Sketch.java"
STATUS_MESSAGE = "New Java Ant Processing project created. Be sure to use the Ant build system, not JavaC."

class NewJavaAntProjectCommand(sublime_plugin.WindowCommand):

def run(self):
# TODO: app command w/o window: create window, self.window.run_command("prompt_add_folder")
self.window.show_input_panel("Package Name:",
"com.foo.appname or simplepackagename",
functools.partial(self.generate_project),
None, None)

def generate_project(self, package_name):
generated_source_path = os.path.join(self.window.folders()[0],
SOURCE_DIRECTORY_NAME,
re.sub('\.', '/', package_name.lower()))
self.create_project_directories(generated_source_path)
self.generate_files_from_template(PROJECT_TEMPLATE_PATH,
generated_source_path,
package_name)
self.window.open_file(os.path.join(generated_source_path, SKETCH_FILE_NAME))
sublime.status_message(STATUS_MESSAGE)

def create_project_directories(self, path):
if not os.path.exists(path):
os.makedirs(path)

def generate_files_from_template(self, template_path, generated_source_path, package_name):
self.generate_buildfile(template_path, package_name)
self.generate_java_boilerplate(template_path, generated_source_path, package_name)

def generate_buildfile(self, template_path, package_name):
with open(os.path.join(template_path, BUILDFILE_TEMPLATE_NAME), 'r') as build_template:
template = string.Template(build_template.read())
with open(os.path.join(self.window.folders()[0], GENERATED_BUILDFILE_NAME), 'w') as buildfile:
buildfile.write(template.substitute(ant_project_name = package_name.split('.')[-1],
processing_library_path = self.determine_processing_library_path(),
package_name = package_name))

def generate_java_boilerplate(self, template_path, generated_source_path, package_name):
for template_name in JAVA_TEMPLATE_FILENAMES:
with open(os.path.join(template_path, template_name), 'r') as java_template:
template = string.Template(java_template.read())
with open(os.path.join(generated_source_path, template_name.rsplit('.', 1)[0]), 'w') as source_file:
source_file.write(template.substitute(package_name = package_name))

def determine_processing_library_path(self):
# TODO: determine path from OS? Or use explicit settings.
return DEFAULT_PROCESSING_LIBRARY_PATH

#open_file(file, contents)

# class NewFolderCommand(sublime_plugin.WindowCommand):
# def run(self, dirs):
# self.window.show_input_panel("Folder Name:", "", functools.partial(self.on_done, dirs[0]), None, None)

# def on_done(self, dir, name):
# os.makedirs(os.path.join(dir, name))

# def is_visible(self, dirs):
# return len(dirs) == 1
Loading