package com.niklim.clicktrace.dialog; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.List; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.table.DefaultTableModel; import com.google.inject.Inject; import com.google.inject.Singleton; import com.niklim.clicktrace.controller.MainController; import com.niklim.clicktrace.model.Session; import com.niklim.clicktrace.model.SessionMetadata; import com.niklim.clicktrace.service.SessionManager; @Singleton public class OpenSessionDialog extends AbstractDialog<OpenSessionView> { @Inject private MainController controller; @Inject private SessionManager sessionManager; List<Session> sessions; @Inject public void init() { initTextWrapping(view.sessionDescription); createListeners(); postInit(); } private void createListeners() { view.table.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { if (e.getClickCount() == 2) { view.dialog.setVisible(false); controller.showSession(sessionManager.loadAll().get(view.table.getSelectedRow())); } } }); view.table.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_ENTER) { view.dialog.setVisible(false); controller.showSession(sessionManager.loadAll().get(view.table.getSelectedRow())); } } }); view.table.getSelectionModel().addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent e) { refreshDescription(); } }); } @Override protected void okAction() { close(true); } @Override protected void cancelAction() { close(false); } private void refreshDescription() { int selectedRow = view.table.getSelectedRow(); if (selectedRow == -1 || sessions.isEmpty()) { view.sessionDescription.setText(""); } else { view.sessionDescription.setText(sessions.get(selectedRow).getDescription()); } } public void open() { loadSessions(); center(); view.dialog.setVisible(true); } private void close(boolean openSession) { view.dialog.setVisible(false); if (openSession) { controller.showSession(sessionManager.loadAll().get(view.table.getSelectedRow())); } } @SuppressWarnings("serial") private void loadSessions() { sessions = sessionManager.loadAll(); DefaultTableModel dataModel = new DefaultTableModel(new String[] { "Name", "Screenshots", "Modified" }, sessions.size()) { @Override public boolean isCellEditable(int row, int column) { // all cells not editable return false; } }; view.table.setModel(dataModel); view.table.getSelectionModel().setSelectionInterval(0, 0); int i = 0; for (Session session : sessions) { SessionMetadata metadata = session.loadMetadata(); view.table.getModel().setValueAt(session, i, 0); view.table.getModel().setValueAt(metadata.getSize(), i, 1); view.table.getModel().setValueAt(metadata.getModified(), i, 2); i++; } } @Override protected OpenSessionView createView() { return new OpenSessionView(); } }