mirror of
https://github.com/Eaglercraft-TeaVM-Fork/eagler-teavm.git
synced 2024-12-22 00:04:10 -08:00
Drafting TeaVM module settings dialog
This commit is contained in:
parent
78d6917a23
commit
c744cd3644
|
@ -5,17 +5,21 @@
|
|||
<value>
|
||||
<option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND" value="99" />
|
||||
<option name="NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND" value="99" />
|
||||
<option name="PACKAGES_TO_USE_IMPORT_ON_DEMAND">
|
||||
<value />
|
||||
</option>
|
||||
<option name="IMPORT_LAYOUT_TABLE">
|
||||
<value>
|
||||
<package name="javax" withSubpackages="true" static="false" />
|
||||
<package name="java" withSubpackages="true" static="false" />
|
||||
<package name="" withSubpackages="true" static="false" />
|
||||
<package name="" withSubpackages="true" static="true" />
|
||||
<package name="" withSubpackages="true" static="false" />
|
||||
</value>
|
||||
</option>
|
||||
<JavaCodeStyleSettings>
|
||||
<option name="ANNOTATION_PARAMETER_WRAP" value="1" />
|
||||
</JavaCodeStyleSettings>
|
||||
<XML>
|
||||
<option name="XML_LEGACY_SETTINGS_IMPORTED" value="true" />
|
||||
</XML>
|
||||
<codeStyleSettings language="JAVA">
|
||||
<option name="KEEP_BLANK_LINES_IN_DECLARATIONS" value="1" />
|
||||
<option name="KEEP_BLANK_LINES_IN_CODE" value="1" />
|
||||
|
@ -264,6 +268,13 @@
|
|||
</rules>
|
||||
</arrangement>
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="XML">
|
||||
<indentOptions>
|
||||
<option name="INDENT_SIZE" value="2" />
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="4" />
|
||||
<option name="TAB_SIZE" value="2" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
</value>
|
||||
</option>
|
||||
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
|
||||
|
|
|
@ -22,9 +22,12 @@ import org.jetbrains.jps.builders.BuildTargetType;
|
|||
import org.jetbrains.jps.incremental.BuilderCategory;
|
||||
import org.jetbrains.jps.incremental.BuilderService;
|
||||
import org.jetbrains.jps.incremental.ModuleLevelBuilder;
|
||||
import org.jetbrains.jps.incremental.TargetBuilder;
|
||||
|
||||
public class TeaVMBuilderService extends BuilderService {
|
||||
TeaVMBuilderService() {
|
||||
System.out.println("Hello");
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public List<? extends BuildTargetType<?>> getTargetTypes() {
|
||||
|
|
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
* Copyright 2016 Alexey Andreev.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.teavm.idea;
|
||||
|
||||
public class TeaVMConfiguration {
|
||||
private boolean enabled;
|
||||
private String mainClass;
|
||||
private String targetDirectory;
|
||||
|
||||
public boolean isEnabled() {
|
||||
return enabled;
|
||||
}
|
||||
|
||||
public void setEnabled(boolean enabled) {
|
||||
this.enabled = enabled;
|
||||
}
|
||||
|
||||
public String getMainClass() {
|
||||
return mainClass;
|
||||
}
|
||||
|
||||
public void setMainClass(String mainClass) {
|
||||
this.mainClass = mainClass;
|
||||
}
|
||||
|
||||
public String getTargetDirectory() {
|
||||
return targetDirectory;
|
||||
}
|
||||
|
||||
public void setTargetDirectory(String targetDirectory) {
|
||||
this.targetDirectory = targetDirectory;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
/*
|
||||
* Copyright 2016 Alexey Andreev.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.teavm.idea;
|
||||
|
||||
import com.intellij.openapi.components.PersistentStateComponent;
|
||||
import com.intellij.openapi.components.State;
|
||||
import com.intellij.openapi.components.Storage;
|
||||
import com.intellij.openapi.module.ModuleComponent;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@State(name = "teavm", storages = @Storage(id = "other", file = "$MODULE_FILE$"))
|
||||
public class TeaVMConfigurationStorage implements PersistentStateComponent<TeaVMConfiguration>, ModuleComponent {
|
||||
private TeaVMConfiguration state;
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public TeaVMConfiguration getState() {
|
||||
return state;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadState(TeaVMConfiguration state) {
|
||||
this.state = state;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void projectOpened() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void projectClosed() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void moduleAdded() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initComponent() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void disposeComponent() {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String getComponentName() {
|
||||
return "TeaVM configuration";
|
||||
}
|
||||
}
|
|
@ -0,0 +1,87 @@
|
|||
/*
|
||||
* Copyright 2016 Alexey Andreev.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.teavm.idea.ui;
|
||||
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleServiceManager;
|
||||
import com.intellij.openapi.options.Configurable;
|
||||
import com.intellij.openapi.options.ConfigurationException;
|
||||
import javax.swing.JComponent;
|
||||
import org.jetbrains.annotations.Nls;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.teavm.idea.TeaVMConfiguration;
|
||||
import org.teavm.idea.TeaVMConfigurationStorage;
|
||||
|
||||
public class TeaVMConfigurable implements Configurable {
|
||||
private final Module module;
|
||||
private TeaVMConfigurationPanel panel;
|
||||
|
||||
public TeaVMConfigurable(Module module) {
|
||||
this.module = module;
|
||||
}
|
||||
|
||||
@Nls
|
||||
@Override
|
||||
public String getDisplayName() {
|
||||
return "TeaVM";
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public String getHelpTopic() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public JComponent createComponent() {
|
||||
if (panel == null) {
|
||||
panel = new TeaVMConfigurationPanel();
|
||||
}
|
||||
return panel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isModified() {
|
||||
return panel != null && panel.isModified();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void apply() throws ConfigurationException {
|
||||
TeaVMConfiguration config = new TeaVMConfiguration();
|
||||
panel.save(config);
|
||||
TeaVMConfigurationStorage configStorage = ModuleServiceManager.getService(module,
|
||||
TeaVMConfigurationStorage.class);
|
||||
assert configStorage != null;
|
||||
configStorage.loadState(config);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reset() {
|
||||
if (panel == null) {
|
||||
return;
|
||||
}
|
||||
TeaVMConfigurationStorage configStorage = ModuleServiceManager.getService(module,
|
||||
TeaVMConfigurationStorage.class);
|
||||
assert configStorage != null;
|
||||
panel.load(configStorage.getState());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void disposeUIResources() {
|
||||
this.panel = null;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,132 @@
|
|||
/*
|
||||
* Copyright 2016 Alexey Andreev.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.teavm.idea.ui;
|
||||
|
||||
import java.awt.GridBagConstraints;
|
||||
import java.awt.GridBagLayout;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Supplier;
|
||||
import javax.swing.JCheckBox;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JTextField;
|
||||
import org.teavm.idea.TeaVMConfiguration;
|
||||
|
||||
class TeaVMConfigurationPanel extends JPanel {
|
||||
private final JCheckBox enabledCheckBox = new JCheckBox("TeaVM enabled for this module");
|
||||
private final JTextField mainClassField = new JTextField();
|
||||
private final JTextField targetDirectoryField = new JTextField();
|
||||
private final TeaVMConfiguration initialConfiguration = new TeaVMConfiguration();
|
||||
private final List<JComponent> editComponents = Arrays.asList(mainClassField, targetDirectoryField);
|
||||
private final List<Field<?>> fields = Arrays.asList(
|
||||
new Field<>(TeaVMConfiguration::setEnabled, TeaVMConfiguration::isEnabled,
|
||||
enabledCheckBox::setSelected, enabledCheckBox::isSelected),
|
||||
new Field<>(TeaVMConfiguration::setMainClass, TeaVMConfiguration::getMainClass,
|
||||
mainClassField::setText, mainClassField::getText),
|
||||
new Field<>(TeaVMConfiguration::setTargetDirectory, TeaVMConfiguration::getTargetDirectory,
|
||||
targetDirectoryField::setText, targetDirectoryField::getText)
|
||||
);
|
||||
|
||||
TeaVMConfigurationPanel() {
|
||||
enabledCheckBox.addActionListener(event -> updateEnabledState());
|
||||
setupLayout();
|
||||
}
|
||||
|
||||
private void setupLayout() {
|
||||
setLayout(new GridBagLayout());
|
||||
|
||||
GridBagConstraints constraints = new GridBagConstraints();
|
||||
constraints.gridwidth = GridBagConstraints.REMAINDER;
|
||||
add(enabledCheckBox, constraints);
|
||||
|
||||
constraints.gridwidth = GridBagConstraints.RELATIVE;
|
||||
add(new JLabel("Main class:"), constraints);
|
||||
constraints.gridwidth = GridBagConstraints.REMAINDER;
|
||||
add(mainClassField, constraints);
|
||||
|
||||
constraints.gridwidth = GridBagConstraints.RELATIVE;
|
||||
add(new JLabel("Target directory:"), constraints);
|
||||
constraints.gridwidth = GridBagConstraints.REMAINDER;
|
||||
add(targetDirectoryField, constraints);
|
||||
}
|
||||
|
||||
public void load(TeaVMConfiguration config) {
|
||||
if (config == null) {
|
||||
config = new TeaVMConfiguration();
|
||||
}
|
||||
updateInitialConfiguration(config);
|
||||
for (Field<?> field : fields) {
|
||||
loadField(field, config);
|
||||
}
|
||||
updateEnabledState();
|
||||
}
|
||||
|
||||
public void save(TeaVMConfiguration config) {
|
||||
for (Field<?> field : fields) {
|
||||
saveField(field, config);
|
||||
}
|
||||
updateInitialConfiguration(config);
|
||||
}
|
||||
|
||||
private <T> void loadField(Field<T> field, TeaVMConfiguration config) {
|
||||
field.editConsumer.accept(field.dataSupplier.apply(config));
|
||||
}
|
||||
|
||||
private <T> void saveField(Field<T> field, TeaVMConfiguration config) {
|
||||
field.dataConsumer.accept(config, field.editSupplier.get());
|
||||
}
|
||||
|
||||
private void updateEnabledState() {
|
||||
for (JComponent component : editComponents) {
|
||||
component.setEnabled(enabledCheckBox.isSelected());
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isModified() {
|
||||
return fields.stream().anyMatch(this::isFieldModified);
|
||||
}
|
||||
|
||||
private <T> boolean isFieldModified(Field<T> field) {
|
||||
return !Objects.equals(field.dataSupplier.apply(initialConfiguration), field.editSupplier.get());
|
||||
}
|
||||
|
||||
private void updateInitialConfiguration(TeaVMConfiguration config) {
|
||||
initialConfiguration.setEnabled(config.isEnabled());
|
||||
initialConfiguration.setMainClass(config.getMainClass());
|
||||
initialConfiguration.setTargetDirectory(config.getTargetDirectory());
|
||||
}
|
||||
|
||||
static class Field<T> {
|
||||
final BiConsumer<TeaVMConfiguration, T> dataConsumer;
|
||||
final Function<TeaVMConfiguration, T> dataSupplier;
|
||||
final Consumer<T> editConsumer;
|
||||
final Supplier<T> editSupplier;
|
||||
|
||||
public Field(BiConsumer<TeaVMConfiguration, T> dataConsumer, Function<TeaVMConfiguration, T> dataSupplier,
|
||||
Consumer<T> editConsumer, Supplier<T> editSupplier) {
|
||||
this.dataConsumer = dataConsumer;
|
||||
this.dataSupplier = dataSupplier;
|
||||
this.editConsumer = editConsumer;
|
||||
this.editSupplier = editSupplier;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -15,21 +15,20 @@
|
|||
]]>
|
||||
</change-notes>
|
||||
|
||||
<!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html for description -->
|
||||
<idea-version since-build="141.0"/>
|
||||
|
||||
<!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.html
|
||||
on how to target different products -->
|
||||
<!-- uncomment to enable plugin in all products
|
||||
<depends>com.intellij.modules.lang</depends>
|
||||
-->
|
||||
|
||||
<extensions defaultExtensionNs="com.intellij">
|
||||
<!-- Add your extensions here -->
|
||||
<moduleConfigurable instance="org.teavm.idea.ui.TeaVMConfigurable"/>
|
||||
<moduleService serviceInterface="org.teavm.idea.TeaVMConfigurationStorage"
|
||||
serviceImplementation="org.teavm.idea.TeaVMConfigurationStorage"/>
|
||||
</extensions>
|
||||
|
||||
<actions>
|
||||
<!-- Add your actions here -->
|
||||
</actions>
|
||||
|
||||
<module-components>
|
||||
<component>
|
||||
<implementation-class>org.teavm.idea.TeaVMConfigurationStorage</implementation-class>
|
||||
</component>
|
||||
</module-components>
|
||||
</idea-plugin>
|
Loading…
Reference in New Issue
Block a user