/*
* Created by JFormDesigner on Thu Apr 27 17:56:21 EDT 2017
*/
package gui.forms;
import util.Permissions;
import util.Utils;
import util.misc.Raffle;
import util.settings.Settings;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumnModel;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
/**
* @author Nick Kerns
*/
public class GUIRaffle extends JFrame
{
public GUIRaffle()
{
initComponents();
Utils.populateComboBox(channelsComboBox);
}
@Override
public void dispose()
{
reset();
super.dispose();
}
private void reset()
{
previousWinnersTable.clearSelection();
keywordField.setText("");
durationSpinner.setValue(20);
subscriberState.setSelectedIndex(0);
donorState.setSelectedIndex(0);
modState.setSelectedIndex(0);
}
private void startRaffleButtonActionPerformed()
{
String keyword = keywordField.getText();
String channel = "#" + channelsComboBox.getItemAt(channelsComboBox.getSelectedIndex());
int timeSeconds = (int) durationSpinner.getValue();
// Permissions
// 0 = N/A, 1 = INCLUDE, 2 = EXCLUDE
ArrayList<Permissions.Permission> required = new ArrayList<>();
ArrayList<Permissions.Permission> denied = new ArrayList<>();
if (subscriberState.getSelectedIndex() == 1)
required.add(Permissions.Permission.SUBSCRIBER);
else if (subscriberState.getSelectedIndex() == 2)
denied.add(Permissions.Permission.SUBSCRIBER);
if (modState.getSelectedIndex() == 1)
required.add(Permissions.Permission.MODERATOR);
else if (modState.getSelectedIndex() == 2)
denied.add(Permissions.Permission.MODERATOR);
if (donorState.getSelectedIndex() == 1)
required.add(Permissions.Permission.DONOR);
else if (donorState.getSelectedIndex() == 2)
denied.add(Permissions.Permission.DONOR);
// Only add regular viewer if all three special types are excluded or indifferent
if (required.isEmpty())
required.add(Permissions.Permission.VIEWER);
// Start this Raffle
Raffle r = new Raffle(Settings.accountManager.getBot(), keyword, timeSeconds, channel, required, denied);
GUIMain.bot.startRaffle(r);
// Add it to the table
addRaffle(r);
// Lastly clear the fields
reset();
}
// Called from the text command as well
public void addRaffle(Raffle r)
{
DefaultTableModel dtm = (DefaultTableModel) previousWinnersTable.getModel();
dtm.insertRow(0, new Object[]{r.getKeyword(), "N/A", 0});
}
// Called from inside the Raffle loop
public void updateRaffle(Raffle r)
{
int row = findRow(r.getKeyword());
if (row > -1)
{
if (r.getWinner() != null)
{
int winnerCol = previousWinnersTable.getColumn("Winner").getModelIndex();
EventQueue.invokeLater(() -> previousWinnersTable.setValueAt(r.getWinner(), row, winnerCol));
}
int entrantsCol = previousWinnersTable.getColumn("# Entered").getModelIndex();
EventQueue.invokeLater(() -> previousWinnersTable.setValueAt(r.getNumberEntrants(), row, entrantsCol));
}
}
public void removeRaffle(Raffle r)
{
DefaultTableModel dtm = (DefaultTableModel) previousWinnersTable.getModel();
int row = findRow(r.getKeyword());
if (row > -1)
{
dtm.removeRow(row);
}
}
private int findRow(String keyword)
{
int keyWordCol = previousWinnersTable.getColumn("Keyword").getModelIndex();
for (int i = 0; i < previousWinnersTable.getRowCount(); i++)
{
if (previousWinnersTable.getValueAt(i, keyWordCol).equals(keyword))
return i;
}
return -1;
}
private void previousWinnersTableMouseReleased()
{
int sel = previousWinnersTable.getSelectedRow();
if (sel > -1)
{
int winnerCol = previousWinnersTable.getColumn("Winner").getModelIndex();
String winner = (String) previousWinnersTable.getValueAt(sel, winnerCol);
if (winner != null && "N/A".equals(winner))
stopRaffleButton.setEnabled(true);
}
}
private void stopRaffleButtonActionPerformed()
{
int keyWordCol = previousWinnersTable.getColumn("Keyword").getModelIndex();
String keyword = (String) previousWinnersTable.getValueAt(previousWinnersTable.getSelectedRow(), keyWordCol);
if (keyword != null)
{
Raffle stopped = GUIMain.bot.stopRaffle(keyword);
if (stopped != null)
{
GUIMain.bot.sendStopRaffleMessage(stopped);
// now we remove it
removeRaffle(stopped);
}
}
stopRaffleButton.setEnabled(false);
}
private void initComponents()
{
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
// Generated using JFormDesigner Evaluation license - Nick Kerns
separator2 = new JSeparator();
startRaffleButton = new JButton();
stopRaffleButton = new JButton();
scrollPane1 = new JScrollPane();
previousWinnersTable = new JTable();
previousWinnersTable.getTableHeader().setReorderingAllowed(false);
label4 = new JLabel();
subscriberState = new JComboBox<>();
label6 = new JLabel();
donorState = new JComboBox<>();
label5 = new JLabel();
modState = new JComboBox<>();
label3 = new JLabel();
channelsComboBox = new JComboBox<>();
label7 = new JLabel();
label2 = new JLabel();
durationSpinner = new JSpinner();
keywordField = new JTextField();
label1 = new JLabel();
//======== this ========
setTitle("Raffles");
setIconImage(new ImageIcon(getClass().getResource("/image/icon.png")).getImage());
setResizable(false);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
Container contentPane = getContentPane();
//---- startRaffleButton ----
startRaffleButton.setText("Start Raffle");
startRaffleButton.setFocusable(false);
startRaffleButton.addActionListener(e -> startRaffleButtonActionPerformed());
//---- stopRaffleButton ----
stopRaffleButton.setText("Stop Raffle");
stopRaffleButton.setEnabled(false);
stopRaffleButton.setFocusable(false);
stopRaffleButton.addActionListener(e -> stopRaffleButtonActionPerformed());
//======== scrollPane1 ========
{
//---- previousWinnersTable ----
previousWinnersTable.setModel(new DefaultTableModel(
new Object[][]{
},
new String[]{
"Keyword", "Winner", "# Entered"
}
)
{
Class<?>[] columnTypes = new Class<?>[]{
String.class, String.class, Integer.class
};
boolean[] columnEditable = new boolean[]{
false, false, false
};
@Override
public Class<?> getColumnClass(int columnIndex)
{
return columnTypes[columnIndex];
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex)
{
return columnEditable[columnIndex];
}
});
{
TableColumnModel cm = previousWinnersTable.getColumnModel();
cm.getColumn(0).setResizable(false);
cm.getColumn(0).setPreferredWidth(100);
cm.getColumn(1).setResizable(false);
cm.getColumn(1).setPreferredWidth(100);
cm.getColumn(2).setResizable(false);
cm.getColumn(2).setPreferredWidth(50);
}
previousWinnersTable.setRowSelectionAllowed(false);
previousWinnersTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
previousWinnersTable.addMouseListener(new MouseAdapter()
{
@Override
public void mouseReleased(MouseEvent e)
{
previousWinnersTableMouseReleased();
}
});
scrollPane1.setViewportView(previousWinnersTable);
}
//---- label4 ----
label4.setText("Subscribers");
//---- subscriberState ----
subscriberState.setModel(new DefaultComboBoxModel<>(new String[]{
"-",
"Include",
"Exclude"
}));
subscriberState.setFocusable(false);
//---- label6 ----
label6.setText("Donors");
//---- donorState ----
donorState.setModel(new DefaultComboBoxModel<>(new String[]{
"-",
"Include",
"Exclude"
}));
donorState.setFocusable(false);
//---- label5 ----
label5.setText("Mods");
//---- modState ----
modState.setModel(new DefaultComboBoxModel<>(new String[]{
"-",
"Include",
"Exclude"
}));
modState.setFocusable(false);
//---- label3 ----
label3.setText("Permissions:");
label3.setToolTipText("<html>These are automatically exclusive if left unchecked.<br>\nIf you want everybody to enter, check all the boxes.<br>\nOtherwise the person has to be JUST what you checked.<br>\nExample: A moderator that is also a subscriber<br>\nCANNOT enter if only moderator OR only subscriber is chosen.</html>");
//---- label7 ----
label7.setText("Channel:");
label7.setHorizontalAlignment(SwingConstants.RIGHT);
//---- label2 ----
label2.setText("Keyword:");
label2.setHorizontalAlignment(SwingConstants.RIGHT);
//---- durationSpinner ----
durationSpinner.setFocusable(false);
durationSpinner.setModel(new SpinnerNumberModel(20, 20, null, 1));
//---- label1 ----
label1.setText("Duration (in seconds):");
label1.setHorizontalAlignment(SwingConstants.RIGHT);
GroupLayout contentPaneLayout = new GroupLayout(contentPane);
contentPane.setLayout(contentPaneLayout);
contentPaneLayout.setHorizontalGroup(
contentPaneLayout.createParallelGroup()
.addGroup(contentPaneLayout.createSequentialGroup()
.addContainerGap()
.addGroup(contentPaneLayout.createParallelGroup()
.addGroup(contentPaneLayout.createSequentialGroup()
.addGroup(contentPaneLayout.createParallelGroup(GroupLayout.Alignment.LEADING, false)
.addComponent(scrollPane1, GroupLayout.DEFAULT_SIZE, 282, Short.MAX_VALUE)
.addComponent(separator2, GroupLayout.DEFAULT_SIZE, 282, Short.MAX_VALUE))
.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(contentPaneLayout.createSequentialGroup()
.addGroup(contentPaneLayout.createParallelGroup()
.addGroup(contentPaneLayout.createSequentialGroup()
.addGap(6, 6, 6)
.addGroup(contentPaneLayout.createParallelGroup()
.addComponent(label4)
.addComponent(subscriberState, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addGap(26, 26, 26)
.addGroup(contentPaneLayout.createParallelGroup()
.addComponent(donorState, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(label6))
.addGap(27, 27, 27)
.addGroup(contentPaneLayout.createParallelGroup()
.addComponent(label5)
.addComponent(modState, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)))
.addComponent(label3)
.addGroup(contentPaneLayout.createSequentialGroup()
.addGap(65, 65, 65)
.addComponent(label2)
.addGap(11, 11, 11)
.addComponent(keywordField, GroupLayout.PREFERRED_SIZE, 149, GroupLayout.PREFERRED_SIZE))
.addGroup(contentPaneLayout.createSequentialGroup()
.addGap(65, 65, 65)
.addComponent(label7)
.addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(channelsComboBox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addGroup(contentPaneLayout.createSequentialGroup()
.addComponent(label1)
.addGap(9, 9, 9)
.addComponent(durationSpinner, GroupLayout.PREFERRED_SIZE, 149, GroupLayout.PREFERRED_SIZE)))
.addGap(0, 13, Short.MAX_VALUE))
.addGroup(contentPaneLayout.createSequentialGroup()
.addComponent(startRaffleButton)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, 107, Short.MAX_VALUE)
.addComponent(stopRaffleButton)
.addGap(0, 6, Short.MAX_VALUE))))
);
contentPaneLayout.setVerticalGroup(
contentPaneLayout.createParallelGroup()
.addGroup(contentPaneLayout.createSequentialGroup()
.addContainerGap()
.addComponent(scrollPane1, GroupLayout.PREFERRED_SIZE, 124, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(separator2, GroupLayout.PREFERRED_SIZE, 2, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(label3)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(contentPaneLayout.createParallelGroup(GroupLayout.Alignment.TRAILING)
.addGroup(contentPaneLayout.createSequentialGroup()
.addGroup(contentPaneLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(label4)
.addComponent(label5)
.addComponent(label6))
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(contentPaneLayout.createParallelGroup()
.addComponent(subscriberState, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(donorState, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(modState, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(contentPaneLayout.createParallelGroup()
.addGroup(contentPaneLayout.createSequentialGroup()
.addGap(5, 5, 5)
.addComponent(label2))
.addComponent(keywordField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addGap(1, 1, 1)
.addGroup(contentPaneLayout.createParallelGroup()
.addGroup(contentPaneLayout.createSequentialGroup()
.addGap(5, 5, 5)
.addComponent(label1))
.addComponent(durationSpinner, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addComponent(label7)
.addGap(6, 6, 6))
.addComponent(channelsComboBox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addGap(23, 23, 23)
.addGroup(contentPaneLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(startRaffleButton)
.addComponent(stopRaffleButton))
.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
pack();
setLocationRelativeTo(getOwner());
// JFormDesigner - End of component initialization //GEN-END:initComponents
}
// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables
// Generated using JFormDesigner Evaluation license - Nick Kerns
private JSeparator separator2;
private JButton startRaffleButton;
private JButton stopRaffleButton;
private JScrollPane scrollPane1;
private JTable previousWinnersTable;
private JLabel label4;
private JComboBox<String> subscriberState;
private JLabel label6;
private JComboBox<String> donorState;
private JLabel label5;
private JComboBox<String> modState;
private JLabel label3;
private JComboBox<String> channelsComboBox;
private JLabel label7;
private JLabel label2;
private JSpinner durationSpinner;
private JTextField keywordField;
private JLabel label1;
// JFormDesigner - End of variables declaration //GEN-END:variables
}