Java tutorial
/* Copyright 2010 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 java.util.ArrayList; import java.util.HashMap; import java.util.List; import com.google.gwt.user.client.ui.ClickListener; import com.google.gwt.user.client.ui.HTMLPanel; import com.google.gwt.user.client.ui.Widget; import fr.fg.client.ajax.Action; import fr.fg.client.ajax.ActionCallback; import fr.fg.client.ajax.ActionCallbackAdapter; import fr.fg.client.core.settings.Settings; import fr.fg.client.data.AnswerData; import fr.fg.client.data.PlayerInfosData; import fr.fg.client.data.PlayersInfosData; import fr.fg.client.data.MotdData; import fr.fg.client.data.MotdsData; import fr.fg.client.data.ScriptData; import fr.fg.client.data.ScriptsData; import fr.fg.client.openjwt.ui.DialogListener; import fr.fg.client.openjwt.ui.JSButton; import fr.fg.client.openjwt.ui.JSComboBox; import fr.fg.client.openjwt.ui.JSDialog; import fr.fg.client.openjwt.ui.JSLabel; import fr.fg.client.openjwt.ui.JSList; import fr.fg.client.openjwt.ui.JSRowLayout; import fr.fg.client.openjwt.ui.JSTabbedPane; import fr.fg.client.openjwt.ui.JSTextField; import fr.fg.client.openjwt.ui.JSTextPane; import fr.fg.client.openjwt.ui.SelectionListener; @SuppressWarnings("deprecation") public class AdministrationPanelDialog extends JSDialog implements SelectionListener, ClickListener, ActionCallback, DialogListener { // ------------------------------------------------------- CONSTANTES -- // public final int VIEW_GENERAL = 0, VIEW_ARCHIVE = 1, VIEW_MULTIACCOUNTS = 2, VIEW_MANAGEMENT = 3, VIEW_SCRIPTS = 4, VIEW_STATISTICS = 5, VIEW_BUGS = 6; // -------------------------------------------------------- ATTRIBUTS -- // private JSRowLayout mainLayout; private JSRowLayout layoutGeneral, layoutArchiveBan, layoutMultiAccounts, layoutManagement, layoutScripts, layoutStatistics, layoutBugsReports; private JSTabbedPane viewsPane; private JSLabel tabHeader, label3, label4, scriptSelectionLabel, loadingLabel, player1Label, player2Label, tabMultiAccountsHeader, spacingLabel; private JSTextField player1, player2; private JSButton changeMotdBt, showBannedBt, unbanBt, banBt, execScriptBt, checkMultiAccountsBt, genericMultiAccountsCheckBt; private JSList bannedList, multiAccountsList; private Widget currentWidget; private HTMLPanel motdModerators, scriptAnswer; private JSComboBox scriptSelection; List<MotdData> motd; ArrayList<String> scriptList; // ---------------------------------------------------- CONSTRUCTEURS -- // /** * @Lloyd: On te fera pas pay plus cher pour mettre des commentaires :p */ public AdministrationPanelDialog() { super("Panneau d'administration", false, true, true); mainLayout = new JSRowLayout(); //Le layout de la fenetre, on met tous les lments affichs dedans layoutGeneral = new JSRowLayout(); layoutArchiveBan = new JSRowLayout(); layoutMultiAccounts = new JSRowLayout(); layoutManagement = new JSRowLayout(); layoutScripts = new JSRowLayout(); layoutStatistics = new JSRowLayout(); layoutBugsReports = new JSRowLayout(); currentWidget = layoutGeneral; layoutArchiveBan.setVisible(false); layoutMultiAccounts.setVisible(false); layoutManagement.setVisible(false); layoutScripts.setVisible(false); layoutStatistics.setVisible(false); layoutBugsReports.setVisible(false); ArrayList<String> views = new ArrayList<String>(); //Les titres des onglets views.add("Gnral"); views.add("Bans"); if (Settings.isAdministrator()) { views.add("Doubles comptes"); views.add("Gestion modrateurs"); views.add("Scripts"); views.add("Statistiques"); views.add("Bugs reports"); } label4 = new JSLabel("Onglet gestion modrateurs"); label4.setWidth("240"); /***************************** Partie Gnral *****************************/ if (Settings.isAdministrator()) { changeMotdBt = new JSButton("Changer le message du jour"); changeMotdBt.setPixelWidth(240); changeMotdBt.addClickListener(this); } motdModerators = new HTMLPanel(""); motdModerators.setPixelSize(640, 360); motd = new ArrayList<MotdData>(); if (Settings.isAdministrator()) { layoutGeneral.addComponent(changeMotdBt); layoutGeneral.addRow(); } layoutGeneral.addComponent(motdModerators); /*********************** Partie Gestion des Bannis ***********************/ showBannedBt = new JSButton("Afficher les bannis"); showBannedBt.setPixelWidth(240); showBannedBt.addClickListener(this); unbanBt = new JSButton("Dbannir"); unbanBt.setPixelWidth(150); unbanBt.addClickListener(this); unbanBt.setVisible(false); banBt = new JSButton("Bannir un joueur"); banBt.setPixelWidth(240); banBt.addClickListener(this); banBt.setVisible(true); bannedList = new JSList(); bannedList.setPixelSize(640, 320); bannedList.addSelectionListener(this); tabHeader = new JSLabel(new BannedPlayer().getTabHeader()); tabHeader.setPixelSize(640, 30); layoutArchiveBan.addComponent(showBannedBt); layoutArchiveBan.addComponent(unbanBt); layoutArchiveBan.addComponent(banBt); layoutArchiveBan.addComponent(new JSLabel(" ")); layoutArchiveBan.addRowSeparator(3); layoutArchiveBan.addComponent(tabHeader); layoutArchiveBan.addRow(); layoutArchiveBan.addComponent(bannedList); /*********************** Partie Multi-comptes ***********************/ if (Settings.isAdministrator()) { player1Label = new JSLabel(" Joueur 1: "); player1Label.setPixelWidth(65); player2Label = new JSLabel("Joueur 2: "); player2Label.setPixelWidth(65); spacingLabel = new JSLabel(" "); spacingLabel.setPixelWidth(10); player1 = new JSTextField(); player1.setPixelWidth(120); player2 = new JSTextField(); player2.setPixelWidth(120); tabMultiAccountsHeader = new JSLabel(new PlayerInfos().getTabHeader()); tabMultiAccountsHeader.setPixelSize(640, 30); multiAccountsList = new JSList(); multiAccountsList.setPixelSize(640, 320); multiAccountsList.addSelectionListener(this); checkMultiAccountsBt = new JSButton("Vrifier"); checkMultiAccountsBt.setPixelWidth(100); checkMultiAccountsBt.addClickListener(this); checkMultiAccountsBt.setToolTipText("Vrification entre les 2 joueurs"); genericMultiAccountsCheckBt = new JSButton("Vrification gnrique"); genericMultiAccountsCheckBt.setPixelWidth(160); genericMultiAccountsCheckBt.addClickListener(this); genericMultiAccountsCheckBt.setToolTipText("Vrification pour tous les joueurs (non implment)"); layoutMultiAccounts.addComponent(player1Label); layoutMultiAccounts.addComponent(player1); layoutMultiAccounts.addComponent(spacingLabel); layoutMultiAccounts.addComponent(player2Label); layoutMultiAccounts.addComponent(player2); layoutMultiAccounts.addComponent(checkMultiAccountsBt); layoutMultiAccounts.addComponent(genericMultiAccountsCheckBt); layoutMultiAccounts.addRow(); layoutMultiAccounts.addComponent(tabMultiAccountsHeader); layoutMultiAccounts.addRow(); layoutMultiAccounts.addComponent(multiAccountsList); } /************************** Partie Scripts **************************/ if (Settings.isAdministrator()) { scriptList = new ArrayList<String>(); scriptSelectionLabel = new JSLabel("Script: "); scriptSelectionLabel.setPixelWidth(80); scriptSelection = new JSComboBox(); scriptSelection.setPixelWidth(220); execScriptBt = new JSButton("Excuter le script"); execScriptBt.setPixelWidth(180); execScriptBt.addClickListener(this); loadingLabel = new JSLabel(); loadingLabel.setStyleName("loading-script"); loadingLabel.setVisible(false); scriptAnswer = new HTMLPanel(""); scriptAnswer.setPixelSize(640, 360); layoutScripts.addComponent(scriptSelectionLabel); layoutScripts.addComponent(scriptSelection); layoutScripts.addComponent(execScriptBt); layoutScripts.addComponent(loadingLabel); layoutScripts.addRow(); layoutScripts.addComponent(scriptAnswer); } /********************** Partie Statistiques **********************/ /*********************** Partie Bug Report ***********************/ if (Settings.isAdministrator()) { layoutBugsReports = new LayoutBugsReports(); } /*********************** Layout principal ***********************/ mainLayout.setPixelSize(640, 360); layoutGeneral.setPixelSize(640, 320); layoutArchiveBan.setPixelWidth(640); layoutMultiAccounts.setPixelSize(640, 320); layoutManagement.setPixelSize(640, 320); layoutManagement.addComponent(label4); layoutManagement.addRow(); viewsPane = new JSTabbedPane(); //Les onglets viewsPane.setTabs(views); viewsPane.setPixelSize(720, 30); viewsPane.addSelectionListener(this); //On ajoute les lments par dfaut au layout mainLayout.addComponent(viewsPane); mainLayout.addRowSeparator(3); mainLayout.addComponent(layoutGeneral); mainLayout.addComponent(layoutArchiveBan); if (Settings.isAdministrator()) { mainLayout.addComponent(layoutMultiAccounts); mainLayout.addComponent(layoutManagement); mainLayout.addComponent(layoutScripts); mainLayout.addComponent(layoutStatistics); } mainLayout.addRowSeparator(30); mainLayout.addComponent(new JSLabel(" ")); setComponent(mainLayout); centerOnScreen(); getMotd(); if (Settings.isAdministrator()) { refreshBannedList(); refreshScriptList(); } } // --------------------------------------------------------- METHODES -- // public void selectionChanged(Widget sender, int newValue, int oldValue) { if (sender == viewsPane) { currentWidget.setVisible(false); switch (viewsPane.getSelectedIndex()) { case VIEW_GENERAL: layoutGeneral.setVisible(true); currentWidget = layoutGeneral; layoutGeneral.update(); break; case VIEW_ARCHIVE: layoutArchiveBan.setVisible(true); currentWidget = layoutArchiveBan; layoutArchiveBan.update(); break; case VIEW_MULTIACCOUNTS: layoutMultiAccounts.setVisible(true); currentWidget = layoutMultiAccounts; layoutMultiAccounts.update(); break; case VIEW_MANAGEMENT: layoutManagement.setVisible(true); currentWidget = layoutManagement; layoutManagement.update(); break; case VIEW_SCRIPTS: layoutScripts.setVisible(true); currentWidget = layoutScripts; layoutScripts.update(); break; case VIEW_STATISTICS: layoutStatistics.setVisible(true); currentWidget = layoutStatistics; layoutScripts.update(); break; default: break; } mainLayout.update(); } else if (sender == bannedList) { if (bannedList.getSelectedIndex() != -1) { if (((BannedPlayer) bannedList.getSelectedItem()).isGameBanned() && !Settings.isAdministrator()) { unbanBt.setVisible(false); layoutArchiveBan.update(); } else { unbanBt.setVisible(true); layoutArchiveBan.update(); } } } } public void onClick(Widget sender) { if (sender == showBannedBt) { getBanned(); } else if (sender == unbanBt) { unbanPlayer(); } else if (sender == banBt) { BanPlayerDialog banPlayerDialog = new BanPlayerDialog(this); banPlayerDialog.setVisible(true); } else if (sender == changeMotdBt) { MotdDialog motdDialog = new MotdDialog(this); motdDialog.setVisible(true); } else if (sender == execScriptBt) { executeScript(); } else if (sender == checkMultiAccountsBt) { checkMultiAccounts(); } } public void refreshBannedList() { getBanned(); } public void refreshMotd() { getMotd(); } public void refreshScriptList() { getScriptList(); } public String getMotdAt(int index) { String message = ""; if (index >= motd.size()) return message; for (int i = 0; i < motd.size(); i++) { if (motd.get(i).getId() == index) { message = motd.get(i).getMessage(); break; } } return message; } public void onFailure(String error) { //ignor } public void onSuccess(AnswerData data) { } public void dialogClosed(Widget sender) { } // ------------------------------------------------- METHODES PRIVEES -- // private void getBanned() { HashMap<String, String> params = new HashMap<String, String>(); new Action("admin/getbanned", params, new ActionCallback() { public void onSuccess(AnswerData data) { unbanBt.setVisible(false); bannedList.setSelectedIndex(-1); onBannedPlayerLoaded(data); } public void onFailure(String error) { ActionCallbackAdapter.onFailureDefaultBehavior(error); } }); } private void onBannedPlayerLoaded(AnswerData data) { ArrayList<BannedPlayer> bannedPlayers = new ArrayList<BannedPlayer>(); PlayersInfosData playersInfosData = data.getPlayersInfosData(); int length = playersInfosData.getPlayersInfosCount(); for (int i = 0; i < length; i++) { bannedPlayers.add(new BannedPlayer(playersInfosData.getPlayerInfosDataAt(i))); } bannedList.setItems(bannedPlayers); } private void unbanPlayer() { HashMap<String, String> params = new HashMap<String, String>(); params.put("id", String.valueOf(((BannedPlayer) bannedList.getSelectedItem()).getId())); new Action("admin/unban", params, new ActionCallback() { public void onSuccess(AnswerData data) { getBanned(); } public void onFailure(String error) { ActionCallbackAdapter.onFailureDefaultBehavior(error); } }); } private void getMotd() { HashMap<String, String> params = new HashMap<String, String>(); new Action("admin/getmotd", params, new ActionCallback() { public void onSuccess(AnswerData data) { motd.clear(); MotdsData motds = data.getMotdsData(); for (int i = 0; i < motds.getMotdCount(); i++) { motd.add(motds.getMotdDataAt(i)); } motdModerators.getElement().setInnerHTML(Utilities.parseSmilies(getMotdAt(1))); layoutGeneral.update(); } public void onFailure(String error) { ActionCallbackAdapter.onFailureDefaultBehavior(error); } }); } private void getScriptList() { HashMap<String, String> params = new HashMap<String, String>(); new Action("admin/getscripts", params, new ActionCallback() { public void onSuccess(AnswerData data) { scriptList.clear(); ScriptsData scriptsData = data.getScriptsData(); for (int i = 0; i < scriptsData.getScriptCount(); i++) { scriptList.add(scriptsData.getScriptDataAt(i).getName()); } scriptSelection.setItems(scriptList); layoutScripts.update(); } public void onFailure(String error) { ActionCallbackAdapter.onFailureDefaultBehavior(error); } }); } private void executeScript() { HashMap<String, String> params = new HashMap<String, String>(); params.put("name", ((String) scriptSelection.getSelectedItem())); loadingLabel.setVisible(true); new Action("admin/usescript", params, new ActionCallback() { public void onSuccess(AnswerData data) { ScriptData scriptData = data.getScriptData(); scriptAnswer.getElement().setInnerHTML(scriptData.getMessage()); loadingLabel.setVisible(false); } public void onFailure(String error) { ActionCallbackAdapter.onFailureDefaultBehavior(error); } }); } private void checkMultiAccounts() { HashMap<String, String> params = new HashMap<String, String>(); params.put("player1", ((String) player1.getText())); params.put("player2", ((String) player2.getText())); new Action("admin/checkmultiplesaccounts", params, new ActionCallback() { public void onSuccess(AnswerData data) { PlayerInfosData playerInfosData = data.getPlayerInfosData(); ArrayList<PlayerInfos> multiAccountsPlayers = new ArrayList<PlayerInfos>(); multiAccountsPlayers.add(new PlayerInfos(playerInfosData)); multiAccountsList.setItems(multiAccountsPlayers); } public void onFailure(String error) { ActionCallbackAdapter.onFailureDefaultBehavior(error); } }); } private static class BannedPlayer { int idPlayer; String login; boolean gameBanned; String reason; String date; public BannedPlayer() { } public BannedPlayer(PlayerInfosData data) { this.idPlayer = data.getId(); this.login = data.getLogin(); this.gameBanned = data.isBanned(); this.reason = data.getReason(); this.date = data.getDate(); } public final String toString() { return "<table cellspacing=\"0\" style=\"width: 100%;\"><tr>" + "<td style=\"width: 25%;\">" + login + "</td>" + "<td class=\"center\" style=\"width: 25%;\">" + reason + "</td>" + "<td class=\"center\" style=\"width: 25%;\">" + (!gameBanned ? "Chat" : "Jeu") + "</td>" + "<td class=\"date right\" style=\"width: 25%;\">" + date + " </td>" + "</tr></table>"; } public int getId() { return idPlayer; } public boolean isGameBanned() { return gameBanned; } public String getTabHeader() { return "<table cellspacing=\"0\" style=\"width: 100%;\"><tr>" + "<td style=\"width: 25%;\"> Pseudo </td>" + "<td class=\"center\" style=\"width: 25%;\"> Raison </td>" + "<td class=\"center\" style=\"width: 25%;\"> Type </td>" + "<td class=\"date right\" style=\"width: 25%;\">" + "Jusqu'au </td>" + "</tr></table>"; } } private static class PlayerInfos { String login; String otherLogin; String reason; int probability; int lastIp; String color; public PlayerInfos() { } public PlayerInfos(PlayerInfosData data) { this.login = data.getLogin(); this.otherLogin = data.getOtherLogin(); this.lastIp = data.getRedundantIp(); this.probability = data.getProbability(); this.reason = data.getReason(); if (probability < 20) { color = "#347C2C"; } else if (probability >= 20 && probability < 40) { color = "#667C26"; } else if (probability >= 40 && probability < 70) { color = "#F88017"; } else { color = "#FF0000"; } } public final String toString() { Utilities.log("Avant toString"); return "<table cellspacing=\"0\" style=\"width: 100%;\"><tr>" + "<td class=\"center\" style=\"width: 15%;\">" + login + "</td>" + "<td class=\"center\" style=\"width: 15%;\">" + otherLogin + "</td>" + "<td class=\"center\" style=\"width: 15%; color:" + color + ";\">" + probability + "% </td>" + "<td class=\"center\" style=\"width: 20%;\">" + (lastIp != 0 ? Utilities.long2ip(lastIp) : "") + "</td>" + "<td class=\"center\" style=\"width: 35%;\">" + reason + "</td>" + "</tr></table>"; } public String getTabHeader() { return "<table cellspacing=\"0\" style=\"width: 100%;\"><tr>" + "<td class=\"center\" style=\"width: 15%;\"> Joueur 1 </td>" + "<td class=\"center\" style=\"width: 15%;\">Joueur 2</td>" + "<td class=\"center\" style=\"width: 15%;\">Probabilit</td>" + "<td class=\"center\" style=\"width: 20%;\">ip commune</td>" + "<td class=\"center\" style=\"width: 35%;\">Description dtaille</td>" + "</tr></table>"; } } private class BanPlayerDialog extends JSDialog implements ClickListener, ActionCallback { private JSRowLayout mainLayout; private JSTextField playerLogin, banTimeDay, banTimeHour, banTimeMinute; private JSLabel playerLoginLabel, banReasonLabel, banTypeLabel, banTimeLabel, banTimeDayLabel, banTimeHourLabel, banTimeMinuteLabel; private JSComboBox banType; private JSTextPane banReason; private JSButton confirmBt, cancelBt; AdministrationPanelDialog administrationPanelDialog; public BanPlayerDialog(AdministrationPanelDialog administrationPanelDialog) { super("Bannir un joueur", true, true, true); this.administrationPanelDialog = administrationPanelDialog; playerLoginLabel = new JSLabel("Pseudo: "); playerLoginLabel.setPixelWidth(120); playerLogin = new JSTextField(); playerLogin.setPixelWidth(200); banTimeLabel = new JSLabel("Temps: "); banTimeLabel.setPixelWidth(120); banTimeDayLabel = new JSLabel(" j"); banTimeDayLabel.setPixelWidth(20); banTimeHourLabel = new JSLabel(" h"); banTimeHourLabel.setPixelWidth(20); banTimeMinuteLabel = new JSLabel(" m"); banTimeMinuteLabel.setPixelWidth(20); banTimeDay = new JSTextField(); banTimeDay.setPixelWidth(30); banTimeHour = new JSTextField(); banTimeHour.setPixelWidth(30); banTimeMinute = new JSTextField(); banTimeMinute.setPixelWidth(30); banTypeLabel = new JSLabel("Type de ban: "); banTypeLabel.setPixelWidth(120); banType = new JSComboBox(); banType.setPixelWidth(120); banType.addItem("Chat"); if (Settings.isAdministrator()) { banType.addItem("Jeu"); } banReasonLabel = new JSLabel("Raison: "); banReasonLabel.setPixelWidth(160); banReason = new JSTextPane(); banReason.setPixelSize(320, 120); confirmBt = new JSButton("Bannir"); confirmBt.setPixelWidth(160); confirmBt.addClickListener(this); cancelBt = new JSButton("Annuler"); cancelBt.setPixelWidth(160); cancelBt.addClickListener(this); mainLayout = new JSRowLayout(); mainLayout.addComponent(playerLoginLabel); mainLayout.addComponent(playerLogin); mainLayout.addRow(); mainLayout.addComponent(banTimeLabel); mainLayout.addComponent(banTimeDay); mainLayout.addComponent(banTimeDayLabel); mainLayout.addComponent(banTimeHour); mainLayout.addComponent(banTimeHourLabel); mainLayout.addComponent(banTimeMinute); mainLayout.addComponent(banTimeMinuteLabel); mainLayout.addRow(); mainLayout.addComponent(banTypeLabel); mainLayout.addComponent(banType); mainLayout.addRow(); mainLayout.addComponent(banReasonLabel); mainLayout.addRow(); mainLayout.addComponent(banReason); mainLayout.addRow(); mainLayout.addComponent(confirmBt); mainLayout.addComponent(cancelBt); setComponent(mainLayout); centerOnScreen(); } public void onClick(Widget sender) { if (sender == confirmBt) { if (playerLogin.getText().length() > 0 && (banTimeDay.getText().length() > 0 || banTimeHour.getText().length() > 0 || banTimeMinute.getText().length() > 0) && banType.getSelectedIndex() >= 0) { banPlayer(); } } else if (sender == cancelBt) { setVisible(false); } } private void banPlayer() { HashMap<String, String> params = new HashMap<String, String>(); int days = banTimeDay.getText().length() > 0 ? Integer.parseInt(banTimeDay.getText()) : 0; int hours = banTimeHour.getText().length() > 0 ? Integer.parseInt(banTimeHour.getText()) : 0; int minutes = banTimeMinute.getText().length() > 0 ? Integer.parseInt(banTimeMinute.getText()) : 0; long time = (days * 24 * 3600) + (hours * 3600) + (minutes * 60); params.put("login", playerLogin.getText()); params.put("time", String.valueOf(time)); params.put("reason", banReason.getHTML()); params.put("bangame", String.valueOf(banType.getSelectedIndex() == 0 ? false : true)); new Action("admin/ban", params, this); } public void onSuccess(AnswerData data) { administrationPanelDialog.refreshBannedList(); setVisible(false); } public void onFailure(String error) { ActionCallbackAdapter.onFailureDefaultBehavior(error); } } //End BanPlayerDialog private class MotdDialog extends JSDialog implements SelectionListener, ClickListener { private JSRowLayout mainLayout; private JSLabel typeLabel; private JSComboBox type; private JSTextPane content; private JSButton confirmBt, cancelBt; private AdministrationPanelDialog administrationPanelDialog; public MotdDialog(AdministrationPanelDialog administrationPanelDialog) { super("Message du jour", true, true, true); this.administrationPanelDialog = administrationPanelDialog; if (!Settings.isAdministrator()) { setVisible(false); return; } typeLabel = new JSLabel("Type: "); typeLabel.setPixelWidth(120); type = new JSComboBox(); type.setPixelWidth(200); type.addItem("Chat"); type.addItem("Moderateur"); type.addSelectionListener(this); content = new JSTextPane(); content.setPixelSize(320, 120); content.setHTML(administrationPanelDialog.getMotdAt(0)); confirmBt = new JSButton("Confirmer"); confirmBt.setPixelWidth(160); confirmBt.addClickListener(this); cancelBt = new JSButton("Annuler"); cancelBt.setPixelWidth(160); cancelBt.addClickListener(this); mainLayout = new JSRowLayout(); mainLayout.addComponent(typeLabel); mainLayout.addComponent(type); mainLayout.addRow(); mainLayout.addComponent(content); mainLayout.addRow(); mainLayout.addComponent(confirmBt); mainLayout.addComponent(cancelBt); setComponent(mainLayout); centerOnScreen(); } public void onClick(Widget sender) { if (sender == confirmBt) { changeMotd(); } else if (sender == cancelBt) { setVisible(false); } } private void changeMotd() { HashMap<String, String> params = new HashMap<String, String>(); params.put("type", (String.valueOf(type.getSelectedIndex()))); params.put("content", content.getHTML()); new Action("admin/changemotd", params, new ActionCallback() { public void onSuccess(AnswerData data) { administrationPanelDialog.refreshMotd(); setVisible(false); } public void onFailure(String error) { ActionCallbackAdapter.onFailureDefaultBehavior(error); } }); } public void selectionChanged(Widget sender, int newValue, int oldValue) { if (sender == type) { if (content.getHTML().equals(administrationPanelDialog.getMotdAt(oldValue))) { content.setHTML(administrationPanelDialog.getMotdAt(newValue)); mainLayout.update(); } } } } /** * layout pour les bugs reports * @author Ghost * @todo Ghost commencer! */ private class LayoutBugsReports extends JSRowLayout { public LayoutBugsReports() { } } } //End AdministrationPanelDialog