fr.fg.client.core.ToolBar.java Source code

Java tutorial

Introduction

Here is the source code for fr.fg.client.core.ToolBar.java

Source

/*
Copyright 2010 Jeremie Gottero, Nicolas Bosc, Romain Prevot, Thierry Chevalier
    
This file is part of Fallen Galaxy.
    
Fallen Galaxy is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
    
Fallen Galaxy is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
    
You should have received a copy of the GNU Affero General Public License
along with Fallen Galaxy. If not, see <http://www.gnu.org/licenses/>.
*/

package fr.fg.client.core;

import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.EventPreview;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.Widget;

import fr.fg.client.ajax.Action;
import fr.fg.client.ajax.ActionCallbackAdapter;
import fr.fg.client.animation.ButtonIconBlinkUpdater;
import fr.fg.client.core.settings.Settings;
import fr.fg.client.data.AnswerData;
import fr.fg.client.i18n.StaticMessages;
import fr.fg.client.openjwt.animation.TimerManager;
import fr.fg.client.openjwt.core.Config;
import fr.fg.client.openjwt.core.EventManager;
import fr.fg.client.openjwt.ui.DialogListener;
import fr.fg.client.openjwt.ui.JSButton;
import fr.fg.client.openjwt.ui.JSDialog;
import fr.fg.client.openjwt.ui.JSOptionPane;
import fr.fg.client.openjwt.ui.JSRowLayout;
import fr.fg.client.openjwt.ui.OptionPaneListener;
import fr.fg.client.core.Client;
import fr.fg.client.core.GalaxyMap;
import fr.fg.client.core.Utilities;

@SuppressWarnings("deprecation")
public class ToolBar extends AbsolutePanel implements ClickListener, EventPreview, DialogListener {
    // ------------------------------------------------------- CONSTANTES -- //

    private final static int MESSENGER = 0, LADDER = 1, EVENTS = 2, ALLY = 3, DIPLOMACY = 4, CONTRACTS = 5,
            TACTICS = 6, HELP = 7;

    // -------------------------------------------------------- ATTRIBUTS -- //

    private boolean[] listeners;

    private JSButton contractsBt, optionsBt, helpBt, allyBt, eventsBt, researchBt, diplomacyBt, mapBt, messagesBt,
            ladderBt, menuBt, disconnectBt, premiumBt, contactsBt, achievementsBt, advancementsBt, tacticsBt,
            forumBt, bugReportBt;

    private ButtonIconBlinkUpdater messagesBlink, eventsBlink, allyBlink, researchBlink;

    private JSDialog menuDialog;

    private boolean disconnectDialogVisible;

    private long lastEnterPressedDate;

    // ---------------------------------------------------- CONSTRUCTEURS -- //

