package com.niklim.clicktrace.dialog.settings; import java.awt.Rectangle; import java.io.File; import org.apache.commons.lang3.StringUtils; import com.google.common.base.Optional; import com.google.common.base.Strings; import com.google.inject.Inject; import com.google.inject.Singleton; import com.niklim.clicktrace.controller.MainController; import com.niklim.clicktrace.dialog.AbstractDialog; import com.niklim.clicktrace.props.JiraConfig; import com.niklim.clicktrace.props.UserProperties; import com.niklim.clicktrace.props.UserProperties.ViewScaling; @Singleton public class SettingsDialog extends AbstractDialog<SettingsView> { @Inject private UserProperties props; @Inject private MainController controller; /** * value of {@link UserProperties#getSessionsDirPath()} before change */ private String sessionDirPath; @Inject public void init() { postInit(); } public void open() { sessionDirPath = props.getSessionsDirPath(); loadModel(); center(); view.dialog().setVisible(true); } private void loadModel() { loadRecordingModel(); loadExportModel(); loadEditingModel(); loadJiraModel(); loadAdvancedModel(); } private void loadAdvancedModel() { view.advancedSettingsComponent.init(props.getCaptureSensitivity(), props.getMarkupSyntax()); } private void loadJiraModel() { String url = Strings.nullToEmpty(props.getJiraConfig().getInstanceUrl()); view.jiraUrlTextField.setText(url); view.jiraUsernameTextField.setText(props.getJiraConfig().getUsername()); } private void loadExportModel() { view.imageExportWidth.setText(String.valueOf(props.getExportImageWidth())); } private void loadEditingModel() { if (props.getImageEditorPath() != null) { view.imageEditorFileChooser.setSelectedFile(new File(props.getImageEditorPath())); view.imageEditorPath.setText(props.getImageEditorPath()); } if (props.getScreenshotViewScaling() == ViewScaling.HORIZONTAL) { view.screenshotViewScaling.setSelected(view.horizontalScreenshotViewScalingRadio.getModel(), true); } else { view.screenshotViewScaling.setSelected(view.verticalScreenshotViewScalingRadio.getModel(), true); } } private void loadRecordingModel() { view.captureMouseClicks.setSelected(props.getCaptureMouseClicks()); view.captureAreaComponent.init(props.getCaptureFullScreen(), props.getCaptureRectangle()); view.captureSelectAll.setSelected(props.getCaptureSelectAll()); view.sessionsDirPath.setText(props.getSessionsDirPath()); view.sessionsDirPathChooser.setSelectedFile(new File(props.getSessionsDirPath())); } private void saveModel() { saveEditingModel(); saveExportModel(); saveRecordingModel(); saveJiraModel(); saveAdvancedModel(); props.save(); } private void saveAdvancedModel() { props.setCaptureSensitivity(view.advancedSettingsComponent.getChangeSensitivity()); props.setMarkupSyntax(view.advancedSettingsComponent.getMarkupSyntax()); } private void saveJiraModel() { props.setJiraConfig(new JiraConfig(view.jiraUrlTextField.getText(), view.jiraUsernameTextField.getText())); } private void saveExportModel() { props.setExportImageWidth(Integer.valueOf(view.imageExportWidth.getText())); } private void saveRecordingModel() { props.setCaptureMouseClicks(view.captureMouseClicks.isSelected()); props.setCaptureSelectAll(view.captureSelectAll.isSelected()); props.setSessionsDirPath(view.sessionsDirPath.getText()); Optional<Rectangle> captureRectangleOpt = view.captureAreaComponent.getCaptureRectangleOpt(); if (captureRectangleOpt.isPresent()) { props.setCaptureRectangle(captureRectangleOpt.get()); props.setCaptureFullScreen(false); } else { props.setCaptureFullScreen(true); } } private void saveEditingModel() { props.setImageEditorPath(view.imageEditorPath.getText()); if (view.screenshotViewScaling.isSelected(view.horizontalScreenshotViewScalingRadio.getModel())) { props.setScreenshotViewScaling(ViewScaling.HORIZONTAL); } else { props.setScreenshotViewScaling(ViewScaling.VERTICAL); } } @Override protected void okAction() { saveModel(); clearActiveSessionOnSessionsPathChange(); close(); } private void clearActiveSessionOnSessionsPathChange() { if (!StringUtils.equals(sessionDirPath, props.getSessionsDirPath())) { controller.closeActiveSession(); } } @Override public void close() { super.close(); view.captureAreaComponent.clear(); } @Override protected SettingsView createView() { return new SettingsView(); } }