X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmain%2Fjava%2Forg%2Fwamblee%2Fphotos%2Fwicket%2FAlbumPanel.java;h=0c7841c7c32da4de8afc308dac7915e9a2bd2279;hb=3aabf590ddc0719004ef84ccdb95e4af45f2574b;hp=093ed15644faf3b8aaef9c91093dedebdf2d3abc;hpb=8b1bc175311d80b5ca67d8f6ee8a266428cb5fa3;p=photos diff --git a/src/main/java/org/wamblee/photos/wicket/AlbumPanel.java b/src/main/java/org/wamblee/photos/wicket/AlbumPanel.java index 093ed15..0c7841c 100644 --- a/src/main/java/org/wamblee/photos/wicket/AlbumPanel.java +++ b/src/main/java/org/wamblee/photos/wicket/AlbumPanel.java @@ -42,6 +42,8 @@ public class AlbumPanel extends Panel { private static final Logger LOGGER = Logger.getLogger(AlbumPanel.class.getName()); private static final long serialVersionUID = 1L; + public static final int MAX_ROWS = 5; + public static final int MAX_COLUMNS = 5; @Inject @AuthorizedPhotos @@ -67,6 +69,7 @@ public class AlbumPanel extends Panel { } private String path; + private int index; /** * Constructor that is invoked when page is invoked without a session. @@ -81,26 +84,121 @@ public class AlbumPanel extends Panel { info("Invalid album '" + path + "', showing root album instead"); path = "/"; } + add(new Label("path", path)); - PhotoEntry current = authorized.getEntry(path); + index = 0; + String indexString = parameters.getString("index", "0"); + try { + index = Integer.parseInt(indexString); + } + catch (NumberFormatException e) { + // use default value 0 + } + if (index < 0) { + index = 0; + } + PhotoEntry current = authorized.getEntry(path); if (current instanceof Photo) { throw new RuntimeException("AlbumPanel can only show album: " + current.getClass().getName()); } + final Album album = (Album) current; - Album album = (Album) current; + Link prevLink = new Link("prevLink") { + { + if (index - MAX_ROWS * MAX_COLUMNS < 0) { + setEnabled(false); + } + } + + @Override + public void onClick() { + PageParameters pars = new PageParameters(); + pars.put("path", path); + pars.put("index", index - MAX_ROWS * MAX_COLUMNS); + setResponsePage(HomePage.class, pars); + } + }; + add(prevLink); + + // Avoid implicit references to the album to keep the link objects + // small and serializable. + final int albumSize = album.size(); + Link nextLink = new Link("nextLink") { + { + if (index + MAX_ROWS * MAX_COLUMNS >= albumSize) { + setEnabled(false); + } + } + + @Override + public void onClick() { + PageParameters pars = new PageParameters(); + pars.put("path", path); + pars.put("index", index + MAX_ROWS * MAX_COLUMNS); + setResponsePage(HomePage.class, pars); + } + }; + add(nextLink); + + Link parentLink = new Link("parentLink") { + { + if ("/".equals(path)) { + setEnabled(false); + } + } + + @Override + public void onClick() { + PageParameters pars = new PageParameters(); + String parentPath = path.substring(0, path.lastIndexOf("/")); + if (parentPath.length() == 0) { + parentPath = "/"; + } + pars.put("path", parentPath); + pars.put("index", 0); + setResponsePage(HomePage.class, pars); + } + }; + add(parentLink); + + RepeatingView pageLinks = new RepeatingView("pageLinks"); + add(pageLinks); + for (int i = 0; i < album.size() / MAX_ROWS / MAX_COLUMNS; i++) { + final int istart = i * MAX_ROWS * MAX_COLUMNS; + Link pageLink = new Link("pageLink") { + { + if (istart == index) { + setEnabled(false); + } + } + + @Override + public void onClick() { + PageParameters pars = new PageParameters(); + pars.put("path", path); + pars.put("index", istart); + setResponsePage(HomePage.class, pars); + } + }; + pageLink.add(new Label("label", i + "")); + pageLinks.add(pageLink); + WebMarkupContainer container = new WebMarkupContainer(pageLinks.newChildId()); + container.add(pageLink); + pageLinks.add(container); + } - int ientry = 0; + int ientry = index; int irow = 0; RepeatingView row = new RepeatingView("row"); add(row); - while (irow < 5 && ientry < album.size()) { + while (irow < MAX_ROWS && ientry < album.size()) { int icolumn = 0; WebMarkupContainer columns = new WebMarkupContainer(row.newChildId()); row.add(columns); RepeatingView column = new RepeatingView("column"); columns.add(column); - while (icolumn < 5 && ientry < album.size()) { + while (icolumn < MAX_COLUMNS && ientry < album.size()) { WebMarkupContainer thumbnail = new WebMarkupContainer(column.newChildId()); column.add(thumbnail);