Package sk.vrto.web.views

Source Code of sk.vrto.web.views.EmailApplicationView

package sk.vrto.web.views;

import com.vaadin.Application;
import com.vaadin.event.LayoutEvents;
import com.vaadin.terminal.ThemeResource;
import com.vaadin.ui.*;
import org.springframework.context.ApplicationContext;
import sk.vrto.SpringContextHelper;
import sk.vrto.web.presenters.ContactsListPresenter;
import sk.vrto.web.presenters.EmailApplicationPresenter;
import sk.vrto.web.presenters.NewContactPresenter;

public class EmailApplicationView extends Application {

    // Application is Entry point, therefore it muse handle delegation of presenters
    transient protected ApplicationContext injector;
    transient protected EmailApplicationPresenter presenter;

    private Window newContactWindow;
    private Window newEmailWindow;
    protected VerticalLayout leftWrapper;

    @Override
    public void init() {
        if (null == injector) {
            injector= new SpringContextHelper(this).getContext();
            presenter = injector.getBean(EmailApplicationPresenter.class);
            presenter.setView(this);
        }

        setMainWindow(new Window("miEmail application"));
        setTheme("email");
        HorizontalLayout appLayout = new HorizontalLayout();
        appLayout.setSizeFull();

        appLayout.addComponent(buildLeftWrapper());
        Component rightWrapper = buildRightWrapper();
        appLayout.addComponent(rightWrapper);
        appLayout.setExpandRatio(rightWrapper, 1.0f);

        getMainWindow().setContent(appLayout);
        createNewMailWindow();
    }

    public Window getNewContactWindow() {
        return newContactWindow;
    }

    public Window getNewEmailWindow() {
        return newEmailWindow;
    }

    private void createNewMailWindow() {
        if (null == newEmailWindow) {
            final NewEmailView emailView = injector.getBean(NewEmailView.class);
            newEmailWindow = new Window("New message", emailView);
            newEmailWindow.setModal(true);
            newEmailWindow.setWidth("80%");
            newEmailWindow.setHeight("70%");
            newEmailWindow.setVisible(false);
            newEmailWindow.addListener(new Window.CloseListener() {
                @Override
                public void windowClose(Window.CloseEvent e) {
                    ContactViewPopup triggeredFrom = emailView.getTriggeredFrom();
                    if (null != triggeredFrom) {
                        triggeredFrom.setVisible(true);
                        emailView.setTriggeredFrom(null);
                    }
                    emailView.getContactsBox().setValue(null);
                    emailView.getTitle().setValue("");
                    emailView.getMailArea().setValue("");
                }
            });
        }
    }

    private Component buildRightWrapper() {
        VerticalLayout wrapper = new VerticalLayout();
        wrapper.setStyleName("marged");
        wrapper.setSpacing(true);
        wrapper.addComponent(buildLogoutMenu());

        Label recentMail = new Label("Recent mail");
        recentMail.setStyleName("recent-mail");
        wrapper.addComponent(recentMail);

        wrapper.addComponent(buildButtonsMenu());
        wrapper.addComponent(injector.getBean(EmailsView.class));
        return wrapper;
    }

    private Component buildLogoutMenu() {
        HorizontalLayout menu = new HorizontalLayout();
        menu.setWidth("100%");

        Label labelLogout = new Label("Logout Demo User");
        labelLogout.setStyleName("logout-link");
        labelLogout.setWidth("120px");
        menu.addComponent(labelLogout);
        menu.addListener(new LayoutEvents.LayoutClickListener() {
            @Override
            public void layoutClick(LayoutEvents.LayoutClickEvent event) {
                presenter.closeApplication();
            }
        });
        menu.setComponentAlignment(labelLogout, Alignment.MIDDLE_RIGHT);

        return menu;
    }

    private Component buildButtonsMenu() {
        HorizontalLayout buttonsMenu = new HorizontalLayout();
        buttonsMenu.setSpacing(true);
        buttonsMenu.addComponent(createNewMailButton());
        buttonsMenu.addComponent(createRefreshMailButton());

        Component settingsButton = createSettingsButton();
        buttonsMenu.addComponent(settingsButton);
        buttonsMenu.setComponentAlignment(settingsButton, Alignment.MIDDLE_RIGHT);

        return buttonsMenu;
    }

    private Component createSettingsButton() {
        Button settingsButton = new Button();
        settingsButton.setIcon(new ThemeResource("../email/icons/settings.png"));
        settingsButton.addListener(new Button.ClickListener() {
            @Override
            public void buttonClick(Button.ClickEvent event) {
                getMainWindow().showNotification("No settings in this demo version");
            }
        });
        return settingsButton;
    }

    private Component createRefreshMailButton() {
        Button refreshMailButton = new Button();
        refreshMailButton.setIcon(new ThemeResource("../email/icons/refresh.png"));
        refreshMailButton.addListener(new Button.ClickListener() {
            @Override
            public void buttonClick(Button.ClickEvent event) {
                getMainWindow().showNotification("No email account bound in demo");
            }
        });
        return refreshMailButton;
    }

    private Component createNewMailButton() {
        Button newMailButton = new Button("New message");
        newMailButton.setWidth("100px");
        newMailButton.addListener(new Button.ClickListener() {
            @Override
            public void buttonClick(Button.ClickEvent event) {

                // not yet showing?
                if (null == newEmailWindow.getParent()) {
                    getMainWindow().addWindow(newEmailWindow);
                }

                newEmailWindow.setVisible(true);
                newEmailWindow.center();
            }
        });
        return newMailButton;
    }

    private Component buildLeftWrapper() {
        VerticalLayout cssWrapper = new VerticalLayout();
        cssWrapper.setStyleName("contacts-panel");
        cssWrapper.setHeight("100%");
        cssWrapper.setWidth("170px");

        leftWrapper = new VerticalLayout();
        leftWrapper.setStyleName("contacts-panel");
        leftWrapper.setWidth("170px");

        Embedded pic = new Embedded("", new ThemeResource("../email/icons/contacts-top-mail.png"));
        pic.setStyleName("contacts-logo");

        leftWrapper.addComponent(pic);
        leftWrapper.addComponent(buildContactsList());
        leftWrapper.addComponent(buildAddContactButton());

        cssWrapper.addComponent(leftWrapper);
        return cssWrapper;
    }

    private Component buildAddContactButton() {
        Button button = new Button("New contact");
        button.setWidth("100px");
        button.setStyleName("add-contact-btn");
        button.addListener(new Button.ClickListener() {
            @Override
            public void buttonClick(Button.ClickEvent event) {
                if (null == newContactWindow) {
                    NewContactPresenter presenter = injector.getBean(NewContactPresenter.class);
                    newContactWindow = new Window("Add New Contact", injector.getBean(NewContactView.class));
                    newContactWindow.setModal(true);
                    newContactWindow.setHeight("200px");
                    newContactWindow.setWidth("220px");
                }

                // not yet showing?
                if (null == newContactWindow.getParent()) {
                    getMainWindow().addWindow(newContactWindow);
                }

                newContactWindow.center();
            }
        });
        return button;
    }

    private ContactsListView buildContactsList() {
//        ContactsListPresenter contactsListPresenter =
//                injector.getBean(ContactsListPresenter.class);
//
//        contactsListPresenter.loadAllContacts();
        return injector.getBean(ContactsListView.class);
    }

}
TOP

Related Classes of sk.vrto.web.views.EmailApplicationView

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.