List of usage examples for com.google.gwt.user.client Window confirm
public static boolean confirm(String msg)
From source file:com.example.jumpnote.web.client.controls.NoteItem.java
License:Apache License
@UiHandler("deleteButton") void onDeleteClick(ClickEvent e) { e.stopPropagation();//from w ww . ja va 2 s . c o m if (Window.confirm("Are you sure you want to delete '" + mNote.getTitle() + "'?")) { mActionCallback.onDelete(mNote.getId()); } }
From source file:com.fullmetalgalaxy.client.game.context.WgtContextAction.java
License:Open Source License
@Override public void onClick(ClickEvent p_event) { Object sender = p_event.getSource(); try {//from www . ja va2s . com EventsPlayBuilder actionBuilder = GameEngine.model().getActionBuilder(); if (sender == m_btnOk) { actionBuilder.userOk(); GameEngine.model().runCurrentAction(); } else if (sender == m_btnCancel) { actionBuilder.userCancel(); AppRoot.getEventBus().fireEvent(new ModelUpdateEvent(GameEngine.model())); } else if (sender == m_btnRepairTurret) { EventBuilderMsg eventBuilderMsg = actionBuilder.userAction(GameLogType.EvtRepair); if (eventBuilderMsg == EventBuilderMsg.MustRun) { GameEngine.model().runSingleAction(actionBuilder.getSelectedAction()); } } else if (sender == m_btnFire) { actionBuilder.userAction(GameLogType.EvtFire); if (((EbEvtFire) actionBuilder.getSelectedAction()) .getTokenTarget(GameEngine.model().getGame()) == null) { MAppMessagesStack.s_instance.showMessage(MAppBoard.s_messages.selectDestroyerTarget()); } else { MAppMessagesStack.s_instance.showMessage(MAppBoard.s_messages.selectTwoDestroyers()); } } else if (sender == m_btnControl) { actionBuilder.userAction(GameLogType.EvtControl); if (((EbEvtFire) actionBuilder.getSelectedAction()) .getTokenTarget(GameEngine.model().getGame()) == null) { MAppMessagesStack.s_instance.showMessage(MAppBoard.s_messages.selectDestroyerTarget()); } else { MAppMessagesStack.s_instance.showMessage(MAppBoard.s_messages.selectTwoDestroyers()); } } else if (sender == m_btnFireCoverOn) { GameEngine.model().setFireCoverDisplayed(true); } else if (sender == m_btnFireCoverOff) { GameEngine.model().setFireCoverDisplayed(false); } else if (sender == m_btnGridOn) { GameEngine.model().setGridDisplayed(true); } else if (sender == m_btnGridOff) { GameEngine.model().setGridDisplayed(false); } else if (sender == m_btnZoomIn) { GameEngine.model().setZoomDisplayed(EnuZoom.Medium); } else if (sender == m_btnZoomOut) { GameEngine.model().setZoomDisplayed(EnuZoom.Small); } else if (sender == m_btnRegister || sender == m_pnlRegister) { DlgJoinGame.instance().show(); DlgJoinGame.instance().center(); } else if (sender == m_btnPractice || sender == m_btnPracticeCancel) { if (GameEngine.model().getGame().getGameType() == GameType.MultiPlayer || GameEngine.model().getGame().getGameType() == GameType.Initiation) { Window.alert(MAppBoard.s_messages.activateTrainningMode()); m_actionIndexBeforePracticeMode = GameEngine.model().getGame().getLogs().size(); GameEngine.model().getGame().setGameType(GameType.Practice); AppRoot.getEventBus().fireEvent(new ModelUpdateEvent(GameEngine.model())); } else { // Window.alert( MAppBoard.s_messages.deactivateTrainningMode() ); // ClientUtil.reload(); // cancel locally EbEvtCancel evtCancel = new EbEvtCancel(); evtCancel.setGame(GameEngine.model().getGame()); evtCancel.setFromActionIndex(GameEngine.model().getGame().getLogs().size() + GameEngine.model().getGame().getAdditionalEventCount() + GameEngine.model() .getMyRegistration().getTeam(GameEngine.model().getGame()).getMyEvents().size() - 1); evtCancel.setToActionIndex(GameEngine.model().getGame().getAdditionalEventCount() + m_actionIndexBeforePracticeMode); evtCancel.setAccountId(AppMain.instance().getMyAccount().getId()); GameEngine.model().runSingleAction(evtCancel); GameEngine.model().getGame().setGameType(GameType.MultiPlayer); MAppMessagesStack.s_instance.removeMessage(m_pnlPractice); AppRoot.getEventBus().fireEvent(new ModelUpdateEvent(GameEngine.model())); } } else if (sender == m_btnPracticeOk) { // after playing offline, user want to commit his turn to server // put all actions to event builder GameEngine.model().getActionBuilder().clear(); int iAction = m_actionIndexBeforePracticeMode; ArrayList<AnEventPlay> eventsBackup = new ArrayList<AnEventPlay>(); while (GameEngine.model().getGame().getLogs().size() > iAction) { AnEvent event = GameEngine.model().getGame().getLogs().get(iAction); if (event instanceof AnEventPlay) { eventsBackup.add((AnEventPlay) event); } iAction++; } // cancel locally EbEvtCancel evtCancel = new EbEvtCancel(); evtCancel.setGame(GameEngine.model().getGame()); evtCancel.setFromActionIndex(GameEngine.model().getGame().getLogs().size() + GameEngine.model().getGame().getAdditionalEventCount() + GameEngine.model() .getMyRegistration().getTeam(GameEngine.model().getGame()).getMyEvents().size() - 1); evtCancel.setToActionIndex(m_actionIndexBeforePracticeMode); evtCancel.setAccountId(AppMain.instance().getMyAccount().getId()); GameEngine.model().runSingleAction(evtCancel); // finally send actions to server GameEngine.model().getGame().setGameType(GameType.MultiPlayer); GameEngine.model().getActionBuilder().getActionList().addAll(eventsBackup); GameEngine.model().runCurrentAction(); MAppMessagesStack.s_instance.removeMessage(m_pnlPractice); } else if (sender == m_btnEndTurn || sender == m_pnlEndTurn) { String msg = null; int oldPt = GameEngine.model().getMyRegistration().getPtAction(); int newPt = GameEngine.model().getMyRegistration().getRoundedActionPt(GameEngine.model().getGame()); if (oldPt == newPt) { msg = MAppBoard.s_messages.confirmEndTurn(oldPt); } else { msg = MAppBoard.s_messages.confirmEndTurnRoundedPA(oldPt, newPt); } if (Window.confirm(msg)) { EbEvtPlayerTurn action = new EbEvtPlayerTurn(); action.setGame(GameEngine.model().getGame()); action.setAccountId(AppMain.instance().getMyAccount().getId()); GameEngine.model().runSingleAction(action); } } else if (sender == m_btnTakeOff) { if (Window.confirm(MAppBoard.s_messages .confirmTakeOff(Messages.getTokenString(0, actionBuilder.getSelectedToken())))) { EbEvtTakeOff action = new EbEvtTakeOff(); action.setGame(GameEngine.model().getGame()); action.setRegistration(GameEngine.model().getMyRegistration()); action.setToken(actionBuilder.getSelectedToken()); GameEngine.model().runSingleAction(action); } } else if (sender == m_pnlLand) { // search for my freighter to land GameEngine.model().getActionBuilder().userTokenClick( GameEngine.model().getGame().getFreighter(GameEngine.model().getMyRegistration())); AppRoot.getEventBus().fireEvent(new ModelUpdateEvent(GameEngine.model())); } else if (sender == m_pnlDeploy) { // search for any unit to deploy EbToken myFreighter = GameEngine.model().getGame() .getFreighter(GameEngine.model().getMyRegistration()); if (myFreighter.containToken()) { EbToken firstToken = myFreighter.getContains().iterator().next(); GameEngine.model().getActionBuilder().userTokenClick(firstToken); AppRoot.getEventBus().fireEvent(new ModelUpdateEvent(GameEngine.model())); } } else if (sender == m_pnlTakeOff) { GameEngine.model().getActionBuilder().clear(); // search for my freighter to take off for (EbToken token : GameEngine.model().getGame() .getAllFreighter(GameEngine.model().getMyRegistration().getColor())) { if (token.getLocation() == Location.Board) { GameEngine.model().getActionBuilder().userTokenClick(token); break; } } AppRoot.getEventBus().fireEvent(new ModelUpdateEvent(GameEngine.model())); } } catch (RpcFmpException e) { MAppMessagesStack.s_instance.showWarning(e.getLocalizedMessage()); } }
From source file:com.fullmetalgalaxy.client.game.tabmenu.WgtGameInfo.java
License:Open Source License
@Override public void onClick(ClickEvent p_event) { if (p_event.getSource() == m_btnGrid) { GameEngine.model().setGridDisplayed(m_btnGrid.isDown()); } else if (p_event.getSource() == m_btnAtmosphere) { GameEngine.model().setAtmosphereDisplayed(m_btnAtmosphere.isDown()); } else if (p_event.getSource() == m_btnCustomMap) { GameEngine.model().setCustomMapDisplayed(m_btnCustomMap.isDown()); } else if (p_event.getSource() == m_btnPause) { AnEvent gameLog = GameLogFactory.newAdminTimePause(AppMain.instance().getMyAccount().getId()); gameLog.setGame(GameEngine.model().getGame()); GameEngine.model().runSingleAction(gameLog); } else if (p_event.getSource() == m_btnPlay) { AnEvent gameLog = GameLogFactory.newAdminTimePlay(AppMain.instance().getMyAccount().getId()); gameLog.setGame(GameEngine.model().getGame()); GameEngine.model().runSingleAction(gameLog); } else if (p_event.getSource() == m_btnEdit) { ClientUtil.gotoUrl("/editgame.jsp?id=" + GameEngine.model().getGame().getId()); } else if (p_event.getSource() == m_btnAbort) { if (Window.confirm(MAppBoard.s_messages.confirmCancelGame())) { AnEvent gameLog = GameLogFactory.newAdminAbort(AppMain.instance().getMyAccount().getId()); gameLog.setGame(GameEngine.model().getGame()); GameEngine.model().runSingleAction(gameLog); }/* w w w. j a v a 2 s .c om*/ } else if (p_event.getSource() == m_btnRecordEvent) { if (m_btnRecordEvent.isDown()) { GameEngine.model().getGame().setMessage(EventsPlayBuilder.GAME_MESSAGE_RECORDING_TAG + "\n"); } GameEngine.model().getActionBuilder().setRecordMode(m_btnRecordEvent.isDown()); } }
From source file:com.fullmetalgalaxy.client.game.tabmenu.WgtGameTimeMode.java
License:Open Source License
@Override public void onClick(ClickEvent p_event) { Object sender = p_event.getSource(); if (sender == m_btnOk) { if (GameEngine.model().getCurrentAction() == null) { // user click ok to cancel action // but action selected was then last one: no cancel GameEngine.model().setTimeLineMode(false); return; }/* w w w.ja va 2 s.c om*/ if (GameEngine.model().getLastTurnPlayed() != GameEngine.model().getGame().getCurrentTimeStep() || (GameEngine.model().getMyRegistration() != null && !GameEngine.model().getGame() .getCurrentPlayerIds().contains(GameEngine.model().getMyRegistration().getId()))) { if (!AppMain.instance().iAmAdmin()) { // no i18n: this dialog shouldn't appear Window.alert("Only admin can cancel such action"); return; } // admin is going to perform admin action, show confirm dialog // it may also a training game // TODO i18n if (!Window.confirm("Perform admin cancel ?")) { return; } } // just in case another action was in preparation EventsPlayBuilder actionBuilder = GameEngine.model().getActionBuilder(); actionBuilder.clear(); EbEvtCancel evtCancel = new EbEvtCancel(); evtCancel.setGame(GameEngine.model().getGame()); int fromIndex = GameEngine.model().getGame().getLogs().size() - 1; fromIndex += GameEngine.model().getGame().getAdditionalEventCount(); if (GameEngine.model().getMyRegistration() != null) { fromIndex += GameEngine.model().getMyRegistration().getTeam(GameEngine.model().getGame()) .getMyEvents().size(); } evtCancel.setFromActionIndex(fromIndex); evtCancel.setToActionIndex(GameEngine.model().getGame().getAdditionalEventCount() + GameEngine.model().getCurrentActionIndex()); evtCancel.setAccountId(AppMain.instance().getMyAccount().getId()); // this action is required to send the last game version to server GameEngine.model().setTimeLineMode(false); GameEngine.model().runSingleAction(evtCancel); } else if (sender == m_btnForward) { GameEngine.model().timePlay(1); } else if (sender == m_btnFastPlay) { GameEngine.model().timePlay(10); } else if (sender == m_btnBack) { GameEngine.model().timeBack(1); } else if (sender == m_btnFastBack) { GameEngine.model().timeBack(10); } else if (sender == m_btnPlay) { GameEngine.model().startPlayAnimation(); } else if (sender == m_btnPause) { GameEngine.model().stopPlayAnimation(); } }
From source file:com.fullmetalgalaxy.client.game.tabmenu.WgtPlayers.java
License:Open Source License
@Override public void onClick(ClickEvent p_event) { if (p_event.getSource() == m_btnChat) { DlgChatInput.showDialog();/*from ww w . java2 s .c o m*/ } else if (m_skipTurnButtons.get(p_event.getSource()) != null) { EbRegistration registration = m_skipTurnButtons.get(p_event.getSource()); String playerName = Messages.getColorString(0, registration.getTeam(GameEngine.model().getGame()).getFireColor()); if (registration.getAccount() != null) { playerName = registration.getAccount().getPseudo(); } if (Window.confirm("Voulez-vous rellement sauter le tour de " + playerName + ", il lui reste " + registration.getPtAction() + " points d'action.")) { EbEvtPlayerTurn action = new EbEvtPlayerTurn(); action.setGame(GameEngine.model().getGame()); if (registration.getAccount() != null) { action.setAccountId(registration.getAccount().getId()); } action.setOldPlayerId(registration.getId()); // ok itsn't an automatic action, but with this trick I can track of the guy which // end this turn and pass through action checking action.setAuto(true); GameEngine.model().runSingleAction(action); } } else if (m_banButtons.get(p_event.getSource()) != null) { // want to ban player EbRegistration registration = m_banButtons.get(p_event.getSource()); if (Window.confirm("Voulez-vous rellement banir " + registration.getAccount().getPseudo() + " de la partie " + GameEngine.model().getGame().getName())) { EbAdminBan gameLog = new EbAdminBan(); gameLog.setAccountId(AppMain.instance().getMyAccount().getId()); gameLog.setRegistrationId(registration.getId()); gameLog.setGame(GameEngine.model().getGame()); GameEngine.model().runSingleAction(gameLog); } } }
From source file:com.google.appinventor.client.editor.simple.components.MockComponent.java
License:Open Source License
/** * Creates a new instance of the component. * * @param editor editor of source file the component belongs to *///ww w. ja v a 2 s. co m MockComponent(SimpleEditor editor, String type, Image iconImage) { this.editor = editor; this.type = type; this.iconImage = iconImage; sourceStructureExplorerItem = new SourceStructureExplorerItem() { @Override public void onSelected() { // are we showing the blocks editor? if so, toggle the component drawer if (Ode.getInstance().getCurrentFileEditor() instanceof YaBlocksEditor) { YaBlocksEditor blocksEditor = (YaBlocksEditor) Ode.getInstance().getCurrentFileEditor(); OdeLog.log("Showing item " + getName()); blocksEditor.showComponentBlocks(getName()); } else { select(); } } @Override public void onStateChange(boolean open) { // The user has expanded or collapsed the branch in the components tree corresponding to // this component. Remember that by setting the expanded field so that when we re-build // the tree, we will keep the branch in the same state. expanded = open; } @Override public boolean canRename() { return !isForm(); } @Override public void rename() { if (!isForm()) { new RenameDialog(getName()).center(); } } @Override public boolean canDelete() { return !isForm(); } @Override public void delete() { if (!isForm()) { if (Window.confirm(MESSAGES.reallyDeleteComponent())) { MockComponent.this.delete(); } } } }; expanded = true; // Create a default property set for the component properties = new EditableProperties(true); // Add the mock component itself as a property change listener so that it can update its // visual aspects according to changes of its properties properties.addPropertyChangeListener(this); // Allow dragging this component in a drag-and-drop action if this is not the root form if (!isForm()) { dragSourceSupport = new DragSourceSupport(this); addMouseListener(dragSourceSupport); } }
From source file:com.google.appinventor.client.editor.simple.palette.ComponentRemoveWidget.java
License:Open Source License
public ComponentRemoveWidget(SimpleComponentDescriptor simpleComponentDescriptor) { if (imageResource == null) { Images images = Ode.getImageBundle(); imageResource = images.deleteComponent(); }/*from w ww . ja v a2 s .c o m*/ this.scd = simpleComponentDescriptor; AbstractImagePrototype.create(imageResource).applyTo(this); addClickListener(new ClickListener() { @Override public void onClick(Widget widget) { if (Window.confirm(MESSAGES.reallyRemoveComponent())) { long projectId = ode.getCurrentYoungAndroidProjectId(); YaProjectEditor projectEditor = (YaProjectEditor) ode.getEditorManager() .getOpenProjectEditor(projectId); SimpleComponentDatabase componentDatabase = SimpleComponentDatabase.getInstance(); componentDatabase.addComponentDatabaseListener(projectEditor); componentDatabase.removeComponent(scd.getName()); } } }); }
From source file:com.google.appinventor.client.explorer.commands.DeleteFileCommand.java
License:Open Source License
/** * Shows a confirmation dialog./*ww w . j ava2 s . co m*/ * * @return {@code true} if the delete file command should be executed or * {@code false} if it should be canceled */ protected boolean deleteConfirmation() { return Window.confirm(MESSAGES.reallyDeleteFile()); }
From source file:com.google.appinventor.client.explorer.youngandroid.GalleryPage.java
License:Open Source License
/** * Helper method called by constructor to initialize the remove button *//*w w w .jav a 2 s . com*/ private void initRemoveButton() { removeButton = new Button(MESSAGES.galleryRemoveText()); removeButton.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { //popup confrim dialog if (!Window.confirm(MESSAGES.galleryRemoveConfirmText())) { return; } removeButton.setEnabled(false); removeButton.setText(MESSAGES.galleryAppRemoving()); ; final OdeAsyncCallback<Void> callback = new OdeAsyncCallback<Void>(MESSAGES.galleryDeleteError()) { @Override public void onSuccess(Void result) { // once we have deleted, set the project id back to not published final OdeAsyncCallback<Void> projectCallback = new OdeAsyncCallback<Void>( MESSAGES.gallerySetProjectIdError()) { @Override public void onSuccess(Void result) { // this is called after deleted and after we've set the galleryid Ode.getInstance().getProjectManager().UnpublishProject(app.getProjectId()); Ode.getInstance().switchToProjectsView(); } @Override public void onFailure(Throwable caught) { super.onFailure(caught); removeButton.setEnabled(true); removeButton.setText(MESSAGES.galleryRemoveText()); } }; GalleryClient client = GalleryClient.getInstance(); client.appWasChanged(); // tell views to update Ode.getInstance().getProjectService().setGalleryId(app.getProjectId(), UserProject.NOTPUBLISHED, projectCallback); } @Override public void onFailure(Throwable caught) { super.onFailure(caught); removeButton.setEnabled(true); removeButton.setText(MESSAGES.galleryRemoveText()); } }; Ode.getInstance().getGalleryService().deleteApp(app.getGalleryAppId(), callback); } }); removeButton.addStyleName("app-action-button"); appAction.add(removeButton); }
From source file:com.google.appinventor.client.Ode.java
License:Open Source License
/** * Main entry point for Ode. Setting up the UI and the web service * connections.// w ww . j ava2s . c o m */ @Override public void onModuleLoad() { Tracking.trackPageview(); // Handler for any otherwise unhandled exceptions GWT.setUncaughtExceptionHandler(new GWT.UncaughtExceptionHandler() { @Override public void onUncaughtException(Throwable e) { OdeLog.xlog(e); if (AppInventorFeatures.sendBugReports()) { if (Window.confirm(MESSAGES.internalErrorReportBug())) { Window.open(BugReport.getBugReportLink(e), "_blank", ""); } } else { // Display a confirm dialog with error msg and if 'ok' open the debugging view if (Window.confirm(MESSAGES.internalErrorClickOkDebuggingView())) { Ode.getInstance().switchToDebuggingView(); } } } }); // Define bridge methods to Javascript JsonpConnection.defineBridgeMethod(); // Initialize global Ode instance instance = this; // Let's see if we were started with a repo= parameter which points to a template templatePath = Window.Location.getParameter("repo"); if (templatePath != null) { OdeLog.wlog("Got a template path of " + templatePath); templateLoadingFlag = true; } // Let's see if we were started with a galleryId= parameter which points to a template galleryId = Window.Location.getParameter("galleryId"); if (galleryId != null) { OdeLog.wlog("Got a galleryId of " + galleryId); galleryIdLoadingFlag = true; } // Get user information. OdeAsyncCallback<Config> callback = new OdeAsyncCallback<Config>( // failure message MESSAGES.serverUnavailable()) { @Override public void onSuccess(Config result) { config = result; user = result.getUser(); isReadOnly = user.isReadOnly(); // If user hasn't accepted terms of service, ask them to. if (!user.getUserTosAccepted() && !isReadOnly) { // We expect that the redirect to the TOS page should be handled // by the onFailure method below. The server should return a // "forbidden" error if the TOS wasn't accepted. ErrorReporter.reportError(MESSAGES.serverUnavailable()); return; } splashConfig = result.getSplashConfig(); if (result.getRendezvousServer() != null) { setRendezvousServer(result.getRendezvousServer()); } else { setRendezvousServer(YaVersion.RENDEZVOUS_SERVER); } userSettings = new UserSettings(user); // Gallery settings gallerySettings = new GallerySettings(); //gallerySettings.loadGallerySettings(); loadGallerySettings(); // Initialize project and editor managers // The project manager loads the user's projects asynchronously projectManager = new ProjectManager(); projectManager.addProjectManagerEventListener(new ProjectManagerEventAdapter() { @Override public void onProjectsLoaded() { projectManager.removeProjectManagerEventListener(this); // This handles any built-in templates stored in /war // Retrieve template data stored in war/templates folder and // and save it for later use in TemplateUploadWizard OdeAsyncCallback<String> templateCallback = new OdeAsyncCallback<String>( // failure message MESSAGES.createProjectError()) { @Override public void onSuccess(String json) { // Save the templateData TemplateUploadWizard.initializeBuiltInTemplates(json); // Here we call userSettings.loadSettings, but the settings are actually loaded // asynchronously, so this loadSettings call will return before they are loaded. // After the user settings have been loaded, openPreviousProject will be called. // We have to call this after the builtin templates have been loaded otherwise // we will get a NPF. userSettings.loadSettings(); } }; Ode.getInstance().getProjectService().retrieveTemplateData( TemplateUploadWizard.TEMPLATES_ROOT_DIRECTORY, templateCallback); } }); editorManager = new EditorManager(); // Initialize UI initializeUi(); topPanel.showUserEmail(user.getUserEmail()); } @Override public void onFailure(Throwable caught) { if (caught instanceof StatusCodeException) { StatusCodeException e = (StatusCodeException) caught; int statusCode = e.getStatusCode(); switch (statusCode) { case Response.SC_UNAUTHORIZED: // unauthorized => not on whitelist // getEncodedResponse() gives us the message that we wrote in // OdeAuthFilter.writeWhitelistErrorMessage(). Window.alert(e.getEncodedResponse()); return; case Response.SC_FORBIDDEN: // forbidden => need tos accept Window.open("/" + ServerLayout.YA_TOS_FORM, "_self", null); return; case Response.SC_PRECONDITION_FAILED: String locale = Window.Location.getParameter("locale"); if (locale == null || locale.equals("")) { Window.Location.replace("/login/"); } else { Window.Location.replace("/login/?locale=" + locale); } return; // likely not reached } } super.onFailure(caught); } }; // The call below begins an asynchronous read of the user's settings // When the settings are finished reading, various settings parsers // will be called on the returned JSON object. They will call various // other functions in this module, including openPreviousProject (the // previous project ID is stored in the settings) as well as the splash // screen displaying functions below. // // TODO(user): ODE makes too many RPC requests at startup time. Currently // we do 3 RPCs + 1 per project + 1 per open file. We should bundle some of // those with each other or with the initial HTML transfer. // // This call also stores our sessionId in the backend. This will be checked // when we go to save a file and if different file saving will be disabled // Newer sessions invalidate older sessions. userInfoService.getSystemConfig(sessionId, callback); History.addValueChangeHandler(new ValueChangeHandler<String>() { @Override public void onValueChange(ValueChangeEvent<String> event) { openProject(event.getValue()); } }); // load project based on current url // TODO(sharon): Seems like a possible race condition here if the onValueChange // handler defined above gets called before the getSystemConfig call sets // userSettings. // The following line causes problems with GWT debugging, and commenting // it out doesn't seem to break things. //History.fireCurrentHistoryState(); }