/* * WebOSThemeBuilderView.java */ package ca.canucksoftware.themebuilder; import java.awt.AlphaComposite; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import org.jdesktop.application.Action; import org.jdesktop.application.SingleFrameApplication; import org.jdesktop.application.FrameView; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JFileChooser; import javax.swing.JPanel; import java.awt.Graphics; import java.awt.Image; import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.net.URL; import java.util.TimerTask; import java.util.Timer; import java.io.File; import java.util.LinkedList; import java.util.List; import java.util.prefs.Preferences; import javax.swing.table.DefaultTableModel; import javax.swing.ImageIcon; import javax.swing.JLayeredPane; import javax.swing.JOptionPane; import javax.swing.SwingConstants; import javax.swing.table.DefaultTableCellRenderer; /** * The application's main frame. */ public class MainView extends FrameView { private boolean pageLoaded; private File zipOutDir; private Image bg; private Timer t; private ZipTheme theme; private VersionTheme currVersion; private String currCategory; private List<FileEntry> currFiles; private List<IconEntry> currIcons; private List<PatchEntry> currPatches; private File prevDir; public MainView(SingleFrameApplication app) { super(app); URL imgURL = getClass().getResource("resources/icon.png"); getFrame().setIconImage(new ImageIcon(imgURL).getImage()); URL bgURL = getClass().getResource("resources/bg.jpg"); bg = new ImageIcon(bgURL).getImage(); pageLoaded = false; initComponents(); zipOutDir = null; theme = new ZipTheme(); String prevDirStr = Preferences.userRoot().get("prevDir", null); prevDir = null; if(prevDirStr!=null) { prevDir = new File(prevDirStr); if(!prevDir.exists()) { prevDir = null; } } currCategory = "--all--"; t = new Timer(); jButton6.setContentAreaFilled(false); jButton6.setBorderPainted(false); jButton6.setEnabled(false); jButton6.setIcon(null); LeftEllipsisRenderer ler = new LeftEllipsisRenderer(); jTable1.getColumn("File").setCellRenderer(ler); jTable1.getColumn("Destination on Device").setCellRenderer(ler); jTable2.getColumn("Image File").setCellRenderer(ler); jTable2.getColumn("Application ID").setCellRenderer(ler); jTable3.getColumn("Patch File").setCellRenderer(ler); WindowListener wl = new WindowListener() { public void windowOpened(WindowEvent e) {} public void windowClosing(WindowEvent e) { Preferences.userRoot().put("prevDir", prevDir.getAbsolutePath()); if(zipOutDir!=null && zipOutDir.exists()) { deleteDirectory(zipOutDir); if(zipOutDir.exists()) { zipOutDir.delete(); } } System.exit(0); } public void windowClosed(WindowEvent e) { System.exit(0); } public void windowIconified(WindowEvent e) {} public void windowDeiconified(WindowEvent e) {} public void windowActivated(WindowEvent e) {} public void windowDeactivated(WindowEvent e) {} }; super.getFrame().addWindowListener(wl); t.schedule(new DoDelayedLoad(), 50); } @Action public void showAboutBox() { if (aboutBox == null) { JFrame mainFrame = WebOSThemeBuilderApp.getApplication().getMainFrame(); aboutBox = new AboutBox(mainFrame); aboutBox.setLocationRelativeTo(mainFrame); } WebOSThemeBuilderApp.getApplication().show(aboutBox); } private File loadFileChooser(javax.swing.filechooser.FileFilter ff, boolean isSave) { File result; JFileChooser fc = new JFileChooser(); //Create a file chooser fc.setAcceptAllFileFilterUsed(false); fc.setMultiSelectionEnabled(false); if(prevDir!=null) fc.setCurrentDirectory(prevDir); fc.setFileFilter(ff); if(!isSave) { fc.setDialogTitle(""); if (fc.showDialog(null, "Select") == JFileChooser.APPROVE_OPTION) { result = fc.getSelectedFile(); } else { result = null; } } else { fc.setSelectedFile(new File(prevDir, theme.id + ".zip")); fc.setDialogTitle("Save As..."); if(fc.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) { result = fc.getSelectedFile(); } else { result = null; } } if(result!=null) prevDir = result.getParentFile(); return result; } private void updateSSList() { LinkedList<String> names = new LinkedList<String>(); for(int i=0; i<theme.screenshots.size(); i++) { names.add(getFilename(theme.screenshots.get(i))); } jList2.setListData(names.toArray()); } private String getFilename(File f) { return getFilename(f.getName()); } private String getFilename(String f) { String result = f; if(result.lastIndexOf("/")!=-1) { result = result.substring(result.lastIndexOf("/")+1); } if(result.lastIndexOf("\\")!=-1) { result = result.substring(result.lastIndexOf("\\")+1); } return result; } public boolean deleteDirectory(File path) { if(path.exists()) { File[] curr = path.listFiles(); for(int i=0; i<curr.length; i++) { if(curr[i].isDirectory()) { deleteDirectory(curr[i]); } else { curr[i].delete(); } } } return(path.delete()); } private void changeState(boolean val) { pageLoaded = val; jTextField1.setEnabled(val); jTextField2.setEnabled(val); jTextField3.setEnabled(val); jTextField4.setEnabled(val); jTextField7.setEnabled(val); jTextArea1.setEnabled(val); jList2.setEnabled(val); jButton2.setEnabled(val); jButton1.setEnabled(val); jTextField5.setEnabled(val); jTextField6.setEnabled(val); jButton4.setEnabled(val); jComboBox1.setEnabled(val); jComboBox2.setEnabled(val); jButton6.setEnabled(val); jButton7.setEnabled(val); jButton5.setEnabled(val); jButton3.setEnabled(val); jTabbedPane1.setEnabled(val); if(val) { jButton3.setText("Build Theme Zip"); } else { jButton3.setText("Please wait..."); } getRootPane().requestFocus(); } private boolean infoGood() { if(jTextField1.getText().length()==0) { JOptionPane.showMessageDialog(mainPanel, "ERROR: Missing theme name."); return false; } if(jTextField2.getText().length()==0) { JOptionPane.showMessageDialog(mainPanel, "ERROR: Missing theme version."); return false; } if(jTextField3.getText().length()==0) { JOptionPane.showMessageDialog(mainPanel, "ERROR: Missing theme creator."); return false; } if(jTextField4.getText().length()==0) { JOptionPane.showMessageDialog(mainPanel, "ERROR: Missing theme homepage URL."); return false; } if(jTextField7.getText().length()==0) { JOptionPane.showMessageDialog(mainPanel, "ERROR: Missing theme theme ID."); return false; } if(jTextArea1.getText().length()==0) { JOptionPane.showMessageDialog(mainPanel, "ERROR: Missing theme description."); return false; } if(jList2.getModel().getSize()==0) { JOptionPane.showMessageDialog(mainPanel, "ERROR: Missing screenshots.\nAt least 1 screenshot" + " is required."); return false; } if(theme.devices.size()==0) { JOptionPane.showMessageDialog(mainPanel, "ERROR: Missing compatible device.\nAt least 1 compatable device" + " is required."); } if(theme.controller.listVersions().size()==0) { JOptionPane.showMessageDialog(mainPanel, "ERROR: Missing theme data.\nAt least 1 compatable webOS version" + " is required."); return false; } return true; } private void reset() { changeState(false); if(zipOutDir!=null && zipOutDir.exists()) { deleteDirectory(zipOutDir); if(zipOutDir.exists()) { zipOutDir.delete(); } } jTabbedPane1.setSelectedIndex(0); jTextField1.setText(""); jTextField2.setText(""); jTextField3.setText(""); jTextField4.setText(""); jTextField5.setText(""); jTextField6.setText(""); jTextField7.setText(""); jComboBox1.removeAllItems(); jComboBox2.setSelectedIndex(0); jTextArea1.setText(""); jList2.setListData(new Object[] {}); theme.reset(); currCategory = "--all--"; DefaultTableModel dtm = (DefaultTableModel) jTable1.getModel(); while(dtm.getRowCount()>0) dtm.removeRow(0); dtm = (DefaultTableModel) jTable2.getModel(); while(dtm.getRowCount()>0) dtm.removeRow(0); dtm = (DefaultTableModel) jTable3.getModel(); while(dtm.getRowCount()>0) dtm.removeRow(0); changeState(true); } private void loadThemeMetaData() { if(theme.name.trim().length()>0) jTextField1.setText(theme.name); if(theme.version.trim().length()>0) jTextField2.setText(theme.version); if(theme.creator.trim().length()>0) jTextField3.setText(theme.creator); if(theme.website.trim().length()>0) jTextField4.setText(theme.website); if(theme.donateURL.trim().length()>0) jTextField6.setText(theme.donateURL); if(theme.id.trim().length()>0) jTextField7.setText(theme.id); if(theme.description.trim().length()>0) jTextArea1.setText(theme.description); if(theme.screenshots.size()>0) updateSSList(); } private void loadTheme() { jComboBox1.removeAllItems(); List<String> versions = theme.controller.list(false); for(int i=0; i<versions.size(); i++) { jComboBox1.addItem("webOS " + versions.get(i)); } if(versions.size()>0) { jComboBox1.setSelectedIndex(0); currVersion = theme.controller.getVersion(versions.get(0)); loadVersion(false); } } private void loadVersion(boolean onlyCategoryChanged) { if(theme.controller.listVersions().size()==0) { return; } DefaultTableModel dtm = (DefaultTableModel) jTable1.getModel(); while(dtm.getRowCount()>0) { dtm.removeRow(0); } currFiles = currVersion.filesByCategory(currCategory); for(int i=0; i<currFiles.size(); i++) { if(!(currCategory.equals("wallpapers") && i==0)) { dtm.addRow(new Object[] {currFiles.get(i).file.getPath(), currFiles.get(i).dest}); } } if(!onlyCategoryChanged) { if(currVersion.wallpaper!=null) { jTextField5.setText(currVersion.wallpaper.getPath()); jTextField5.setCaretPosition(jTextField5.getText().length()); } else { jTextField5.setText(""); } dtm = (DefaultTableModel) jTable2.getModel(); while(dtm.getRowCount()>0) { dtm.removeRow(0); } currIcons = currVersion.icons; for(int i=0; i<currIcons.size(); i++) { dtm.addRow(new Object[] {currIcons.get(i).image.getPath(), currIcons.get(i).appID}); } } dtm = (DefaultTableModel) jTable3.getModel(); while(dtm.getRowCount()>0) { dtm.removeRow(0); } currPatches = currVersion.patchesByCategory(currCategory); for(int i=0; i<currPatches.size(); i++) { dtm.addRow(new Object[] {currPatches.get(i).file.getPath()}); } } private void loadCompatManager() { JFrame mainFrame = WebOSThemeBuilderApp.getApplication().getMainFrame(); compatBox = new CompatibleDevicesVersions(mainFrame, theme); compatBox.setLocationRelativeTo(mainFrame); WebOSThemeBuilderApp.getApplication().show(compatBox); } @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { mainPanel = new ImagePanel(bg); jLayeredPane1 = new javax.swing.JLayeredPane(); jLayeredPane2 = new TranslucentPanel(); jLabel2 = new javax.swing.JLabel(); jTextField4 = new javax.swing.JTextField(); jScrollPane3 = new javax.swing.JScrollPane(); jTextArea1 = new javax.swing.JTextArea(); jButton2 = new javax.swing.JButton(); jLabel5 = new javax.swing.JLabel(); jButton1 = new javax.swing.JButton(); jLabel11 = new javax.swing.JLabel(); jScrollPane2 = new javax.swing.JScrollPane(); jList2 = new javax.swing.JList(); jLabel1 = new javax.swing.JLabel(); jLabel3 = new javax.swing.JLabel(); jTextField7 = new javax.swing.JTextField(); jLabel7 = new javax.swing.JLabel(); jLabel4 = new javax.swing.JLabel(); jTextField3 = new javax.swing.JTextField(); jLabel8 = new javax.swing.JLabel(); jTextField1 = new javax.swing.JTextField(); jTextField2 = new javax.swing.JTextField(); jTextField6 = new javax.swing.JTextField(); jButton3 = new javax.swing.JButton(); jLayeredPane3 = new TranslucentPanel(); jTabbedPane1 = new javax.swing.JTabbedPane(); jLayeredPane4 = new javax.swing.JLayeredPane(); jScrollPane1 = new javax.swing.JScrollPane(); jTable1 = new javax.swing.JTable(); jLayeredPane5 = new javax.swing.JLayeredPane(); jScrollPane4 = new javax.swing.JScrollPane(); jTable2 = new javax.swing.JTable(); jLayeredPane6 = new javax.swing.JLayeredPane(); jScrollPane5 = new javax.swing.JScrollPane(); jTable3 = new javax.swing.JTable(); jButton6 = new javax.swing.JButton(); jSeparator2 = new javax.swing.JSeparator(); jLabel9 = new javax.swing.JLabel(); jComboBox2 = new javax.swing.JComboBox(); jLabel6 = new javax.swing.JLabel(); jTextField5 = new javax.swing.JTextField(); jComboBox1 = new javax.swing.JComboBox(); jLabel10 = new javax.swing.JLabel(); jButton4 = new javax.swing.JButton(); jButton5 = new javax.swing.JButton(); jButton7 = new javax.swing.JButton(); menuBar = new javax.swing.JMenuBar(); javax.swing.JMenu fileMenu = new javax.swing.JMenu(); jMenuItem1 = new javax.swing.JMenuItem(); jMenuItem2 = new javax.swing.JMenuItem(); jSeparator1 = new javax.swing.JSeparator(); javax.swing.JMenuItem exitMenuItem = new javax.swing.JMenuItem(); jMenu1 = new javax.swing.JMenu(); jMenuItem4 = new javax.swing.JMenuItem(); javax.swing.JMenu helpMenu = new javax.swing.JMenu(); javax.swing.JMenuItem aboutMenuItem = new javax.swing.JMenuItem(); mainPanel.setName("mainPanel"); // NOI18N jLayeredPane1.setName("jLayeredPane1"); // NOI18N jLayeredPane2.setBorder(javax.swing.BorderFactory.createEtchedBorder()); jLayeredPane2.setName("jLayeredPane2"); // NOI18N org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(ca.canucksoftware.themebuilder.WebOSThemeBuilderApp.class).getContext().getResourceMap(MainView.class); jLabel2.setFont(resourceMap.getFont("jLabel2.font")); // NOI18N jLabel2.setText(resourceMap.getString("jLabel2.text")); // NOI18N jLabel2.setName("jLabel2"); // NOI18N jLabel2.setBounds(10, 40, 70, 20); jLayeredPane2.add(jLabel2, javax.swing.JLayeredPane.DEFAULT_LAYER); jTextField4.setText(resourceMap.getString("jTextField4.text")); // NOI18N jTextField4.setName("jTextField4"); // NOI18N jTextField4.setBounds(110, 100, 250, 22); jLayeredPane2.add(jTextField4, javax.swing.JLayeredPane.DEFAULT_LAYER); jScrollPane3.setName("jScrollPane3"); // NOI18N jTextArea1.setColumns(20); jTextArea1.setFont(resourceMap.getFont("jTextArea1.font")); // NOI18N jTextArea1.setLineWrap(true); jTextArea1.setRows(4); jTextArea1.setWrapStyleWord(true); jTextArea1.setName("jTextArea1"); // NOI18N jScrollPane3.setViewportView(jTextArea1); jScrollPane3.setBounds(370, 65, 250, 85); jLayeredPane2.add(jScrollPane3, javax.swing.JLayeredPane.DEFAULT_LAYER); jButton2.setBackground(resourceMap.getColor("jButton2.background")); // NOI18N jButton2.setIcon(resourceMap.getIcon("jButton2.icon")); // NOI18N jButton2.setName("jButton2"); // NOI18N jButton2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton2ActionPerformed(evt); } }); jButton2.setBounds(850, 40, 30, 30); jLayeredPane2.add(jButton2, javax.swing.JLayeredPane.DEFAULT_LAYER); jLabel5.setFont(resourceMap.getFont("jLabel5.font")); // NOI18N jLabel5.setText(resourceMap.getString("jLabel5.text")); // NOI18N jLabel5.setName("jLabel5"); // NOI18N jLabel5.setBounds(370, 35, 100, 30); jLayeredPane2.add(jLabel5, javax.swing.JLayeredPane.DEFAULT_LAYER); jButton1.setBackground(resourceMap.getColor("jButton1.background")); // NOI18N jButton1.setIcon(resourceMap.getIcon("jButton1.icon")); // NOI18N jButton1.setText(resourceMap.getString("jButton1.text")); // NOI18N jButton1.setName("jButton1"); // NOI18N jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt); } }); jButton1.setBounds(850, 80, 30, 30); jLayeredPane2.add(jButton1, javax.swing.JLayeredPane.DEFAULT_LAYER); jLabel11.setFont(resourceMap.getFont("jLabel11.font")); // NOI18N jLabel11.setText(resourceMap.getString("jLabel11.text")); // NOI18N jLabel11.setName("jLabel11"); // NOI18N jLabel11.setBounds(370, 10, 80, 20); jLayeredPane2.add(jLabel11, javax.swing.JLayeredPane.DEFAULT_LAYER); jScrollPane2.setName("jScrollPane2"); // NOI18N jList2.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); jList2.setName("jList2"); // NOI18N jScrollPane2.setViewportView(jList2); jScrollPane2.setBounds(640, 40, 200, 110); jLayeredPane2.add(jScrollPane2, javax.swing.JLayeredPane.DEFAULT_LAYER); jLabel1.setFont(resourceMap.getFont("jLabel1.font")); // NOI18N jLabel1.setText(resourceMap.getString("jLabel1.text")); // NOI18N jLabel1.setName("jLabel1"); // NOI18N jLabel1.setBounds(10, 10, 90, 20); jLayeredPane2.add(jLabel1, javax.swing.JLayeredPane.DEFAULT_LAYER); jLabel3.setFont(resourceMap.getFont("jLabel3.font")); // NOI18N jLabel3.setText(resourceMap.getString("jLabel3.text")); // NOI18N jLabel3.setName("jLabel3"); // NOI18N jLabel3.setBounds(10, 70, 80, 20); jLayeredPane2.add(jLabel3, javax.swing.JLayeredPane.DEFAULT_LAYER); jTextField7.setBackground(resourceMap.getColor("jTextField7.background")); // NOI18N jTextField7.setName("jTextField7"); // NOI18N jTextField7.setBounds(450, 10, 170, 22); jLayeredPane2.add(jTextField7, javax.swing.JLayeredPane.DEFAULT_LAYER); jLabel7.setFont(resourceMap.getFont("jLabel7.font")); // NOI18N jLabel7.setText(resourceMap.getString("jLabel7.text")); // NOI18N jLabel7.setName("jLabel7"); // NOI18N jLabel7.setBounds(640, 10, 190, 30); jLayeredPane2.add(jLabel7, javax.swing.JLayeredPane.DEFAULT_LAYER); jLabel4.setFont(resourceMap.getFont("jLabel4.font")); // NOI18N jLabel4.setText(resourceMap.getString("jLabel4.text")); // NOI18N jLabel4.setName("jLabel4"); // NOI18N jLabel4.setBounds(10, 100, 80, 20); jLayeredPane2.add(jLabel4, javax.swing.JLayeredPane.DEFAULT_LAYER); jTextField3.setText(resourceMap.getString("jTextField3.text")); // NOI18N jTextField3.setName("jTextField3"); // NOI18N jTextField3.setBounds(110, 70, 200, 22); jLayeredPane2.add(jTextField3, javax.swing.JLayeredPane.DEFAULT_LAYER); jLabel8.setFont(resourceMap.getFont("jLabel8.font")); // NOI18N jLabel8.setText(resourceMap.getString("jLabel8.text")); // NOI18N jLabel8.setName("jLabel8"); // NOI18N jLabel8.setBounds(10, 130, 100, 20); jLayeredPane2.add(jLabel8, javax.swing.JLayeredPane.DEFAULT_LAYER); jTextField1.setText(resourceMap.getString("jTextField1.text")); // NOI18N jTextField1.setName("jTextField1"); // NOI18N jTextField1.setBounds(110, 10, 200, 22); jLayeredPane2.add(jTextField1, javax.swing.JLayeredPane.DEFAULT_LAYER); jTextField2.setText(resourceMap.getString("jTextField2.text")); // NOI18N jTextField2.setName("jTextField2"); // NOI18N jTextField2.setBounds(110, 40, 80, 22); jLayeredPane2.add(jTextField2, javax.swing.JLayeredPane.DEFAULT_LAYER); jTextField6.setName("jTextField6"); // NOI18N jTextField6.setBounds(110, 130, 250, 22); jLayeredPane2.add(jTextField6, javax.swing.JLayeredPane.DEFAULT_LAYER); jLayeredPane2.setBounds(10, 10, 900, 160); jLayeredPane1.add(jLayeredPane2, javax.swing.JLayeredPane.DEFAULT_LAYER); jButton3.setBackground(resourceMap.getColor("jButton3.background")); // NOI18N jButton3.setFont(resourceMap.getFont("jButton3.font")); // NOI18N jButton3.setText(resourceMap.getString("jButton3.text")); // NOI18N jButton3.setName("jButton3"); // NOI18N jButton3.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton3ActionPerformed(evt); } }); jButton3.setBounds(380, 620, 170, 30); jLayeredPane1.add(jButton3, javax.swing.JLayeredPane.DEFAULT_LAYER); jLayeredPane3.setBorder(javax.swing.BorderFactory.createEtchedBorder()); jLayeredPane3.setName("jLayeredPane3"); // NOI18N jTabbedPane1.setBackground(resourceMap.getColor("jTabbedPane1.background")); // NOI18N jTabbedPane1.setName("jTabbedPane1"); // NOI18N jTabbedPane1.setOpaque(true); jTabbedPane1.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent evt) { jTabbedPane1StateChanged(evt); } }); jLayeredPane4.setBackground(resourceMap.getColor("jLayeredPane4.background")); // NOI18N jLayeredPane4.setName("jLayeredPane4"); // NOI18N jLayeredPane4.setOpaque(true); jScrollPane1.setName("jScrollPane1"); // NOI18N jTable1.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { }, new String [] { "File", "Destination on Device" } ) { Class[] types = new Class [] { java.lang.String.class, java.lang.String.class }; boolean[] canEdit = new boolean [] { false, false }; public Class getColumnClass(int columnIndex) { return types [columnIndex]; } public boolean isCellEditable(int rowIndex, int columnIndex) { return canEdit [columnIndex]; } }); jTable1.setFillsViewportHeight(true); jTable1.setName("jTable1"); // NOI18N jTable1.getTableHeader().setReorderingAllowed(false); jTable1.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { jTable1MouseClicked(evt); } }); jScrollPane1.setViewportView(jTable1); jTable1.getColumnModel().getColumn(0).setHeaderValue(resourceMap.getString("jTable1.columnModel.title0")); // NOI18N jTable1.getColumnModel().getColumn(1).setHeaderValue(resourceMap.getString("jTable1.columnModel.title1")); // NOI18N jScrollPane1.setBounds(20, 10, 760, 280); jLayeredPane4.add(jScrollPane1, javax.swing.JLayeredPane.DEFAULT_LAYER); jTabbedPane1.addTab("Files to Replace", jLayeredPane4); jLayeredPane5.setBackground(resourceMap.getColor("jLayeredPane5.background")); // NOI18N jLayeredPane5.setName("jLayeredPane5"); // NOI18N jLayeredPane5.setOpaque(true); jScrollPane4.setName("jScrollPane4"); // NOI18N jTable2.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { }, new String [] { "Image File", "Application ID" } ) { Class[] types = new Class [] { java.lang.String.class, java.lang.String.class }; boolean[] canEdit = new boolean [] { false, false }; public Class getColumnClass(int columnIndex) { return types [columnIndex]; } public boolean isCellEditable(int rowIndex, int columnIndex) { return canEdit [columnIndex]; } }); jTable2.setFillsViewportHeight(true); jTable2.setName("jTable2"); // NOI18N jTable2.getTableHeader().setReorderingAllowed(false); jTable2.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { jTable2MouseClicked(evt); } }); jScrollPane4.setViewportView(jTable2); jTable2.getColumnModel().getColumn(0).setHeaderValue(resourceMap.getString("jTable2.columnModel.title0")); // NOI18N jTable2.getColumnModel().getColumn(1).setHeaderValue(resourceMap.getString("jTable2.columnModel.title1")); // NOI18N jScrollPane4.setBounds(20, 10, 760, 280); jLayeredPane5.add(jScrollPane4, javax.swing.JLayeredPane.DEFAULT_LAYER); jTabbedPane1.addTab("App Icons", jLayeredPane5); jLayeredPane6.setBackground(resourceMap.getColor("jLayeredPane6.background")); // NOI18N jLayeredPane6.setName("jLayeredPane6"); // NOI18N jLayeredPane6.setOpaque(true); jScrollPane5.setName("jScrollPane5"); // NOI18N jTable3.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { }, new String [] { "Patch File" } ) { Class[] types = new Class [] { java.lang.String.class }; boolean[] canEdit = new boolean [] { false }; public Class getColumnClass(int columnIndex) { return types [columnIndex]; } public boolean isCellEditable(int rowIndex, int columnIndex) { return canEdit [columnIndex]; } }); jTable3.setFillsViewportHeight(true); jTable3.setName("jTable3"); // NOI18N jTable3.getTableHeader().setReorderingAllowed(false); jTable3.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { jTable3MouseClicked(evt); } }); jScrollPane5.setViewportView(jTable3); jTable3.getColumnModel().getColumn(0).setHeaderValue(resourceMap.getString("jTable3.columnModel.title0")); // NOI18N jScrollPane5.setBounds(20, 10, 760, 280); jLayeredPane6.add(jScrollPane5, javax.swing.JLayeredPane.DEFAULT_LAYER); jTabbedPane1.addTab("Patches", jLayeredPane6); jTabbedPane1.setBounds(20, 90, 800, 330); jLayeredPane3.add(jTabbedPane1, javax.swing.JLayeredPane.DEFAULT_LAYER); jButton6.setBackground(resourceMap.getColor("jButton6.background")); // NOI18N jButton6.setIcon(resourceMap.getIcon("jButton6.icon")); // NOI18N jButton6.setIconTextGap(0); jButton6.setMargin(new java.awt.Insets(0, 2, 2, 2)); jButton6.setName("jButton6"); // NOI18N jButton6.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton6ActionPerformed(evt); } }); jButton6.setBounds(840, 250, 40, 40); jLayeredPane3.add(jButton6, javax.swing.JLayeredPane.DEFAULT_LAYER); jSeparator2.setName("jSeparator2"); // NOI18N jSeparator2.setBounds(20, 50, 860, 20); jLayeredPane3.add(jSeparator2, javax.swing.JLayeredPane.DEFAULT_LAYER); jLabel9.setFont(resourceMap.getFont("jLabel9.font")); // NOI18N jLabel9.setText(resourceMap.getString("jLabel9.text")); // NOI18N jLabel9.setName("jLabel9"); // NOI18N jLabel9.setBounds(370, 10, 90, 30); jLayeredPane3.add(jLabel9, javax.swing.JLayeredPane.DEFAULT_LAYER); jComboBox2.setBackground(resourceMap.getColor("jComboBox2.background")); // NOI18N jComboBox2.setMaximumRowCount(14); jComboBox2.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "--All--", "App Icons", "App Launcher", "Applications", "Boot Logo", "Enyo Widgets", "Exhibition", "Just Type", "Keyboard", "Lock Screen", "Quick Launcher", "Status Bar", "System Menus", "Wallpapers" })); jComboBox2.setName("jComboBox2"); // NOI18N jComboBox2.addPopupMenuListener(new javax.swing.event.PopupMenuListener() { public void popupMenuCanceled(javax.swing.event.PopupMenuEvent evt) { } public void popupMenuWillBecomeInvisible(javax.swing.event.PopupMenuEvent evt) { jComboBox2PopupMenuWillBecomeInvisible(evt); } public void popupMenuWillBecomeVisible(javax.swing.event.PopupMenuEvent evt) { } }); jComboBox2.setBounds(460, 15, 130, 20); jLayeredPane3.add(jComboBox2, javax.swing.JLayeredPane.DEFAULT_LAYER); jLabel6.setFont(resourceMap.getFont("jLabel6.font")); // NOI18N jLabel6.setText(resourceMap.getString("jLabel6.text")); // NOI18N jLabel6.setName("jLabel6"); // NOI18N jLabel6.setBounds(20, 60, 150, 20); jLayeredPane3.add(jLabel6, javax.swing.JLayeredPane.DEFAULT_LAYER); jTextField5.setName("jTextField5"); // NOI18N jTextField5.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(java.awt.event.MouseEvent evt) { jTextField5MousePressed(evt); } }); jTextField5.setBounds(170, 60, 630, 22); jLayeredPane3.add(jTextField5, javax.swing.JLayeredPane.DEFAULT_LAYER); jComboBox1.setBackground(resourceMap.getColor("jComboBox1.background")); // NOI18N jComboBox1.setName("jComboBox1"); // NOI18N jComboBox1.addPopupMenuListener(new javax.swing.event.PopupMenuListener() { public void popupMenuCanceled(javax.swing.event.PopupMenuEvent evt) { } public void popupMenuWillBecomeInvisible(javax.swing.event.PopupMenuEvent evt) { jComboBox1PopupMenuWillBecomeInvisible(evt); } public void popupMenuWillBecomeVisible(javax.swing.event.PopupMenuEvent evt) { jComboBox1PopupMenuWillBecomeVisible(evt); } }); jComboBox1.setBounds(200, 15, 140, 20); jLayeredPane3.add(jComboBox1, javax.swing.JLayeredPane.DEFAULT_LAYER); jLabel10.setFont(resourceMap.getFont("jLabel10.font")); // NOI18N jLabel10.setText(resourceMap.getString("jLabel10.text")); // NOI18N jLabel10.setName("jLabel10"); // NOI18N jLabel10.setBounds(20, 10, 180, 30); jLayeredPane3.add(jLabel10, javax.swing.JLayeredPane.DEFAULT_LAYER); jButton4.setBackground(resourceMap.getColor("jButton4.background")); // NOI18N jButton4.setFont(resourceMap.getFont("jButton4.font")); // NOI18N jButton4.setText(resourceMap.getString("jButton4.text")); // NOI18N jButton4.setName("jButton4"); // NOI18N jButton4.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton4ActionPerformed(evt); } }); jButton4.setBounds(640, 10, 240, 30); jLayeredPane3.add(jButton4, javax.swing.JLayeredPane.DEFAULT_LAYER); jButton5.setBackground(resourceMap.getColor("jButton5.background")); // NOI18N jButton5.setIcon(resourceMap.getIcon("jButton5.icon")); // NOI18N jButton5.setName("jButton5"); // NOI18N jButton5.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton5ActionPerformed(evt); } }); jButton5.setBounds(840, 190, 40, 40); jLayeredPane3.add(jButton5, javax.swing.JLayeredPane.DEFAULT_LAYER); jButton7.setBackground(resourceMap.getColor("jButton7.background")); // NOI18N jButton7.setIcon(resourceMap.getIcon("jButton7.icon")); // NOI18N jButton7.setName("jButton7"); // NOI18N jButton7.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton7ActionPerformed(evt); } }); jButton7.setBounds(840, 130, 40, 40); jLayeredPane3.add(jButton7, javax.swing.JLayeredPane.DEFAULT_LAYER); jLayeredPane3.setBounds(10, 180, 900, 430); jLayeredPane1.add(jLayeredPane3, javax.swing.JLayeredPane.DEFAULT_LAYER); javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel); mainPanel.setLayout(mainPanelLayout); mainPanelLayout.setHorizontalGroup( mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLayeredPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 919, Short.MAX_VALUE) ); mainPanelLayout.setVerticalGroup( mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLayeredPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 663, Short.MAX_VALUE) ); menuBar.setName("menuBar"); // NOI18N fileMenu.setText(resourceMap.getString("fileMenu.text")); // NOI18N fileMenu.setName("fileMenu"); // NOI18N jMenuItem1.setText(resourceMap.getString("jMenuItem1.text")); // NOI18N jMenuItem1.setName("jMenuItem1"); // NOI18N jMenuItem1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem1ActionPerformed(evt); } }); fileMenu.add(jMenuItem1); jMenuItem2.setText(resourceMap.getString("jMenuItem2.text")); // NOI18N jMenuItem2.setName("jMenuItem2"); // NOI18N jMenuItem2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem2ActionPerformed(evt); } }); fileMenu.add(jMenuItem2); jSeparator1.setName("jSeparator1"); // NOI18N fileMenu.add(jSeparator1); javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance(ca.canucksoftware.themebuilder.WebOSThemeBuilderApp.class).getContext().getActionMap(MainView.class, this); exitMenuItem.setAction(actionMap.get("quit")); // NOI18N exitMenuItem.setName("exitMenuItem"); // NOI18N fileMenu.add(exitMenuItem); menuBar.add(fileMenu); jMenu1.setText(resourceMap.getString("jMenu1.text")); // NOI18N jMenu1.setName("jMenu1"); // NOI18N jMenuItem4.setText(resourceMap.getString("jMenuItem4.text")); // NOI18N jMenuItem4.setName("jMenuItem4"); // NOI18N jMenuItem4.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem4ActionPerformed(evt); } }); jMenu1.add(jMenuItem4); menuBar.add(jMenu1); helpMenu.setText(resourceMap.getString("helpMenu.text")); // NOI18N helpMenu.setName("helpMenu"); // NOI18N aboutMenuItem.setAction(actionMap.get("showAboutBox")); // NOI18N aboutMenuItem.setText(resourceMap.getString("aboutMenuItem.text")); // NOI18N aboutMenuItem.setName("aboutMenuItem"); // NOI18N helpMenu.add(aboutMenuItem); menuBar.add(helpMenu); setComponent(mainPanel); setMenuBar(menuBar); }// </editor-fold>//GEN-END:initComponents //tab changed private void jTabbedPane1StateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_jTabbedPane1StateChanged if(pageLoaded) { jLayeredPane1.requestFocus(); if(jTabbedPane1.getSelectedIndex()==2) { jLabel9.setVisible(true); jComboBox2.setVisible(true); jComboBox2.setEnabled(true); jButton6.setContentAreaFilled(true); jButton6.setBorderPainted(true); jButton6.setEnabled(true); jButton6.setText(""); jButton6.setIcon(new ImageIcon(getClass().getResource("resources/new.png"))); } else { if(jTabbedPane1.getSelectedIndex()==1) { jLabel9.setVisible(false); jComboBox2.setEnabled(false); jComboBox2.setVisible(false); } else { jLabel9.setVisible(true); jComboBox2.setVisible(true); jComboBox2.setEnabled(true); } jButton6.setContentAreaFilled(false); jButton6.setBorderPainted(false); jButton6.setEnabled(false); jButton6.setIcon(null); jButton6.setText(" "); } } }//GEN-LAST:event_jTabbedPane1StateChanged //add screenshot private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed File f = loadFileChooser(new SSChooseFilter(), false); jLayeredPane1.requestFocus(); if(f!=null) { theme.screenshots.add(f); updateSSList(); } }//GEN-LAST:event_jButton2ActionPerformed //remove screenshot private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed jLayeredPane1.requestFocus(); theme.screenshots.remove(jList2.getSelectedIndex()); updateSSList(); }//GEN-LAST:event_jButton1ActionPerformed //select wallpaper private void jTextField5MousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTextField5MousePressed if(pageLoaded && theme.controller.listVersions().size()==0) { loadCompatManager(); loadTheme(); if(theme.controller.listVersions().size()==0) { return; } } File f = loadFileChooser(new WallpaperChooseFilter(), false); jLayeredPane1.requestFocus(); if(f!=null) { currVersion.wallpaper = f; jTextField5.setText(f.getPath()); jTextField5.setCaretPosition(jTextField5.getText().length()); } }//GEN-LAST:event_jTextField5MousePressed //create new patch private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton6ActionPerformed if(pageLoaded && theme.controller.listVersions().size()==0) { loadCompatManager(); loadTheme(); if(theme.controller.listVersions().size()==0) { return; } } JFrame mainFrame = WebOSThemeBuilderApp.getApplication().getMainFrame(); createPatchBox = new CreatePatch(mainFrame, currVersion.version, theme.controller.list(false), currCategory); createPatchBox.setLocationRelativeTo(mainFrame); createPatchBox.prevDir = prevDir; WebOSThemeBuilderApp.getApplication().show(createPatchBox); if(createPatchBox.patch!=null) { if(currVersion.version.equals(createPatchBox.version)) { DefaultTableModel dtm = (DefaultTableModel) jTable3.getModel(); PatchEntry entry = new PatchEntry(createPatchBox.patch, createPatchBox.category); currVersion.patches.add(entry); if(!currCategory.equals("--all--")) { currPatches.add(entry); } dtm.addRow(new Object[] {createPatchBox.patch.getPath()}); } else { theme.controller.getVersion(createPatchBox.version).patches .add(new PatchEntry(createPatchBox.patch, createPatchBox.category)); } } }//GEN-LAST:event_jButton6ActionPerformed //add file, icon, or patch private void jButton7ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton7ActionPerformed if(pageLoaded && theme.controller.listVersions().size()==0) { loadCompatManager(); loadTheme(); if(theme.controller.listVersions().size()==0) { return; } } JFrame mainFrame = WebOSThemeBuilderApp.getApplication().getMainFrame(); DefaultTableModel dtm; if(jTabbedPane1.getSelectedIndex()==0) { //file add fileBox = new AddFile(mainFrame, null, currVersion.version, theme.controller.list(false), currCategory); fileBox.setLocationRelativeTo(mainFrame); fileBox.prevDir = prevDir; WebOSThemeBuilderApp.getApplication().show(fileBox); if(fileBox.item!=null) { if(currVersion.version.equals(fileBox.version)) { dtm = (DefaultTableModel) jTable1.getModel(); currVersion.files.add(fileBox.item); if(!currCategory.equals("--all--")) { if(currCategory.equals(bulkBox.category)) { currFiles.add(fileBox.item); dtm.addRow(new Object[] {fileBox.item.file.getPath(), fileBox.item.dest}); } } else { dtm.addRow(new Object[] {fileBox.item.file.getPath(), fileBox.item.dest}); } } else { theme.controller.getVersion(fileBox.version).files.add(fileBox.item); } } } else if(jTabbedPane1.getSelectedIndex()==1) { // icon add iconBox = new AddIcon(mainFrame, null, currVersion.version, theme.controller.list(false)); iconBox.setLocationRelativeTo(mainFrame); iconBox.prevDir = prevDir; WebOSThemeBuilderApp.getApplication().show(iconBox); if(iconBox.item!=null) { if(currVersion.version.equals(iconBox.version)) { dtm = (DefaultTableModel) jTable2.getModel(); currVersion.icons.add(iconBox.item); dtm.addRow(new Object[] {iconBox.item.image.getPath(), iconBox.item.appID}); } else { theme.controller.getVersion(iconBox.version).icons.add(iconBox.item); } } } else if(jTabbedPane1.getSelectedIndex()==2) { //patch add patchBox = new AddPatch(mainFrame, null, currVersion.version, theme.controller.list(false), currCategory); patchBox.setLocationRelativeTo(mainFrame); patchBox.prevDir = prevDir; WebOSThemeBuilderApp.getApplication().show(patchBox); if(patchBox.item!=null) { if(currVersion.version.equals(patchBox.version)) { dtm = (DefaultTableModel) jTable3.getModel(); currVersion.patches.add(patchBox.item); if(!currCategory.equals("--all--")) { if(currCategory.equals(bulkBox.category)) { currPatches.add(patchBox.item); dtm.addRow(new Object[] {patchBox.item.file.getPath()}); } } else { dtm.addRow(new Object[] {patchBox.item.file.getPath()}); } } else { theme.controller.getVersion(patchBox.version).patches.add(patchBox.item); } } } }//GEN-LAST:event_jButton7ActionPerformed //remove file, icon, or patch private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton5ActionPerformed if(pageLoaded && theme.controller.listVersions().size()==0) { loadCompatManager(); loadTheme(); if(theme.controller.listVersions().size()==0) { return; } } DefaultTableModel dtm; int i; if(jTabbedPane1.getSelectedIndex()==0) { //file remove dtm = (DefaultTableModel) jTable1.getModel(); i = jTable1.getSelectedRow(); if(i>-1) { dtm.removeRow(i); if(!currCategory.equals("--all--")) { currVersion.files.remove(currFiles.get(i)); } currFiles.remove(i); } } else if(jTabbedPane1.getSelectedIndex()==1) { // icon remove dtm = (DefaultTableModel) jTable2.getModel(); i = jTable2.getSelectedRow(); if(i>-1) { dtm.removeRow(i); currIcons.remove(i); } } else if(jTabbedPane1.getSelectedIndex()==2) { //patch remove dtm = (DefaultTableModel) jTable3.getModel(); i = jTable3.getSelectedRow(); if(i>-1) { dtm.removeRow(i); if(!currCategory.equals("--all--")) { currVersion.patches.remove(currPatches.get(i)); } currPatches.remove(i); } } }//GEN-LAST:event_jButton5ActionPerformed //build zip theme private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton3ActionPerformed //zip file theme build if(infoGood()) { theme.id = jTextField7.getText(); File zip = loadFileChooser(new ZipChooseFilter(), true); if(zip!=null) { theme.name = jTextField1.getText(); theme.version = jTextField2.getText(); theme.creator = jTextField3.getText(); theme.website = jTextField4.getText(); theme.donateURL = jTextField6.getText(); theme.description = jTextArea1.getText(); if(!zip.getName().endsWith(".zip")) { try { zip = new File(zip.getCanonicalPath() + ".zip"); } catch(Exception e) {} } changeState(false); theme.buildZip(zip); if(zip.exists()) { JOptionPane.showMessageDialog(mainPanel, "Theme zip built!"); } changeState(true); } } }//GEN-LAST:event_jButton3ActionPerformed //open zip theme private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem1ActionPerformed File open = loadFileChooser(new ZipChooseFilter(), false); if(open!=null) { this.changeState(false); t.schedule(new DoZipOpen(open), 50); } }//GEN-LAST:event_jMenuItem1ActionPerformed //bulk add private void jMenuItem4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem4ActionPerformed if(pageLoaded && theme.controller.listVersions().size()==0) { loadCompatManager(); loadTheme(); if(theme.controller.listVersions().size()==0) { return; } } JFrame mainFrame = WebOSThemeBuilderApp.getApplication().getMainFrame(); bulkBox = new BulkAdd(mainFrame, currVersion.version, theme.controller.list(false), currCategory); bulkBox.setLocationRelativeTo(mainFrame); bulkBox.prevDir = prevDir; WebOSThemeBuilderApp.getApplication().show(bulkBox); if(bulkBox.files!=null) { if(currVersion.version.equals(bulkBox.version)) { DefaultTableModel dtm = (DefaultTableModel) jTable1.getModel(); for(int i=0; i<bulkBox.files.size(); i++) { FileEntry fe = new FileEntry(bulkBox.dest + getFilename(bulkBox.files.get(i)), bulkBox.files.get(i), bulkBox.category); currVersion.files.add(fe); if(!currCategory.equals("--all--")) { if(currCategory.equals(bulkBox.category)) { currFiles.add(fe); dtm.addRow(new Object[] {fe.file.getPath(), fe.dest}); } } else { dtm.addRow(new Object[] {fe.file.getPath(), fe.dest}); } } } else { VersionTheme otherVer = theme.controller.getVersion(bulkBox.version); for(int i=0; i<bulkBox.files.size(); i++) { FileEntry fe = new FileEntry(bulkBox.dest + getFilename(bulkBox.files.get(i)), bulkBox.files.get(i), bulkBox.category); otherVer.files.add(fe); } } } }//GEN-LAST:event_jMenuItem4ActionPerformed //double-click to edit file entry private void jTable1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTable1MouseClicked int index = jTable1.getSelectedRow(); if(evt.getClickCount()>=2 && index>-1) { JFrame mainFrame = WebOSThemeBuilderApp.getApplication().getMainFrame(); fileBox = new AddFile(mainFrame, currFiles.get(index), currVersion.version, theme.controller.list(false), currCategory); fileBox.setLocationRelativeTo(mainFrame); fileBox.prevDir = prevDir; WebOSThemeBuilderApp.getApplication().show(fileBox); if(fileBox.item!=null) { DefaultTableModel dtm = (DefaultTableModel) jTable1.getModel(); if(currVersion.version.equals(fileBox.version)) { if(!currCategory.equals("--all--")) { if(currCategory.equals(fileBox.item.category)) { dtm.setValueAt(fileBox.item.file.getPath(), index, 0); dtm.setValueAt(fileBox.item.dest, index, 1); } else { currFiles.remove(fileBox.item); dtm.removeRow(index); } } else { dtm.setValueAt(fileBox.item.file.getPath(), index, 0); dtm.setValueAt(fileBox.item.dest, index, 1); } } else { dtm.removeRow(index); currVersion.files.remove(fileBox.item); if(!currCategory.equals("--all--")) { currFiles.remove(fileBox.item); } theme.controller.getVersion(fileBox.version).files.add(fileBox.item); } } } }//GEN-LAST:event_jTable1MouseClicked //double-click to edit icon entry private void jTable2MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTable2MouseClicked int index = jTable2.getSelectedRow(); if(evt.getClickCount()>=2 && index>-1) { JFrame mainFrame = WebOSThemeBuilderApp.getApplication().getMainFrame(); iconBox = new AddIcon(mainFrame, currVersion.icons.get(index), currVersion.version, theme.controller.list(false)); iconBox.setLocationRelativeTo(mainFrame); iconBox.prevDir = prevDir; WebOSThemeBuilderApp.getApplication().show(iconBox); if(iconBox.item!=null) { DefaultTableModel dtm = (DefaultTableModel) jTable2.getModel(); if(currVersion.version.equals(iconBox.version)) { dtm.setValueAt(iconBox.item.image.getPath(), index, 0); dtm.setValueAt(iconBox.item.appID, index, 1); } else { dtm.removeRow(index); currVersion.icons.remove(iconBox.item); theme.controller.getVersion(iconBox.version).icons.add(iconBox.item); } } } }//GEN-LAST:event_jTable2MouseClicked //double-click to edit patch entry private void jTable3MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTable3MouseClicked int index = jTable3.getSelectedRow(); if(evt.getClickCount()>=2 && index>-1) { JFrame mainFrame = WebOSThemeBuilderApp.getApplication().getMainFrame(); patchBox = new AddPatch(mainFrame, currPatches.get(index), currVersion.version, theme.controller.list(false), currCategory); patchBox.setLocationRelativeTo(mainFrame); patchBox.prevDir = prevDir; WebOSThemeBuilderApp.getApplication().show(patchBox); if(patchBox.item!=null) { DefaultTableModel dtm = (DefaultTableModel) jTable3.getModel(); if(currVersion.version.equals(patchBox.version)) { if(!currCategory.equals("--all--")) { if(currCategory.equals(patchBox.item.category)) { dtm.setValueAt(patchBox.item.file.getPath(), index, 0); } else { dtm.removeRow(index); currPatches.remove(patchBox.item); } } else { dtm.setValueAt(patchBox.item.file.getPath(), index, 0); } } else { dtm.removeRow(index); currVersion.patches.remove(patchBox.item); if(!currCategory.equals("--all--")) { currPatches.remove(patchBox.item); } theme.controller.getVersion(patchBox.version).patches.add(patchBox.item); } } } }//GEN-LAST:event_jTable3MouseClicked //reset private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem2ActionPerformed reset(); loadTheme(); }//GEN-LAST:event_jMenuItem2ActionPerformed //show compatible devices/versions manager if needed private void jComboBox1PopupMenuWillBecomeVisible(javax.swing.event.PopupMenuEvent evt) {//GEN-FIRST:event_jComboBox1PopupMenuWillBecomeVisible new Thread() { @Override public void run() { if(pageLoaded && theme.controller.listVersions().size()==0) { getFrame().requestFocus(); loadCompatManager(); loadTheme(); } } }.start(); }//GEN-LAST:event_jComboBox1PopupMenuWillBecomeVisible //compatible devices/versions manager private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton4ActionPerformed loadCompatManager(); loadTheme(); }//GEN-LAST:event_jButton4ActionPerformed //changed version private void jComboBox1PopupMenuWillBecomeInvisible(javax.swing.event.PopupMenuEvent evt) {//GEN-FIRST:event_jComboBox1PopupMenuWillBecomeInvisible new Thread() { @Override public void run() { if(pageLoaded && theme.controller.listVersions().size()!=0) { currCategory = "--all--"; jComboBox2.setSelectedIndex(0); currVersion = theme.controller.getVersion(((String) jComboBox1.getSelectedItem()).replace("webOS ", "")); loadVersion(false); } } }.start(); }//GEN-LAST:event_jComboBox1PopupMenuWillBecomeInvisible //changed category private void jComboBox2PopupMenuWillBecomeInvisible(javax.swing.event.PopupMenuEvent evt) {//GEN-FIRST:event_jComboBox2PopupMenuWillBecomeInvisible new Thread() { @Override public void run() { if(pageLoaded) { currCategory = ((String) jComboBox2.getSelectedItem()).toLowerCase().replaceAll(" ", "_"); loadVersion(true); } } }.start(); }//GEN-LAST:event_jComboBox2PopupMenuWillBecomeInvisible // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton jButton1; private javax.swing.JButton jButton2; private javax.swing.JButton jButton3; private javax.swing.JButton jButton4; private javax.swing.JButton jButton5; private javax.swing.JButton jButton6; private javax.swing.JButton jButton7; private javax.swing.JComboBox jComboBox1; private javax.swing.JComboBox jComboBox2; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel10; private javax.swing.JLabel jLabel11; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JLabel jLabel6; private javax.swing.JLabel jLabel7; private javax.swing.JLabel jLabel8; private javax.swing.JLabel jLabel9; private javax.swing.JLayeredPane jLayeredPane1; private javax.swing.JLayeredPane jLayeredPane2; private javax.swing.JLayeredPane jLayeredPane3; private javax.swing.JLayeredPane jLayeredPane4; private javax.swing.JLayeredPane jLayeredPane5; private javax.swing.JLayeredPane jLayeredPane6; private javax.swing.JList jList2; private javax.swing.JMenu jMenu1; private javax.swing.JMenuItem jMenuItem1; private javax.swing.JMenuItem jMenuItem2; private javax.swing.JMenuItem jMenuItem4; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JScrollPane jScrollPane3; private javax.swing.JScrollPane jScrollPane4; private javax.swing.JScrollPane jScrollPane5; private javax.swing.JSeparator jSeparator1; private javax.swing.JSeparator jSeparator2; private javax.swing.JTabbedPane jTabbedPane1; private javax.swing.JTable jTable1; private javax.swing.JTable jTable2; private javax.swing.JTable jTable3; private javax.swing.JTextArea jTextArea1; private javax.swing.JTextField jTextField1; private javax.swing.JTextField jTextField2; private javax.swing.JTextField jTextField3; private javax.swing.JTextField jTextField4; private javax.swing.JTextField jTextField5; private javax.swing.JTextField jTextField6; private javax.swing.JTextField jTextField7; private javax.swing.JPanel mainPanel; private javax.swing.JMenuBar menuBar; // End of variables declaration//GEN-END:variables private XmlImport xmlBox; private CompatibleDevicesVersions compatBox; private BulkAdd bulkBox; private JDialog aboutBox; private AddFile fileBox; private AddIcon iconBox; private CreatePatch createPatchBox; private AddPatch patchBox; private class DoDelayedLoad extends TimerTask { public void run() { loadTheme(); pageLoaded=true; } } private class DoZipOpen extends TimerTask { private File zip; public DoZipOpen(File f) { zip = f; } public void run() { try { pageLoaded = false; reset(); zipOutDir = theme.extractTheme(zip); if(!theme.isNewFormat(zipOutDir)) { JFrame mainFrame = WebOSThemeBuilderApp.getApplication().getMainFrame(); xmlBox = new XmlImport(mainFrame); xmlBox.setLocationRelativeTo(mainFrame); WebOSThemeBuilderApp.getApplication().show(xmlBox); if(xmlBox.version == null) { return; } theme.loadFromXML(zipOutDir, xmlBox.devices, xmlBox.version); } else { theme.loadFromJSON(zipOutDir); } loadThemeMetaData(); changeState(true); loadTheme(); } catch(Exception e) { changeState(true); e.printStackTrace(); } System.out.println(theme); pageLoaded = true; } } private class ImagePanel extends JPanel { private Image img; public ImagePanel(String img) { this(new ImageIcon(img).getImage()); } public ImagePanel(Image img) { this.img = img; Dimension size = new Dimension(img.getWidth(null), img.getHeight(null)); setPreferredSize(size); setMinimumSize(size); setMaximumSize(size); setSize(size); setLayout(null); } @Override public void paintComponent(Graphics g) { g.drawImage(img, 0, 0, null); } } private class TranslucentPanel extends JLayeredPane { BufferedImage image = null; @Override public void paint(Graphics g) { if (image == null || image.getWidth() != getWidth() || image.getHeight() != getHeight()) { try{this.wait(500);}catch(Exception e){} image = (BufferedImage) createImage(getWidth(), getHeight()); } Graphics2D g2 = image.createGraphics(); g2.setClip(g.getClip()); g2.dispose(); g2 = (Graphics2D) g.create(); g2.setComposite(AlphaComposite.SrcOver.derive(0.75f)); g2.drawImage(image, 0, 0, null); super.paint(g2); jTextField1.repaint(); jTextField2.repaint(); jTextField3.repaint(); jTextField4.repaint(); jTextField6.repaint(); jTextField7.repaint(); jTextArea1.repaint(); jList2.repaint(); jButton2.repaint(); jButton1.repaint(); jTextField5.repaint(); jTabbedPane1.repaint(); jButton6.repaint(); jButton7.repaint(); jButton5.repaint(); jComboBox1.repaint(); jComboBox2.repaint(); jButton4.repaint(); } } private class WallpaperChooseFilter extends javax.swing.filechooser.FileFilter { private final String[] okFileExtensions = new String[] {".jpg", ".jpeg", ".png"}; public boolean accept(File f) { for (String extension : okFileExtensions) if (f.getName().toLowerCase().endsWith(extension) || f.isDirectory()) return true; return false; } public String getDescription() { return "Wallpaper Files"; } } private class SSChooseFilter extends javax.swing.filechooser.FileFilter { private final String[] okFileExtensions = new String[] {".jpg", ".jpeg", ".png"}; public boolean accept(File f) { for (String extension : okFileExtensions) if (f.getName().toLowerCase().endsWith(extension) || f.isDirectory()) return true; return false; } public String getDescription() { return "Screenshot Files"; } } private class ZipChooseFilter extends javax.swing.filechooser.FileFilter { private final String[] okFileExtensions = new String[] {".zip"}; public boolean accept(File f) { for (String extension : okFileExtensions) if (f.getName().toLowerCase().endsWith(extension) || f.isDirectory()) return true; return false; } public String getDescription() { return "Zip Files"; } } }