package org.robovm.idea.components.setupwizard;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Arrays;
import java.util.List;
import javax.swing.*;
import com.intellij.execution.ExecutionException;
import com.intellij.execution.process.ProcessOutput;
import com.intellij.execution.util.ExecUtil;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
import com.intellij.openapi.fileChooser.FileChooserDialog;
import com.intellij.openapi.fileChooser.FileChooserFactory;
import com.intellij.openapi.projectRoots.JavaSdk;
import com.intellij.openapi.projectRoots.ProjectJdkTable;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.ui.components.labels.LinkLabel;
import com.intellij.ui.components.labels.LinkListener;
import org.robovm.compiler.util.ToolchainUtil;
public class XcodeSetupDialog extends JDialog {
private JPanel panel;
private JLabel infoText;
private JButton nextButton;
private JLabel errorLabel;
private JPanel header;
private JButton installXcodeButton;
private JLabel linkLabel;
public XcodeSetupDialog() {
setContentPane(panel);
setModalityType(ModalityType.APPLICATION_MODAL);
setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
setTitle("RoboVM Setup");
infoText.setText("<html>RoboVM requires Xcode 6 or higher.<br><br>" +
"Once installed <ol><li>Open Xcode</li><li>Agree to the TOS.</li><li>Agree to install the command line " +
"tools</li></ol><br>" +
"<strong>Note</strong>: to deploy to a device, you will need to signup for an <strong>Apple Developer Account</strong> " +
"and create a signing identity and provisioning profile.");
linkLabel.setText("Visit the Apple iOS Developer Center");
installXcodeButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
Desktop.getDesktop().browse(new URI("macappstore://itunes.apple.com/at/app/xcode/id497799835?mt=12#"));
} catch (Throwable t) {
// nothing to do here
}
}
});
new Thread(new Runnable() {
boolean done = false;
@Override
public void run() {
while(!done) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
validateInput();
done = !errorLabel.isVisible();
}
});
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
nextButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dispose();
}
});
validateInput();
pack();
setLocationRelativeTo(null);
}
private void validateInput() {
boolean valid = false;
try {
ToolchainUtil.findXcodePath();
valid = true;
} catch (Throwable e) {
valid = false;
}
errorLabel.setVisible(!valid);
nextButton.setEnabled(valid);
installXcodeButton.setEnabled(!valid);
}
private void createUIComponents() {
linkLabel = new LinkLabel("Visit the Apple iOS Developer Center", null, new LinkListener() {
@Override
public void linkSelected(LinkLabel aSource, Object aLinkData) {
try {
Desktop.getDesktop().browse(new URI("https://developer.apple.com/devcenter/ios/index.action"));
} catch (URISyntaxException | IOException ex) {
//It looks like there's a problem
}
}
});
}
public static void main(String[] args) {
XcodeSetupDialog dialog = new XcodeSetupDialog();
dialog.pack();
dialog.setVisible(true);
System.exit(0);
}
}