mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Javafx: New FXML file template (IDEA-106502)
This commit is contained in:
@@ -33,6 +33,7 @@ import com.intellij.openapi.roots.ProjectRootManager;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.search.FilenameIndex;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -93,7 +94,7 @@ public class CreateModuleInfoAction extends CreateFromTemplateActionBase {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Map<String, String> getLiveTemplateDefaults(@NotNull DataContext ctx) {
|
||||
protected Map<String, String> getLiveTemplateDefaults(@NotNull DataContext ctx, @NotNull PsiFile file) {
|
||||
Module module = LangDataKeys.MODULE.getData(ctx);
|
||||
return Collections.singletonMap("MODULE_NAME", module != null ? StringUtil.sanitizeJavaIdentifier(module.getName()) : "module_name");
|
||||
}
|
||||
|
||||
+2
-2
@@ -71,7 +71,7 @@ public abstract class CreateFromTemplateActionBase extends AnAction {
|
||||
elementCreated(dialog, createdElement);
|
||||
view.selectElement(createdElement);
|
||||
if (selectedTemplate.isLiveTemplateEnabled() && createdElement instanceof PsiFile) {
|
||||
Map<String, String> defaultValues = getLiveTemplateDefaults(dataContext);
|
||||
Map<String, String> defaultValues = getLiveTemplateDefaults(dataContext, ((PsiFile)createdElement));
|
||||
startLiveTemplate((PsiFile)createdElement, notNull(defaultValues, Collections.emptyMap()));
|
||||
}
|
||||
}
|
||||
@@ -129,7 +129,7 @@ public abstract class CreateFromTemplateActionBase extends AnAction {
|
||||
protected void elementCreated(CreateFromTemplateDialog dialog, PsiElement createdElement) { }
|
||||
|
||||
@Nullable
|
||||
protected Map<String, String> getLiveTemplateDefaults(DataContext dataContext) {
|
||||
protected Map<String, String> getLiveTemplateDefaults(DataContext dataContext, @NotNull PsiFile file) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<?import java.lang.*?>
|
||||
<?import java.util.*?>
|
||||
<?import javafx.scene.*?>
|
||||
<?import javafx.scene.control.*?>
|
||||
<?import javafx.scene.layout.*?>
|
||||
|
||||
<AnchorPane xmlns="http://javafx.com/javafx"
|
||||
xmlns:fx="http://javafx.com/fxml"
|
||||
fx:controller="#[[$CONTROLLER_NAME$]]#"
|
||||
prefHeight="400.0" prefWidth="600.0" >
|
||||
|
||||
</AnchorPane>
|
||||
@@ -0,0 +1,5 @@
|
||||
<html>
|
||||
<body>
|
||||
This is a built-in template for FXML file.
|
||||
</body>
|
||||
</html>
|
||||
@@ -79,5 +79,8 @@
|
||||
<add-to-group group-id="EditorTabPopupMenu" anchor="last"/>
|
||||
<add-to-group group-id="ProjectViewPopupMenu" anchor="last"/>
|
||||
</action>
|
||||
<action class="org.jetbrains.plugins.javaFX.actions.CreateFxmlFileAction" id="NewFxmlFile">
|
||||
<add-to-group group-id="NewGroup" anchor="after" relative-to-action="NewDir"/>
|
||||
</action>
|
||||
</actions>
|
||||
</idea-plugin>
|
||||
|
||||
@@ -0,0 +1,108 @@
|
||||
/*
|
||||
* Copyright 2000-2016 JetBrains s.r.o.
|
||||
*
|
||||
* 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.jetbrains.plugins.javaFX.actions;
|
||||
|
||||
import com.intellij.icons.AllIcons;
|
||||
import com.intellij.ide.fileTemplates.FileTemplate;
|
||||
import com.intellij.ide.fileTemplates.FileTemplateManager;
|
||||
import com.intellij.ide.fileTemplates.actions.CreateFromTemplateActionBase;
|
||||
import com.intellij.openapi.actionSystem.DataContext;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.roots.ProjectFileIndex;
|
||||
import com.intellij.openapi.roots.ProjectRootManager;
|
||||
import com.intellij.openapi.util.Computable;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.util.PathUtil;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.javaFX.fxml.JavaFxFileTypeFactory;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author pdolgov
|
||||
*/
|
||||
public class CreateFxmlFileAction extends CreateFromTemplateActionBase {
|
||||
private static final String INTERNAL_TEMPLATE_NAME = "FxmlFile.fxml";
|
||||
|
||||
public CreateFxmlFileAction() {
|
||||
super("FXML File", "Create New FXML File", AllIcons.FileTypes.Xml);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected FileTemplate getTemplate(Project project, PsiDirectory dir) {
|
||||
return FileTemplateManager.getInstance(project).getInternalTemplate(INTERNAL_TEMPLATE_NAME);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
protected Map<String, String> getLiveTemplateDefaults(DataContext dataContext, @NotNull PsiFile file) {
|
||||
String packageName = ApplicationManager.getApplication().runReadAction((Computable<String>)() -> {
|
||||
PsiDirectory psiDirectory = file.getContainingDirectory();
|
||||
if (psiDirectory != null) {
|
||||
VirtualFile vDirectory = psiDirectory.getVirtualFile();
|
||||
ProjectFileIndex index = ProjectRootManager.getInstance(file.getProject()).getFileIndex();
|
||||
if (index.isInSourceContent(vDirectory)) {
|
||||
return index.getPackageNameByDirectory(vDirectory);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
});
|
||||
@NonNls String name = file.getName();
|
||||
name = PathUtil.getFileName(name);
|
||||
if (JavaFxFileTypeFactory.FXML_EXTENSION.equals(PathUtil.getFileExtension(name))) {
|
||||
name = name.substring(0, name.length() - JavaFxFileTypeFactory.FXML_EXTENSION.length() - 1);
|
||||
}
|
||||
|
||||
name = toClassName(name);
|
||||
name = !StringUtil.isEmpty(packageName) ? packageName + "." + name : name;
|
||||
return Collections.singletonMap("CONTROLLER_NAME", name);
|
||||
}
|
||||
|
||||
private static String toClassName(String name) {
|
||||
int start;
|
||||
for (start = 0; start < name.length(); start++) {
|
||||
char c = name.charAt(start);
|
||||
if (Character.isJavaIdentifierStart(c) && c != '_' && c != '$') {
|
||||
break;
|
||||
}
|
||||
}
|
||||
StringBuilder className = new StringBuilder();
|
||||
boolean skip = true;
|
||||
|
||||
for (int i = start; i < name.length(); i++) {
|
||||
char c = name.charAt(i);
|
||||
if (!Character.isJavaIdentifierPart(c) || c == '_' || c == '$') {
|
||||
skip = true;
|
||||
continue;
|
||||
}
|
||||
if (skip) {
|
||||
skip = false;
|
||||
className.append(Character.toUpperCase(c));
|
||||
}
|
||||
else {
|
||||
className.append(c);
|
||||
}
|
||||
}
|
||||
return className.toString();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user