diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 0000000..645f4a0 --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,22 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..a55e7a1 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/src/main/java/at/windesign/application/serie/serie.java b/src/main/java/at/windesign/application/serie/serie.java index 9696cac..c28b446 100644 --- a/src/main/java/at/windesign/application/serie/serie.java +++ b/src/main/java/at/windesign/application/serie/serie.java @@ -1,5 +1,7 @@ package at.windesign.application.serie; +import java.awt.*; +import java.util.Objects; import java.util.SortedMap; class serie @@ -16,12 +18,15 @@ class serie private SortedMap m_episodeState; private int m_minSeason; private int m_maxSeason; + private int m_stateInit; + private int m_stateProg; + private int m_stateDone; public serie() { } - public serie(int seriesID, String seriesName, int seriesFirstAired, String seriesResolution, boolean seriesCliffhanger, String seriesStatus, String seriesDownload, String seriesPoster, String seriesBackdrop, SortedMap episodeState, int minSeason, int maxSeason) + public serie(int seriesID, String seriesName, int seriesFirstAired, String seriesResolution, boolean seriesCliffhanger, String seriesStatus, String seriesDownload, String seriesPoster, String seriesBackdrop, SortedMap episodeState, int minSeason, int maxSeason, int stateInit, int stateProg, int stateDone) { m_seriesID = seriesID; m_seriesName = seriesName; @@ -35,6 +40,9 @@ class serie m_episodeState = episodeState; m_minSeason = minSeason; m_maxSeason = maxSeason; + m_stateInit = stateInit; + m_stateProg = stateProg; + m_stateDone = stateDone; } public int getSeriesID() @@ -156,4 +164,58 @@ class serie { m_maxSeason = maxSeason; } + + public int getStateInit() + { + return m_stateInit; + } + + public void setStateInit(int stateInit) + { + m_stateInit = stateInit; + } + + public int getStateProg() + { + return m_stateProg; + } + + public void setStateProg(int stateProg) + { + m_stateProg = stateProg; + } + + public int getStateDone() + { + return m_stateDone; + } + + public void setStateDone(int stateDone) + { + m_stateDone = stateDone; + } + + public String getSeriesStyle() + { + String style = ""; + + if(m_seriesCliffhanger) + style = style + "font-style: italic; "; + + if(Objects.equals(m_seriesStatus, "Returning Series")) + style = style + "font-weight: bold; "; + + String color = ""; + + if(m_stateProg > 0) + color = "background-color: #0000C0; color: #FFFFFF"; + else if(m_stateInit > 0) + color = "background-color: #C0C0C0;"; + else if(m_stateDone > 0) + color = "background-color: #00C000;"; + + style += color; + + return style; + } } \ No newline at end of file diff --git a/src/main/java/at/windesign/application/serie/serieDetailsForwardComposer.java b/src/main/java/at/windesign/application/serie/serieDetailsForwardComposer.java index fee45af..56d68aa 100644 --- a/src/main/java/at/windesign/application/serie/serieDetailsForwardComposer.java +++ b/src/main/java/at/windesign/application/serie/serieDetailsForwardComposer.java @@ -9,16 +9,17 @@ import org.zkoss.zul.Label; import org.zkoss.zul.Window; import java.net.URL; +import java.sql.SQLException; public class serieDetailsForwardComposer extends GenericForwardComposer { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; @Wire - private Window resultWin; + private Window detailsSerie; @Wire - protected Label title; + protected Label seriesName; private serie m_serie; @@ -27,41 +28,53 @@ public class serieDetailsForwardComposer extends GenericForwardComposer private static final long serialVersionUID = 1L; @Wire - private Window resultWin; + private Window detailsSerie; @Wire protected Label title; @@ -22,18 +22,18 @@ public class serieDetailsSelectorComposer extends SelectorComposer @Listen("onClick = #saveButton") public void save() { - resultWin.onClose(); + detailsSerie.onClose(); } @Listen("onClick = #cancelButton") public void cancel() { - resultWin.onClose(); + detailsSerie.onClose(); } @Listen("onClick = #deleteButton") public void delete() { - resultWin.onClose(); + detailsSerie.onClose(); } } \ No newline at end of file diff --git a/src/main/java/at/windesign/application/serie/serieListForwardComposer.java b/src/main/java/at/windesign/application/serie/serieListForwardComposer.java index 96ba0a5..dc1bdb6 100644 --- a/src/main/java/at/windesign/application/serie/serieListForwardComposer.java +++ b/src/main/java/at/windesign/application/serie/serieListForwardComposer.java @@ -17,6 +17,9 @@ public class serieListForwardComposer extends GenericForwardComposer private ListModelList seriesListModel; // the model of the listbox private serieRenderer renderer; + private Integer stateWidth = 4; + private Integer stateHeight = 20; + private final serieDataSource ds = serieDataSource.INSTANCE; @Override @@ -24,8 +27,10 @@ public class serieListForwardComposer extends GenericForwardComposer { super.doAfterCompose(comp); - int minSeason = 0; - int maxSeason = 0; + int minSeason = 0; + int maxSeason = 0; + SortedMap maxEpisode = new TreeMap<>(); + SortedMap listHeader = new TreeMap<>(); try { @@ -41,7 +46,8 @@ public class serieListForwardComposer extends GenericForwardComposer minSeason = rs.getInt("minSeason"); maxSeason = rs.getInt("maxSeason"); } - } catch(SQLException e) + } + catch(SQLException e) { e.printStackTrace(); } @@ -68,8 +74,10 @@ public class serieListForwardComposer extends GenericForwardComposer for(int i = minSeason; i <= maxSeason; i++) { Listheader seasonHeader = new Listheader("Season " + i); - seasonHeader.setHflex("min"); +// seasonHeader.setHflex("min"); head.appendChild(seasonHeader); + maxEpisode.put(i, 0); + listHeader.put(i, seasonHeader); } renderer = new serieRenderer(); @@ -107,6 +115,9 @@ public class serieListForwardComposer extends GenericForwardComposer // fetch all events from database serie serie = new serie(); int oldID = -1; + int stateInit = 0; + int stateProg = 0; + int stateDone = 0; SortedMap episodeState = new TreeMap<>(); serie.setSeriesID(-1); @@ -118,8 +129,15 @@ public class serieListForwardComposer extends GenericForwardComposer if(oldID != -1) { serie.setEpisodeState(episodeState); + serie.setStateInit(stateInit); + serie.setStateProg(stateProg); + serie.setStateDone(stateDone); + seriesListModel.add(serie); episodeState = new TreeMap<>(); + stateInit = 0; + stateProg = 0; + stateDone = 0; } oldID = rs.getInt("seriesID"); @@ -138,18 +156,49 @@ public class serieListForwardComposer extends GenericForwardComposer serie.setMaxSeason(rs.getInt("maxSeason")); } episodeState.put((rs.getInt("seasonNumber") << 8) + rs.getInt("episodeNumber"), rs.getInt("episodeState")); + + switch(rs.getInt("episodeState")) + { + case 1: + stateInit++; + break; + case 2: + stateProg++; + break; + case 3: + stateDone++; + break; + } + int _seasonNumber = rs.getInt("seasonNumber"); + int _episodeNumber = rs.getInt("episodeNumber"); + + if(_seasonNumber != 0) + { + if(maxEpisode.get(_seasonNumber) < _episodeNumber) + maxEpisode.put(_seasonNumber, _episodeNumber); + } } if(serie.getSeriesID() != -1) { serie.setEpisodeState(episodeState); + serie.setStateInit(stateInit); + serie.setStateProg(stateProg); + serie.setStateDone(stateDone); seriesListModel.add(serie); } - } catch( - SQLException e) + for(int i = minSeason; i <= maxSeason; i++) + { + int size = maxEpisode.get(i) * stateWidth; + Listheader header = listHeader.get(i); + header.setWidth(size + 40 + "px"); + } + } + catch(SQLException e) { e.printStackTrace(); - } finally + } + finally { ds.close(); } diff --git a/src/main/java/at/windesign/application/serie/serieRenderer.java b/src/main/java/at/windesign/application/serie/serieRenderer.java index 0e75f43..3b75107 100644 --- a/src/main/java/at/windesign/application/serie/serieRenderer.java +++ b/src/main/java/at/windesign/application/serie/serieRenderer.java @@ -24,6 +24,7 @@ public class serieRenderer implements ListitemRenderer Listcell seriesFirstAiredCell = new Listcell(String.valueOf(data.getSeriesFirstAired())); Listcell seriesResolution = new Listcell(data.getSeriesResolution()); + seriesNameCell.setStyle(data.getSeriesStyle()); seriesNameCell.setParent(item); seriesFirstAiredCell.setParent(item); seriesResolution.setParent(item); @@ -33,6 +34,7 @@ public class serieRenderer implements ListitemRenderer Listcell imageCell = new Listcell(); imageCell.setImageContent(Images.encode("bla.png", getStateImage(s, data.getEpisodeState()))); imageCell.setParent(item); + imageCell.setTooltiptext(getStateText(s, data.getEpisodeState())); } item.setValue(data); @@ -101,4 +103,64 @@ public class serieRenderer implements ListitemRenderer return image; } + + private String getStateText(Integer curSeason, SortedMap state) + { + int season = -1; + int episode = -1; + SortedMap seasonState = new TreeMap<>(); + + for(int key : state.keySet()) + { + season = key >> 8; + episode = key & 0xFF; + + if(season == curSeason) + seasonState.put(episode, state.get(key)); + else if(season > curSeason) + break; + } + + if(seasonState.size() == 0) + return ""; + + String stateInit = ""; + String stateProg = ""; + String stateDone = ""; + + for(Integer key : seasonState.keySet()) + { + switch(seasonState.get(key)) + { + case 0: + break; + case 1: + if(stateInit != "") + stateInit = stateInit + ", "; + stateInit = stateInit + key; + break; + case 2: + if(stateProg != "") + stateProg = stateProg + ", "; + stateProg = stateProg + key; + break; + case 3: + if(stateDone != "") + stateDone = stateDone + ", "; + stateDone = stateDone + key; + break; + } + } + + if(stateInit == "") + stateInit = "none"; + + if(stateProg == "") + stateProg = "none"; + + if(stateDone == "") + stateDone = "none"; + + return "Init: " + stateInit + "\nProgress: " + stateProg + "\nDone: " + stateDone; + } } \ No newline at end of file diff --git a/src/main/webapp/serie/centerSerie.zul b/src/main/webapp/serie/centerSerie.zul index 6a225b7..8acd650 100644 --- a/src/main/webapp/serie/centerSerie.zul +++ b/src/main/webapp/serie/centerSerie.zul @@ -6,9 +6,10 @@ multiple="true" autopaging="true" vflex="true"> - + - - + + diff --git a/src/main/webapp/serie/detailsSerie.zul b/src/main/webapp/serie/detailsSerie.zul index 44e5149..48db8b9 100644 --- a/src/main/webapp/serie/detailsSerie.zul +++ b/src/main/webapp/serie/detailsSerie.zul @@ -1,7 +1,10 @@ - + +