package com.niklim.clicktrace.dialog.description; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.awt.event.KeyEvent; import javax.swing.JComponent; import javax.swing.KeyStroke; import com.google.inject.Inject; import com.google.inject.Singleton; import com.niklim.clicktrace.dialog.AbstractDialog; import com.niklim.clicktrace.props.UserProperties; import com.niklim.clicktrace.view.TextComponentHistory; /** * Lets the user input Markup. Offers HTML preview. */ @Singleton public class DescriptionDialog extends AbstractDialog<DescriptionView> { private TextComponentHistory history; private DescriptionDialogCallback callback; private EditPreviewDescriptionToggle editPreviewToggle; @Inject private UserProperties props; @Inject public void init() { initTextWrapping(view.description); history = new TextComponentHistory(view.description); createListeners(); postInit(); } public void createListeners() { view.description.addFocusListener(new FocusListener() { @Override public void focusGained(FocusEvent arg0) { } @Override public void focusLost(FocusEvent arg0) { history.store(); } }); view.description.addKeyListener(new TextComponentHistory.DefaultKeyAdapter(history)); view.okButton().setToolTipText("[Ctrl+S]"); view.dialog().getRootPane().registerKeyboardAction(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { okAction(); } }, KeyStroke.getKeyStroke(KeyEvent.VK_S, KeyEvent.CTRL_DOWN_MASK), JComponent.WHEN_IN_FOCUSED_WINDOW); } @Override protected void okAction() { callback.setText(view.description.getText()); close(); } public void open(DescriptionDialogCallback callback) { this.callback = callback; view.dialog().setTitle(callback.getTitle()); showEditPanel(); view.description.setText(callback.getText()); view.description.grabFocus(); resetHistory(callback.getText()); center(); view.dialog().setVisible(true); } private void showEditPanel() { editPreviewToggle.reset(props.getMarkupSyntax()); } private void resetHistory(String initialText) { history.reset(initialText); } public void close() { view.dialog().setVisible(false); } @Override protected DescriptionView createView() { DescriptionView view = new DescriptionView(); createPreviewComponent(view); return view; } private void createPreviewComponent(DescriptionView view) { editPreviewToggle = new EditPreviewDescriptionToggle(view.dialog(), view.previewCheckbox, view.descriptionPlaceholder, view.description, DescriptionView.MAIN_PANEL_CONTENT_LAYOUT); } }