|
39 | 39 | import java.util.Timer; |
40 | 40 | import java.util.TimerTask; |
41 | 41 | import java.util.stream.Collectors; |
| 42 | +import java.nio.file.Files; |
42 | 43 |
|
43 | 44 | import javax.swing.*; |
44 | 45 | import javax.swing.border.EmptyBorder; |
@@ -722,11 +723,10 @@ protected JMenu buildFileMenu(JMenuItem[] exportItems) { |
722 | 723 | item.addActionListener(e -> handleSaveAs()); |
723 | 724 | fileMenu.add(item); |
724 | 725 |
|
725 | | - item = Toolkit.newJMenuItemShift(Language.text("menu.file.templates"), 'T'); |
726 | | - //JMenuItem finalItem = item; |
727 | | - item.addActionListener(e -> handleTemplate()); |
728 | | - fileMenu.add(item); |
729 | | - |
| 726 | + JMenu templatesMenu = new JMenu(Language.text("menu.file.templates")); |
| 727 | + System.out.println("templatesMenu"); |
| 728 | + loadTemplates(templatesMenu); |
| 729 | + fileMenu.add(templatesMenu); |
730 | 730 |
|
731 | 731 |
|
732 | 732 | if (exportItems != null) { |
@@ -768,34 +768,115 @@ protected JMenu buildFileMenu(JMenuItem[] exportItems) { |
768 | 768 | } |
769 | 769 | return fileMenu; |
770 | 770 | } |
771 | | - // Define the handleTemplate method to show different templates |
772 | | - private void handleTemplate() { |
773 | | - // Create a popup menu for templates |
774 | | - JPopupMenu templatesMenu = new JPopupMenu("Templates"); |
| 771 | + // Load templates from both the repository and the user's Sketchbook folder |
| 772 | + private void loadTemplates(JMenu templatesMenu) { |
| 773 | + List<File> allTemplates = new ArrayList<>(); |
775 | 774 |
|
776 | | - JMenuItem template1 = new JMenuItem("Animation Sketch"); |
777 | | - template1.addActionListener(e -> insertTemplateCode(Template.animationSketchCode)); |
778 | | - templatesMenu.add(template1); |
| 775 | + // Load predefined templates from the repository |
| 776 | + File repoTemplatesDir = Platform.getContentFile("lib/templates"); |
| 777 | + System.out.println("repoTemplatesDir: " + repoTemplatesDir); |
| 778 | + System.out.println("Loading templates from repository directory: " + repoTemplatesDir.getAbsolutePath()); |
| 779 | + addTemplatesFromDirectory(repoTemplatesDir, allTemplates); |
779 | 780 |
|
780 | | - JMenuItem template2 = new JMenuItem("Interactive Sketch"); |
781 | | - template2.addActionListener(e -> insertTemplateCode(Template.interactiveSketchCode)); |
782 | | - templatesMenu.add(template2); |
| 781 | + // Load user-defined templates from the Sketchbook folder |
| 782 | + File userTemplatesDir = new File(Base.getSketchbookFolder(), "templates"); |
783 | 783 |
|
784 | | - JMenuItem template3 = new JMenuItem("Fullscreen Sketch"); |
785 | | - template3.addActionListener(e -> insertTemplateCode(Template.fullscreenSketchCode)); |
786 | | - templatesMenu.add(template3); |
| 784 | + System.out.println("Loading templates from user sketchbook directory: " + userTemplatesDir.getAbsolutePath()); |
| 785 | + addTemplatesFromDirectory(userTemplatesDir, allTemplates); |
787 | 786 |
|
788 | | - JMenuItem template4 = new JMenuItem("Resizeable Sketch"); |
789 | | - template4.addActionListener(e -> insertTemplateCode(Template.resizeableSketchCode)); |
790 | | - templatesMenu.add(template4); |
| 787 | + // Print all templates to the console |
| 788 | + System.out.println("All loaded templates:"); |
| 789 | + System.out.println(allTemplates.size()); |
| 790 | + for (File template : allTemplates) { |
| 791 | + System.out.println("Template: " + template.getAbsolutePath()); |
| 792 | + } |
791 | 793 |
|
792 | | - // Show the popup menu at the location where the "Templates" menu item was clicked |
793 | | - templatesMenu.show(this, 0, 0); |
| 794 | + // Add all templates to the menu |
| 795 | + addTemplatesToMenu(allTemplates, templatesMenu); |
794 | 796 | } |
795 | 797 |
|
| 798 | + private void addTemplatesFromDirectory(File directory, List<File> allTemplates) { |
| 799 | + if (directory.exists() && directory.isDirectory()) { |
| 800 | + File[] templateFiles = directory.listFiles(); |
| 801 | + if (templateFiles != null) { |
| 802 | + for (File templateFile : templateFiles) { |
| 803 | + System.out.println("Found template file: " + templateFile.getAbsolutePath()); |
| 804 | + allTemplates.add(templateFile); |
| 805 | + } |
| 806 | + } else { |
| 807 | + System.out.println("No template files found in directory: " + directory.getAbsolutePath()); |
| 808 | + } |
| 809 | + } else { |
| 810 | + System.out.println("Directory does not exist or is not a directory: " + directory.getAbsolutePath()); |
| 811 | + } |
| 812 | + } |
| 813 | + |
| 814 | + // Add templates to the menu |
| 815 | + // Add templates to the menu |
| 816 | + private void addTemplatesToMenu(List<File> templates, JMenu templatesMenu) { |
| 817 | + templatesMenu.removeAll(); // Clear existing menu items |
| 818 | + for (File templateFile : templates) { |
| 819 | + String templateName; |
| 820 | + if (templateFile.getName().toLowerCase().endsWith(".pde")) { |
| 821 | + templateName = templateFile.getName().replace(".pde", ""); |
| 822 | + } else { |
| 823 | + templateName = templateFile.getName(); |
| 824 | + } |
| 825 | + JMenuItem templateItem = new JMenuItem(templateName); |
| 826 | + templateItem.addActionListener(e -> { |
| 827 | + try { |
| 828 | + String templateCode; |
| 829 | + if (templateFile.getName().toLowerCase().endsWith(".pde")) { |
| 830 | + templateCode = new String(Files.readAllBytes(templateFile.toPath())); |
| 831 | + System.out.println("Template code read from file: " + templateCode); |
| 832 | + } else { |
| 833 | + templateCode = ""; |
| 834 | + // System.out.println("Addtemplatestomenu--suserdefned"+templateFile);// Or any other action needed for non-.pde files |
| 835 | + System.out.println("Non-.pde file selected: " + templateFile.getAbsolutePath()); |
| 836 | + } |
| 837 | + |
| 838 | + Editor newEditor = base.handleNew(); |
| 839 | + if (newEditor != null) { |
| 840 | + System.out.println("New editor created. Inserting template code."); |
| 841 | + newEditor.insertText(templateCode); |
| 842 | + } else { |
| 843 | + System.err.println("Failed to create new editor."); |
| 844 | + } |
| 845 | + } catch (IOException ex) { |
| 846 | + ex.printStackTrace(); |
| 847 | + } |
| 848 | + }); |
| 849 | + templatesMenu.add(templateItem); |
| 850 | + } |
| 851 | + } |
| 852 | + |
| 853 | + |
| 854 | + // Method to save user-defined templates in the sketchbook/templates directory |
| 855 | +// public void saveUserTemplate(String templateName, String templateCode) { |
| 856 | +// File userTemplatesDir = new File(Base.getSketchbookFolder(), "templates"); |
| 857 | +// if (!userTemplatesDir.exists()) { |
| 858 | +// userTemplatesDir.mkdirs(); |
| 859 | +// } |
| 860 | +// |
| 861 | +// File templateFile = new File(userTemplatesDir, templateName + ".pde"); |
| 862 | +// try { |
| 863 | +// Files.write(templateFile.toPath(), templateCode.getBytes()); |
| 864 | +// System.out.println("User template saved: " + templateFile.getAbsolutePath()); |
| 865 | +// |
| 866 | +// // Reload templates after saving a new one |
| 867 | +// JMenu templatesMenu = new JMenu(Language.text("menu.file.templates")); |
| 868 | +// loadTemplates(templatesMenu); |
| 869 | +// |
| 870 | +// // Update the File menu with the new templates menu |
| 871 | +// JMenu fileMenu = buildFileMenu(null); |
| 872 | +// fileMenu.add(templatesMenu); |
| 873 | +// } catch (IOException e) { |
| 874 | +// e.printStackTrace(); |
| 875 | +// } |
| 876 | +// } |
796 | 877 | // Add this method to insert template code into the editor |
797 | 878 | private void insertTemplateCode(String templateCode) { |
798 | | - textarea.setText(""); |
| 879 | + //textarea.setText(""); |
799 | 880 | insertText(templateCode); |
800 | 881 | } |
801 | 882 |
|
|
0 commit comments