package me.rkfg.ns2gather.client; import com.google.gwt.dom.client.Style.Cursor; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Image; import com.kiouri.sliderbar.client.event.BarValueChangedEvent; import com.kiouri.sliderbar.client.event.BarValueChangedHandler; import com.kiouri.sliderbar.client.solution.adv.AdvancedSliderBar; import com.kiouri.sliderbar.client.view.SliderBar; import com.google.gwt.user.client.ui.HasVerticalAlignment; public abstract class VolumeButton extends HorizontalPanel { private static final String SOUND_ON_ICON = "icons/sound.png"; private static final String SOUND_OFF_ICON = "icons/mute.png"; private boolean mute = false; private final Image muteIcon = new Image(); private final SliderBar sliderBar_chatVolume = new AdvancedSliderBar(); private int volume = 0; private final CookieSettingsManager cookieSettingsManager; public VolumeButton(final CookieSettingsManager cookieSettingsManager) { setTitle("Громкость чата не связана с громкостью оповещения о начале игры. Вы будете оповещены при любой громкости чата."); setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE); this.cookieSettingsManager = cookieSettingsManager; mute = cookieSettingsManager.getBooleanCookie(CookieSettingsManager.CHAT_MUTE_COOKIE, false); volume = cookieSettingsManager.getLongCookie(CookieSettingsManager.CHAT_VOLUME_COOKIE, 170L).intValue(); muteIcon.getElement().getStyle().setCursor(Cursor.POINTER); muteIcon.addClickHandler(new VolumeButtonClickHandler()); sliderBar_chatVolume.setWidth("200px"); sliderBar_chatVolume.setMaxValue(200); sliderBar_chatVolume.addBarValueChangedHandler(new BarValueChangedHandler() { @Override public void onBarValueChanged(BarValueChangedEvent event) { if (event.getValue() != 0 || !mute) { volume = event.getValue(); cookieSettingsManager.setLongCookie(CookieSettingsManager.CHAT_VOLUME_COOKIE, (long) volume); if (mute) { mute = false; updateAppearance(false); } } if (event.getValue() == 0 && !mute) { mute = true; updateAppearance(false); } volumeChanged(event.getValue()); } }); updateAppearance(true); add(sliderBar_chatVolume); add(muteIcon); } private class VolumeButtonClickHandler implements ClickHandler { @Override public void onClick(ClickEvent event) { mute = !mute; updateAppearance(true); } } public void setVolume(int newVolume) { sliderBar_chatVolume.setValue(newVolume); } public void updateAppearance(boolean setVolume) { muteIcon.setUrl(mute ? SOUND_OFF_ICON : SOUND_ON_ICON); cookieSettingsManager.setBooleanCookie(CookieSettingsManager.CHAT_MUTE_COOKIE, mute); if (setVolume) { if (mute) { setVolume(0); } else { setVolume(volume); } } } public abstract void volumeChanged(int newVolume); }