package me.escapeNT.pail.GUIComponents; import java.awt.BorderLayout; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import javax.swing.BorderFactory; import javax.swing.DefaultComboBoxModel; import javax.swing.GroupLayout; import javax.swing.GroupLayout.Alignment; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JSpinner; import javax.swing.JTable; import javax.swing.LayoutStyle.ComponentPlacement; import javax.swing.ListSelectionModel; import javax.swing.SpinnerNumberModel; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.table.DefaultTableModel; import me.escapeNT.pail.Util.Localizable; import me.escapeNT.pail.Util.Util; /** * Panel for editing scheduled tasks. * @author escapeNT */ public class SchedulerPanel extends javax.swing.JPanel implements Localizable { private ServerTaskOptions stOptions = new ServerTaskOptions(); /** Creates new form SchedulerPanel */ public SchedulerPanel() { initComponents(); translateComponent(); taskList.getSelectionModel().addListSelectionListener(new TaskSelectionListener()); taskType.setEnabled(false); timeAmount.setEnabled(false); intervalType.setEnabled(false); repeating.setEnabled(false); } /** This method is called from within the constructor to * initialize the form. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { jScrollPane1 = new JScrollPane(); taskList = new JTable(); addTask = new JButton(); removeTask = new JButton(); jLabel1 = new JLabel(); taskType = new JComboBox(); optionPanel = new JPanel(); save = new JButton(); jLabel2 = new JLabel(); timeAmount = new JSpinner(); intervalType = new JComboBox(); repeating = new JCheckBox(); taskList.setModel(new DefaultTableModel( new Object [][] { }, new String [] { "Task Name", "Enabled" } ) { Class[] types = new Class [] { String.class, Boolean.class }; boolean[] canEdit = new boolean [] { false, true }; public Class getColumnClass(int columnIndex) { return types [columnIndex]; } public boolean isCellEditable(int rowIndex, int columnIndex) { return canEdit [columnIndex]; } }); taskList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); jScrollPane1.setViewportView(taskList); addTask.setFont(new Font("Lucida Grande", 0, 14)); addTask.setText("+"); addTask.setFocusable(false); addTask.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { addTaskActionPerformed(evt); } }); removeTask.setFont(new Font("Lucida Grande", 0, 14)); removeTask.setText("-"); removeTask.setFocusable(false); removeTask.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { removeTaskActionPerformed(evt); } }); jLabel1.setText("Type"); taskType.setModel(new DefaultComboBoxModel(new String[] { "Server action", "World backup", "Custom command" })); taskType.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent evt) { taskTypeItemStateChanged(evt); } }); optionPanel.setBorder(BorderFactory.createTitledBorder("Task Options")); GroupLayout optionPanelLayout = new GroupLayout(optionPanel); optionPanel.setLayout(optionPanelLayout); optionPanelLayout.setHorizontalGroup( optionPanelLayout.createParallelGroup(Alignment.LEADING) .addGap(0, 494, Short.MAX_VALUE) ); optionPanelLayout.setVerticalGroup( optionPanelLayout.createParallelGroup(Alignment.LEADING) .addGap(0, 251, Short.MAX_VALUE) ); save.setText("Save"); jLabel2.setText("Execute every"); timeAmount.setModel(new SpinnerNumberModel(Integer.valueOf(1), Integer.valueOf(1), null, Integer.valueOf(1))); timeAmount.setFocusable(false); intervalType.setModel(new DefaultComboBoxModel(new String[] { "Seconds", "Minutes", "Hours", "Days" })); intervalType.setSelectedIndex(1); repeating.setSelected(true); repeating.setText("Repeating"); repeating.setFocusable(false); GroupLayout layout = new GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(Alignment.LEADING) .addGroup(Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(Alignment.TRAILING) .addGroup(layout.createSequentialGroup() .addComponent(removeTask, GroupLayout.PREFERRED_SIZE, 41, GroupLayout.PREFERRED_SIZE) .addPreferredGap(ComponentPlacement.RELATED) .addComponent(addTask, GroupLayout.PREFERRED_SIZE, 41, GroupLayout.PREFERRED_SIZE)) .addComponent(jScrollPane1, GroupLayout.PREFERRED_SIZE, 300, GroupLayout.PREFERRED_SIZE)) .addPreferredGap(ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(Alignment.TRAILING) .addComponent(optionPanel, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(Alignment.LEADING, layout.createSequentialGroup() .addComponent(jLabel1, GroupLayout.PREFERRED_SIZE, 45, GroupLayout.PREFERRED_SIZE) .addPreferredGap(ComponentPlacement.RELATED) .addComponent(taskType, GroupLayout.PREFERRED_SIZE, 240, GroupLayout.PREFERRED_SIZE)) .addGroup(Alignment.LEADING, layout.createSequentialGroup() .addGroup(layout.createParallelGroup(Alignment.TRAILING, false) .addComponent(repeating, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(Alignment.LEADING, layout.createSequentialGroup() .addComponent(jLabel2, GroupLayout.PREFERRED_SIZE, 94, GroupLayout.PREFERRED_SIZE) .addPreferredGap(ComponentPlacement.RELATED) .addComponent(timeAmount, GroupLayout.PREFERRED_SIZE, 105, GroupLayout.PREFERRED_SIZE))) .addPreferredGap(ComponentPlacement.UNRELATED) .addComponent(intervalType, GroupLayout.PREFERRED_SIZE, 182, GroupLayout.PREFERRED_SIZE)) .addComponent(save)) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(Alignment.LEADING) .addGroup(Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(Alignment.BASELINE) .addComponent(jLabel1) .addComponent(taskType, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) .addPreferredGap(ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(Alignment.TRAILING) .addGroup(layout.createParallelGroup(Alignment.TRAILING) .addComponent(timeAmount, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addComponent(jLabel2, Alignment.LEADING, GroupLayout.PREFERRED_SIZE, 30, GroupLayout.PREFERRED_SIZE)) .addComponent(intervalType, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) .addPreferredGap(ComponentPlacement.UNRELATED) .addComponent(repeating) .addGap(16, 16, 16) .addComponent(optionPanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addComponent(jScrollPane1, GroupLayout.DEFAULT_SIZE, 391, Short.MAX_VALUE)) .addPreferredGap(ComponentPlacement.UNRELATED) .addGroup(layout.createParallelGroup(Alignment.LEADING) .addComponent(addTask, GroupLayout.PREFERRED_SIZE, 37, GroupLayout.PREFERRED_SIZE) .addComponent(removeTask, GroupLayout.PREFERRED_SIZE, 37, GroupLayout.PREFERRED_SIZE) .addComponent(save)) .addGap(17, 17, 17)) ); }// </editor-fold>//GEN-END:initComponents private void addTaskActionPerformed(ActionEvent evt) {//GEN-FIRST:event_addTaskActionPerformed ((DefaultTableModel)taskList.getModel()).addRow(new Object[] { "Task " + (taskList.getModel().getRowCount() + 1), Boolean.TRUE}); taskList.setRowSelectionInterval(taskList.getModel().getRowCount() - 1, taskList.getModel().getRowCount() - 1); }//GEN-LAST:event_addTaskActionPerformed private void removeTaskActionPerformed(ActionEvent evt) {//GEN-FIRST:event_removeTaskActionPerformed if(taskList.getSelectedRow() != -1) { ((DefaultTableModel)taskList.getModel()).removeRow(taskList.getSelectedRow()); taskType.setEnabled(false); timeAmount.setEnabled(false); intervalType.setEnabled(false); repeating.setEnabled(false); } }//GEN-LAST:event_removeTaskActionPerformed private void taskTypeItemStateChanged(ItemEvent evt) {//GEN-FIRST:event_taskTypeItemStateChanged optionPanel.removeAll(); if(taskType.getSelectedItem().toString().equals("Server action")) { optionPanel.add(BorderLayout.CENTER, stOptions); stOptions.setVisible(true); invalidate(); } }//GEN-LAST:event_taskTypeItemStateChanged // Variables declaration - do not modify//GEN-BEGIN:variables private JButton addTask; private JComboBox intervalType; private JLabel jLabel1; private JLabel jLabel2; private JScrollPane jScrollPane1; private JPanel optionPanel; private JButton removeTask; private JCheckBox repeating; private JButton save; private JTable taskList; private JComboBox taskType; private JSpinner timeAmount; // End of variables declaration//GEN-END:variables private class TaskSelectionListener implements ListSelectionListener { public void valueChanged(ListSelectionEvent e) { taskType.setEnabled(true); timeAmount.setEnabled(true); intervalType.setEnabled(true); repeating.setEnabled(true); } } public final void translateComponent() { Util.translateTextComponent(addTask); Util.translateTextComponent(jLabel1); Util.translateTextComponent(removeTask); Util.translateTextComponent(save); Util.translateTextComponent(repeating); Util.translateTextComponent(jLabel2); } }