package tk.amberide;
import tk.amberide.ide.data.Workspace;
import tk.amberide.ide.gui.MainContentPanel;
import tk.amberide.ide.gui.dialogs.AboutDialog;
import tk.amberide.ide.gui.dialogs.NewProjectDialog;
import tk.amberide.ide.gui.dialogs.res.ResourceDialog;
import tk.amberide.ide.gui.dialogs.SettingsDialog;
import tk.amberide.ide.gui.FileViewerPanel;
import tk.amberide.ide.gui.misc.StartPagePanel;
import tk.amberide.ide.swing.Dialogs;
import tk.amberide.ide.tool.ToolDefinition;
import java.awt.*;
import javax.swing.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.IOException;
/**
* @author Tudor
*/
public class IDE extends javax.swing.JFrame {
private MainContentPanel content;
/**
* Creates new form Applet
*/
public IDE() {
initComponents();
contentPane.add(BorderLayout.CENTER, new StartPagePanel());
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
if (content != null && content.getFilesTabbedPane() != null &&
!MainContentPanel.askToSaveFile(IDE.this, content.getFilesTabbedPane().getComponents()))
return;
setVisible(false);
System.exit(0);
}
});
}
public void loadProject(Workspace space) {
contentPane.removeAll();
contentPane.add(BorderLayout.CENTER, content = new MainContentPanel(space));
statusBar.add(BorderLayout.CENTER, content.getStatusBar());
}
void addToolTab(final ToolDefinition tool) {
content.addToolTab(tool);
validate();
}
void openFile(final File file) {
FileViewerPanel editor;
try {
editor = FileViewerPanel.fileViewerPanelFor(file);
} catch (Exception ex) {
ex.printStackTrace();
if (ex instanceof IOException) {
Dialogs.errorDialog()
.setTitle("Exception while loading file.")
.setMessage("Failed to read file: " + ex)
.show();
} else {
Dialogs.errorDialog()
.setTitle("Failed to create editor display.")
.setMessage("An error occured: " + ex)
.show();
}
return;
}
content.addFileTab(editor);
validate();
}
public JMenuBar getMenu() {
return menuBar;
}
public MainContentPanel getContentPanel() {
return content;
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
jMenuBar2 = new javax.swing.JMenuBar();
jMenu3 = new javax.swing.JMenu();
jMenu4 = new javax.swing.JMenu();
jSeparator1 = new javax.swing.JSeparator();
list1 = new java.awt.List();
jToggleButton1 = new javax.swing.JToggleButton();
jToolBar1 = new javax.swing.JToolBar();
newFileButton = new javax.swing.JButton();
newProjectButton = new javax.swing.JButton();
openButton = new javax.swing.JButton();
saveButton = new javax.swing.JButton();
jSeparator4 = new javax.swing.JToolBar.Separator();
resourceButton = new javax.swing.JButton();
jSeparator2 = new javax.swing.JToolBar.Separator();
headerSeparator = new javax.swing.JSeparator();
footerSeparator = new javax.swing.JSeparator();
memoryMonitorProgressBar1 = new tk.amberide.ide.swing.misc.MemoryMonitorProgressBar();
contentPane = new javax.swing.JPanel();
statusBar = new javax.swing.JPanel();
menuBar = new javax.swing.JMenuBar();
fileMenu = new javax.swing.JMenu();
newProjectItem = new javax.swing.JMenuItem();
newFileItem = new javax.swing.JMenuItem();
openItem = new javax.swing.JMenuItem();
saveItem = new javax.swing.JMenuItem();
saveAsItem = new javax.swing.JMenuItem();
settingsItem = new javax.swing.JMenuItem();
synchItem = new javax.swing.JMenuItem();
resourcesItem = new javax.swing.JMenu();
manageItem = new javax.swing.JMenuItem();
newResourceItem = new javax.swing.JMenu();
newTilesetItem = new javax.swing.JMenuItem();
newAudioItem = new javax.swing.JMenuItem();
newModelItem = new javax.swing.JMenuItem();
helpMenu = new javax.swing.JMenu();
aboutItem = new javax.swing.JMenuItem();
java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("amber/Bundle"); // NOI18N
jMenu3.setText(bundle.getString("IDE.jMenu3.text")); // NOI18N
jMenuBar2.add(jMenu3);
jMenu4.setText(bundle.getString("IDE.jMenu4.text")); // NOI18N
jMenuBar2.add(jMenu4);
jToggleButton1.setText(bundle.getString("IDE.jToggleButton1.text")); // NOI18N
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle(bundle.getString("IDE.title")); // NOI18N
setFocusTraversalPolicyProvider(true);
setIconImage(new javax.swing.ImageIcon(ClassLoader.getSystemResource("icon/Logo.png")).getImage());
jToolBar1.setFloatable(false);
newFileButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon/IDE.NewFile.Large.png"))); // NOI18N
newFileButton.setToolTipText(bundle.getString("IDE.newFileButton.toolTipText")); // NOI18N
newFileButton.setFocusable(false);
newFileButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
newFileButton.setMargin(new java.awt.Insets(14, 14, 14, 14));
newFileButton.setMaximumSize(new java.awt.Dimension(28, 32));
newFileButton.setMinimumSize(new java.awt.Dimension(28, 32));
newFileButton.setPreferredSize(new java.awt.Dimension(28, 32));
newFileButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
newFileButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
newFileButtonActionPerformed(evt);
}
});
jToolBar1.add(newFileButton);
newProjectButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon/IDE.NewProject.Large.png"))); // NOI18N
newProjectButton.setToolTipText(bundle.getString("IDE.newProjectButton.toolTipText")); // NOI18N
newProjectButton.setFocusable(false);
newProjectButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
newProjectButton.setMargin(new java.awt.Insets(14, 14, 14, 14));
newProjectButton.setMaximumSize(new java.awt.Dimension(28, 32));
newProjectButton.setMinimumSize(new java.awt.Dimension(28, 32));
newProjectButton.setPreferredSize(new java.awt.Dimension(28, 32));
newProjectButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
newProjectButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
newProjectButtonActionPerformed(evt);
}
});
jToolBar1.add(newProjectButton);
openButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon/IDE.OpenProject.Large.png"))); // NOI18N
openButton.setToolTipText(bundle.getString("IDE.openButton.toolTipText")); // NOI18N
openButton.setFocusable(false);
openButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
openButton.setMargin(new java.awt.Insets(14, 14, 14, 14));
openButton.setMaximumSize(new java.awt.Dimension(28, 32));
openButton.setMinimumSize(new java.awt.Dimension(28, 32));
openButton.setPreferredSize(new java.awt.Dimension(28, 32));
openButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
openButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
openButtonActionPerformed(evt);
}
});
jToolBar1.add(openButton);
saveButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon/IDE.Save.Large.png"))); // NOI18N
saveButton.setFocusable(false);
saveButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
saveButton.setMargin(new java.awt.Insets(14, 14, 14, 14));
saveButton.setMaximumSize(new java.awt.Dimension(28, 32));
saveButton.setMinimumSize(new java.awt.Dimension(28, 32));
saveButton.setPreferredSize(new java.awt.Dimension(28, 32));
saveButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
jToolBar1.add(saveButton);
jToolBar1.add(jSeparator4);
resourceButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon/IDE.Resources.Large.png"))); // NOI18N
resourceButton.setFocusable(false);
resourceButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
resourceButton.setMargin(null);
resourceButton.setMaximumSize(new java.awt.Dimension(28, 32));
resourceButton.setMinimumSize(new java.awt.Dimension(28, 32));
resourceButton.setPreferredSize(new java.awt.Dimension(28, 32));
resourceButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
resourceButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
resourceButtonActionPerformed(evt);
}
});
jToolBar1.add(resourceButton);
jToolBar1.add(jSeparator2);
contentPane.setLayout(new java.awt.BorderLayout());
statusBar.setLayout(new java.awt.BorderLayout());
fileMenu.setText(bundle.getString("IDE.fileMenu.text")); // NOI18N
newProjectItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_N, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK));
newProjectItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon/IDE.NewProject.Small.png"))); // NOI18N
newProjectItem.setText(bundle.getString("IDE.newProjectItem.text")); // NOI18N
newProjectItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
newProjectItemActionPerformed(evt);
}
});
fileMenu.add(newProjectItem);
newFileItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_N, java.awt.event.InputEvent.CTRL_MASK));
newFileItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon/IDE.NewFile.Small.png"))); // NOI18N
newFileItem.setText(bundle.getString("IDE.newFileItem.text")); // NOI18N
newFileItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
newFileItemActionPerformed(evt);
}
});
fileMenu.add(newFileItem);
openItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_O, java.awt.event.InputEvent.CTRL_MASK));
openItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon/IDE.OpenProject.Small.png"))); // NOI18N
openItem.setText(bundle.getString("IDE.openItem.text")); // NOI18N
openItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
openItemActionPerformed(evt);
}
});
fileMenu.add(openItem);
saveItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.event.InputEvent.CTRL_MASK));
saveItem.setText(bundle.getString("IDE.saveItem.text")); // NOI18N
saveItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
saveItemActionPerformed(evt);
}
});
fileMenu.add(saveItem);
saveAsItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK));
saveAsItem.setText(bundle.getString("IDE.saveAsItem.text")); // NOI18N
fileMenu.add(saveAsItem);
settingsItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F7, java.awt.event.InputEvent.ALT_MASK));
settingsItem.setText(bundle.getString("IDE.settingsItem.text")); // NOI18N
settingsItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
settingsItemActionPerformed(evt);
}
});
fileMenu.add(settingsItem);
synchItem.setText(bundle.getString("IDE.synchItem.text")); // NOI18N
synchItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
synchItemActionPerformed(evt);
}
});
fileMenu.add(synchItem);
resourcesItem.setText(bundle.getString("IDE.resourcesItem.text")); // NOI18N
manageItem.setText(bundle.getString("IDE.manageItem.text")); // NOI18N
resourcesItem.add(manageItem);
newResourceItem.setText(bundle.getString("IDE.newResourceItem.text")); // NOI18N
newTilesetItem.setText(bundle.getString("IDE.newTilesetItem.text")); // NOI18N
newResourceItem.add(newTilesetItem);
newAudioItem.setText(bundle.getString("IDE.newAudioItem.text")); // NOI18N
newResourceItem.add(newAudioItem);
newModelItem.setText(bundle.getString("IDE.newModelItem.text")); // NOI18N
newResourceItem.add(newModelItem);
resourcesItem.add(newResourceItem);
fileMenu.add(resourcesItem);
menuBar.add(fileMenu);
helpMenu.setText(bundle.getString("IDE.helpMenu.text")); // NOI18N
aboutItem.setText(bundle.getString("IDE.aboutItem.text")); // NOI18N
aboutItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
aboutItemActionPerformed(evt);
}
});
helpMenu.add(aboutItem);
menuBar.add(helpMenu);
setJMenuBar(menuBar);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jToolBar1, javax.swing.GroupLayout.DEFAULT_SIZE, 821, Short.MAX_VALUE)
.addGap(14, 14, 14))
.addComponent(contentPane, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(headerSeparator)
.addGroup(layout.createSequentialGroup()
.addComponent(statusBar, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(memoryMonitorProgressBar1, javax.swing.GroupLayout.PREFERRED_SIZE, 98, javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(footerSeparator, javax.swing.GroupLayout.Alignment.TRAILING)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 0, 0)
.addComponent(headerSeparator, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(contentPane, javax.swing.GroupLayout.DEFAULT_SIZE, 523, Short.MAX_VALUE)
.addGap(0, 0, 0)
.addComponent(footerSeparator, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 0, 0)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(memoryMonitorProgressBar1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(statusBar, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
);
pack();
setLocationRelativeTo(null);
}// </editor-fold>//GEN-END:initComponents
private void openButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openButtonActionPerformed
JFileChooser browser = new JFileChooser("Choose project location...");
browser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
browser.setApproveButtonText("Choose directory");
browser.setVisible(true);
if (browser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
try {
Amber.initializeProject(browser.getSelectedFile());
} catch (Exception ex) {
ex.printStackTrace();
}
}
}//GEN-LAST:event_openButtonActionPerformed
private void saveButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveButtonActionPerformed
Component selected = content.getFilesTabbedPane().getSelectedComponent();
if (selected instanceof FileViewerPanel)
((FileViewerPanel) selected).save();
}//GEN-LAST:event_saveButtonActionPerformed
private void editorTabbedPaneStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_editorTabbedPaneStateChanged
}//GEN-LAST:event_editorTabbedPaneStateChanged
private void aboutItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_aboutItemActionPerformed
new AboutDialog(this).setVisible(true);
}//GEN-LAST:event_aboutItemActionPerformed
private void resourceButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_resourceButtonActionPerformed
new ResourceDialog(this).setVisible(true);
}//GEN-LAST:event_resourceButtonActionPerformed
private void newFileButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newFileButtonActionPerformed
}//GEN-LAST:event_newFileButtonActionPerformed
private void newFileItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newFileItemActionPerformed
newFileButtonActionPerformed(evt);
}//GEN-LAST:event_newFileItemActionPerformed
private void newProjectItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newProjectItemActionPerformed
newProjectButtonActionPerformed(evt);
}//GEN-LAST:event_newProjectItemActionPerformed
private void newProjectButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newProjectButtonActionPerformed
new NewProjectDialog(this).setVisible(true);
}//GEN-LAST:event_newProjectButtonActionPerformed
private void synchItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_synchItemActionPerformed
content.getFileTree().synchronize();
}//GEN-LAST:event_synchItemActionPerformed
private void openItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openItemActionPerformed
openButtonActionPerformed(evt);
}//GEN-LAST:event_openItemActionPerformed
private void saveItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveItemActionPerformed
saveButtonActionPerformed(evt);
}//GEN-LAST:event_saveItemActionPerformed
private void settingsItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_settingsItemActionPerformed
new SettingsDialog(this).setVisible(true);
}//GEN-LAST:event_settingsItemActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JMenuItem aboutItem;
private javax.swing.JPanel contentPane;
private javax.swing.JMenu fileMenu;
private javax.swing.JSeparator footerSeparator;
private javax.swing.JSeparator headerSeparator;
private javax.swing.JMenu helpMenu;
private javax.swing.JMenu jMenu3;
private javax.swing.JMenu jMenu4;
private javax.swing.JMenuBar jMenuBar2;
private javax.swing.JSeparator jSeparator1;
private javax.swing.JToolBar.Separator jSeparator2;
private javax.swing.JToolBar.Separator jSeparator4;
private javax.swing.JToggleButton jToggleButton1;
private javax.swing.JToolBar jToolBar1;
private java.awt.List list1;
private javax.swing.JMenuItem manageItem;
private tk.amberide.ide.swing.misc.MemoryMonitorProgressBar memoryMonitorProgressBar1;
private javax.swing.JMenuBar menuBar;
private javax.swing.JMenuItem newAudioItem;
private javax.swing.JButton newFileButton;
private javax.swing.JMenuItem newFileItem;
private javax.swing.JMenuItem newModelItem;
private javax.swing.JButton newProjectButton;
private javax.swing.JMenuItem newProjectItem;
private javax.swing.JMenu newResourceItem;
private javax.swing.JMenuItem newTilesetItem;
private javax.swing.JButton openButton;
private javax.swing.JMenuItem openItem;
private javax.swing.JButton resourceButton;
private javax.swing.JMenu resourcesItem;
private javax.swing.JMenuItem saveAsItem;
private javax.swing.JButton saveButton;
private javax.swing.JMenuItem saveItem;
private javax.swing.JMenuItem settingsItem;
private javax.swing.JPanel statusBar;
private javax.swing.JMenuItem synchItem;
// End of variables declaration//GEN-END:variables
}