package com.niklim.clicktrace.view.control; import java.awt.Color; import java.awt.event.ActionListener; import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JToolBar; import com.google.inject.Inject; import com.google.inject.Singleton; import com.niklim.clicktrace.Icons; import com.niklim.clicktrace.controller.ActiveSession; import com.niklim.clicktrace.controller.operation.session.ChangeSessionDescriptionOperation; import com.niklim.clicktrace.controller.operation.session.DeleteActiveSessionOperation; import com.niklim.clicktrace.controller.operation.session.NewSessionOperation; import com.niklim.clicktrace.controller.operation.session.OpenSearchDialogOperation; import com.niklim.clicktrace.controller.operation.session.OpenSessionOperation; import com.niklim.clicktrace.controller.operation.session.RefreshSessionOperation; import com.niklim.clicktrace.controller.operation.session.ReorderOperation; import com.niklim.clicktrace.controller.operation.session.StartRecordingOperation; import com.niklim.clicktrace.controller.operation.session.StopRecordingOperation; import com.niklim.clicktrace.view.OperationsShortcutEnum; @Singleton public class ToolbarView { private JToolBar toolbar; @Inject private ActiveSession activeSession; @Inject private NewSessionOperation newSessionOperation; @Inject private DeleteActiveSessionOperation deleteActiveSessionOperation; @Inject private StartRecordingOperation startRecordingOperation; @Inject private StopRecordingOperation stopRecordingOperation; @Inject private RefreshSessionOperation refreshSessionOperation; @Inject private OpenSessionOperation openSessionOperation; @Inject private OpenSearchDialogOperation openSearchDialogOperation; @Inject private ChangeSessionDescriptionOperation changeSessionDescriptionOperation; @Inject private ReorderOperation reorderOperation; private JButton deleteSession; private JButton refreshSession; private JButton startSession; private JButton stopSession; private JButton sessionDescription; private JButton reorderSession; public ToolbarView() { } @Inject public void init() { toolbar = new JToolBar(JToolBar.HORIZONTAL); toolbar.setFloatable(false); toolbar.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 1, Color.GRAY)); toolbar.add(createButton("New session " + OperationsShortcutEnum.SESSION_NEW.text, Icons.SESSION_NEW, newSessionOperation.action())); toolbar.addSeparator(); toolbar.add(createButton("Open session " + OperationsShortcutEnum.SESSION_OPEN.text, Icons.SESSION_OPEN, openSessionOperation.action())); toolbar.addSeparator(); toolbar.add(createButton("Find " + OperationsShortcutEnum.FIND.text, Icons.SEARCH, openSearchDialogOperation.action())); toolbar.addSeparator(); reorderSession = createButton("Reorder screenshots " + OperationsShortcutEnum.SESSION_REORDER.text, Icons.SESSION_REORDER, reorderOperation.action()); reorderSession.setEnabled(false); toolbar.add(reorderSession); sessionDescription = createButton("Session description " + OperationsShortcutEnum.SESSION_DESCRIPTION.text, Icons.SESSION_DESCRIPTION, changeSessionDescriptionOperation.action()); sessionDescription.setEnabled(false); toolbar.add(sessionDescription); deleteSession = createButton("Delete session " + OperationsShortcutEnum.SESSION_DELETE.text, Icons.SESSION_DELETE, deleteActiveSessionOperation.action()); deleteSession.setEnabled(false); toolbar.add(deleteSession); toolbar.addSeparator(); refreshSession = createButton("Refresh session " + OperationsShortcutEnum.SESSION_REFRESH.text, Icons.SESSION_REFRESH, refreshSessionOperation.action()); refreshSession.setEnabled(false); toolbar.add(refreshSession); toolbar.addSeparator(); startSession = createButton("Record [Ctrl+Shift+R]", Icons.START_RECORDING, startRecordingOperation.action()); toolbar.add(startSession); toolbar.addSeparator(); stopSession = createButton("Pause [Ctrl+Shift+S]", Icons.STOP_RECORDING, stopRecordingOperation.action()); stopSession.setEnabled(false); toolbar.add(stopSession); } public JButton createButton(String tooltip, String icon, final ActionListener listener) { JButton button = new JButton(new ImageIcon(Icons.createIconImage(icon, tooltip))); button.setName(tooltip); button.setToolTipText(tooltip); button.addActionListener(listener); button.setFocusPainted(false); return button; } public JToolBar getToolbar() { return toolbar; } public void sessionStateChanged() { sessionDescription.setEnabled(activeSession.isSessionLoaded()); deleteSession.setEnabled(activeSession.isSessionLoaded()); refreshSession.setEnabled(activeSession.isSessionLoaded()); startSession.setEnabled(!activeSession.isRecording()); stopSession.setEnabled(activeSession.isSessionLoaded() && activeSession.isRecording()); reorderSession.setEnabled(activeSession.isSessionLoaded()); } }