package jfqemu;
/**
* Created : Mar 19, 2012
*
* @author pquiring
*/
import java.awt.*;
import java.io.*;
import javax.swing.*;
import javaforce.*;
public class VMDialog extends javax.swing.JDialog {
/**
* Creates new form VMDialog
*/
public VMDialog(java.awt.Frame parent, boolean modal, VM vm) {
super(parent, modal);
initComponents();
setPosition();
listTAPs();
this.vm = vm;
if (vm == null) return;
name.setText(vm.name);
folder.setText(vm.folder);
folder.setEditable(false);
os.setSelectedItem(vm.os);
hda.setText(vm.hda);
hdb.setText(vm.hdb);
hdc.setText(vm.hdc);
hdd.setText(vm.hdd);
hdacd.setSelected(vm.hdacd);
hdbcd.setSelected(vm.hdbcd);
hdccd.setSelected(vm.hdccd);
hddcd.setSelected(vm.hddcd);
if (vm.hdaif == null) vm.hdaif = "IDE";
hdaif.setSelectedItem(vm.hdaif);
if (vm.hdbif == null) vm.hdbif = "IDE";
hdbif.setSelectedItem(vm.hdbif);
if (vm.hdcif == null) vm.hdcif = "IDE";
hdcif.setSelectedItem(vm.hdcif);
if (vm.hddif == null) vm.hddif = "IDE";
hddif.setSelectedItem(vm.hddif);
cpuCount.setValue(new Integer(vm.cpuCount));
x64.setSelected(vm.cpuType.equals("x86_64"));
memory.setText("" + vm.memory);
if (vm.boot.equals("c"))
boot.setSelectedIndex(0);
else
boot.setSelectedIndex(1);
if (vm.serviceID != -1) {
isService.setSelected(true);
serviceID.setValue(new Integer(vm.serviceID));
}
sound.setSelectedItem(vm.sound);
video.setSelectedItem(vm.video);
if (vm.net1model == null) vm.net1model = "disabled";
net1model.setSelectedItem(vm.net1model);
if (vm.net1type == null) vm.net1type = "user";
net1type.setSelectedItem(vm.net1type);
if (vm.net2model == null) vm.net2model = "disabled";
net2model.setSelectedItem(vm.net2model);
if (vm.net2type == null) vm.net2type = "user";
net2type.setSelectedItem(vm.net2type);
if (vm.net3model == null) vm.net3model = "disabled";
net3model.setSelectedItem(vm.net3model);
if (vm.net3type == null) vm.net3type = "user";
net3type.setSelectedItem(vm.net3type);
usb.setSelected(vm.usb);
if (JF.isWindows()) {
tabs.remove(serviceTab);
}
if (vm.chipset == null) vm.chipset = "PIIX3"; //or PIIX4 ???
chipset.setSelectedItem(vm.chipset);
}
/**
* 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() {
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
name = new javax.swing.JTextField();
os = new javax.swing.JComboBox();
accept = new javax.swing.JButton();
cancel = new javax.swing.JButton();
jLabel10 = new javax.swing.JLabel();
folder = new javax.swing.JTextField();
tabs = new javax.swing.JTabbedPane();
drivesTab = new javax.swing.JPanel();
hddcd = new javax.swing.JCheckBox();
hdbcd = new javax.swing.JCheckBox();
hda = new javax.swing.JTextField();
hd2new = new javax.swing.JButton();
hdccd = new javax.swing.JCheckBox();
hdc = new javax.swing.JTextField();
jLabel6 = new javax.swing.JLabel();
hdacd = new javax.swing.JCheckBox();
jLabel4 = new javax.swing.JLabel();
hdb = new javax.swing.JTextField();
hdsselect = new javax.swing.JButton();
hd2select = new javax.swing.JButton();
hdd = new javax.swing.JTextField();
hd3new = new javax.swing.JButton();
jLabel3 = new javax.swing.JLabel();
jLabel5 = new javax.swing.JLabel();
hd4select = new javax.swing.JButton();
hd1select = new javax.swing.JButton();
hd4new = new javax.swing.JButton();
hd1new = new javax.swing.JButton();
jLabel18 = new javax.swing.JLabel();
hdaif = new javax.swing.JComboBox();
hdbif = new javax.swing.JComboBox();
hdcif = new javax.swing.JComboBox();
hddif = new javax.swing.JComboBox();
optionsTab = new javax.swing.JPanel();
jLabel9 = new javax.swing.JLabel();
jLabel8 = new javax.swing.JLabel();
cpuCount = new javax.swing.JSpinner();
jLabel7 = new javax.swing.JLabel();
boot = new javax.swing.JComboBox();
memory = new javax.swing.JTextField();
x64 = new javax.swing.JCheckBox();
jLabel22 = new javax.swing.JLabel();
chipset = new javax.swing.JComboBox();
hwTab = new javax.swing.JPanel();
jLabel11 = new javax.swing.JLabel();
video = new javax.swing.JComboBox();
jLabel12 = new javax.swing.JLabel();
sound = new javax.swing.JComboBox();
jLabel13 = new javax.swing.JLabel();
net1model = new javax.swing.JComboBox();
usb = new javax.swing.JCheckBox();
jLabel16 = new javax.swing.JLabel();
net1type = new javax.swing.JComboBox();
net2model = new javax.swing.JComboBox();
jLabel15 = new javax.swing.JLabel();
jLabel19 = new javax.swing.JLabel();
net2type = new javax.swing.JComboBox();
net3model = new javax.swing.JComboBox();
jLabel20 = new javax.swing.JLabel();
jLabel21 = new javax.swing.JLabel();
net3type = new javax.swing.JComboBox();
serviceTab = new javax.swing.JPanel();
isService = new javax.swing.JCheckBox();
serviceID = new javax.swing.JSpinner();
jLabel14 = new javax.swing.JLabel();
jLabel17 = new javax.swing.JLabel();
jLabel23 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle("VM");
jLabel1.setText("Name:");
jLabel2.setText("OS:");
name.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyReleased(java.awt.event.KeyEvent evt) {
nameKeyReleased(evt);
}
});
os.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Windows", "Linux", "Other" }));
accept.setText("Accept");
accept.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
acceptActionPerformed(evt);
}
});
cancel.setText("Cancel");
cancel.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cancelActionPerformed(evt);
}
});
jLabel10.setText("Folder:");
hddcd.setText("CD-ROM");
hdbcd.setText("CD-ROM");
hd2new.setText("New...");
hd2new.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
hd2newActionPerformed(evt);
}
});
hdccd.setText("CD-ROM");
jLabel6.setText("HD4");
hdacd.setText("CD-ROM");
jLabel4.setText("HD2");
hdsselect.setText("Select...");
hdsselect.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
hdsselectActionPerformed(evt);
}
});
hd2select.setText("Select...");
hd2select.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
hd2selectActionPerformed(evt);
}
});
hd3new.setText("New...");
hd3new.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
hd3newActionPerformed(evt);
}
});
jLabel3.setText("HD1");
jLabel5.setText("HD3");
hd4select.setText("Select...");
hd4select.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
hd4selectActionPerformed(evt);
}
});
hd1select.setText("Select...");
hd1select.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
hd1selectActionPerformed(evt);
}
});
hd4new.setText("New...");
hd4new.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
hd4newActionPerformed(evt);
}
});
hd1new.setText("New...");
hd1new.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
hd1newActionPerformed(evt);
}
});
jLabel18.setText("NOTE : Use /dev/cdrom for physical CD-ROM");
hdaif.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "IDE", "SCSI", "SATA" }));
hdbif.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "IDE", "SCSI", "SATA" }));
hdcif.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "IDE", "SCSI", "SATA" }));
hddif.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "IDE", "SCSI", "SATA" }));
javax.swing.GroupLayout drivesTabLayout = new javax.swing.GroupLayout(drivesTab);
drivesTab.setLayout(drivesTabLayout);
drivesTabLayout.setHorizontalGroup(
drivesTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(drivesTabLayout.createSequentialGroup()
.addContainerGap()
.addGroup(drivesTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(drivesTabLayout.createSequentialGroup()
.addGroup(drivesTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(drivesTabLayout.createSequentialGroup()
.addComponent(jLabel6)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(hdd, javax.swing.GroupLayout.DEFAULT_SIZE, 253, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(hddif, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(hd4select))
.addGroup(drivesTabLayout.createSequentialGroup()
.addComponent(jLabel3)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(hda)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(hdaif, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(hd1select)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(drivesTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(hd1new)
.addComponent(hd4new, javax.swing.GroupLayout.Alignment.TRAILING))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(drivesTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(hdacd)
.addComponent(hddcd, javax.swing.GroupLayout.Alignment.TRAILING)))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, drivesTabLayout.createSequentialGroup()
.addComponent(jLabel4)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(hdb)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(hdbif, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(hd2select)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(hd2new)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(hdbcd))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, drivesTabLayout.createSequentialGroup()
.addComponent(jLabel5)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(hdc)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(hdcif, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(hdsselect)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(hd3new)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(hdccd))
.addGroup(drivesTabLayout.createSequentialGroup()
.addComponent(jLabel18)
.addGap(0, 0, Short.MAX_VALUE)))
.addContainerGap())
);
drivesTabLayout.setVerticalGroup(
drivesTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(drivesTabLayout.createSequentialGroup()
.addContainerGap()
.addGroup(drivesTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel3)
.addComponent(hda, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(hd1select)
.addComponent(hd1new)
.addComponent(hdacd)
.addComponent(hdaif, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(drivesTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel4)
.addComponent(hdb, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(hd2select)
.addComponent(hd2new)
.addComponent(hdbcd)
.addComponent(hdbif, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(drivesTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel5)
.addComponent(hdc, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(hdsselect)
.addComponent(hd3new)
.addComponent(hdccd)
.addComponent(hdcif, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(drivesTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel6)
.addComponent(hdd, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(hd4select)
.addComponent(hd4new)
.addComponent(hddcd)
.addComponent(hddif, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel18)
.addContainerGap())
);
tabs.addTab("Drives", drivesTab);
jLabel9.setText("Memory (MBs)");
jLabel8.setText("# CPUs:");
cpuCount.setModel(new javax.swing.SpinnerNumberModel(1, 1, 8, 1));
cpuCount.setValue(new Integer(1));
jLabel7.setText("1st Boot Device:");
boot.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Hard Drive", "CD-ROM" }));
memory.setText("256");
x64.setText("64bit");
jLabel22.setText("Chipset");
chipset.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "PIIX3", "ICH9" }));
javax.swing.GroupLayout optionsTabLayout = new javax.swing.GroupLayout(optionsTab);
optionsTab.setLayout(optionsTabLayout);
optionsTabLayout.setHorizontalGroup(
optionsTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(optionsTabLayout.createSequentialGroup()
.addContainerGap()
.addGroup(optionsTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(optionsTabLayout.createSequentialGroup()
.addComponent(jLabel7)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(boot, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(optionsTabLayout.createSequentialGroup()
.addComponent(jLabel8)
.addGap(18, 18, 18)
.addComponent(cpuCount, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(x64))
.addGroup(optionsTabLayout.createSequentialGroup()
.addComponent(jLabel9)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(memory, javax.swing.GroupLayout.PREFERRED_SIZE, 123, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(optionsTabLayout.createSequentialGroup()
.addComponent(jLabel22)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(chipset, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(364, Short.MAX_VALUE))
);
optionsTabLayout.setVerticalGroup(
optionsTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(optionsTabLayout.createSequentialGroup()
.addContainerGap()
.addGroup(optionsTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel7)
.addComponent(boot, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(optionsTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel8)
.addComponent(cpuCount, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(x64))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(optionsTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel9)
.addComponent(memory, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(optionsTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel22)
.addComponent(chipset, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(61, Short.MAX_VALUE))
);
tabs.addTab("Options", optionsTab);
jLabel11.setText("Video");
video.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "cirrus", "std", "vmware", "qxl" }));
jLabel12.setText("Sound");
sound.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "none", "sb16", "es1370", "ac97", "hda", "all" }));
jLabel13.setText("Network1");
net1model.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "disabled", "e1000", "lance", "i82551", "i82557b", "i82559er", "ne2k_pci", "ne2k_isa", "pcnet", "rtl8139", "smc91c111", "mcf_fec" }));
usb.setText("USB");
jLabel16.setText("Type:");
net1type.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "user" }));
net2model.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "disabled", "e1000", "lance", "i82551", "i82557b", "i82559er", "ne2k_pci", "ne2k_isa", "pcnet", "rtl8139", "smc91c111", "mcf_fec" }));
jLabel15.setText("Network2");
jLabel19.setText("Type:");
net2type.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "user" }));
net3model.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "disabled", "e1000", "lance", "i82551", "i82557b", "i82559er", "ne2k_pci", "ne2k_isa", "pcnet", "rtl8139", "smc91c111", "mcf_fec" }));
jLabel20.setText("Network3");
jLabel21.setText("Type:");
net3type.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "user" }));
javax.swing.GroupLayout hwTabLayout = new javax.swing.GroupLayout(hwTab);
hwTab.setLayout(hwTabLayout);
hwTabLayout.setHorizontalGroup(
hwTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(hwTabLayout.createSequentialGroup()
.addContainerGap()
.addGroup(hwTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(hwTabLayout.createSequentialGroup()
.addGroup(hwTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel11)
.addComponent(jLabel12))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(hwTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(sound, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(hwTabLayout.createSequentialGroup()
.addComponent(video, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(usb))))
.addGroup(hwTabLayout.createSequentialGroup()
.addComponent(jLabel13)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(net1model, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel16)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(net1type, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(hwTabLayout.createSequentialGroup()
.addComponent(jLabel15)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(net2model, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel19)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(net2type, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(hwTabLayout.createSequentialGroup()
.addComponent(jLabel20)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(net3model, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel21)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(net3type, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(284, Short.MAX_VALUE))
);
hwTabLayout.setVerticalGroup(
hwTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(hwTabLayout.createSequentialGroup()
.addContainerGap()
.addGroup(hwTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel11)
.addComponent(video, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(usb))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(hwTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel12)
.addComponent(sound, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(hwTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel13)
.addComponent(net1model, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel16)
.addComponent(net1type, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(hwTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel15)
.addComponent(net2model, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel19)
.addComponent(net2type, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(hwTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel20)
.addComponent(net3model, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel21)
.addComponent(net3type, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(15, Short.MAX_VALUE))
);
tabs.addTab("Hardware", hwTab);
isService.setText("Run as a Service");
serviceID.setModel(new javax.swing.SpinnerNumberModel(1, 1, 99, 1));
jLabel14.setText("Unique Service ID");
jLabel14.setToolTipText("This is used as the VNC port (TCP)");
jLabel17.setText("(1-99)");
javax.swing.GroupLayout serviceTabLayout = new javax.swing.GroupLayout(serviceTab);
serviceTab.setLayout(serviceTabLayout);
serviceTabLayout.setHorizontalGroup(
serviceTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(serviceTabLayout.createSequentialGroup()
.addContainerGap()
.addGroup(serviceTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(isService)
.addGroup(serviceTabLayout.createSequentialGroup()
.addComponent(jLabel14)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(serviceID, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel17)))
.addContainerGap(303, Short.MAX_VALUE))
);
serviceTabLayout.setVerticalGroup(
serviceTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(serviceTabLayout.createSequentialGroup()
.addContainerGap()
.addComponent(isService)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(serviceTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(serviceID, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel14)
.addComponent(jLabel17))
.addContainerGap(118, Short.MAX_VALUE))
);
tabs.addTab("Service", serviceTab);
jLabel23.setText("Status:");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(tabs, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel1)
.addComponent(jLabel2))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(os, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(name)))
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel10)
.addGap(8, 8, 8)
.addComponent(folder))
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel23, javax.swing.GroupLayout.PREFERRED_SIZE, 434, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(cancel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(accept)
.addGap(0, 0, Short.MAX_VALUE)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(name, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel10)
.addComponent(folder, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(os, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(tabs)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(accept)
.addComponent(cancel)
.addComponent(jLabel23))
.addContainerGap())
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void cancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelActionPerformed
dispose();
}//GEN-LAST:event_cancelActionPerformed
private void acceptActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_acceptActionPerformed
if (!valid()) return;
accepted = true;
File folderFile = new File(folder.getText());
folderFile.mkdirs();
dispose();
}//GEN-LAST:event_acceptActionPerformed
private void nameKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_nameKeyReleased
if (vm != null) return;
folder.setText(JF.getUserPath() + "/jfqemu/" + name.getText().replaceAll(" ", ""));
}//GEN-LAST:event_nameKeyReleased
private void hd1newActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_hd1newActionPerformed
newImage(hda, 'a');
}//GEN-LAST:event_hd1newActionPerformed
private void hd1selectActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_hd1selectActionPerformed
selectImage(hda);
}//GEN-LAST:event_hd1selectActionPerformed
private void hd2newActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_hd2newActionPerformed
newImage(hdb, 'b');
}//GEN-LAST:event_hd2newActionPerformed
private void hd2selectActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_hd2selectActionPerformed
selectImage(hdb);
}//GEN-LAST:event_hd2selectActionPerformed
private void hd3newActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_hd3newActionPerformed
newImage(hdc, 'c');
}//GEN-LAST:event_hd3newActionPerformed
private void hdsselectActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_hdsselectActionPerformed
selectImage(hdc);
}//GEN-LAST:event_hdsselectActionPerformed
private void hd4newActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_hd4newActionPerformed
newImage(hdd, 'd');
}//GEN-LAST:event_hd4newActionPerformed
private void hd4selectActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_hd4selectActionPerformed
selectImage(hdd);
}//GEN-LAST:event_hd4selectActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton accept;
private javax.swing.JComboBox boot;
private javax.swing.JButton cancel;
private javax.swing.JComboBox chipset;
private javax.swing.JSpinner cpuCount;
private javax.swing.JPanel drivesTab;
private javax.swing.JTextField folder;
private javax.swing.JButton hd1new;
private javax.swing.JButton hd1select;
private javax.swing.JButton hd2new;
private javax.swing.JButton hd2select;
private javax.swing.JButton hd3new;
private javax.swing.JButton hd4new;
private javax.swing.JButton hd4select;
private javax.swing.JTextField hda;
private javax.swing.JCheckBox hdacd;
private javax.swing.JComboBox hdaif;
private javax.swing.JTextField hdb;
private javax.swing.JCheckBox hdbcd;
private javax.swing.JComboBox hdbif;
private javax.swing.JTextField hdc;
private javax.swing.JCheckBox hdccd;
private javax.swing.JComboBox hdcif;
private javax.swing.JTextField hdd;
private javax.swing.JCheckBox hddcd;
private javax.swing.JComboBox hddif;
private javax.swing.JButton hdsselect;
private javax.swing.JPanel hwTab;
private javax.swing.JCheckBox isService;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel10;
private javax.swing.JLabel jLabel11;
private javax.swing.JLabel jLabel12;
private javax.swing.JLabel jLabel13;
private javax.swing.JLabel jLabel14;
private javax.swing.JLabel jLabel15;
private javax.swing.JLabel jLabel16;
private javax.swing.JLabel jLabel17;
private javax.swing.JLabel jLabel18;
private javax.swing.JLabel jLabel19;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel20;
private javax.swing.JLabel jLabel21;
private javax.swing.JLabel jLabel22;
private javax.swing.JLabel jLabel23;
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.JTextField memory;
private javax.swing.JTextField name;
private javax.swing.JComboBox net1model;
private javax.swing.JComboBox net1type;
private javax.swing.JComboBox net2model;
private javax.swing.JComboBox net2type;
private javax.swing.JComboBox net3model;
private javax.swing.JComboBox net3type;
private javax.swing.JPanel optionsTab;
private javax.swing.JComboBox os;
private javax.swing.JSpinner serviceID;
private javax.swing.JPanel serviceTab;
private javax.swing.JComboBox sound;
private javax.swing.JTabbedPane tabs;
private javax.swing.JCheckBox usb;
private javax.swing.JComboBox video;
private javax.swing.JCheckBox x64;
// End of variables declaration//GEN-END:variables
public boolean accepted = false;
private VM vm;
public void getValues(VM vm) {
vm.name = name.getText();
vm.folder = folder.getText();
vm.os = (String)os.getSelectedItem();
vm.hda = hda.getText();
vm.hdb = hdb.getText();
vm.hdc = hdc.getText();
vm.hdd = hdd.getText();
vm.hdacd = hdacd.isSelected();
vm.hdbcd = hdbcd.isSelected();
vm.hdccd = hdccd.isSelected();
vm.hddcd = hddcd.isSelected();
vm.hdaif = (String)hdaif.getSelectedItem();
vm.hdbif = (String)hdbif.getSelectedItem();
vm.hdcif = (String)hdcif.getSelectedItem();
vm.hddif = (String)hddif.getSelectedItem();
vm.cpuCount = (Integer)cpuCount.getValue();
vm.cpuType = x64.isSelected() ? "x86_64" : "i386";
vm.memory = JF.atoi(memory.getText());
switch (boot.getSelectedIndex()) {
case 0: vm.boot = "c"; break;
case 1: vm.boot = "d"; break;
}
if (isService.isSelected())
vm.serviceID = (Integer)serviceID.getValue();
else
vm.serviceID = -1;
vm.sound = (String)sound.getSelectedItem();
vm.video = (String)video.getSelectedItem();
vm.net1model = (String)net1model.getSelectedItem();
vm.net1type = (String)net1type.getSelectedItem();
vm.net2model = (String)net2model.getSelectedItem();
vm.net2type = (String)net2type.getSelectedItem();
vm.net3model = (String)net3model.getSelectedItem();
vm.net3type = (String)net3type.getSelectedItem();
vm.usb = usb.isSelected();
vm.chipset = (String)chipset.getSelectedItem();
}
private boolean isNumberValid(JTextField tf, int min, int max) {
tf.setBackground(new Color(0xff0000));
String str = tf.getText();
int value = JF.atoi(str);
if ((min != -1) && (value < min)) return false;
if ((max != -1) && (value > max)) return false;
tf.setBackground(new Color(0xffffff));
return true;
}
private boolean isNumberValid(JSpinner sp, int min, int max) {
sp.setBackground(new Color(0xff0000));
int value = (Integer)sp.getValue();
if ((min != -1) && (value < min)) return false;
if ((max != -1) && (value > max)) return false;
sp.setBackground(new Color(0xffffff));
return true;
}
private boolean valid() {
boolean ok = true;
if (!isNumberValid(cpuCount, 1, 8)) ok = false;
if (!isNumberValid(memory, 64, -1)) ok = false;
File newFile = new File(folder.getText() + "/jfqemu.xml");
if ( ((vm == null) && newFile.exists()) || (name.getText().length() == 0) ) {
//VM already exists or name is empty
name.setBackground(Color.red);
ok = false;
} else {
name.setBackground(Color.white);
}
if (isService.isSelected()) {
//make sure service ID is unique
boolean idok = true;
int id = (Integer)serviceID.getValue();
for(int a=0;a<MainPanel.vms.size();a++) {
VM vm = MainPanel.vms.get(a);
if (vm == this.vm) continue;
if (id == vm.serviceID) {
idok = ok = false;
serviceID.setBackground(Color.red);
}
}
if (idok) serviceID.setBackground(Color.white);
}
return ok;
}
private void newImage(JTextField hd, char idx) {
String initFilename = folder.getText() + "/hd" + idx;
NewImageDialog dialog = new NewImageDialog(null, true, initFilename);
dialog.setVisible(true);
if (!dialog.accepted) return;
String qemuimg = "";
if (JF.isWindows()) {
qemuimg += System.getenv("ProgramFiles");
qemuimg += "\\QEMU\\";
}
qemuimg += "qemu-img";
String cmd[] = {qemuimg, "create", "-f", dialog.getImageType()
, dialog.getFilename(), dialog.getImageSize() + "G"};
try {
File folderFile = new File(folder.getText());
folderFile.mkdirs();
Runtime.getRuntime().exec(cmd);
} catch(Exception e) {
JF.showError("Error", "Failed to execute qemu-img");
JFLog.log(e);
}
hd.setText(dialog.getFilename());
}
private void selectImage(JTextField hd) {
JFileChooser chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
chooser.setMultiSelectionEnabled(false);
chooser.setCurrentDirectory(new File(JF.getCurrentPath()));
if (chooser.showOpenDialog(this) != JFileChooser.APPROVE_OPTION) return;
hd.setText(chooser.getSelectedFile().getAbsolutePath());
}
private void listTAPs() {
net1type.removeAllItems();
net1type.addItem("user");
net2type.removeAllItems();
net2type.addItem("user");
net3type.removeAllItems();
net3type.addItem("user");
if (JF.isWindows()) return; //TODO : support Windows ???
ShellProcess sp = new ShellProcess();
String output = sp.run(new String[] {"ifconfig", "-a"}, false);
String lns[] = output.split("\n");
for(int a=0;a<lns.length;a++) {
if (!lns[a].startsWith(" ")) {
int idx = lns[a].indexOf(" ");
if (idx == -1) continue;
String name = lns[a].substring(0,idx);
if (!name.startsWith("tap")) continue;
net1type.addItem(name);
net2type.addItem(name);
net3type.addItem(name);
}
}
net1type.setSelectedIndex(0);
net2type.setSelectedIndex(0);
net3type.setSelectedIndex(0);
}
private void setPosition() {
Rectangle s = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds();
Dimension d = getPreferredSize();
setLocation(s.width/2 - d.width/2, s.height/2 - (d.height/2));
}
}