/******************************************************************************* * Copyright 2011 See AUTHORS file. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package com.badlogic.gdx.setup; import static java.awt.GridBagConstraints.BOTH; import static java.awt.GridBagConstraints.CENTER; import static java.awt.GridBagConstraints.HORIZONTAL; import static java.awt.GridBagConstraints.NONE; import static java.awt.GridBagConstraints.NORTH; import static java.awt.GridBagConstraints.SOUTH; import static java.awt.GridBagConstraints.SOUTHEAST; import static java.awt.GridBagConstraints.WEST; import java.awt.Color; import java.awt.Cursor; import java.awt.Desktop; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.List; import javax.swing.BorderFactory; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JSeparator; import javax.swing.JTextField; import javax.swing.border.Border; import javax.swing.border.CompoundBorder; import javax.swing.border.EmptyBorder; import com.badlogic.gdx.setup.GdxSetupUI.SetupButton; import com.badlogic.gdx.setup.GdxSetupUI.SetupCheckBox; public class SettingsDialog extends JDialog { private JPanel contentPane; private SetupButton buttonOK; private SetupButton buttonCancel; private JLabel linkText; private JPanel content; private JPanel bottomPanel; private JPanel buttonPanel; private JTextField mavenTextField; private SetupCheckBox ideaBox; private SetupCheckBox eclipseBox; SetupCheckBox offlineBox; private String mavenSnapshot; private boolean ideaSnapshot; private boolean eclipseSnapshot; private boolean offlineSnapshot; public SettingsDialog () { contentPane = new JPanel(new GridBagLayout()); setContentPane(contentPane); setModal(true); getRootPane().setDefaultButton(buttonOK); uiLayout(); uiStyle(); buttonOK.addActionListener(new ActionListener() { public void actionPerformed (ActionEvent e) { if (offlineBox.isSelected()) { int value = JOptionPane.showConfirmDialog(null, "You have selected offline mode. This requires you to have your dependencies already in your maven/gradle cache.\n\nThe setup will fail if you do not have the correct dependenices already.\n\nDo you want to continue?", "Warning!", JOptionPane.YES_NO_OPTION); if (value == 0) { onOK(); } } else { onOK(); } } }); buttonCancel.addActionListener(new ActionListener() { @Override public void actionPerformed (ActionEvent e) { onCancel(); } }); linkText.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); linkText.addMouseListener(new MouseAdapter() { public void mouseClicked (MouseEvent e) { if (e.getClickCount() > 0) { if (Desktop.isDesktopSupported()) { Desktop desktop = Desktop.getDesktop(); try { URI uri = new URI( "https://github.com/libgdx/libgdx/wiki/Improving-workflow-with-Gradle#how-to-remove-gradle-ide-integration-from-your-project"); desktop.browse(uri); } catch (IOException ex) { ex.printStackTrace(); } catch (URISyntaxException ex) { ex.printStackTrace(); } } } } }); setTitle("Advanced Settings"); setSize(600, 300); setLocationRelativeTo(null); } private void uiLayout () { content = new JPanel(new GridBagLayout()); content.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20)); bottomPanel = new JPanel(new GridBagLayout()); buttonPanel = new JPanel(new GridBagLayout()); buttonPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); buttonOK = new SetupButton("Save"); buttonCancel = new SetupButton("Cancel"); buttonPanel.add(buttonOK, new GridBagConstraints(0, 0, 1, 1, 0, 0, CENTER, HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0)); buttonPanel.add(buttonCancel, new GridBagConstraints(1, 0, 1, 1, 0, 0, CENTER, HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0)); contentPane.add(content, new GridBagConstraints(0, 0, 1, 1, 1, 1, NORTH, BOTH, new Insets(0, 0, 0, 0), 0, 0)); JLabel settings = new JLabel("Settings"); JLabel description = new JLabel("Description"); settings.setForeground(new Color(255, 255, 255)); description.setForeground(new Color(255, 255, 255)); settings.setHorizontalAlignment(JLabel.CENTER); description.setHorizontalAlignment(JLabel.CENTER); content.add(settings, new GridBagConstraints(0, 0, 1, 1, 1, 1, NORTH, HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0)); content.add(description, new GridBagConstraints(3, 0, 1, 1, 1, 1, NORTH, HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0)); JLabel mavenLabel = new JLabel("Maven Mirror Url"); JLabel mavenDesc = new JLabel("Replaces Maven Central with this repository"); mavenTextField = new JTextField(15); mavenTextField.setMinimumSize(mavenTextField.getPreferredSize()); mavenLabel.setForeground(new Color(170, 170, 170)); mavenDesc.setForeground(new Color(170, 170, 170)); JLabel ideaLabel = new JLabel("IDEA"); JLabel ideaDesc = new JLabel("Generates Intellij IDEA project files"); ideaBox = new SetupCheckBox(); ideaLabel.setForeground(new Color(170, 170, 170)); ideaDesc.setForeground(new Color(170, 170, 170)); ideaBox.setBackground(new Color(36, 36, 36)); JLabel eclipseLabel = new JLabel("Eclipse"); JLabel eclipseDesc = new JLabel("Generates Eclipse project files"); eclipseBox = new SetupCheckBox(); eclipseLabel.setForeground(new Color(170, 170, 170)); eclipseDesc.setForeground(new Color(170, 170, 170)); eclipseBox.setBackground(new Color(36, 36, 36)); JLabel offlineLabel = new JLabel("Offline Mode"); JLabel offlineDesc = new JLabel("Don't force download dependencies"); offlineBox = new SetupCheckBox(); offlineLabel.setForeground(new Color(170, 170, 170)); offlineDesc.setForeground(new Color(170, 170, 170)); offlineBox.setBackground(new Color(36, 36, 36)); JSeparator separator = new JSeparator(); separator.setForeground(new Color(85, 85, 85)); separator.setBackground(new Color(85, 85, 85)); content.add(separator, new GridBagConstraints(0, 1, 4, 1, 1, 1, NORTH, HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0)); content.add(mavenLabel, new GridBagConstraints(0, 2, 1, 1, 1, 1, NORTH, HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0)); content.add(mavenTextField, new GridBagConstraints(1, 2, 2, 1, 1, 1, NORTH, HORIZONTAL, new Insets(0, 15, 0, 0), 0, 0)); content.add(mavenDesc, new GridBagConstraints(3, 2, 1, 1, 1, 1, NORTH, HORIZONTAL, new Insets(0, 15, 0, 0), 0, 0)); content.add(ideaLabel, new GridBagConstraints(0, 3, 1, 1, 1, 1, NORTH, HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0)); content.add(ideaBox, new GridBagConstraints(1, 3, 2, 1, 1, 1, NORTH, HORIZONTAL, new Insets(0, 15, 0, 0), 0, 0)); content.add(ideaDesc, new GridBagConstraints(3, 3, 2, 1, 1, 1, NORTH, HORIZONTAL, new Insets(0, 15, 0, 0), 0, 0)); content.add(eclipseLabel, new GridBagConstraints(0, 4, 1, 1, 1, 1, NORTH, HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0)); content.add(eclipseBox, new GridBagConstraints(1, 4, 2, 1, 1, 1, NORTH, HORIZONTAL, new Insets(0, 15, 0, 0), 0, 0)); content.add(eclipseDesc, new GridBagConstraints(3, 4, 1, 1, 1, 1, NORTH, HORIZONTAL, new Insets(0, 15, 0, 0), 0, 0)); content.add(offlineLabel, new GridBagConstraints(0, 5, 1, 1, 1, 1, NORTH, HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0)); content.add(offlineBox, new GridBagConstraints(1, 5, 2, 1, 1, 1, NORTH, HORIZONTAL, new Insets(0, 15, 0, 0), 0, 0)); content.add(offlineDesc, new GridBagConstraints(3, 5, 1, 1, 1, 1, NORTH, HORIZONTAL, new Insets(0, 15, 0, 0), 0, 0)); String text = "<p style=\"font-size:10\">Click for more info on using Gradle without IDE integration</p>"; linkText = new JLabel("<html>" + text + "</html>"); bottomPanel.add(linkText, new GridBagConstraints(0, 0, 1, 1, 1, 1, WEST, NONE, new Insets(0, 10, 0, 0), 0, 0)); bottomPanel.add(buttonPanel, new GridBagConstraints(3, 0, 1, 1, 1, 1, SOUTHEAST, NONE, new Insets(0, 0, 0, 0), 0, 0)); contentPane.add(bottomPanel, new GridBagConstraints(0, 1, 4, 1, 1, 1, SOUTH, HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0)); } private void uiStyle () { content.setBackground(new Color(36, 36, 36)); content.setForeground(new Color(255, 255, 255)); bottomPanel.setBackground(new Color(36, 36, 36)); bottomPanel.setForeground(new Color(255, 255, 255)); buttonPanel.setBackground(new Color(36, 36, 36)); buttonPanel.setForeground(new Color(255, 255, 255)); linkText.setForeground(new Color(20, 150, 20)); contentPane.setBackground(new Color(36, 36, 36)); Border line = BorderFactory.createLineBorder(new Color(80, 80, 80)); Border empty = new EmptyBorder(4, 4, 4, 4); CompoundBorder border = new CompoundBorder(line, empty); mavenTextField.setBorder(border); mavenTextField.setCaretColor(new Color(255, 255, 255)); mavenTextField.setBackground(new Color(46, 46, 46)); mavenTextField.setForeground(new Color(255, 255, 255)); } public void showDialog () { takeSnapshot(); setVisible(true); } public List<String> getGradleArgs () { List<String> list = new ArrayList<String>(); list.add("--no-daemon"); if (offlineBox.isSelected()) { list.add("--offline"); } if (eclipseBox.isSelected()) { list.add("eclipse"); list.add("afterEclipseImport"); } if (ideaBox.isSelected()) { list.add("idea"); } return list; } void onOK () { if (mavenTextField.getText().isEmpty()) { DependencyBank.mavenCentral = "mavenCentral()"; } else { DependencyBank.mavenCentral = "maven { url \"" + mavenTextField.getText() + "\" }"; } setVisible(false); } void onCancel () { setVisible(false); restore(); } private void takeSnapshot () { mavenSnapshot = mavenTextField.getText(); ideaSnapshot = ideaBox.isSelected(); eclipseSnapshot = eclipseBox.isSelected(); offlineSnapshot = offlineBox.isSelected(); } private void restore () { mavenTextField.setText(mavenSnapshot); ideaBox.setSelected(ideaSnapshot); eclipseBox.setSelected(eclipseSnapshot); offlineBox.setSelected(offlineSnapshot); } }