From 16bbbb2870c7c36887aa8a9f5d4bdb6e76556ab6 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 23 Jun 2011 14:06:16 +0200 Subject: [PATCH] double-click on .ts file opens it in Qt Linguist --- .../python/PythonFileTypeFactory.java | 2 + python/src/com/jetbrains/pyqt/QtFileType.java | 111 ++++++++++++++++++ .../pyqt/QtTranslationsFileType.java | 24 ++++ .../src/com/jetbrains/pyqt/QtUIFileType.java | 93 +-------------- python/src/com/jetbrains/pyqt/tsFile.png | Bin 0 -> 492 bytes 5 files changed, 142 insertions(+), 88 deletions(-) create mode 100644 python/src/com/jetbrains/pyqt/QtFileType.java create mode 100644 python/src/com/jetbrains/pyqt/QtTranslationsFileType.java create mode 100644 python/src/com/jetbrains/pyqt/tsFile.png diff --git a/python/pluginSrc/com/jetbrains/python/PythonFileTypeFactory.java b/python/pluginSrc/com/jetbrains/python/PythonFileTypeFactory.java index 65178e96da8b..a0cbe8f18616 100644 --- a/python/pluginSrc/com/jetbrains/python/PythonFileTypeFactory.java +++ b/python/pluginSrc/com/jetbrains/python/PythonFileTypeFactory.java @@ -4,6 +4,7 @@ import com.intellij.openapi.fileTypes.FileTypeConsumer; import com.intellij.openapi.fileTypes.FileTypeFactory; import com.intellij.ultimate.PluginVerifier; import com.intellij.ultimate.UltimateVerifier; +import com.jetbrains.pyqt.QtTranslationsFileType; import com.jetbrains.pyqt.QtUIFileType; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -21,5 +22,6 @@ public class PythonFileTypeFactory extends FileTypeFactory { public void createFileTypes(@NonNls @NotNull final FileTypeConsumer consumer) { consumer.consume(PythonFileType.INSTANCE, "py;pyw;"); consumer.consume(QtUIFileType.INSTANCE, "ui"); + consumer.consume(QtTranslationsFileType.INSTANCE, "ts"); } } diff --git a/python/src/com/jetbrains/pyqt/QtFileType.java b/python/src/com/jetbrains/pyqt/QtFileType.java new file mode 100644 index 000000000000..39b64aa1b2b4 --- /dev/null +++ b/python/src/com/jetbrains/pyqt/QtFileType.java @@ -0,0 +1,111 @@ +package com.jetbrains.pyqt; + +import com.intellij.openapi.fileTypes.FileType; +import com.intellij.openapi.fileTypes.INativeFileType; +import com.intellij.openapi.module.Module; +import com.intellij.openapi.module.ModuleUtil; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.projectRoots.Sdk; +import com.intellij.openapi.ui.Messages; +import com.intellij.openapi.util.SystemInfo; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.psi.PsiDirectory; +import com.intellij.psi.PsiElement; +import com.jetbrains.python.psi.impl.PyQualifiedName; +import com.jetbrains.python.psi.resolve.ResolveImportUtil; +import com.jetbrains.python.sdk.PythonSdkType; +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import java.io.IOException; +import java.util.List; + +/** + * @author yole + */ +public abstract class QtFileType implements FileType, INativeFileType { + private final String myName; + private final String myDescription; + private final String myDefaultExtension; + private final Icon myIcon; + + protected QtFileType(String name, String description, String defaultExtension, Icon icon) { + myName = name; + myDescription = description; + myDefaultExtension = defaultExtension; + myIcon = icon; + } + + @NotNull + @Override + public String getName() { + return myName; + } + + @NotNull + @Override + public String getDescription() { + return myDescription; + } + + @NotNull + @Override + public String getDefaultExtension() { + return myDefaultExtension; + } + + @Override + public Icon getIcon() { + return myIcon; + } + + @Override + public boolean isBinary() { + return true; + } + + @Override + public boolean isReadOnly() { + return false; + } + + @Override + public String getCharset(@NotNull VirtualFile file, byte[] content) { + return null; + } + + @Override + public boolean openFileInAssociatedApplication(Project project, VirtualFile file) { + if (SystemInfo.isWindows) { + Module module = ModuleUtil.findModuleForFile(file, project); + if (module == null) { + return false; + } + Sdk sdk = PythonSdkType.findPythonSdk(module); + if (sdk == null) { + return false; + } + List qt4 = + ResolveImportUtil.resolveModulesInRootProvider(sdk.getRootProvider(), module, PyQualifiedName.fromComponents("PyQt4")); + for (PsiElement psiElement : qt4) { + if (psiElement instanceof PsiDirectory) { + VirtualFile designer = ((PsiDirectory)psiElement).getVirtualFile().findChild(getToolName() + ".exe"); + if (designer != null) { + try { + Runtime.getRuntime().exec(new String[] { designer.getPath(), file.getPath() } ); + } + catch (IOException e) { + Messages.showErrorDialog(project, "Failed to run Qt Designer: " + e.getMessage(), "Error"); + } + return true; + } + } + } + + } + // TODO + return true; + } + + protected abstract String getToolName(); +} diff --git a/python/src/com/jetbrains/pyqt/QtTranslationsFileType.java b/python/src/com/jetbrains/pyqt/QtTranslationsFileType.java new file mode 100644 index 000000000000..7f8fb2fe0fae --- /dev/null +++ b/python/src/com/jetbrains/pyqt/QtTranslationsFileType.java @@ -0,0 +1,24 @@ +package com.jetbrains.pyqt; + +import com.intellij.openapi.fileTypes.FileType; +import com.intellij.openapi.util.IconLoader; + +/** + * @author yole + */ +public class QtTranslationsFileType extends QtFileType implements FileType { + public static QtTranslationsFileType INSTANCE = new QtTranslationsFileType(); + + protected QtTranslationsFileType() { + super("Qt translations file", "Qt Linguist translations file", "ts", IconLoader.getIcon("/com/jetbrains/pyqt/tsFile.png")); + } + + protected String getToolName() { + return "linguist"; + } + + @Override + public boolean useNativeIcon() { + return false; + } +} diff --git a/python/src/com/jetbrains/pyqt/QtUIFileType.java b/python/src/com/jetbrains/pyqt/QtUIFileType.java index ecc21fa1ddf4..dcf4ffe6101c 100644 --- a/python/src/com/jetbrains/pyqt/QtUIFileType.java +++ b/python/src/com/jetbrains/pyqt/QtUIFileType.java @@ -1,103 +1,20 @@ package com.jetbrains.pyqt; import com.intellij.openapi.fileTypes.FileType; -import com.intellij.openapi.fileTypes.INativeFileType; -import com.intellij.openapi.module.Module; -import com.intellij.openapi.module.ModuleUtil; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.projectRoots.Sdk; -import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.IconLoader; -import com.intellij.openapi.util.SystemInfo; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.psi.PsiDirectory; -import com.intellij.psi.PsiElement; -import com.jetbrains.python.psi.impl.PyQualifiedName; -import com.jetbrains.python.psi.resolve.ResolveImportUtil; -import com.jetbrains.python.sdk.PythonSdkType; -import org.jetbrains.annotations.NotNull; - -import javax.swing.*; -import java.io.IOException; -import java.util.List; /** * @author yole */ -public class QtUIFileType implements FileType, INativeFileType { +public class QtUIFileType extends QtFileType implements FileType { public static QtUIFileType INSTANCE = new QtUIFileType(); - private Icon myIcon = IconLoader.getIcon("/com/jetbrains/pyqt/uiForm.png"); - - @NotNull - @Override - public String getName() { - return "Qt UI file"; + protected QtUIFileType() { + super("Qt UI file", "Qt UI Designer form file", "ui", IconLoader.getIcon("/com/jetbrains/pyqt/uiForm.png")); } - @NotNull - @Override - public String getDescription() { - return "Qt UI Designer form file"; - } - - @NotNull - @Override - public String getDefaultExtension() { - return "ui"; - } - - @Override - public Icon getIcon() { - return myIcon; - } - - @Override - public boolean isBinary() { - return true; - } - - @Override - public boolean isReadOnly() { - return false; - } - - @Override - public String getCharset(@NotNull VirtualFile file, byte[] content) { - return null; - } - - @Override - public boolean openFileInAssociatedApplication(Project project, VirtualFile file) { - if (SystemInfo.isWindows) { - Module module = ModuleUtil.findModuleForFile(file, project); - if (module == null) { - return false; - } - Sdk sdk = PythonSdkType.findPythonSdk(module); - if (sdk == null) { - return false; - } - List qt4 = - ResolveImportUtil.resolveModulesInRootProvider(sdk.getRootProvider(), module, PyQualifiedName.fromComponents("PyQt4")); - for (PsiElement psiElement : qt4) { - if (psiElement instanceof PsiDirectory) { - VirtualFile designer = ((PsiDirectory)psiElement).getVirtualFile().findChild("designer.exe"); - if (designer != null) { - try { - Runtime.getRuntime().exec(new String[] { designer.getPath(), file.getPath() } ); - } - catch (IOException e) { - Messages.showErrorDialog(project, "Failed to run Qt Designer: " + e.getMessage(), "Error"); - } - return true; - } - } - } - - } - // TODO - return true; + protected String getToolName() { + return "designer"; } @Override diff --git a/python/src/com/jetbrains/pyqt/tsFile.png b/python/src/com/jetbrains/pyqt/tsFile.png new file mode 100644 index 0000000000000000000000000000000000000000..e83c73df1b4875460fc4ccb2728fb083f59f2a16 GIT binary patch literal 492 zcmVQy8?x zoEcVLsbVmZ4j^oRGSHtHCJVt)x9LVZgP%qvShD{(ByeG_yZinW*boc@KnzfzxdB}P z3jO!rpE7I&h6gARLE<0-K>-Ph36QI>8UQl{IXYoZMh7?zfEl6;47j`RPJ?YE*#JV| i|9^%By&g9bVSE7Pz2}P;;;)YY0000