diff --git a/build.gradle b/build.gradle index ea14aec..37d6120 100644 --- a/build.gradle +++ b/build.gradle @@ -15,6 +15,7 @@ dependencies { implementation 'com.googlecode.json-simple:json-simple:1.1.1' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' + implementation 'io.github.vincenzopalazzo:material-ui-swing:1.1.1' } test { diff --git a/src/main/java/GUI/Agenda/Agenda.java b/src/main/java/GUI/Agenda/Agenda.java index 842d9f5..ed5d61d 100644 --- a/src/main/java/GUI/Agenda/Agenda.java +++ b/src/main/java/GUI/Agenda/Agenda.java @@ -101,7 +101,7 @@ public class Agenda extends JPanel { table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); table.setRowHeight(100); - agenda = this; + Agenda tmp = this; table.addMouseListener(new MouseInputAdapter() { @Override public void mouseReleased(MouseEvent mouseEvent) { @@ -113,7 +113,7 @@ public class Agenda extends JPanel { Projection projection = null; if (currentCellValue.getClass() == Projection.class) projection = (Projection) currentCellValue; - PopUpProjection popUpProjection = new PopUpProjection(projection, agenda); + PopUpProjection popUpProjection = new PopUpProjection(projection, tmp); popUpProjection.show(mouseEvent.getComponent(), mouseEvent.getX(), mouseEvent.getY()); } } diff --git a/src/main/java/GUI/GUI.form b/src/main/java/GUI/GUI.form index 0ddae9d..92ce595 100644 --- a/src/main/java/GUI/GUI.form +++ b/src/main/java/GUI/GUI.form @@ -31,19 +31,21 @@ - + + - + + @@ -75,7 +77,7 @@ - + @@ -84,38 +86,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/src/main/java/GUI/GUI.java b/src/main/java/GUI/GUI.java index 27fd50e..48c94d8 100644 --- a/src/main/java/GUI/GUI.java +++ b/src/main/java/GUI/GUI.java @@ -1,8 +1,10 @@ package GUI; +import DB.Competition; import DB.Slot; +import Exceptions.NotFoundInTable; import GUI.Agenda.Agenda; -import GUI.Types.CompetType; +import GUI.Theme.PrimaryContainedButtonUI; import GUI.Types.ProjectionType; import javax.swing.*; @@ -19,6 +21,7 @@ public class GUI extends JFrame implements ActionListener { private JButton LMButton; private JButton HCButton; private JButton UCRButton; + private JPanel competitionButtonPanel; private JMenuBar menuBar = new JMenuBar(); private JMenu menuFichier = new JMenu("File"); private JMenuItem menuItemAddProj = new JMenuItem("Add projection"); @@ -26,9 +29,9 @@ public class GUI extends JFrame implements ActionListener { private int currentPage; private Agenda agenda; private ArrayList slots = new ArrayList(); - private CompetType currentCompetition = CompetType.LM; + private Competition currentCompetition = new Competition("Long Métrage"); - public GUI() { + public GUI() throws NotFoundInTable { super(); construct(); } @@ -55,15 +58,19 @@ public class GUI extends JFrame implements ActionListener { agenda = new Agenda(agendaPanel, this.currentPage, this.currentCompetition); previousButton.addActionListener(this); nextButton.addActionListener(this); - HCButton.addActionListener(this); - LMButton.addActionListener(this); - UCRButton.addActionListener(this); menuItemAddProj.addActionListener(this); menuItemRemoveProj.addActionListener(this); setVisible(true); } - private void switchCompetition(CompetType competType) { + private void competitionButton() { + competitionButtonPanel = new JPanel(); + for (Competition competition : Competition.getAll()) { + JButton button = new JButton(competition.getName()); + button.setUI(new PrimaryContainedButtonUI()); + button.addActionListener(actionEvent -> switchAgenda(competition)); + competitionButtonPanel.add(button); + } } @Override @@ -80,21 +87,6 @@ public class GUI extends JFrame implements ActionListener { Agenda agenda = new Agenda(agendaPanel, this.currentPage, this.currentCompetition); this.currentPage = agenda.getCurrentPage(); - this.repaint(); - this.revalidate(); - } else if (source == LMButton) { - this.currentCompetition = CompetType.LM; - this.agenda = new Agenda(agendaPanel, 0, this.currentCompetition); - this.repaint(); - this.revalidate(); - } else if (source == HCButton) { - this.currentCompetition = CompetType.HC; - this.agenda = new Agenda(agendaPanel, 0, this.currentCompetition); - this.repaint(); - this.revalidate(); - } else if (source == UCRButton) { - this.currentCompetition = CompetType.UCR; - this.agenda = new Agenda(agendaPanel, 0, this.currentCompetition); this.repaint(); this.revalidate(); } else if (source == this.menuItemAddProj) { @@ -103,4 +95,19 @@ public class GUI extends JFrame implements ActionListener { agenda.openDialog(ProjectionType.REMOVE); } } + + private void switchAgenda(Competition competition) { + this.currentCompetition = competition; + this.agenda = new Agenda(agendaPanel, 0, this.currentCompetition); + this.repaint(); + this.revalidate(); + } + + private void createUIComponents() { + competitionButton(); + nextButton = new JButton(); + nextButton.setUI(new PrimaryContainedButtonUI()); + previousButton = new JButton(); + previousButton.setUI(new PrimaryContainedButtonUI()); + } } diff --git a/src/main/java/GUI/ProjectionHandler.form b/src/main/java/GUI/ProjectionHandler.form index b1913d5..8ca8dce 100644 --- a/src/main/java/GUI/ProjectionHandler.form +++ b/src/main/java/GUI/ProjectionHandler.form @@ -80,7 +80,7 @@ - + @@ -88,7 +88,7 @@ - + diff --git a/src/main/java/GUI/ProjectionHandler.java b/src/main/java/GUI/ProjectionHandler.java index 0821b41..00746ee 100644 --- a/src/main/java/GUI/ProjectionHandler.java +++ b/src/main/java/GUI/ProjectionHandler.java @@ -2,9 +2,11 @@ package GUI; import Config.Config; import DB.*; -import Exceptions.NotFoundInTable; import Exceptions.ProjectionNotSpecified; import GUI.Agenda.Agenda; +import GUI.Theme.DangerContainedButtonUI; +import GUI.Theme.PrimaryContainedButtonUI; +import GUI.Theme.SecondaryContainedButtonUI; import GUI.Types.ProjectionType; import javax.swing.*; @@ -45,9 +47,7 @@ public class ProjectionHandler extends JDialog { throw new ProjectionNotSpecified(); this.projectionType = projectionType; this.agenda = agenda; - try { - competitionComboBox.getModel().setSelectedItem(agenda.getCompetition()); - } catch (NotFoundInTable ignored) {} + competitionComboBox.getModel().setSelectedItem(agenda.getCompetition()); if (agenda.getDate() != null || agenda.getSlot() != null) { updateMovies(); updateDates(); @@ -56,14 +56,14 @@ public class ProjectionHandler extends JDialog { slotComboBox.getModel().setSelectedItem(agenda.getSlot()); updateRooms(); } - createUIComponents(); + createUI(); } public ProjectionHandler(ProjectionType projectionType, Agenda agenda, Projection projection) { this.projectionType = projectionType; this.agenda = agenda; this.projection = projection; - createUIComponents(); + createUI(); competitionComboBox.getModel().setSelectedItem(projection.getCompetition()); filmComboBox.getModel().setSelectedItem(projection.getMovie()); dayComboBox.getModel().setSelectedItem(projection.getStartDate().toLocalDate()); @@ -74,7 +74,7 @@ public class ProjectionHandler extends JDialog { comboBox.setEnabled(false); } - private void createUIComponents() { + private void createUI() { setContentPane(contentPane); setModal(true); setPreferredSize(new Dimension(500, 300)); @@ -107,6 +107,16 @@ public class ProjectionHandler extends JDialog { dispose(); } + private void createUIComponents() { + confirmButton = new JButton(); + if (projectionType == ProjectionType.REMOVE) + confirmButton.setUI(new DangerContainedButtonUI()); + else + confirmButton.setUI(new PrimaryContainedButtonUI()); + cancelButton = new JButton(); + cancelButton.setUI(new SecondaryContainedButtonUI()); + } + private void updateCompetitions() { ArrayList competitions = Competition.getAll(); if (competitions != null) diff --git a/src/main/java/GUI/Theme/DangerContainedButtonUI.java b/src/main/java/GUI/Theme/DangerContainedButtonUI.java new file mode 100644 index 0000000..5bfdf89 --- /dev/null +++ b/src/main/java/GUI/Theme/DangerContainedButtonUI.java @@ -0,0 +1,28 @@ +package GUI.Theme; + +import mdlaf.animation.MaterialUIMovement; +import mdlaf.components.button.MaterialButtonUI; +import mdlaf.utils.MaterialColors; + +import javax.swing.*; + +public class DangerContainedButtonUI extends MaterialButtonUI { + @Override + public void installUI(JComponent c) { + super.mouseHoverEnabled = false; + super.installUI(c); + super.mouseHoverEnabled = true; + super.colorMouseHoverNormalButton = MaterialColors.RED_600; + super.background = MaterialColors.RED_700; + c.setBackground(super.background); + super.foreground = MaterialColors.WHITE; + c.setForeground(super.foreground); + + if (super.mouseHoverEnabled) { + c.addMouseListener( + MaterialUIMovement.getMovement(c, this.colorMouseHoverNormalButton) + ); + } + super.borderEnabled = false; + } +} diff --git a/src/main/java/GUI/Theme/PrimaryContainedButtonUI.java b/src/main/java/GUI/Theme/PrimaryContainedButtonUI.java new file mode 100644 index 0000000..3dc073a --- /dev/null +++ b/src/main/java/GUI/Theme/PrimaryContainedButtonUI.java @@ -0,0 +1,28 @@ +package GUI.Theme; + +import mdlaf.animation.MaterialUIMovement; +import mdlaf.components.button.MaterialButtonUI; +import mdlaf.utils.MaterialColors; + +import javax.swing.*; + +public class PrimaryContainedButtonUI extends MaterialButtonUI { + @Override + public void installUI(JComponent c) { + super.mouseHoverEnabled = false; + super.installUI(c); + super.mouseHoverEnabled = true; + super.colorMouseHoverNormalButton = MaterialColors.BLUE_600; + super.background = MaterialColors.BLUE_700; + c.setBackground(super.background); + super.foreground = MaterialColors.WHITE; + c.setForeground(super.foreground); + + if (super.mouseHoverEnabled) { + c.addMouseListener( + MaterialUIMovement.getMovement(c, this.colorMouseHoverNormalButton) + ); + } + super.borderEnabled = false; + } +} diff --git a/src/main/java/GUI/Theme/SecondaryContainedButtonUI.java b/src/main/java/GUI/Theme/SecondaryContainedButtonUI.java new file mode 100644 index 0000000..6c0c6e3 --- /dev/null +++ b/src/main/java/GUI/Theme/SecondaryContainedButtonUI.java @@ -0,0 +1,28 @@ +package GUI.Theme; + +import mdlaf.animation.MaterialUIMovement; +import mdlaf.components.button.MaterialButtonUI; +import mdlaf.utils.MaterialColors; + +import javax.swing.*; + +public class SecondaryContainedButtonUI extends MaterialButtonUI { + @Override + public void installUI(JComponent c) { + super.mouseHoverEnabled = false; + super.installUI(c); + super.mouseHoverEnabled = true; + super.colorMouseHoverNormalButton = MaterialColors.PURPLE_600; + super.background = MaterialColors.PURPLE_700; + c.setBackground(super.background); + super.foreground = MaterialColors.WHITE; + c.setForeground(super.foreground); + + if (super.mouseHoverEnabled) { + c.addMouseListener( + MaterialUIMovement.getMovement(c, this.colorMouseHoverNormalButton) + ); + } + super.borderEnabled = false; + } +} diff --git a/src/main/java/ProjectionPlanning/Main.java b/src/main/java/ProjectionPlanning/Main.java index 0e11a2e..cf4e7eb 100644 --- a/src/main/java/ProjectionPlanning/Main.java +++ b/src/main/java/ProjectionPlanning/Main.java @@ -3,10 +3,17 @@ package ProjectionPlanning; import DB.DB; import Exceptions.NotFoundInTable; import GUI.GUI; +import mdlaf.MaterialLookAndFeel; +import mdlaf.themes.MaterialLiteTheme; + +import javax.swing.*; public class Main { public static void main(String[] args) throws NotFoundInTable { DB.connect(); + try { + UIManager.setLookAndFeel(new MaterialLookAndFeel(new MaterialLiteTheme())); + } catch (UnsupportedLookAndFeelException ignored) {} new GUI(); } }