    public ToolBar() {
        this.disconnectDialogVisible = false;
        this.listeners = new boolean[10];
        this.lastEnterPressedDate = 0;

        getElement().setId("toolbar");
        getElement().setAttribute("unselectable", "on");

        StaticMessages messages = (StaticMessages) GWT.create(StaticMessages.class);

        // Premium
        premiumBt = new JSButton("Premium");
        premiumBt.setPixelWidth(140);
        premiumBt.addClickListener(this);

        // Contacts
        contactsBt = new JSButton("Contacts");
        contactsBt.setPixelWidth(140);
        contactsBt.addClickListener(this);
        contactsBt.setToolTipText("<div class=\"title\">Contacts</div>" + "<div>"
                + messages.shortcut("<span class=\"emphasize\">F</span>") + "</div>");

        // Civilisation
        advancementsBt = new JSButton("Civilisation");
        advancementsBt.setPixelWidth(140);
        advancementsBt.addClickListener(this);
        advancementsBt.setToolTipText("<div class=\"title\">Civilisation</div>" + "<div>"
                + messages.shortcut("<span class=\"emphasize\">C</span>") + "</div>");

        // Succs
        achievementsBt = new JSButton("Trophes");
        achievementsBt.setPixelWidth(140);
        achievementsBt.addClickListener(this);
        achievementsBt.setToolTipText("<div class=\"title\">Trophes</div>" + "<div>"
                + messages.shortcut("<span class=\"emphasize\">P</span>") + "</div>");

        // Options
        optionsBt = new JSButton(messages.options());
        optionsBt.setPixelWidth(140);
        optionsBt.addClickListener(this);
        optionsBt.setToolTipText("<div class=\"title\">" + messages.options() + "</div>" + "<div>"
                + messages.shortcut("<span class=\"emphasize\">O</span>") + "</div>");

        // Tactiques
        if (Settings.isPremium()) {
            tacticsBt = new JSButton("Tactiques");
            tacticsBt.setPixelWidth(140);
            tacticsBt.addClickListener(this);
            tacticsBt.setToolTipText("<div class=\"title\">Tactiques</div>" + "<div>"
                    + messages.shortcut("<span class=\"emphasize\">T</span>") + "</div>");
        }

        // Aide
        helpBt = new JSButton("Aide");
        helpBt.setPixelWidth(140);
        helpBt.addClickListener(this);
        helpBt.setToolTipText("<div class=\"title\">Aide</div>" + "<div>"
                + messages.shortcut("<span class=\"emphasize\">Ctrl+F1</span>") + "</div>");

        // Dconnexion
        disconnectBt = new JSButton(messages.exit());
        disconnectBt.setPixelWidth(140);
        disconnectBt.addClickListener(this);
        disconnectBt.setToolTipText("<div class=\"title\">" + messages.exit() + "</div>" + "<div>"
                + messages.shortcut("<span class=\"emphasize\">Q</span>") + "</div>");

        // Forum
        forumBt = new JSButton("Forum");
        forumBt.setPixelWidth(140);
        forumBt.addClickListener(this);

        //Signalement de bug
        bugReportBt = new JSButton("Signaler un bug");
        bugReportBt.setPixelWidth(140);
        bugReportBt.addClickListener(this);

        // Mise en forme du menu
        JSRowLayout layout = new JSRowLayout();
        layout.addRowSeparator(10);
        layout.addComponent(JSRowLayout.createHorizontalSeparator(10));
        layout.addComponent(premiumBt);
        layout.addComponent(JSRowLayout.createHorizontalSeparator(10));
        layout.setRowAlignment(JSRowLayout.ALIGN_CENTER);
        layout.addRow();
        if (Settings.isPremium()) {
            layout.addComponent(tacticsBt);
            layout.setRowAlignment(JSRowLayout.ALIGN_CENTER);
            layout.addRow();
        }
        layout.addComponent(advancementsBt);
        layout.setRowAlignment(JSRowLayout.ALIGN_CENTER);
        layout.addRow();
        layout.addComponent(achievementsBt);
        layout.setRowAlignment(JSRowLayout.ALIGN_CENTER);
        layout.addRow();
        layout.addComponent(contactsBt);
        layout.setRowAlignment(JSRowLayout.ALIGN_CENTER);
        layout.addRow();
        layout.addComponent(optionsBt);
        layout.setRowAlignment(JSRowLayout.ALIGN_CENTER);
        layout.addRow();
        layout.addComponent(helpBt);
        layout.setRowAlignment(JSRowLayout.ALIGN_CENTER);
        layout.addRow();
        layout.addComponent(forumBt);
        layout.setRowAlignment(JSRowLayout.ALIGN_CENTER);
        layout.addRow();
        layout.addComponent(bugReportBt);
        layout.setRowAlignment(JSRowLayout.ALIGN_CENTER);
        layout.addRow();
        layout.addComponent(disconnectBt);
        layout.setRowAlignment(JSRowLayout.ALIGN_CENTER);
        layout.addRow();
        layout.addRowSeparator(10);

        // Menu du jeu
        menuDialog = new JSDialog(
                "<img src=\"" + Config.getMediaUrl() + "images/misc/blank.gif\" class=\"iconMenu\"/> " + "Menu",
                false, true, true);
        menuDialog.setComponent(layout);
        menuDialog.setLocation(35, 55, false);
        menuDialog.addDialogListener(this);

        // Contrats
        contractsBt = new JSButton();
        contractsBt.addStyleName("iconContracts");
        contractsBt.setToolTipText("<div class=\"title\">" + "Missions" + "</div>" + "<div>"
                + messages.shortcut("<span class=\"emphasize\">I</span>") + "</div>");
        contractsBt.setPixelSize(24, 23);
        contractsBt.addClickListener(this);

        // Alliance du joueur
        allyBt = new JSButton();
        allyBt.addStyleName("iconAlly");
        allyBt.setToolTipText("<div class=\"title\">" + messages.ally() + "</div>" + "<div>"
                + messages.shortcut("<span class=\"emphasize\">A</span>") + "</div>");
        allyBt.setPixelSize(24, 23);
        allyBt.addClickListener(this);
        allyBlink = new ButtonIconBlinkUpdater(allyBt, 500, 500);

        // Recherche
        researchBt = new JSButton();
        researchBt.addStyleName("iconResearch");
        researchBt.setPixelSize(24, 23);
        researchBt.setToolTipText("<div class=\"title\">" + messages.research() + "</div>" + "<div>"
                + messages.shortcut("<span class=\"emphasize\">H</span>") + "</div>");
        researchBt.addClickListener(this);
        researchBlink = new ButtonIconBlinkUpdater(researchBt, 500, 500);

        // Diplomatie
        diplomacyBt = new JSButton();
        diplomacyBt.addStyleName("iconDiplomacy");
        diplomacyBt.setPixelSize(24, 23);
        diplomacyBt.setToolTipText("<div class=\"title\">" + messages.diplomacy() + "</div>" + "<div>"
                + messages.shortcut("<span class=\"emphasize\">D</span>") + "</div>");
        diplomacyBt.addClickListener(this);

        // Carte de la galaxie
        mapBt = new JSButton();
        mapBt.addStyleName("iconMap");
        mapBt.setPixelSize(24, 23);
        mapBt.setToolTipText("<div class=\"title\">" + messages.galaxyMap() + "</div>" + "<div>"
                + messages.shortcut("<span class=\"emphasize\">G</span>") + "</div>");
        mapBt.addClickListener(this);

        // Evenements
        eventsBt = new JSButton();
        eventsBt.addStyleName("iconEvents");
        eventsBt.setPixelSize(24, 23);
        eventsBt.setToolTipText("<div class=\"title\">" + messages.events() + "</div>" + "<div>"
                + messages.shortcut("<span class=\"emphasize\">E</span>") + "</div>");
        eventsBt.addClickListener(this);
        eventsBlink = new ButtonIconBlinkUpdater(eventsBt, 500, 500);

        // Messages reus
        messagesBt = new JSButton();
        messagesBt.addStyleName("iconMessages");
        messagesBt.setPixelSize(24, 23);
        messagesBt.setToolTipText("<div class=\"title\">" + messages.messages() + "</div>" + "<div>"
                + messages.shortcut("<span class=\"emphasize\">M</span>") + "</div>");
        messagesBt.addClickListener(this);
        messagesBlink = new ButtonIconBlinkUpdater(messagesBt, 500, 500);

        // Classement
        ladderBt = new JSButton();
        ladderBt.addStyleName("iconLadder");
        ladderBt.setPixelSize(24, 23);
        ladderBt.setToolTipText("<div class=\"title\">" + messages.ladder() + "</div>" + "<div>"
                + messages.shortcut("<span class=\"emphasize\">L</span>") + "</div>");
        ladderBt.addClickListener(this);

        // Menu
        menuBt = new JSButton();
        menuBt.addStyleName("iconMenu");
        menuBt.setPixelSize(24, 23);
        menuBt.setToolTipText("<div class=\"title\">" + messages.menu() + "</div>" + "<div>"
                + messages.shortcut("<span class=\"emphasize\">N</span>") + "</div>");
        menuBt.addClickListener(this);

        // Barre d'outils
        add(contractsBt);
        add(allyBt);
        add(researchBt);
        add(diplomacyBt);
        add(mapBt);
        add(eventsBt);
        add(messagesBt);
        add(ladderBt);
        add(menuBt);

        EventManager.addEventHook(this);
    }

