/* * Copyright (c) 2009, Paul Merlin. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package org.codeartisans.java.sos.sampleapp.presentation.views.swing; import com.google.inject.Inject; import java.awt.EventQueue; import javax.swing.JFrame; import org.codeartisans.java.sos.sampleapp.presentation.views.GreetingsView; import org.swing.on.steroids.views.handlers.HasClickHandlers; import org.swing.on.steroids.swing.SwingWrappersFactory; import org.swing.on.steroids.swing.annotations.EventDispatchThread; import org.swing.on.steroids.swing.annotations.EventDispatchThreadPolicy; import org.swing.on.steroids.swing.helpers.SwingHelper; import org.swing.on.steroids.swing.notifications.JLabelHasStringValue; import org.swing.on.steroids.views.values.HasValue; import org.swing.on.steroids.views.values.HasValueChangeHandlers; public class SwingGreetingsView implements GreetingsView { private final SwingWrappersFactory swingWrappersFactory; private GreetingsFrame delegate; private HasClickHandlers<Void> greetButton; private HasClickHandlers<Void> closeButton; private HasValueChangeHandlers<String> nameInput; private JLabelHasStringValue messageDisplay; @Inject public SwingGreetingsView( SwingWrappersFactory swingWrapFactory ) { swingWrappersFactory = swingWrapFactory; SwingHelper.invokeAndWait( new Runnable() { @Override public void run() { delegate = new GreetingsFrame(); delegate.setDefaultCloseOperation( JFrame.DO_NOTHING_ON_CLOSE ); greetButton = swingWrappersFactory.createJButtonHasClickHandler( delegate.getButton() ); closeButton = swingWrappersFactory.createJFrameHasCloseClickHandlers( delegate ); nameInput = swingWrappersFactory.createJTextComponentHasStringValueChangeHandlers( delegate.getInput() ); messageDisplay = new JLabelHasStringValue( delegate.getMessage() ); } } ); } @Override public HasValue<String> nameInput() { return nameInput; } @Override public HasClickHandlers<Void> greetButton() { return greetButton; } @Override public HasValue<String> messageDisplay() { return messageDisplay; } @Override public HasClickHandlers<Void> closeButton() { return closeButton; } @Override @EventDispatchThread( value = EventDispatchThreadPolicy.invokeAndWait ) public void doSomethingLongInEDT() { for ( int i = 0; i < 200; i++ ) { delegate.getMessage().setText( "Coucou " + i ); } } @Override public void reveal() { EventQueue.invokeLater( new Runnable() { @Override public void run() { delegate.setVisible( true ); } } ); } @Override public void hide() { EventQueue.invokeLater( new Runnable() { @Override public void run() { delegate.dispose(); } } ); } @Override public void busy() { EventQueue.invokeLater( new Runnable() { @Override public void run() { delegate.getButton().setEnabled( false ); } } ); } @Override public void done() { EventQueue.invokeLater( new Runnable() { @Override public void run() { delegate.getButton().setEnabled( true ); } } ); } }