package com.niklim.clicktrace.dialog; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import javax.swing.JOptionPane; import org.apache.commons.lang.StringUtils; import com.google.inject.Inject; import com.google.inject.Singleton; import com.niklim.clicktrace.dialog.description.DescriptionView; import com.niklim.clicktrace.dialog.description.EditPreviewDescriptionToggle; import com.niklim.clicktrace.msg.InfoMsgs; import com.niklim.clicktrace.props.UserProperties; import com.niklim.clicktrace.view.TextComponentHistory; @Singleton public class NewSessionDialog extends AbstractDialog<NewSessionView> { private NewSessionCallback callback; private TextComponentHistory descriptionHistory; private EditPreviewDescriptionToggle editPreviewToggle; @Inject private UserProperties props; @Inject public void init() { initTextWrapping(view.sessionDescription); descriptionHistory = new TextComponentHistory(view.sessionDescription); descriptionHistory.reset(""); createListeners(); postInit(); } public void open(NewSessionCallback callback) { this.callback = callback; initModel(); center(); view.dialog.setVisible(true); } private void initModel() { view.sessionName.setText(""); view.sessionDescription.setText(""); editPreviewToggle.reset(props.getMarkupSyntax()); } private void createListeners() { view.sessionDescription.addKeyListener(new TextComponentHistory.DefaultKeyAdapter(descriptionHistory)); view.sessionName.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_ENTER) { tryCreateSession(); } } }); } private void tryCreateSession() { String name = view.sessionName.getText(); if (StringUtils.isEmpty(name.trim())) { JOptionPane.showMessageDialog(view.dialog, InfoMsgs.SESSION_NO_NAME); } else { if (callback.create(name, view.sessionDescription.getText())) { close(); } } } public static interface NewSessionCallback { boolean create(String name, String description); } @Override protected void okAction() { tryCreateSession(); } @Override protected NewSessionView createView() { NewSessionView view = new NewSessionView(); createPreviewComponent(view); return view; } private void createPreviewComponent(NewSessionView view) { editPreviewToggle = new EditPreviewDescriptionToggle(view.dialog(), view.previewCheckbox, view.descriptionPlaceholder, view.sessionDescription, DescriptionView.MAIN_PANEL_CONTENT_LAYOUT); } }