From ca7d3f11361ffa4c3f5495bb30f6ec583503047a Mon Sep 17 00:00:00 2001 From: Tergel TSAGAAN Date: Tue, 5 Jan 2021 17:52:38 +0100 Subject: [PATCH] add projection, update agenda --- src/main/java/GUI/{ => Agenda}/Agenda.java | 94 ++++++++++++++---- .../GUI/{ => Agenda}/RowHeaderRenderer.java | 2 +- .../java/GUI/{ => Agenda}/TableModel.java | 4 +- src/main/java/GUI/Assets/Logo/logo_cannes.jpg | Bin 0 -> 37865 bytes src/main/java/GUI/CompetType.java | 5 - src/main/java/GUI/GUI.java | 35 ++++--- src/main/java/GUI/ProjectionHandler.java | 18 +++- src/main/java/GUI/Types/CompetType.java | 25 +++++ .../java/GUI/{ => Types}/ProjectionType.java | 2 +- src/main/java/ProjectionPlanning/Main.java | 5 +- 10 files changed, 145 insertions(+), 45 deletions(-) rename src/main/java/GUI/{ => Agenda}/Agenda.java (55%) rename src/main/java/GUI/{ => Agenda}/RowHeaderRenderer.java (97%) rename src/main/java/GUI/{ => Agenda}/TableModel.java (90%) create mode 100644 src/main/java/GUI/Assets/Logo/logo_cannes.jpg delete mode 100644 src/main/java/GUI/CompetType.java create mode 100644 src/main/java/GUI/Types/CompetType.java rename src/main/java/GUI/{ => Types}/ProjectionType.java (73%) diff --git a/src/main/java/GUI/Agenda.java b/src/main/java/GUI/Agenda/Agenda.java similarity index 55% rename from src/main/java/GUI/Agenda.java rename to src/main/java/GUI/Agenda/Agenda.java index 31091e6..887e03b 100644 --- a/src/main/java/GUI/Agenda.java +++ b/src/main/java/GUI/Agenda/Agenda.java @@ -1,10 +1,19 @@ -package GUI; +package GUI.Agenda; + +import DB.Competition; +import DB.Projection; +import GUI.ProjectionHandler; +import GUI.Types.CompetType; +import GUI.Types.ProjectionType; import javax.swing.*; import javax.swing.event.MouseInputAdapter; import javax.swing.table.TableColumnModel; import java.awt.*; import java.awt.event.MouseEvent; +import java.sql.Date; +import java.sql.Time; +import java.util.ArrayList; import java.util.Arrays; public class Agenda extends JPanel { @@ -12,13 +21,18 @@ public class Agenda extends JPanel { private String headers[]; private int totalDay; private int currentPage; - public Agenda(JPanel agendaPanel, String headers[], int totalDay, int currentPage) { + private JTable table; + private CompetType competionType; + private Agenda agenda; + + public Agenda(JPanel agendaPanel, int currentPage, CompetType competionType) { this.agendaPanel = agendaPanel; - this.headers = headers; - this.totalDay = totalDay; + this.headers = competionType.getHeaders(); + this.totalDay = 11; this.currentPage = currentPage; + this.competionType = competionType; this.agendaPanel.removeAll(); - int totalPages[] = dayToPage(9); + int totalPages[] = dayToPage(); if (this.currentPage >= totalPages.length) { this.currentPage = totalPages.length - 1; } else if (this.currentPage < 0) { @@ -27,18 +41,33 @@ public class Agenda extends JPanel { JScrollPane scroll = constructAgenda(totalPages[this.currentPage]); agendaPanel.add(scroll); } - private int[] dayToPage(int totalDay) { - int day = totalDay; + + public void refresh() { + this.agendaPanel.removeAll(); + int totalPages[] = dayToPage(); + if (this.currentPage >= totalPages.length) { + this.currentPage = totalPages.length - 1; + } else if (this.currentPage < 0) { + this.currentPage = 0; + } + JScrollPane scroll = constructAgenda(totalPages[this.currentPage]); + agendaPanel.add(scroll); + agendaPanel.repaint(); + agendaPanel.revalidate(); + } + + private int[] dayToPage() { + int day = this.totalDay; int count = 0; while (day >= 5) { - day = day-5; + day = day - 5; count++; } - int rest = totalDay - 5*count; - int totalPages = rest < 5 ? count+1:count; + int rest = totalDay - 5 * count; + int totalPages = rest < 5 ? count + 1 : count; int pages[] = new int[totalPages]; Arrays.fill(pages, 5); - if (rest < 5) pages[totalPages-1] = rest; + if (rest < 5) pages[totalPages - 1] = rest; return pages; } private JScrollPane constructAgenda(int day) { @@ -52,7 +81,7 @@ public class Agenda extends JPanel { } }; TableModel dm = new TableModel(day, currentPage, headers.length); - JTable table = new JTable(dm) { + table = new JTable(dm) { @Override public boolean getScrollableTracksViewportHeight() { return true; @@ -70,14 +99,13 @@ public class Agenda extends JPanel { int row = table.getSelectedRow(); int column = table.getSelectedColumn(); if (mouseEvent.getClickCount() == 2 && table.getSelectedRow() != -1) { - ProjectionHandler dialog; if (table.getValueAt(row, column) == "") { - dialog = new ProjectionHandler(ProjectionType.ADD); + openDialog(ProjectionType.ADD); } else { - dialog = new ProjectionHandler(ProjectionType.EDIT); + openDialog(ProjectionType.EDIT); + } - dialog.pack(); - dialog.setVisible(true); + } } }); @@ -100,10 +128,40 @@ public class Agenda extends JPanel { scroll.setBorder(BorderFactory.createEmptyBorder()); scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER); this.agendaPanel.setPreferredSize(new Dimension(this.agendaPanel.getWidth(), headers.length * 100 + 20)); - + updateMovies(); return scroll; } + private void updateMovies() { + try { + ArrayList projections = Projection.getAvailable(new Competition(this.competionType.getCompetition())); + for (Projection projection : projections) { + addMovie(projection.getStartDate(), projection.getSlot().getStartTime(), projection.getMovie().getName()); + } + } catch (Exception e) { + } + } + + private void openDialog(ProjectionType projectionType) { + ProjectionHandler dialog = new ProjectionHandler(ProjectionType.ADD, this); + ; + dialog.pack(); + dialog.setVisible(true); + } + + private void addMovie(Date startDate, Time time, String movieName) { + int column = this.table.getColumn(startDate.toString()).getModelIndex(); + int row = 0; + String times[] = {"08:30:00", "11:30:00", "15:00:00", "18:00:00", "21:00:00"}; + for (int i = 0; i < times.length; i++) { + if (times[i].equals(time.toString())) { + row = i; + break; + } + } + table.setValueAt(movieName, row, column); + } + public int getCurrentPage() { return this.currentPage; } diff --git a/src/main/java/GUI/RowHeaderRenderer.java b/src/main/java/GUI/Agenda/RowHeaderRenderer.java similarity index 97% rename from src/main/java/GUI/RowHeaderRenderer.java rename to src/main/java/GUI/Agenda/RowHeaderRenderer.java index dd7a2c3..172f4e1 100644 --- a/src/main/java/GUI/RowHeaderRenderer.java +++ b/src/main/java/GUI/Agenda/RowHeaderRenderer.java @@ -1,4 +1,4 @@ -package GUI; +package GUI.Agenda; import javax.swing.*; import javax.swing.table.JTableHeader; diff --git a/src/main/java/GUI/TableModel.java b/src/main/java/GUI/Agenda/TableModel.java similarity index 90% rename from src/main/java/GUI/TableModel.java rename to src/main/java/GUI/Agenda/TableModel.java index eda7239..6a14608 100644 --- a/src/main/java/GUI/TableModel.java +++ b/src/main/java/GUI/Agenda/TableModel.java @@ -1,4 +1,4 @@ -package GUI; +package GUI.Agenda; import javax.swing.table.AbstractTableModel; import java.util.Arrays; @@ -14,7 +14,7 @@ public class TableModel extends AbstractTableModel { columnNames = new String[this.day]; data = new Object[5][this.day]; for (int i = 0; i < this.day; i++) { - this.columnNames[i] = "Jour " + ((i + 1) + (5 * (currentPage))); + this.columnNames[i] = String.format("2021-05-%d", 10 + (i + 1) + (5 * (currentPage))); } for (int i = 0; i < 5; i++) { Arrays.fill(data[i], ""); diff --git a/src/main/java/GUI/Assets/Logo/logo_cannes.jpg b/src/main/java/GUI/Assets/Logo/logo_cannes.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ec11a6be0d60d84347758d0cdcb330e4ee5b9950 GIT binary patch literal 37865 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
Après-midi", "Fin
Après-midi", "Soirée"}; private CompetType currentCompetition = CompetType.LM; + public static void main(String[] args) { + new GUI(); + } + public GUI() { super(); construct(); @@ -43,9 +52,11 @@ public class GUI extends JFrame implements ActionListener { setLocationRelativeTo(null); setResizable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + ImageIcon img = new ImageIcon("src/main/java/GUI/Assets/Logo/logo_cannes.jpg"); + setIconImage(img.getImage()); this.renderMenu(); - new Agenda(agendaPanel, headers, 8, this.currentPage); + new Agenda(agendaPanel, this.currentPage, this.currentCompetition); previousButton.addActionListener(this); nextButton.addActionListener(this); HCButton.addActionListener(this); @@ -62,46 +73,46 @@ public class GUI extends JFrame implements ActionListener { Object source = e.getSource(); if (source == previousButton) { this.currentPage--; - Agenda agenda = new Agenda(agendaPanel, headers, 8, this.currentPage); + Agenda agenda = new Agenda(agendaPanel, this.currentPage, this.currentCompetition); this.currentPage = agenda.getCurrentPage(); this.repaint(); this.revalidate(); } else if (source == nextButton) { this.currentPage++; - Agenda agenda = new Agenda(agendaPanel, headers, 8, this.currentPage); + 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.headers = new String[]{"Matin", "Midi", "Milieu
Après-midi", "Fin
Après-midi", "Soirée"}; - Agenda agenda = new Agenda(agendaPanel, headers, 8, 0); - currentCompetition = CompetType.LM; + this.agenda = new Agenda(agendaPanel, 0, this.currentCompetition); this.repaint(); this.revalidate(); } else if (source == HCButton) { this.headers = new String[]{"Fin
Matinée", "Fin
Après-midi", "Soirée"}; - Agenda agenda = new Agenda(agendaPanel, headers, 8, 0); - currentCompetition = CompetType.HC; + 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.headers = new String[]{"Matin", "Midi", "Milieu
Après-midi", "Fin
Après-midi", "Soirée"}; - Agenda agenda = new Agenda(agendaPanel, headers, 8, 0); - currentCompetition = CompetType.UCR; + this.agenda = new Agenda(agendaPanel, 0, this.currentCompetition); this.repaint(); this.revalidate(); } else if (source == this.menuItemAddProj) { - ProjectionHandler dialog = new ProjectionHandler(ProjectionType.ADD); + ProjectionHandler dialog = new ProjectionHandler(ProjectionType.ADD, agenda); dialog.pack(); dialog.setVisible(true); } else if (source == this.menuItemEditProj) { - ProjectionHandler dialog = new ProjectionHandler(ProjectionType.EDIT); + ProjectionHandler dialog = new ProjectionHandler(ProjectionType.EDIT, agenda); dialog.pack(); dialog.setVisible(true); } else if (source == this.menuItemRemoveProj) { - ProjectionHandler dialog = new ProjectionHandler(ProjectionType.REMOVE); + ProjectionHandler dialog = new ProjectionHandler(ProjectionType.REMOVE, agenda); dialog.pack(); dialog.setVisible(true); } diff --git a/src/main/java/GUI/ProjectionHandler.java b/src/main/java/GUI/ProjectionHandler.java index ac5b01e..da80f57 100644 --- a/src/main/java/GUI/ProjectionHandler.java +++ b/src/main/java/GUI/ProjectionHandler.java @@ -1,14 +1,18 @@ package GUI; import DB.*; +import GUI.Agenda.Agenda; +import GUI.Types.ProjectionType; import javax.swing.*; import java.awt.*; -import java.awt.event.*; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; import java.sql.Date; import java.time.LocalDate; -import java.util.*; -import java.util.List; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Set; import java.util.stream.Collectors; public class ProjectionHandler extends JDialog { @@ -31,12 +35,16 @@ public class ProjectionHandler extends JDialog { private JLabel roomLabel; private JComboBox roomComboBox; private ProjectionType projectionType; + private Agenda agenda; - public ProjectionHandler(ProjectionType projectionType) { + public ProjectionHandler(ProjectionType projectionType, Agenda agenda) { this.projectionType = projectionType; + this.agenda = agenda; setContentPane(contentPane); setModal(true); setPreferredSize(new Dimension(500, 300)); + ImageIcon img = new ImageIcon("src/main/java/GUI/Assets/Logo/logo_cannes.jpg"); + setIconImage(img.getImage()); handleDialogName(); setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); addWindowListener(new WindowAdapter() { @@ -135,6 +143,8 @@ public class ProjectionHandler extends JDialog { return; if (projectionType == ProjectionType.ADD) new Projection(Date.valueOf((LocalDate) dayComboBox.getSelectedItem()), (Competition) competitionComboBox.getSelectedItem(), (Room) roomComboBox.getSelectedItem(), (Movie) filmComboBox.getSelectedItem(), (Slot) slotComboBox.getSelectedItem()); + this.agenda.refresh(); + dispose(); } } diff --git a/src/main/java/GUI/Types/CompetType.java b/src/main/java/GUI/Types/CompetType.java new file mode 100644 index 0000000..aefc382 --- /dev/null +++ b/src/main/java/GUI/Types/CompetType.java @@ -0,0 +1,25 @@ +package GUI.Types; + +public enum CompetType { + LM("Long Métrage"), + UCR("Un Certain Regard"), + HC("Hors Compétition"); + final private String competition; + + CompetType(String competition) { + this.competition = competition; + } + + public String[] getHeaders() { + if (this.competition.equals("Long Métrage") || this.competition.equals("Un Certain Regard")) { + return new String[]{"Matin", "Midi", "Milieu
Après-midi", "Fin
Après-midi", "Soirée"}; + } else if (this.competition.equals("Hors Compétition")) { + return new String[]{"Fin
Matinée", "Fin
Après-midi", "Soirée"}; + } + return new String[0]; + } + + public String getCompetition() { + return this.competition; + } +} \ No newline at end of file diff --git a/src/main/java/GUI/ProjectionType.java b/src/main/java/GUI/Types/ProjectionType.java similarity index 73% rename from src/main/java/GUI/ProjectionType.java rename to src/main/java/GUI/Types/ProjectionType.java index ceccf0f..bf84265 100644 --- a/src/main/java/GUI/ProjectionType.java +++ b/src/main/java/GUI/Types/ProjectionType.java @@ -1,4 +1,4 @@ -package GUI; +package GUI.Types; public enum ProjectionType { ADD, EDIT, REMOVE diff --git a/src/main/java/ProjectionPlanning/Main.java b/src/main/java/ProjectionPlanning/Main.java index ce5d0cd..0e11a2e 100644 --- a/src/main/java/ProjectionPlanning/Main.java +++ b/src/main/java/ProjectionPlanning/Main.java @@ -1,10 +1,11 @@ package ProjectionPlanning; -import DB.*; +import DB.DB; +import Exceptions.NotFoundInTable; import GUI.GUI; public class Main { - public static void main(String[] args) { + public static void main(String[] args) throws NotFoundInTable { DB.connect(); new GUI(); }