    // --------------------------------------------------------- METHODES -- //

    public void onClick(Widget sender) {
        if (sender == ladderBt) {
            onLadderBtClick();
        } else if (sender == messagesBt) {
            onMessageBtClick();
        } else if (sender == menuBt) {
            onMenuBtClick();
        } else if (sender == helpBt) {
            //Window.open("http://wiki.fallengalaxy.com/index.php/Accueil", "", "");
            onHelpBtClick();
        } else if (sender == mapBt) {
            onMapBtClick();
        } else if (sender == researchBt) {
            onResearchBtClick();
        } else if (sender == optionsBt) {
            onOptionsBtClick();
        } else if (sender == premiumBt) {
            onPremiumBtClick();
        } else if (sender == contactsBt) {
            onContactsBtClick();
        } else if (sender == achievementsBt) {
            onAchievementsBtClick();
        } else if (sender == advancementsBt) {
            onAdvancementsBtClick();
        } else if (sender == eventsBt) {
            onEventsBtClick();
        } else if (sender == disconnectBt) {
            onDisconnectBtClick();
        } else if (sender == allyBt) {
            onAllyBtClick();
        } else if (sender == diplomacyBt) {
            onDiplomacyClick();
        } else if (sender == contractsBt) {
            onContractsBtClick();
        } else if (sender == tacticsBt) {
            onTacticsBtClick();
        } else if (sender == forumBt) {
            Window.open("http://forum.fallengalaxy.com/", "", "");
        } else if (sender == bugReportBt) {
            onBugReportBtClick();
        }

    }

