diff --git a/AppThinker/app.properties b/AppThinker/app.properties new file mode 100644 index 0000000..f15df0d --- /dev/null +++ b/AppThinker/app.properties @@ -0,0 +1,2 @@ +#Sat Dec 19 19:04:03 CET 2020 +isFirstLaunch=true diff --git a/AppThinker/src/AboutWindow.java b/AppThinker/src/AboutWindow.java new file mode 100644 index 0000000..25a54c2 --- /dev/null +++ b/AppThinker/src/AboutWindow.java @@ -0,0 +1,114 @@ +import javafx.scene.control.TextFormatter; + +import javax.imageio.ImageIO; +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.IOException; +import java.net.URISyntaxException; +import java.net.URL; + +/** + * Fenêtre contenant les informations du logiciel + */ +public class AboutWindow extends JDialog { + + /** + * Constructeur - Crée une fenêtre A propos + */ + public AboutWindow(){ + + //Paramétrage de la fenêtre + this.setTitle("About AppThinker"); + this.setModal(true); + this.setSize(new Dimension(800, 375)); + Image img = null; + try { img = ImageIO.read(AppThinker.class.getResource("img/logoAppThinker.png")); } catch (Exception ex) { } + this.setIconImage(img); + this.setResizable(false); + this.setLocationRelativeTo(null); + this.setLayout(new BorderLayout()); + + JPanel panel = new JPanel(){ + @Override + protected void paintComponent(Graphics g) { + super.paintComponent(g); + Graphics2D g2 = (Graphics2D) g; + RenderingHints rh = new RenderingHints(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); + g2.setRenderingHints(rh); + Image img = null; + try { img = ImageIO.read(AppThinker.class.getResource("img/logoAppThinker.png")); } catch (Exception ex) { } + g2.drawImage(img, 0, 20, 300, 300, this); + /*Informations du logiciel*/ + g2.setColor(new Color(63, 169, 245)); + g2.setFont(new Font("Arial", Font.BOLD, 40)); + g2.drawString("AppThinker", 305, 45); + g2.setFont(new Font("Arial", Font.PLAIN, 20)); + g2.drawString("Make your ideas come true", 305, 80); + g2.setFont(new Font("Arial", Font.PLAIN, 14)); + g2.drawString("> Version : " + AppThinker.version, 305, 140); + g2.drawString("> Editing date : " + AppThinker.dateVersion, 305, 165); + g2.drawString("> Developer : " + AppThinker.developer, 305, 190); + g2.drawString(">", 305, 215); + g2.drawString(">", 305, 240); + g2.drawString(">", 305, 265); + g2.drawString(">", 305, 290); + } + }; + + panel.setLayout(null); + JButton updates = new JButton("Check for updates"); + updates.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + //Ouverture du lien de téléchargement + try { + Desktop.getDesktop().browse(new URL("https://insset-my.sharepoint.com/:f:/g/personal/valentin_boulanger_insset_onmicrosoft_com/En4LybbeF2ZMpeSiesh_Af8BX3Fl1aDzTUWyw4dtQzJaag").toURI()); + } catch (URISyntaxException | IOException ex) { } + } + }); + panel.add(updates); + updates.setBounds(320, 200, 250, 20); + + JButton changelog = new JButton("View Changelog"); + changelog.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + ChangelogWindow changelog = new ChangelogWindow(); + } + }); + panel.add(changelog); + changelog.setBounds(320, 225, 250, 20); + + JButton ideas = new JButton("Add your ideas to the software !"); + ideas.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + //Ouverture du lien de téléchargement + try { + Desktop.getDesktop().browse(new URL("https://forms.gle/WG32HT947MKqdzhbA").toURI()); + } catch (URISyntaxException | IOException ex) { } + } + }); + panel.add(ideas); + ideas.setBounds(320, 250, 250, 20); + + JButton donation = new JButton("Make a donation - Thanks !"); + donation.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + //Ouverture du lien de téléchargement + try { + Desktop.getDesktop().browse(new URL("https://www.paypal.com/paypalme/valentinboulanger").toURI()); + } catch (URISyntaxException | IOException ex) { } + } + }); + panel.add(donation); + donation.setBounds(320, 275, 250, 20); + + this.getContentPane().add(panel); + + this.setVisible(true); + } +} diff --git a/AppThinker/src/AppThinker.java b/AppThinker/src/AppThinker.java index 83aba20..1c7986b 100644 --- a/AppThinker/src/AppThinker.java +++ b/AppThinker/src/AppThinker.java @@ -1,6 +1,9 @@ import javax.swing.*; import javax.swing.filechooser.FileNameExtensionFilter; import java.io.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Properties; /** * La classe principale du logiciel AppThinker. @@ -8,6 +11,13 @@ import java.io.*; */ public class AppThinker { //JavaDoc tags : @param @return @throws @author @version @see @since @serial @deprecated + + public static String version = "1.0.0-dev5"; + public static String dateVersion = "18/12/2020"; + public static List changelog; + public static String developer = "V. BOULANGER"; + public static Properties appProperties = new Properties(); + private static AppThinkerWindow _window; /** @@ -16,10 +26,24 @@ public class AppThinker { * @throws InterruptedException Interruption du thread lors de la pause du splashscreen. */ public static void main(String[] args) throws InterruptedException { + //Création de la liste des modifications de la version actuelle + changelog = new ArrayList(); + changelog.add("Fenêtre A propos et fenêtre de changelog"); + changelog.add("2ème note de version"); + AppThinkerSplashscreen splash = new AppThinkerSplashscreen(); + //Récupération des paramètres du logiciel + loadConfiguration(); Thread.sleep(3000); splash.dispose(); + _window = new AppThinkerWindow(); + //Si le logiciel s'ouvre pour la 1ère fois, on affiche la fenêtre de changelog + if(appProperties.getProperty("isFirstLaunch").equals("true")) { + appProperties.setProperty("isFirstLaunch", "false"); + storeConfiguration(); + ChangelogWindow changelog = new ChangelogWindow(); + } } /** @@ -29,4 +53,43 @@ public class AppThinker { public static AppThinkerWindow getWindow(){ return _window; } + + public static void loadConfiguration(){ + InputStream input = null; + try { + input = new FileInputStream("app.properties"); + //Chargement des préférences du logiciel + appProperties.load(input); + } catch (final IOException ex) { + ex.printStackTrace(); + } finally { + if (input != null) { + try { + input.close(); + } catch (final IOException e) { + e.printStackTrace(); + } + } + } + } + + public static void storeConfiguration(){ + OutputStream output = null; + try { + output = new FileOutputStream("app.properties"); + //Enregistrement des propriétés du logiciel + appProperties.store(output, null); + + } catch (final IOException io) { + io.printStackTrace(); + } finally { + if (output != null) { + try { + output.close(); + } catch (final IOException e) { + e.printStackTrace(); + } + } + } + } } diff --git a/AppThinker/src/AppThinkerMenuBar.java b/AppThinker/src/AppThinkerMenuBar.java index 6a49122..fb2662f 100644 --- a/AppThinker/src/AppThinkerMenuBar.java +++ b/AppThinker/src/AppThinkerMenuBar.java @@ -1,6 +1,10 @@ import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.Desktop; +import java.io.IOException; +import java.net.URISyntaxException; +import java.net.URL; /** * Affiche une barre de menu en entête de la fenêtre. @@ -101,9 +105,24 @@ public class AppThinkerMenuBar extends JMenuBar { _appSettings.setIcon(new ImageIcon(getClass().getResource("img/x16/settings.png"))); _appMenu.add(_appSettings); _appInfo = new JMenuItem("About AppThinker"); + _appInfo.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + AboutWindow about = new AboutWindow(); + } + }); _appInfo.setIcon(new ImageIcon(getClass().getResource("img/x16/info.png"))); _appMenu.add(_appInfo); - _appChangelog = new JMenuItem("News"); + _appChangelog = new JMenuItem("Check for updates"); + _appChangelog.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + //Ouverture du lien de téléchargement + try { + Desktop.getDesktop().browse(new URL("https://insset-my.sharepoint.com/:f:/g/personal/valentin_boulanger_insset_onmicrosoft_com/En4LybbeF2ZMpeSiesh_Af8BX3Fl1aDzTUWyw4dtQzJaag").toURI()); + } catch (URISyntaxException | IOException ex) { } + } + }); _appChangelog.setIcon(new ImageIcon(getClass().getResource("img/x16/news.png"))); _appMenu.add(_appChangelog); diff --git a/AppThinker/src/ChangelogWindow.java b/AppThinker/src/ChangelogWindow.java new file mode 100644 index 0000000..a94ee35 --- /dev/null +++ b/AppThinker/src/ChangelogWindow.java @@ -0,0 +1,71 @@ +import javax.imageio.ImageIO; +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.IOException; +import java.net.URISyntaxException; +import java.net.URL; + +/** + * Fenêtre d'affichage de la version actuelle et des modifications apportées. + */ +public class ChangelogWindow extends JDialog{ + + public ChangelogWindow(){ + //Paramétrage de la fenêtre + this.setTitle("Version " + AppThinker.version); + this.setModal(true); + this.setSize(new Dimension(800, 375)); + Image img = null; + try { img = ImageIO.read(AppThinker.class.getResource("img/logoAppThinker.png")); } catch (Exception ex) { } + this.setIconImage(img); + this.setResizable(false); + this.setLocationRelativeTo(null); + this.setLayout(new BorderLayout()); + + JPanel panel = new JPanel(){ + @Override + protected void paintComponent(Graphics g) { + super.paintComponent(g); + Graphics2D g2 = (Graphics2D) g; + RenderingHints rh = new RenderingHints(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); + g2.setRenderingHints(rh); + Image img = null; + try { img = ImageIO.read(AppThinker.class.getResource("img/logoAppThinker.png")); } catch (Exception ex) { } + g2.drawImage(img, 0, 20, 300, 300, this); + /*Informations du logiciel*/ + g2.setColor(new Color(63, 169, 245)); + g2.setFont(new Font("Arial", Font.BOLD, 40)); + g2.drawString("Thanks for downloading AppThinker !", 50, 45); + g2.setFont(new Font("Arial", Font.PLAIN, 20)); + g2.drawString("Version " + AppThinker.version, 305, 80); + g2.setFont(new Font("Arial", Font.PLAIN, 14)); + int i = 140; + for(String a : AppThinker.changelog){ + g2.drawString("> " + a, 305, i); + i += 25; + } + } + }; + + panel.setLayout(null); + + JButton ideas = new JButton("Add your ideas to the software !"); + ideas.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + //Ouverture du lien de téléchargement + try { + Desktop.getDesktop().browse(new URL("https://forms.gle/WG32HT947MKqdzhbA").toURI()); + } catch (URISyntaxException | IOException ex) { } + } + }); + panel.add(ideas); + ideas.setBounds(305, 90, 250, 20); + + this.getContentPane().add(panel); + + this.setVisible(true); + } +}