Gallery.java 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332
  1. import java.util.*;
  2. import java.awt.*;
  3. import javax.swing.*;
  4. import javax.swing.event.*;
  5. import java.awt.event.*;
  6. import java.io.Serializable;
  7. public class Gallery extends JPanel implements Observer, Serializable
  8. {
  9. private Model model;
  10. private ArrayList<Item> items;
  11. // Bob the Builder this shit
  12. public Gallery(Model model)
  13. {
  14. // Hook up this observer so that it will be notified when the model
  15. // changes.
  16. this.model = model;
  17. this.setLayout(new FlowLayout(10));
  18. this.setBackground(Color.cyan);
  19. this.items = new ArrayList();
  20. reList();
  21. reFill();
  22. try
  23. {
  24. Item.fullStarImg = ImageIO.read(new File("src/main/resources/fullStar.png"));
  25. } catch(IOException e) {}
  26. try
  27. {
  28. Item.emptyStarImg = ImageIO.read(new File("src/main/resources/emptyStar.png"));
  29. } catch(IOException e) {}
  30. Item.fullStarImg = Item.fullStarImg.getScaledInstance(50, 50, java.awt.Image.SCALE_SMOOTH);
  31. Item.emptyStarImg = Item.emptyStarImg.getScaledInstance(50, 50, java.awt.Image.SCALE_SMOOTH);
  32. Item.fullStarIcon = new ImageIcon(Item.fullStarImg);
  33. Item.emptyStarIcon = new ImageIcon(Item.emptyStarImg);
  34. model.addObserver(this);
  35. }
  36. /**
  37. * Update with data from the model.
  38. */
  39. public void update(Object observable)
  40. {
  41. reList();
  42. reFill();
  43. revalidate();
  44. repaint();
  45. }
  46. private void reList()
  47. {
  48. ArrayList<PicData> temp = model.getPics();
  49. this.items.clear();
  50. for (PicData p: temp)
  51. {
  52. Item temp2 = new Item(p);
  53. this.items.add(temp2);
  54. }
  55. }
  56. private void reFill()
  57. {
  58. if (model.getGrid())
  59. {
  60. this.setLayout(new FlowLayout(10));
  61. }
  62. else
  63. {
  64. this.setLayout(new GridLayout(0, 1));
  65. }
  66. this.removeAll();
  67. for (Item i: items)
  68. {
  69. this.add(i);
  70. }
  71. this.setBackground(Color.cyan);
  72. }
  73. }
  74. class Item extends JPanel implements Serializable
  75. {
  76. private PicData data;
  77. private ImageIcon picture;
  78. private JLabel pic;
  79. private JLabel name;
  80. private JPanel rating;
  81. private JLabel dateSize;
  82. public static Image fullStarImg;
  83. public static Image emptyStarImg;
  84. public static ImageIcon fullStarIcon;
  85. public static ImageIcon emptyStarIcon;
  86. private JRadioButton star1;
  87. private JRadioButton star2;
  88. private JRadioButton star3;
  89. private JRadioButton star4;
  90. private JRadioButton star5;
  91. private ButtonGroup stars;
  92. private class clickListener extends MouseInputAdapter
  93. {
  94. public void mousePressed(MouseEvent e)
  95. {
  96. JFrame tempFrame = new JFrame(data.getName());
  97. ImageIcon tempIcon = new ImageIcon(data.getPic());
  98. JLabel tempLabel = new JLabel(tempIcon, JLabel.CENTER);
  99. tempLabel.setMinimumSize(new Dimension(800, 600));
  100. tempFrame.getContentPane().add(tempLabel);
  101. tempFrame.pack();
  102. tempFrame.setVisible(true);
  103. }
  104. }
  105. private clickListener clicklistener;
  106. private class superListener implements ActionListener
  107. {
  108. public void actionPerformed(ActionEvent e)
  109. {
  110. if (e.getSource() == star1)
  111. {
  112. if (!(star1.isSelected()))
  113. {
  114. star1.setSelected(false);
  115. star2.setSelected(false);
  116. star3.setSelected(false);
  117. star4.setSelected(false);
  118. star5.setSelected(false);
  119. star1.setIcon(emptyStarIcon);
  120. star2.setIcon(emptyStarIcon);
  121. star3.setIcon(emptyStarIcon);
  122. star4.setIcon(emptyStarIcon);
  123. star5.setIcon(emptyStarIcon);
  124. data.setRating(0);
  125. }
  126. else
  127. {
  128. star1.setSelected(true);
  129. star2.setSelected(false);
  130. star3.setSelected(false);
  131. star4.setSelected(false);
  132. star5.setSelected(false);
  133. star1.setIcon(fullStarIcon);
  134. star2.setIcon(emptyStarIcon);
  135. star3.setIcon(emptyStarIcon);
  136. star4.setIcon(emptyStarIcon);
  137. star5.setIcon(emptyStarIcon);
  138. data.setRating(1);
  139. }
  140. }
  141. else if (e.getSource() == star2)
  142. {
  143. if (!(star2.isSelected()))
  144. {
  145. star1.setSelected(false);
  146. star2.setSelected(false);
  147. star3.setSelected(false);
  148. star4.setSelected(false);
  149. star5.setSelected(false);
  150. star1.setIcon(emptyStarIcon);
  151. star2.setIcon(emptyStarIcon);
  152. star3.setIcon(emptyStarIcon);
  153. star4.setIcon(emptyStarIcon);
  154. star5.setIcon(emptyStarIcon);
  155. data.setRating(0);
  156. }
  157. else
  158. {
  159. star1.setSelected(true);
  160. star2.setSelected(true);
  161. star3.setSelected(false);
  162. star4.setSelected(false);
  163. star5.setSelected(false);
  164. star1.setIcon(fullStarIcon);
  165. star2.setIcon(fullStarIcon);
  166. star3.setIcon(emptyStarIcon);
  167. star4.setIcon(emptyStarIcon);
  168. star5.setIcon(emptyStarIcon);
  169. data.setRating(2);
  170. }
  171. }
  172. else if (e.getSource() == star3)
  173. {
  174. if (!(star3.isSelected()))
  175. {
  176. star1.setSelected(false);
  177. star2.setSelected(false);
  178. star3.setSelected(false);
  179. star4.setSelected(false);
  180. star5.setSelected(false);
  181. star1.setIcon(emptyStarIcon);
  182. star2.setIcon(emptyStarIcon);
  183. star3.setIcon(emptyStarIcon);
  184. star4.setIcon(emptyStarIcon);
  185. star5.setIcon(emptyStarIcon);
  186. data.setRating(0);
  187. }
  188. else
  189. {
  190. star1.setSelected(true);
  191. star2.setSelected(true);
  192. star3.setSelected(true);
  193. star4.setSelected(false);
  194. star5.setSelected(false);
  195. star1.setIcon(fullStarIcon);
  196. star2.setIcon(fullStarIcon);
  197. star3.setIcon(fullStarIcon);
  198. star4.setIcon(emptyStarIcon);
  199. star5.setIcon(emptyStarIcon);
  200. data.setRating(3);
  201. }
  202. }
  203. else if (e.getSource() == star4)
  204. {
  205. if (!(star4.isSelected()))
  206. {
  207. star1.setSelected(false);
  208. star2.setSelected(false);
  209. star3.setSelected(false);
  210. star4.setSelected(false);
  211. star5.setSelected(false);
  212. star1.setIcon(emptyStarIcon);
  213. star2.setIcon(emptyStarIcon);
  214. star3.setIcon(emptyStarIcon);
  215. star4.setIcon(emptyStarIcon);
  216. star5.setIcon(emptyStarIcon);
  217. data.setRating(0);
  218. }
  219. else
  220. {
  221. star1.setSelected(true);
  222. star2.setSelected(true);
  223. star3.setSelected(true);
  224. star4.setSelected(true);
  225. star5.setSelected(false);
  226. star1.setIcon(fullStarIcon);
  227. star2.setIcon(fullStarIcon);
  228. star3.setIcon(fullStarIcon);
  229. star4.setIcon(fullStarIcon);
  230. star5.setIcon(emptyStarIcon);
  231. data.setRating(4);
  232. }
  233. }
  234. else
  235. {
  236. if (!(star5.isSelected()))
  237. {
  238. star1.setSelected(false);
  239. star2.setSelected(false);
  240. star3.setSelected(false);
  241. star4.setSelected(false);
  242. star5.setSelected(false);
  243. star1.setIcon(emptyStarIcon);
  244. star2.setIcon(emptyStarIcon);
  245. star3.setIcon(emptyStarIcon);
  246. star4.setIcon(emptyStarIcon);
  247. star5.setIcon(emptyStarIcon);
  248. data.setRating(0);
  249. }
  250. else
  251. {
  252. star1.setSelected(true);
  253. star2.setSelected(true);
  254. star3.setSelected(true);
  255. star4.setSelected(true);
  256. star5.setSelected(true);
  257. star1.setIcon(fullStarIcon);
  258. star2.setIcon(fullStarIcon);
  259. star3.setIcon(fullStarIcon);
  260. star4.setIcon(fullStarIcon);
  261. star5.setIcon(fullStarIcon);
  262. data.setRating(5);
  263. }
  264. }
  265. }
  266. }
  267. private superListener superlistener;
  268. public Item(PicData p)
  269. {
  270. this.data = p;
  271. this.clicklistener = new clickListener();
  272. this.superlistener = new superListener();
  273. this.star1 = new JRadioButton(emptyStarIcon, false);
  274. star1.addActionListener(superlistener);
  275. this.star2 = new JRadioButton(emptyStarIcon, false);
  276. star2.addActionListener(superlistener);
  277. this.star3 = new JRadioButton(emptyStarIcon, false);
  278. star3.addActionListener(superlistener);
  279. this.star4 = new JRadioButton(emptyStarIcon, false);
  280. star4.addActionListener(superlistener);
  281. this.star5 = new JRadioButton(emptyStarIcon, false);
  282. star5.addActionListener(superlistener);
  283. this.stars = new ButtonGroup();
  284. stars.add(star1);
  285. stars.add(star2);
  286. stars.add(star3);
  287. stars.add(star4);
  288. stars.add(star5);
  289. star1.setSelected(false);
  290. star2.setSelected(false);
  291. star3.setSelected(false);
  292. star4.setSelected(false);
  293. star5.setSelected(false);
  294. this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
  295. this.setPreferredSize(new Dimension(200, 300));
  296. this.picture = new ImageIcon(data.getPic());
  297. this.pic = new JLabel(picture, JLabel.CENTER);
  298. this.pic.addMouseListener(clicklistener);
  299. this.pic.setPreferredSize(new Dimension(200, 200));
  300. this.name = new JLabel(data.getName(), JLabel.CENTER);
  301. this.name.setPreferredSize(new Dimension(200, 25));
  302. this.rating = new JPanel();
  303. this.rating.setLayout(new BoxLayout(this.rating, BoxLayout.X_AXIS));
  304. this.rating.add(star1);
  305. this.rating.add(star2);
  306. this.rating.add(star3);
  307. this.rating.add(star4);
  308. this.rating.add(star5);
  309. this.rating.setPreferredSize(new Dimension(200, 50));
  310. this.dateSize = new JLabel(Long.toString(data.getLastmod()) + Long.toString(data.getSize()), JLabel.CENTER);
  311. this.dateSize.setPreferredSize(new Dimension(200, 25));
  312. this.add(pic);
  313. this.add(name);
  314. this.add(rating);
  315. this.add(dateSize);
  316. }
  317. }