    public boolean onEventPreview(Event event) {
        switch (event.getTypeInt()) {
        case Event.ONKEYDOWN:
            Element target = DOM.eventGetTarget(event);

            if ((target != null && DOM.getElementProperty(target, "nodeName").toLowerCase().equals("input"))) //$NON-NLS-1$ //$NON-NLS-2$
                return true;

            if (Client.getInstance().isFullScreenMode())
                return true;

            if ((event.getCtrlKey() || event.getAltKey() || event.getMetaKey())
                    && !(event.getKeyCode() == 112 || event.getKeyCode() == 119))
                return true;

            // BLoque les raccourcis pendant 3 secondes aprs que la touche
            // entre ait t presse
            int keyCode = event.getKeyCode();
            long now = Utilities.getCurrentTime();

            if (keyCode == 13 || keyCode == 3)
                lastEnterPressedDate = now;

            if (lastEnterPressedDate + 2 > now)
                return true;

            switch (keyCode) {
            case 65:
                onAllyBtClick();
                break;
            case 67:
                onAdvancementsBtClick();
                break;
            case 72:
                onResearchBtClick();
                break;
            case 68:
                onDiplomacyClick();
                break;
            case 70:
                onContactsBtClick();
                break;
            case 71:
                onMapBtClick();
                break;
            case 73:
                onContractsBtClick();
                break;
            case 69:
                onEventsBtClick();
                break;
            case 77:
                onMessageBtClick();
                break;
            case 76:
                onLadderBtClick();
                break;
            case 78:
                onMenuBtClick();
                break;
            case 79:
                onOptionsBtClick();
                break;
            case 80:
                onAchievementsBtClick();
                break;
            case 81:
                onDisconnectBtClick();
                break;
            case 84:
                onTacticsBtClick();
                break;
            case 112:
                if (event.getCtrlKey())
                    onHelpBtClick();
                break;
            case 117:
                if (Settings.isAdministrator())
                    onEditChangelogShortcutTriggered();
                break;
            case 119:
                if (event.getCtrlKey())
                    onAdministrationPanelShortcutTriggered();
                break;
            }
            break;
        }
        return true;
    }

