2015-01-15 23:20:17 +01:00
package com.sheepit.client.standalone.swing.activity ;
import java.awt.event.ActionEvent ;
import java.awt.event.ActionListener ;
2015-04-03 19:39:52 +01:00
import java.awt.event.KeyEvent ;
import java.awt.event.KeyListener ;
2015-01-15 23:20:17 +01:00
import java.io.File ;
2015-04-02 20:31:16 +01:00
import java.io.IOException ;
2015-01-15 23:20:17 +01:00
import java.util.LinkedList ;
import java.util.List ;
import javax.swing.ImageIcon ;
import javax.swing.JButton ;
import javax.swing.JCheckBox ;
import javax.swing.JFileChooser ;
import javax.swing.JLabel ;
2015-02-02 22:43:42 +00:00
import javax.swing.JOptionPane ;
2015-01-15 23:20:17 +01:00
import javax.swing.JPasswordField ;
import javax.swing.JTextField ;
import com.sheepit.client.Configuration ;
import com.sheepit.client.Configuration.ComputeType ;
import com.sheepit.client.hardware.gpu.GPU ;
import com.sheepit.client.hardware.gpu.GPUDevice ;
import com.sheepit.client.standalone.GuiSwing ;
2015-03-31 00:29:58 +01:00
import com.sheepit.client.standalone.swing.SettingsLoader ;
2015-01-15 23:20:17 +01:00
public class Settings implements Activity {
private static final String DUMMY_CACHE_DIR = " Auto detected " ;
private GuiSwing parent ;
private JTextField login ;
private JPasswordField password ;
private JLabel cacheDirText ;
private File cacheDir ;
private JFileChooser cacheDirChooser ;
private JCheckBox useCPU ;
2015-01-24 17:49:27 +00:00
private List < JCheckBoxGPU > useGPUs ;
2015-01-15 23:20:17 +01:00
2015-03-31 21:35:04 +01:00
private JCheckBox saveFile ;
2015-04-03 19:50:58 +01:00
private JCheckBox autoSignIn ;
2015-01-28 01:02:05 +00:00
JButton saveButton ;
2015-04-03 19:50:58 +01:00
private boolean haveAutoStarted ;
2015-01-15 23:20:17 +01:00
public Settings ( GuiSwing parent_ ) {
parent = parent_ ;
cacheDir = null ;
2015-01-24 17:49:27 +00:00
useGPUs = new LinkedList < JCheckBoxGPU > ( ) ;
2015-04-03 19:50:58 +01:00
haveAutoStarted = false ;
2015-01-15 23:20:17 +01:00
}
@Override
public void show ( ) {
Configuration config = parent . getConfiguration ( ) ;
2015-03-31 00:29:58 +01:00
new SettingsLoader ( ) . merge ( config ) ;
2015-01-15 23:20:17 +01:00
int size_height_label = 24 ;
int start_label_left = 109 ;
int start_label_right = 265 ;
int end_label_right = 490 ;
int n = 10 ;
int sep = 45 ;
ImageIcon image = new ImageIcon ( getClass ( ) . getResource ( " /title.png " ) ) ;
JLabel labelImage = new JLabel ( image ) ;
labelImage . setBounds ( 600 / 2 - 265 / 2 , n , 265 , 130 + n ) ;
n = labelImage . getHeight ( ) ;
parent . getContentPane ( ) . add ( labelImage ) ;
n + = 40 ;
JLabel loginLabel = new JLabel ( " Login: " ) ;
loginLabel . setBounds ( start_label_left , n , 170 , size_height_label ) ;
parent . getContentPane ( ) . add ( loginLabel ) ;
login = new JTextField ( ) ;
login . setBounds ( start_label_right , n , end_label_right - start_label_right , size_height_label ) ;
login . setText ( parent . getConfiguration ( ) . login ( ) ) ;
login . setColumns ( 20 ) ;
2015-04-03 19:39:52 +01:00
login . addKeyListener ( new CheckCanStart ( ) ) ;
2015-01-15 23:20:17 +01:00
parent . getContentPane ( ) . add ( login ) ;
n + = sep ;
JLabel passwordLabel = new JLabel ( " Password: " ) ;
passwordLabel . setBounds ( start_label_left , n , 170 , size_height_label ) ;
parent . getContentPane ( ) . add ( passwordLabel ) ;
password = new JPasswordField ( ) ;
password . setBounds ( start_label_right , n , end_label_right - start_label_right , size_height_label ) ;
password . setText ( parent . getConfiguration ( ) . password ( ) ) ;
password . setColumns ( 10 ) ;
2015-04-03 19:39:52 +01:00
password . addKeyListener ( new CheckCanStart ( ) ) ;
2015-01-15 23:20:17 +01:00
parent . getContentPane ( ) . add ( password ) ;
n + = sep ;
JLabel cacheLabel = new JLabel ( " Working directory " ) ;
cacheLabel . setBounds ( start_label_left , n , 240 , size_height_label ) ;
parent . getContentPane ( ) . add ( cacheLabel ) ;
String destination = DUMMY_CACHE_DIR ;
if ( config . getUserSpecifiedACacheDir ( ) ) {
2015-01-16 01:39:45 +01:00
destination = config . getStorageDir ( ) . getName ( ) ;
2015-01-15 23:20:17 +01:00
}
cacheDirText = new JLabel ( destination ) ;
cacheDirText . setBounds ( start_label_right , n , 240 , size_height_label ) ;
parent . getContentPane ( ) . add ( cacheDirText ) ;
cacheDirChooser = new JFileChooser ( ) ;
cacheDirChooser . setFileSelectionMode ( JFileChooser . DIRECTORIES_ONLY ) ;
JButton openButton = new JButton ( " ... " ) ;
openButton . addActionListener ( new ChooseFileAction ( ) ) ;
openButton . setBounds ( end_label_right - 50 , n , 50 , size_height_label ) ;
parent . getContentPane ( ) . add ( openButton ) ;
n + = sep ;
JLabel computeMethodLabel = new JLabel ( " Use " ) ;
computeMethodLabel . setBounds ( start_label_left , n , 240 , size_height_label ) ;
parent . getContentPane ( ) . add ( computeMethodLabel ) ;
ComputeType method = config . getComputeMethod ( ) ;
useCPU = new JCheckBox ( " CPU " ) ;
boolean gpuChecked = false ;
if ( method = = ComputeType . CPU_GPU ) {
useCPU . setSelected ( true ) ;
gpuChecked = true ;
}
2015-04-07 20:05:48 +01:00
else if ( method = = ComputeType . CPU ) {
2015-01-15 23:20:17 +01:00
useCPU . setSelected ( true ) ;
gpuChecked = false ;
}
2015-04-07 20:05:48 +01:00
else if ( method = = ComputeType . GPU ) {
2015-01-15 23:20:17 +01:00
useCPU . setSelected ( false ) ;
gpuChecked = true ;
}
int size = 60 ;
2015-01-28 01:02:05 +00:00
useCPU . addActionListener ( new CpuChangeAction ( ) ) ;
2015-01-15 23:20:17 +01:00
useCPU . setBounds ( start_label_right , n , size , size_height_label ) ;
parent . getContentPane ( ) . add ( useCPU ) ;
2015-01-24 17:49:27 +00:00
List < GPUDevice > gpus = GPU . listDevices ( ) ;
2015-01-15 23:20:17 +01:00
if ( gpus ! = null ) {
2015-01-24 17:49:27 +00:00
for ( GPUDevice gpu : gpus ) {
2015-01-15 23:20:17 +01:00
n + = 20 ;
2015-01-24 17:49:27 +00:00
JCheckBoxGPU gpuCheckBox = new JCheckBoxGPU ( gpu ) ;
2015-01-27 20:43:40 +01:00
gpuCheckBox . setToolTipText ( gpu . getCudaName ( ) ) ;
2015-01-29 14:30:53 +00:00
if ( gpuChecked ) {
GPUDevice config_gpu = config . getGPUDevice ( ) ;
if ( config_gpu ! = null & & config_gpu . getCudaName ( ) . equals ( gpu . getCudaName ( ) ) ) {
gpuCheckBox . setSelected ( gpuChecked ) ;
}
}
2015-01-15 23:20:17 +01:00
gpuCheckBox . setBounds ( start_label_right , n , 200 , size_height_label ) ;
gpuCheckBox . addActionListener ( new GpuChangeAction ( ) ) ;
parent . getContentPane ( ) . add ( gpuCheckBox ) ;
useGPUs . add ( gpuCheckBox ) ;
}
}
n + = sep ;
2015-03-31 21:35:04 +01:00
saveFile = new JCheckBox ( " Save settings " , true ) ;
saveFile . setBounds ( start_label_right , n , end_label_right - start_label_right , size_height_label ) ;
parent . getContentPane ( ) . add ( saveFile ) ;
2015-04-03 19:50:58 +01:00
n + = 20 ;
autoSignIn = new JCheckBox ( " Auto sign in " , config . getAutoSignIn ( ) ) ;
autoSignIn . setBounds ( start_label_right , n , end_label_right - start_label_right , size_height_label ) ;
autoSignIn . addActionListener ( new AutoSignInChangeAction ( ) ) ;
parent . getContentPane ( ) . add ( autoSignIn ) ;
2015-03-31 21:35:04 +01:00
n + = sep ;
2015-01-28 01:02:05 +00:00
saveButton = new JButton ( " Start " ) ;
2015-01-15 23:20:17 +01:00
saveButton . setBounds ( start_label_right , n , 80 , size_height_label ) ;
saveButton . addActionListener ( new SaveAction ( ) ) ;
parent . getContentPane ( ) . add ( saveButton ) ;
2015-04-03 19:50:58 +01:00
if ( haveAutoStarted = = false & & config . getAutoSignIn ( ) & & checkDisplaySaveButton ( ) ) {
// auto start
haveAutoStarted = true ;
new SaveAction ( ) . actionPerformed ( null ) ;
}
2015-01-15 23:20:17 +01:00
}
2015-04-03 19:50:58 +01:00
public boolean checkDisplaySaveButton ( ) {
2015-01-28 01:02:05 +00:00
boolean selected = useCPU . isSelected ( ) ;
for ( JCheckBoxGPU box : useGPUs ) {
if ( box . isSelected ( ) ) {
selected = true ;
}
}
2015-04-03 19:39:52 +01:00
if ( login . getText ( ) . isEmpty ( ) | | password . getPassword ( ) . length = = 0 ) {
selected = false ;
}
2015-01-28 01:02:05 +00:00
saveButton . setEnabled ( selected ) ;
2015-04-03 19:50:58 +01:00
return selected ;
2015-01-28 01:02:05 +00:00
}
2015-01-15 23:20:17 +01:00
class ChooseFileAction implements ActionListener {
@Override
public void actionPerformed ( ActionEvent arg0 ) {
2015-02-02 22:43:42 +00:00
JOptionPane . showMessageDialog ( parent . getContentPane ( ) , " <html>The working directory has to be dedicated directory. <br />Caution, everything not related to SheepIt-Renderfarm will be removed.<br />You should create a directory specifically for it.</html> " , " Warning: files will be removed! " , JOptionPane . WARNING_MESSAGE ) ;
2015-01-15 23:20:17 +01:00
int returnVal = cacheDirChooser . showOpenDialog ( parent . getContentPane ( ) ) ;
if ( returnVal = = JFileChooser . APPROVE_OPTION ) {
File file = cacheDirChooser . getSelectedFile ( ) ;
cacheDir = file ;
cacheDirText . setText ( cacheDir . getName ( ) ) ;
}
}
}
2015-01-28 01:02:05 +00:00
class CpuChangeAction implements ActionListener {
@Override
public void actionPerformed ( ActionEvent e ) {
checkDisplaySaveButton ( ) ;
}
}
2015-01-15 23:20:17 +01:00
class GpuChangeAction implements ActionListener {
@Override
public void actionPerformed ( ActionEvent e ) {
for ( JCheckBox box : useGPUs ) {
if ( box . equals ( e . getSource ( ) ) = = false ) {
box . setSelected ( false ) ;
}
}
2015-01-28 01:02:05 +00:00
checkDisplaySaveButton ( ) ;
2015-01-15 23:20:17 +01:00
}
}
2015-04-03 19:39:52 +01:00
class AutoSignInChangeAction implements ActionListener {
@Override
public void actionPerformed ( ActionEvent e ) {
if ( autoSignIn . isSelected ( ) ) {
saveFile . setSelected ( true ) ;
}
}
}
2015-01-15 23:20:17 +01:00
class SaveAction implements ActionListener {
@Override
public void actionPerformed ( ActionEvent e ) {
if ( parent = = null ) {
return ;
}
Configuration config = parent . getConfiguration ( ) ;
if ( config = = null ) {
return ;
}
if ( cacheDir ! = null ) {
File fromConfig = config . getStorageDir ( ) ;
if ( fromConfig ! = null & & fromConfig . getAbsolutePath ( ) . equals ( cacheDir . getAbsolutePath ( ) ) = = false ) {
config . setCacheDir ( cacheDir ) ;
}
else {
System . out . println ( " Activity::Settings::handle do not dir since it did not change (dir: " + cacheDir + " ) " ) ;
}
}
2015-01-24 17:49:27 +00:00
GPUDevice selected_gpu = null ;
for ( JCheckBoxGPU box : useGPUs ) {
2015-01-15 23:20:17 +01:00
if ( box . isSelected ( ) ) {
2015-01-24 17:49:27 +00:00
selected_gpu = box . getGPUDevice ( ) ;
2015-01-15 23:20:17 +01:00
}
}
2015-04-07 20:05:48 +01:00
ComputeType method = ComputeType . CPU ;
2015-01-15 23:20:17 +01:00
if ( useCPU . isSelected ( ) & & selected_gpu = = null ) {
2015-04-07 20:05:48 +01:00
method = ComputeType . CPU ;
2015-01-15 23:20:17 +01:00
}
else if ( useCPU . isSelected ( ) = = false & & selected_gpu ! = null ) {
2015-04-07 20:05:48 +01:00
method = ComputeType . GPU ;
2015-01-15 23:20:17 +01:00
}
else if ( useCPU . isSelected ( ) & & selected_gpu ! = null ) {
method = ComputeType . CPU_GPU ;
}
config . setComputeMethod ( method ) ;
2015-01-24 17:49:27 +00:00
if ( selected_gpu ! = null ) {
config . setUseGPU ( selected_gpu ) ;
2015-01-15 23:20:17 +01:00
}
parent . setCredentials ( login . getText ( ) , new String ( password . getPassword ( ) ) ) ;
2015-03-31 00:29:58 +01:00
String cachePath = null ;
if ( config . getUserSpecifiedACacheDir ( ) & & config . getStorageDir ( ) ! = null ) {
cachePath = config . getStorageDir ( ) . getAbsolutePath ( ) ;
}
2015-03-31 21:35:04 +01:00
if ( saveFile . isSelected ( ) ) {
2015-04-08 20:37:53 +01:00
new SettingsLoader ( login . getText ( ) , new String ( password . getPassword ( ) ) , method , selected_gpu , cachePath , autoSignIn . isSelected ( ) , GuiSwing . type ) . saveFile ( ) ;
2015-03-31 21:35:04 +01:00
}
2015-04-02 20:31:16 +01:00
else {
try {
new File ( new SettingsLoader ( ) . getFilePath ( ) ) . delete ( ) ;
}
catch ( SecurityException e3 ) {
}
}
2015-01-15 23:20:17 +01:00
}
}
2015-01-24 17:49:27 +00:00
class JCheckBoxGPU extends JCheckBox {
private GPUDevice gpu ;
public JCheckBoxGPU ( GPUDevice gpu ) {
super ( gpu . getModel ( ) ) ;
this . gpu = gpu ;
}
public GPUDevice getGPUDevice ( ) {
return gpu ;
}
}
2015-04-03 19:39:52 +01:00
public class CheckCanStart implements KeyListener {
@Override
public void keyPressed ( KeyEvent arg0 ) {
}
@Override
public void keyReleased ( KeyEvent arg0 ) {
}
@Override
public void keyTyped ( KeyEvent arg0 ) {
checkDisplaySaveButton ( ) ;
}
}
2015-01-15 23:20:17 +01:00
}