/** Determine if message text changed and handle appropriately. */ private void checkMessageTextChanged() { String newText = message.getText(); if (!newText.equals(messageText)) { messageText = newText; Session.getInstance().getEventBus().notifyObservers(MessageTextAreaChangedEvent.getEvent()); } }
/** Wires up events. */ private void setupEvents() { // user clicked in message text box message.addFocusHandler( new FocusHandler() { public void onFocus(final FocusEvent inEvent) { if ((" " + getStyleName() + " ") .contains(StaticResourceBundle.INSTANCE.coreCss().small())) { removeStyleName(StaticResourceBundle.INSTANCE.coreCss().small()); onExpand(); } } }); message.addValueChangedHandler( new ValueChangeHandler<String>() { public void onValueChange(final ValueChangeEvent<String> newValue) { checkMessageTextChanged(); } }); // user typed in message text box message.addKeystrokeHandler( new KeyUpHandler() { public void onKeyUp(final KeyUpEvent ev) { if (ev.getNativeKeyCode() == KeyCodes.KEY_ENTER && ev.isControlKeyDown() && message.getText().length() > 0) { checkMessageTextChanged(); handlePostMessage(); } else { checkMessageTextChanged(); } } }); // user clicked on post button postButton.addClickHandler( new ClickHandler() { public void onClick(final ClickEvent ev) { checkMessageTextChanged(); handlePostMessage(); } }); final EventBus eventBus = Session.getInstance().getEventBus(); eventBus.addObserver( MessageStreamAppendEvent.class, new Observer<MessageStreamAppendEvent>() { public void update(final MessageStreamAppendEvent event) { errorMsg.setVisible(false); addStyleName(StaticResourceBundle.INSTANCE.coreCss().small()); messageText = ""; message.setText(postBoxDefaultText); onRemainingCharactersChanged(); links.close(); } }); eventBus.addObserver( GotSystemSettingsResponseEvent.class, new Observer<GotSystemSettingsResponseEvent>() { public void update(final GotSystemSettingsResponseEvent event) { String warning = event.getResponse().getContentWarningText(); if (warning != null && !warning.isEmpty()) { contentWarning.getElement().setInnerHTML(warning); } else { contentWarning.setVisible(false); } message.setVisible(true); } }); eventBus.addObserver( MessageTextAreaChangedEvent.getEvent(), new Observer<MessageTextAreaChangedEvent>() { public void update(final MessageTextAreaChangedEvent arg1) { // the value changed - make sure we're not stuck in the disabled, non-editable mode if ((" " + getStyleName() + " ") .contains(StaticResourceBundle.INSTANCE.coreCss().small())) { removeStyleName(StaticResourceBundle.INSTANCE.coreCss().small()); } onRemainingCharactersChanged(); } }); eventBus.addObserver( MessageAttachmentChangedEvent.class, new Observer<MessageAttachmentChangedEvent>() { public void update(final MessageAttachmentChangedEvent evt) { errorMsg.setVisible(false); attachment = evt.getAttachment(); if (attachment == null && messageText.isEmpty()) { hidePostButton(); } else { showPostButton(); } } }); eventBus.addObserver( new ErrorPostingMessageToNullScopeEvent(), new Observer<ErrorPostingMessageToNullScopeEvent>() { public void update(final ErrorPostingMessageToNullScopeEvent event) { errorMsg.setText(event.getErrorMsg()); errorMsg.setVisible(true); showPostButton(); } }); }
/** Invoked when the composite is expanded (due to user clicking on the box). */ protected void onExpand() { message.setText(""); }
/** * Builds the UI. * * @param inScope the scope. */ private void setupWidgets(final StreamScope inScope) { this.getElement().setAttribute("id", "post-to-stream"); this.addStyleName(StaticResourceBundle.INSTANCE.coreCss().small()); charsRemaining = new Label(); postButton = new Hyperlink("", History.getToken()); postButton.getElement().setAttribute("tabindex", "2"); message = new PostToStreamTextboxPanel(); message.setText(postBoxDefaultText); message.setVisible(false); // Hide until post ready event. this.addStyleName(StaticResourceBundle.INSTANCE.coreCss().postToStream()); errorMsg.addStyleName(StaticResourceBundle.INSTANCE.coreCss().formErrorBox()); errorMsg.setVisible(false); this.add(errorMsg); FlowPanel postInfoContainer = new FlowPanel(); postInfoContainer.addStyleName(StaticResourceBundle.INSTANCE.coreCss().postInfoContainer()); postButton.addStyleName(StaticResourceBundle.INSTANCE.coreCss().postButton()); postInfoContainer.add(postButton); charsRemaining.addStyleName(StaticResourceBundle.INSTANCE.coreCss().charactersRemaining()); postInfoContainer.add(charsRemaining); AvatarWidget avatar = new AvatarWidget( Session.getInstance().getCurrentPerson(), EntityType.PERSON, Size.VerySmall); avatar.addStyleName(StaticResourceBundle.INSTANCE.coreCss().postEntryAvatar()); Panel entryPanel = new FlowPanel(); entryPanel.addStyleName(StaticResourceBundle.INSTANCE.coreCss().postEntryPanel()); entryPanel.add(avatar); entryPanel.add(postInfoContainer); entryPanel.add(message); SimplePanel breakPanel = new SimplePanel(); breakPanel.addStyleName(StaticResourceBundle.INSTANCE.coreCss().breakClass()); entryPanel.add(breakPanel); add(entryPanel); // below text area: links and post to on one line, then content warning below expandedPanel.addStyleName(StaticResourceBundle.INSTANCE.coreCss().postExpandedPanel()); postToPanel = new PostToPanel(inScope); expandedPanel.add(postToPanel); links = new AddLinkComposite(); expandedPanel.add(links); contentWarning = new FlowPanel(); contentWarningContainer.addStyleName(StaticResourceBundle.INSTANCE.coreCss().contentWarning()); contentWarningContainer.add(new SimplePanel()); contentWarningContainer.add(contentWarning); expandedPanel.add(contentWarningContainer); add(expandedPanel); setVisible(false); setVisible(Session.getInstance().getCurrentPerson() != null); }