    public void dialogClosed(Widget sender) {
        if (listeners[LADDER] && sender == Client.getInstance().getLadder()) {
            ladderBt.setSelected(false);
        } else if (listeners[MESSENGER] && sender == Client.getInstance().getMessenger()) {
            messagesBt.setSelected(false);
        } else if (listeners[EVENTS] && sender == Client.getInstance().getEventsDialog()) {
            eventsBt.setSelected(false);
        } else if (listeners[ALLY] && sender == Client.getInstance().getAllyDialog()) {
            allyBt.setSelected(false);
        } else if (sender == menuDialog) {
            menuBt.setSelected(false);
        } else if (listeners[DIPLOMACY] && sender == Client.getInstance().getDiplomacyDialog()) {
            diplomacyBt.setSelected(false);
        } else if (listeners[CONTRACTS] && sender == Client.getInstance().getContractDialog()) {
            contractsBt.setSelected(false);
        } else if (listeners[HELP] && sender == Client.getInstance().getHelpDialog()) {
            helpBt.setSelected(false);
        } else if (listeners[TACTICS] && sender == Client.getInstance().getTacticsDialog()) {
            tacticsBt.setSelected(false);
        }
    }

    public void blinkMessages(boolean blink) {
        if (blink) {
            TimerManager.register(messagesBlink);
        } else {
            TimerManager.unregister(messagesBlink);
            messagesBt.removeStyleName("blinking");
        }
    }

    public void blinkEvents(boolean blink) {
        if (blink) {
            TimerManager.register(eventsBlink);
        } else {
            TimerManager.unregister(eventsBlink);
            eventsBt.removeStyleName("blinking");
        }
    }

    public void blinkAlly(boolean blink) {
        if (blink) {
            TimerManager.register(allyBlink);
        } else {
            TimerManager.unregister(allyBlink);
            allyBt.removeStyleName("blinking");
        }
    }

    public void blinkResearch(boolean blink) {
        if (blink) {
            TimerManager.register(researchBlink);
        } else {
            TimerManager.unregister(researchBlink);
            researchBt.removeStyleName("blinking");
        }
    }

    public void setAllyBtSelected(boolean selected) {
        allyBt.setSelected(selected);
    }

    // ------------------------------------------------- METHODES PRIVEES -- //

    private void onDiplomacyClick() {
        if (!listeners[DIPLOMACY]) {
            Client.getInstance().getDiplomacyDialog().addDialogListener(this);
            listeners[DIPLOMACY] = true;
        }

        boolean show = !Client.getInstance().getDiplomacyDialog().isVisible();
        diplomacyBt.setSelected(show);
        Client.getInstance().getDiplomacyDialog().setVisible(show);
    }

    private void onAllyBtClick() {
        if (!listeners[ALLY]) {
            Client.getInstance().getAllyDialog().addDialogListener(this);
            listeners[ALLY] = true;
        }

        boolean show = !Client.getInstance().getAllyDialog().isActive();
        Client.getInstance().getAllyDialog().setActive(show);
        allyBt.setSelected(Client.getInstance().getAllyDialog().isActive());
    }

    private void onMessageBtClick() {
        if (!listeners[MESSENGER]) {
            Client.getInstance().getMessenger().addDialogListener(this);
            listeners[MESSENGER] = true;
        }

        boolean show = !Client.getInstance().getMessenger().isVisible();
        messagesBt.setSelected(show);
        Client.getInstance().getMessenger().setVisible(show);
    }

    private void onLadderBtClick() {
        if (!listeners[LADDER]) {
            Client.getInstance().getLadder().addDialogListener(this);
            listeners[LADDER] = true;
        }

        boolean show = !Client.getInstance().getLadder().isVisible();
        ladderBt.setSelected(show);
        Client.getInstance().getLadder().setVisible(show);
    }

