package jp.crwdev.app.gui; import java.awt.Dimension; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JFrame; import javax.swing.JTabbedPane; import jp.crwdev.app.EventObserver; import jp.crwdev.app.OutputSettingParam; import jp.crwdev.app.EventObserver.OnEventListener; import jp.crwdev.app.imagefilter.ImageFilterParam; import jp.crwdev.app.setting.ImageFilterParamSet; @SuppressWarnings("serial") public class SettingPanel extends SettingPanelLayout implements OnEventListener, MouseListener { private PreviewSettingPanel mPreviewSetting = new PreviewSettingPanel(); private JTabbedPane mSettingTab; private SettingTabPanel[] mSettingTabPanels = new SettingTabPanel[4]; private OutputSettingPanel mOutputSetting = new OutputSettingPanel(); private ProgressPanel mProgressPanel = new ProgressPanel(); public SettingPanel(JFrame parent){ super(parent); mPreviewSetting.setComponents(this, checkPreview, checkSimpleZoom, checkResize, checkOutputResize, fullscreenButton); mSettingTab = this.tabbedPane; for(int i=0; i<4; i++){ mSettingTabPanels[i] = new SettingTabPanel(this, i); mSettingTab.addTab(mSettingTabPanels[i].getTabTitle(), mSettingTabPanels[i]); } mOutputSetting.setComponents(this, outputImageSize, outputFileType, outputBookType, textSeriesTitle, textSeriesTitleKana, textSeriesNumber, textTitle, textTitleKana, textAuthor, textAuthorKana, outputFolder, outpuFolderButton, convertButton, cancelButton, checkOutputResize, packageConvertButton, checkFixedSize, parent); mProgressPanel.setComponents(this, labelMessage, progressBar, cancelButton); this.addMouseListener(this); // //SpringLayout layout = new SpringLayout(); // setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); // //setLayout(layout); // // //mComponent.applyLayout(layout); // // //mComponent.setValues(); // // for(int i=0; i<4; i++){ // mSettingTabPanels[i] = new SettingTabPanel(this, i); // mSettingTab.addTab(mSettingTabPanels[i].getTabTitle(), mSettingTabPanels[i]); // } // // mSettingTab.setPreferredSize(new Dimension(250, 300)); // // add(mPreviewSetting); // add(mSettingTab); // add(Box.createVerticalStrut(10)); // add(mOutputSetting); // add(mProgressPanel); } public ImageFilterParamSet getImageFilterParamSet(){ //Preview boolean preview = mPreviewSetting.isPreview(); boolean resize = mPreviewSetting.isResize(); boolean simpleZoom = mPreviewSetting.isSimpleZoom(); //Filter ImageFilterParamSet params = new ImageFilterParamSet(); for(int i=0; i<4; i++){ params.set(i, mSettingTabPanels[i].getImageFilterParam()); } //XXX ※注意!! // SettingパネルのPreviewは編集操作後の画面イメージの事だが // FilterのPreviewは編集中の状態を表示した画像イメージの事なので扱いが逆。なのでここで反転する params.setPreview(!preview); params.setResize(resize); params.setSimpleZoom(simpleZoom); return params; } private EventObserver mEventSender = null; public void setEventObserver(EventObserver observer){ mEventSender = observer; } public void onUpdateSetting(ImageFilterParamSet params){ mEventSender.sendEvent(EventObserver.EventTarget_Main, EventObserver.EventType_UpdateFilterParamSet, params); } public void startConvert(){ mEventSender.sendEvent(EventObserver.EventTarget_Main, EventObserver.EventType_BeginConvert, 0); } public void cancelConvert(){ mEventSender.sendEvent(EventObserver.EventTarget_Main, EventObserver.EventType_CancelConvert, 0); } public OutputSettingParam getOutputSettingParam(){ return mOutputSetting.getOutputSettingParam(); } public void beginFullscreen(){ mEventSender.sendEvent(EventObserver.EventTarget_Main, EventObserver.EventType_BeginFullscreen, 0); } // public boolean isCheckStatus(int checkboxId){ // return mComponent.isCheckStatus(checkboxId); // } private void startProgress(){ mProgressPanel.startProgress(); } private void stopProgress(){ mProgressPanel.stopProgress(); } private void applyFilterParamSet(ImageFilterParamSet params, boolean enableOnly){ ImageFilterParam baseParam = params.get(0); if(baseParam != null){ mPreviewSetting.setPreview(baseParam.isPreview()); mPreviewSetting.setResize(baseParam.isResize()); } for(int i=0; i<4; i++){ applyFilterParam(i, params.get(i), enableOnly); } } private void applyFilterParam(int filterIndex, ImageFilterParam param, boolean enableOnly){ mSettingTabPanels[filterIndex].setImageFilterParam(param, enableOnly); } private void onFileInfoModified(){ boolean isUnificationTextPage = mSettingTabPanels[ImageFilterParamSet.FILTER_INDEX_TEXT].isUnification(); if(isUnificationTextPage){ updateSettingValues(); } } public boolean isOutputResize(){ return mPreviewSetting.isOutputResize(); } public Dimension getOutputImageSize(){ return mOutputSetting.getOutputImageSize(); } /** * 設定に変更が有った場合、メインに通知する */ public void updateSettingValues(){ onUpdateSetting(getImageFilterParamSet()); } public void saveSettingFileRequest(){ mEventSender.sendEvent(EventObserver.EventTarget_Main, EventObserver.EventType_RequestSaveSetting, 0); } @Override public void onEventReceived(int type, int arg1, int arg2, Object obj) { switch(type){ case EventObserver.EventType_UpdateFilterParamSet: applyFilterParamSet((ImageFilterParamSet)obj, false); break; case EventObserver.EventType_UpdateFilterParam: applyFilterParam(arg1, (ImageFilterParam)obj, false); break; case EventObserver.EventType_UpdateFilterParamOnlyEnable: applyFilterParam(arg1, (ImageFilterParam)obj, true); break; case EventObserver.EventType_Progress: if(arg1 != 0){ startProgress(); }else{ stopProgress(); } break; case EventObserver.EventType_UpdateOutputParam: mOutputSetting.applyOutputParam((OutputSettingParam)obj); break; case EventObserver.EventType_ProgressMessage: mProgressPanel.setProgressMessage((String)obj); break; case EventObserver.EventType_FinishConvert: mOutputSetting.onFinishConvert(); mProgressPanel.onFinishConvert(); break; case EventObserver.EventType_FileInfoModified: onFileInfoModified(); break; case EventObserver.EventType_SelectTab: if(0 <= arg1 && arg1 < mSettingTab.getTabCount()){ mSettingTab.setSelectedIndex(arg1); } break; case EventObserver.EventType_ShowSettingPanel: showSettingPanel(true); break; default: break; } } public void showSettingPanel(boolean show){ if(show == false && mDefaultSize == null){ mDefaultSize = this.getPreferredSize(); this.setPreferredSize(new Dimension(1, (int)mDefaultSize.getHeight())); this.updateUI(); } else if(show == true && mDefaultSize != null){ this.setPreferredSize(mDefaultSize); mDefaultSize = null; this.updateUI(); } } private Dimension mDefaultSize = null; @Override public void mouseClicked(MouseEvent e) { if(e.getClickCount() >= 2){ showSettingPanel(false); } } @Override public void mousePressed(MouseEvent e) { // NOP } @Override public void mouseReleased(MouseEvent e) { // NOP } @Override public void mouseEntered(MouseEvent e) { // NOP } @Override public void mouseExited(MouseEvent e) { // NOP } }