    private void onContractsBtClick() {
        if (!listeners[CONTRACTS]) {
            Client.getInstance().getContractDialog().addDialogListener(this);
            listeners[CONTRACTS] = true;
        }

        boolean show = !Client.getInstance().getContractDialog().isVisible();
        contractsBt.setSelected(show);
        Client.getInstance().getContractDialog().setVisible(show);
    }

    private void onMapBtClick() {
        Client.getInstance().getGalaxyMap().show(GalaxyMap.MODE_DEFAULT);
    }

    private void onMenuBtClick() {
        boolean show = !menuDialog.isVisible();
        menuBt.setSelected(show);
        menuDialog.setVisible(show);
    }

    private void onPremiumBtClick() {
        Client.getInstance().getPremiumDialog().setVisible(!Client.getInstance().getPremiumDialog().isVisible());
    }

    private void onTacticsBtClick() {
        Client.getInstance().getPlayerTacticsDialog()
                .setVisible(!Client.getInstance().getPlayerTacticsDialog().isVisible());
    }

    private void onResearchBtClick() {
        Client.getInstance().getResearchManager().show();
    }

    private void onOptionsBtClick() {
        Client.getInstance().getOptionsDialog().setVisible(!Client.getInstance().getOptionsDialog().isVisible());
    }

    private void onAchievementsBtClick() {
        Client.getInstance().getAchievementDialog()
                .setVisible(!Client.getInstance().getAchievementDialog().isVisible());
    }

    private void onAdvancementsBtClick() {
        Client.getInstance().getAdvancementDialog()
                .setVisible(!Client.getInstance().getAdvancementDialog().isVisible());
    }

    private void onContactsBtClick() {
        Client.getInstance().getContactDialog().setVisible(!Client.getInstance().getContactDialog().isVisible());
    }

    private void onHelpBtClick() {
        Client.getInstance().getHelpDialog().setVisible(!Client.getInstance().getHelpDialog().isVisible());
    }

    private void onBugReportBtClick() {
        Client.getInstance().getBugReportDialog()
                .setVisible(!Client.getInstance().getBugReportDialog().isVisible());
    }

    private void onEditChangelogShortcutTriggered() {
        if (!Settings.isAdministrator())
            return;
        Client.getInstance().getChangelogDialog()
                .setVisible(!Client.getInstance().getChangelogDialog().isVisible());
    }

    private void onAdministrationPanelShortcutTriggered() {
        if (!Settings.isModerator())
            return;
        Client.getInstance().getAdministrationPanelDialog()
                .setVisible(!Client.getInstance().getAdministrationPanelDialog().isVisible());
    }

    private void onEventsBtClick() {
        if (!listeners[EVENTS]) {
            Client.getInstance().getEventsDialog().addDialogListener(this);
            listeners[EVENTS] = true;
        }

        boolean show = !Client.getInstance().getEventsDialog().isVisible();
        eventsBt.setSelected(show);
        Client.getInstance().getEventsDialog().setVisible(show);
    }

    private void onDisconnectBtClick() {
        if (!disconnectDialogVisible) {
            disconnectDialogVisible = true;
            JSOptionPane.showMessageDialog("Voulez-vous vous dconnecter ?", "Dconnexion",
                    JSOptionPane.OK_OPTION | JSOptionPane.CANCEL_OPTION, JSOptionPane.QUESTION_MESSAGE,
                    new OptionPaneListener() {
                        public void optionSelected(Object option) {
                            disconnectDialogVisible = false;
                            if ((Integer) option == JSOptionPane.OK_OPTION) {
                                new Action("logout", Action.NO_PARAMETERS, new ActionCallbackAdapter() {
                                    public void onSuccess(AnswerData data) {
                                        Window.Location.reload();
                                    }
                                });
                            }
                        }
                    });
        }
    }
}