r1446 - in trunk: . src/main/java/cc/kune/chat/client src/main/java/cc/kune/chat/client/actions src/main/java/cc/kune/chat/client/actions/conditions src/main/java/cc/kune/common/client/ui src/main/java/cc/kune/core/client src/main/java/cc/kune/core/client/avatar src/main/java/cc/kune/core/client/resources src/main/java/cc/kune/core/client/sitebar/spaces src/main/java/cc/kune/core/client/sn src/main/java/cc/kune/core/client/sn/actions/conditions src/main/java/cc/kune/core/client/sn/actions/reg
Author: vjrj_ Date: 2011-07-10 20:29:52 +0200 (Sun, 10 Jul 2011) New Revision: 1446 Added: trunk/src/main/java/cc/kune/chat/client/AvatarDecoratorImpl.java trunk/src/main/java/cc/kune/chat/client/ChatInstances.java trunk/src/main/java/cc/kune/chat/client/MediumAvatarDecoratorImpl.java trunk/src/main/java/cc/kune/chat/client/SmallAvatarDecoratorImpl.java trunk/src/main/java/cc/kune/chat/client/actions/StartChatWithThisPersonAction.java trunk/src/main/java/cc/kune/chat/client/actions/conditions/ trunk/src/main/java/cc/kune/chat/client/actions/conditions/IsBuddieCondition.java trunk/src/main/java/cc/kune/chat/client/actions/conditions/IsNotBuddieCondition.java trunk/src/main/java/cc/kune/common/client/ui/AbstractDecorator.java trunk/src/main/java/cc/kune/common/client/ui/AbstractDecorator.ui.xml trunk/src/main/java/cc/kune/core/client/avatar/ trunk/src/main/java/cc/kune/core/client/avatar/AvatarDecorator.java trunk/src/main/java/cc/kune/core/client/avatar/MediumAvatarDecorator.java trunk/src/main/java/cc/kune/core/client/avatar/SmallAvatarDecorator.java trunk/src/main/java/cc/kune/core/client/resources/chat-dot-available-medium.png trunk/src/main/java/cc/kune/core/client/resources/chat-dot-available-small.png trunk/src/main/java/cc/kune/core/client/resources/chat-dot-away-medium.png trunk/src/main/java/cc/kune/core/client/resources/chat-dot-away-small.png trunk/src/main/java/cc/kune/core/client/resources/chat-dot-busy-medium.png trunk/src/main/java/cc/kune/core/client/resources/chat-dot-busy-small.png trunk/src/main/java/cc/kune/core/client/resources/chat-dot-extended-away-medium.png trunk/src/main/java/cc/kune/core/client/resources/chat-dot-extended-away-small.png trunk/src/main/java/cc/kune/core/client/resources/chat-dot-invisible-medium.png trunk/src/main/java/cc/kune/core/client/resources/chat-dot-invisible-small.png trunk/src/main/java/cc/kune/core/client/resources/chat-dot-offline-medium.png trunk/src/main/java/cc/kune/core/client/resources/chat-dot-offline-small.png Removed: trunk/src/main/java/cc/kune/chat/client/actions/StartChatWithUserAction.java Modified: trunk/ trunk/src/main/java/cc/kune/chat/client/ChatClientDefault.java trunk/src/main/java/cc/kune/chat/client/ChatGinModule.java trunk/src/main/java/cc/kune/chat/client/ChatOptions.java trunk/src/main/java/cc/kune/chat/client/ChatParts.java trunk/src/main/java/cc/kune/chat/client/KuneHablarSignals.java trunk/src/main/java/cc/kune/chat/client/actions/AddAsBuddieHeaderButton.java trunk/src/main/java/cc/kune/chat/client/actions/ChatSitebarActions.java trunk/src/main/java/cc/kune/chat/client/actions/OpenGroupPublicChatRoomAction.java trunk/src/main/java/cc/kune/chat/client/actions/StartChatWithMemberAction.java trunk/src/main/java/cc/kune/core/client/CoreGinModule.java trunk/src/main/java/cc/kune/core/client/resources/CoreResources.java trunk/src/main/java/cc/kune/core/client/sitebar/spaces/SpaceSelectorPresenter.java trunk/src/main/java/cc/kune/core/client/sn/AbstractSNPanel.java trunk/src/main/java/cc/kune/core/client/sn/AbstractSNPanel.ui.xml trunk/src/main/java/cc/kune/core/client/sn/GroupSNPanel.java trunk/src/main/java/cc/kune/core/client/sn/UserSNPanel.java trunk/src/main/java/cc/kune/core/client/sn/actions/conditions/IsMeCondition.java trunk/src/main/java/cc/kune/core/client/sn/actions/conditions/IsNotMeCondition.java trunk/src/main/java/cc/kune/core/client/sn/actions/registry/UserSNMenuItemsRegistry.java trunk/src/main/java/cc/kune/core/client/ws/entheader/EntityHeaderPanel.java trunk/src/main/java/cc/kune/core/client/ws/entheader/EntityHeaderPresenter.java trunk/src/main/java/cc/kune/core/client/ws/entheader/EntityTextLogo.java trunk/src/main/java/cc/kune/gspace/client/viewers/FolderViewerPresenter.java trunk/src/main/java/cc/kune/wave/client/WaveStatusIndicator.java Log: Avatar of buddies with status; Several fixes in chat Property changes on: trunk ___________________________________________________________________ Name: svn:ignore - pmd-eclipse.log .pmd www-test screenlog.0 client public target target-local Main-compile .settings .gwt-cache repository derby.log star-yellow-grey.png run.sh tomcat gwt-out synccss.sh .externalToolBuilders .wtpmodules www testRepository kune-OLD-jcr KuneApp.launch KuneApp NOSERVER.launch old_src org.ourproject.kune.app.Kune org.ourproject.kune.iml org.ourproject.kune.ipr org.ourproject.kune.iws nbproject hibernate.reveng.xml .gwt-tmp target-eclipse .checkstyle .classpath-bien pom.xml.* .gwt .jdee_sources .jdee_classpath prj.el .factorypath .apt_generated target.old _accounts _certificates _deltas logs test-output + pmd-eclipse.log .pmd www-test screenlog.0 client public target target-local Main-compile .settings .gwt-cache repository derby.log star-yellow-grey.png run.sh tomcat gwt-out synccss.sh .externalToolBuilders .wtpmodules www testRepository kune-OLD-jcr KuneApp.launch KuneApp NOSERVER.launch old_src org.ourproject.kune.app.Kune org.ourproject.kune.iml org.ourproject.kune.ipr org.ourproject.kune.iws nbproject hibernate.reveng.xml .gwt-tmp target-eclipse .checkstyle .classpath-bien pom.xml.* .gwt .jdee_sources .jdee_classpath prj.el .factorypath .apt_generated target.old _accounts _certificates _deltas logs test-output .recommenders Added: trunk/src/main/java/cc/kune/chat/client/AvatarDecoratorImpl.java =================================================================== --- trunk/src/main/java/cc/kune/chat/client/AvatarDecoratorImpl.java (rev 0) +++ trunk/src/main/java/cc/kune/chat/client/AvatarDecoratorImpl.java 2011-07-10 18:29:52 UTC (rev 1446) @@ -0,0 +1,127 @@ +package cc.kune.chat.client; + +import cc.kune.common.client.ui.AbstractDecorator; +import cc.kune.core.client.avatar.AvatarDecorator; + +import com.calclab.emite.core.client.events.StateChangedEvent; +import com.calclab.emite.core.client.events.StateChangedHandler; +import com.calclab.emite.core.client.xmpp.session.XmppSession; +import com.calclab.emite.core.client.xmpp.stanzas.Presence.Show; +import com.calclab.emite.core.client.xmpp.stanzas.XmppURI; +import com.calclab.emite.im.client.roster.RosterItem; +import com.calclab.emite.im.client.roster.XmppRoster; +import com.calclab.emite.im.client.roster.events.RosterItemChangedEvent; +import com.calclab.emite.im.client.roster.events.RosterItemChangedHandler; +import com.google.gwt.core.client.Scheduler; +import com.google.gwt.core.client.Scheduler.ScheduledCommand; +import com.google.gwt.event.logical.shared.AttachEvent; +import com.google.gwt.event.logical.shared.AttachEvent.Handler; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.resources.client.ImageResource; +import com.google.gwt.user.client.ui.IsWidget; + +public class AvatarDecoratorImpl extends AbstractDecorator implements AvatarDecorator { + + private HandlerRegistration attachHandler; + private final ChatClient chatClient; + private final ImageResource chatDotAvailable; + private final ImageResource chatDotAway; + private final ImageResource chatDotBusy; + private final ImageResource chatDotExtendedAway; + private final ImageResource chatDotXA; + private final XmppRoster roster; + private final HandlerRegistration rosterHandler; + private final XmppSession session; + private final HandlerRegistration sessionStateChangedHandler; + private XmppURI uri; + + public AvatarDecoratorImpl(final ChatInstances chatInstances, final ChatClient chatClient, + final ImageResource chatDotBusy, final ImageResource chatDotXA, final ImageResource chatDotAway, + final ImageResource chatDotExtendedAway, final ImageResource chatDotAvailable) { + this.chatClient = chatClient; + this.chatDotBusy = chatDotBusy; + this.chatDotXA = chatDotXA; + this.chatDotAway = chatDotAway; + this.chatDotExtendedAway = chatDotExtendedAway; + this.chatDotAvailable = chatDotAvailable; + session = chatInstances.xmppSession; + sessionStateChangedHandler = session.addSessionStateChangedHandler(false, new StateChangedHandler() { + @Override + public void onStateChanged(final StateChangedEvent event) { + refresh(); + } + }); + roster = chatInstances.roster; + rosterHandler = roster.addRosterItemChangedHandler(new RosterItemChangedHandler() { + @Override + public void onRosterItemChanged(final RosterItemChangedEvent event) { + final RosterItem item = event.getRosterItem(); + if (item.getJID().equals(uri)) { + setIcon(item.isAvailable(), item.getShow(), item.getStatus()); + } + } + }); + + } + + private void clearDecorator() { + AvatarDecoratorImpl.this.clearImage(); + } + + private void refresh() { + Scheduler.get().scheduleDeferred(new ScheduledCommand() { + @Override + public void execute() { + if (uri != null) { + final RosterItem item = roster.getItemByJID(uri); + if (session.isReady() && item != null) { + setIcon(item.isAvailable(), item.getShow(), item.getStatus()); + } else { + clearDecorator(); + } + } else { + clearDecorator(); + } + } + }); + } + + private void setIcon(final boolean available, final Show show, final String status) { + if (show == Show.dnd) { + super.setImage(chatDotBusy); + } else if (show == Show.xa) { + super.setImage(chatDotXA); + } else if (show == Show.away) { + super.setImage(chatDotAway); + } else if (show == Show.chat) { + super.setImage(chatDotExtendedAway); + } else if (available) { + super.setImage(chatDotAvailable); + } else { + clearDecorator(); + } + super.setImageTooltip(status); + } + + @Override + public void setItem(final String name) { + this.uri = (name != null ? chatClient.uriFrom(name) : null); + refresh(); + } + + @Override + public void setWidget(final IsWidget widget) { + super.setWidget(widget); + attachHandler = widget.asWidget().addAttachHandler(new Handler() { + @Override + public void onAttachOrDetach(final AttachEvent event) { + if (!event.isAttached()) { + rosterHandler.removeHandler(); + sessionStateChangedHandler.removeHandler(); + attachHandler.removeHandler(); + } + } + }); + } + +} Modified: trunk/src/main/java/cc/kune/chat/client/ChatClientDefault.java =================================================================== --- trunk/src/main/java/cc/kune/chat/client/ChatClientDefault.java 2011-07-09 22:25:58 UTC (rev 1445) +++ trunk/src/main/java/cc/kune/chat/client/ChatClientDefault.java 2011-07-10 18:29:52 UTC (rev 1446) @@ -55,7 +55,6 @@ import com.calclab.emite.core.client.xmpp.stanzas.XmppURI; import com.calclab.emite.im.client.chat.ChatManager; import com.calclab.emite.im.client.roster.XmppRoster; -import com.calclab.emite.reconnect.client.SessionReconnect; import com.calclab.emite.xep.avatar.client.AvatarManager; import com.calclab.emite.xep.muc.client.Room; import com.calclab.emite.xep.muc.client.RoomManager; @@ -69,7 +68,6 @@ import com.calclab.hablar.icons.alt.client.AltIconsBundle; import com.calclab.hablar.login.client.HablarLogin; import com.calclab.hablar.login.client.LoginConfig; -import com.calclab.suco.client.Suco; import com.extjs.gxt.ui.client.Style.Scroll; import com.extjs.gxt.ui.client.widget.Dialog; import com.google.gwt.core.client.GWT; @@ -112,7 +110,9 @@ private static final String CHAT_TITLE = "Chat ;)"; private final ChatClientAction action; + private final AvatarManager avatarManager; protected IconLabelDescriptor chatIcon; + private final ChatInstances chatInstances; private final ChatManager chatManager; private final ChatOptions chatOptions; private final ChatResources chatResources; @@ -122,7 +122,9 @@ private final RoomManager roomManager; private final XmppRoster roster; private final Session session; + private final GlobalShortcutRegister shorcutRegister; + private final SitebarActions siteActions; private final XmppSession xmppSession; @@ -131,10 +133,10 @@ public ChatClientDefault(final EventBus eventBus, final I18nTranslationService i18n, final SitebarActions siteActions, final Session session, final GlobalShortcutRegister shorcutRegister, final ChatOptions chatOptions, - final ChatResources chatResources) { - + final ChatResources chatResources, final ChatInstances chatInstances) { this.eventBus = eventBus; this.i18n = i18n; + this.chatInstances = chatInstances; action = new ChatClientAction(eventBus, chatResources); this.siteActions = siteActions; this.session = session; @@ -142,11 +144,13 @@ this.chatOptions = chatOptions; this.chatResources = chatResources; chatResources.css().ensureInjected(); - this.xmppSession = Suco.get(XmppSession.class); - this.roster = Suco.get(XmppRoster.class); - this.chatManager = Suco.get(ChatManager.class); - this.roomManager = Suco.get(RoomManager.class); - Suco.get(SessionReconnect.class); + this.xmppSession = chatInstances.xmppSession; + this.roster = chatInstances.roster; + this.chatManager = chatInstances.chatManager; + this.roomManager = chatInstances.roomManager; + this.avatarManager = chatInstances.avatarManager; + // Not necessary, in ChatInstance + // Suco.get(SessionReconnect.class); session.onAppStart(true, new AppStartEvent.AppStartHandler() { @Override @@ -305,7 +309,7 @@ final KuneHablarWidget widget = new KuneHablarWidget(config.layout, config.tabHeaderSize); final Hablar hablar = widget.getHablar(); HablarComplete.install(hablar, config); - new KuneHablarSignals(eventBus, xmppSession, hablar, action); + new KuneHablarSignals(eventBus, xmppSession, hablar, action, chatInstances); if (htmlConfig.hasLogger) { new HablarConsole(hablar); } @@ -414,7 +418,7 @@ @Override public void setAvatar(final String photoBinary) { - Suco.get(AvatarManager.class).setVCardAvatar(photoBinary); + avatarManager.setVCardAvatar(photoBinary); } private void setSize(final Widget widget, final HtmlConfig htmlConfig) { @@ -455,6 +459,6 @@ @Override public XmppURI uriFrom(final String shortName) { - return XmppURI.jid(shortName + "@" + chatOptions.domain); + return chatOptions.uriFrom(shortName); } } Modified: trunk/src/main/java/cc/kune/chat/client/ChatGinModule.java =================================================================== --- trunk/src/main/java/cc/kune/chat/client/ChatGinModule.java 2011-07-09 22:25:58 UTC (rev 1445) +++ trunk/src/main/java/cc/kune/chat/client/ChatGinModule.java 2011-07-10 18:29:52 UTC (rev 1446) @@ -22,11 +22,11 @@ import cc.kune.chat.client.actions.AddAsBuddieHeaderButton; import cc.kune.chat.client.actions.ChatClientActions; import cc.kune.chat.client.actions.ChatSitebarActions; +import cc.kune.common.client.ExtendedGinModule; +import cc.kune.core.client.avatar.MediumAvatarDecorator; +import cc.kune.core.client.avatar.SmallAvatarDecorator; -import com.google.inject.Singleton; -import com.gwtplatform.mvp.client.gin.AbstractPresenterModule; - -public class ChatGinModule extends AbstractPresenterModule { +public class ChatGinModule extends ExtendedGinModule { /* * (non-Javadoc) * @@ -34,12 +34,15 @@ */ @Override protected void configure() { - bind(ChatClient.class).to(ChatClientDefault.class).in(Singleton.class); - bind(ChatOptions.class).in(Singleton.class); - bind(ChatSitebarActions.class).in(Singleton.class); - bind(AddAsBuddieHeaderButton.class).in(Singleton.class); - // bind(OpenGroupPublicChatRoomButton.class).in(Singleton.class); - bind(ChatClientTool.class).in(Singleton.class); - bind(ChatClientActions.class).in(Singleton.class); + s(ChatInstances.class); + bind(SmallAvatarDecorator.class).to(SmallAvatarDecoratorImpl.class); + bind(MediumAvatarDecorator.class).to(MediumAvatarDecoratorImpl.class); + s(ChatClient.class, ChatClientDefault.class); + s(ChatOptions.class); + s(ChatSitebarActions.class); + s(AddAsBuddieHeaderButton.class); + // bind(OpenGroupPublicChatRoomButton.class); + s(ChatClientTool.class); + s(ChatClientActions.class); } } Added: trunk/src/main/java/cc/kune/chat/client/ChatInstances.java =================================================================== --- trunk/src/main/java/cc/kune/chat/client/ChatInstances.java (rev 0) +++ trunk/src/main/java/cc/kune/chat/client/ChatInstances.java 2011-07-10 18:29:52 UTC (rev 1446) @@ -0,0 +1,34 @@ +package cc.kune.chat.client; + +import com.calclab.emite.core.client.xmpp.session.XmppSession; +import com.calclab.emite.im.client.chat.ChatManager; +import com.calclab.emite.im.client.presence.PresenceManager; +import com.calclab.emite.im.client.roster.XmppRoster; +import com.calclab.emite.reconnect.client.SessionReconnect; +import com.calclab.emite.xep.avatar.client.AvatarManager; +import com.calclab.emite.xep.muc.client.RoomManager; +import com.calclab.emite.xep.storage.client.PrivateStorageManager; +import com.calclab.suco.client.Suco; + +public class ChatInstances { + + public AvatarManager avatarManager; + public ChatManager chatManager; + public PresenceManager presenceManager; + public PrivateStorageManager privateStorageManager; + public RoomManager roomManager; + public XmppRoster roster; + public SessionReconnect sessionReconnect; + public XmppSession xmppSession; + + public ChatInstances() { + this.xmppSession = Suco.get(XmppSession.class); + this.roster = Suco.get(XmppRoster.class); + this.chatManager = Suco.get(ChatManager.class); + this.roomManager = Suco.get(RoomManager.class); + this.sessionReconnect = Suco.get(SessionReconnect.class); + this.avatarManager = Suco.get(AvatarManager.class); + this.presenceManager = Suco.get(PresenceManager.class); + this.privateStorageManager = Suco.get(PrivateStorageManager.class); + } +} Modified: trunk/src/main/java/cc/kune/chat/client/ChatOptions.java =================================================================== --- trunk/src/main/java/cc/kune/chat/client/ChatOptions.java 2011-07-09 22:25:58 UTC (rev 1445) +++ trunk/src/main/java/cc/kune/chat/client/ChatOptions.java 2011-07-10 18:29:52 UTC (rev 1446) @@ -22,11 +22,15 @@ import com.calclab.emite.core.client.xmpp.stanzas.XmppURI; public class ChatOptions { - public String domain; - public String httpBase; - public String passwd; - public String resource; - public String roomHost; - public String username; - public XmppURI useruri; + public String domain; + public String httpBase; + public String passwd; + public String resource; + public String roomHost; + public String username; + public XmppURI useruri; + + public XmppURI uriFrom(final String shortName) { + return XmppURI.jid(shortName + "@" + domain); + } } \ No newline at end of file Modified: trunk/src/main/java/cc/kune/chat/client/ChatParts.java =================================================================== --- trunk/src/main/java/cc/kune/chat/client/ChatParts.java 2011-07-09 22:25:58 UTC (rev 1445) +++ trunk/src/main/java/cc/kune/chat/client/ChatParts.java 2011-07-10 18:29:52 UTC (rev 1446) @@ -27,7 +27,9 @@ import cc.kune.chat.client.actions.StartAssemblyWithMembers; import cc.kune.chat.client.actions.StartChatWithMemberAction; import cc.kune.chat.client.actions.StartChatWithThisBuddieAction; -import cc.kune.chat.client.actions.StartChatWithUserAction; +import cc.kune.chat.client.actions.StartChatWithThisPersonAction; +import cc.kune.chat.client.actions.conditions.IsBuddieCondition; +import cc.kune.chat.client.actions.conditions.IsNotBuddieCondition; import cc.kune.chat.shared.ChatConstants; import cc.kune.common.client.actions.AbstractAction; import cc.kune.common.client.actions.PropertyChangeEvent; @@ -68,10 +70,12 @@ final Provider<UserSNMenuItemsRegistry> userItemsRegistry, final IsNotMeCondition isNotMe, final IsCurrentStateAdministrableCondition isAdministrableCondition, final IsCurrentStateEditableCondition isEditableCondition, + final IsBuddieCondition isBuddieCondition, final IsNotBuddieCondition isNotBuddieCondition, final IsCurrentStateAGroupCondition isGroupCondition, final IsPersonCondition isPersonCondition, final Provider<AddAsBuddieAction> addAsBuddie, final Provider<StartChatWithMemberAction> startChatWithMemberAction, - final IsLoggedCondition isLogged, final Provider<StartChatWithUserAction> startChatWithUserAction, + final IsLoggedCondition isLogged, + final Provider<StartChatWithThisPersonAction> startChatWithPersonAction, final Provider<StartChatWithThisBuddieAction> startChatWithBuddieAction, final ChatClientActions chatActions, final Provider<StartAssemblyWithMembers> startAssembly, final Provider<OpenGroupPublicChatRoomAction> openGroupRoomAction, @@ -99,6 +103,7 @@ public MenuItemDescriptor get() { final MenuItemDescriptor item = new MenuItemDescriptor(startChatWithBuddieAction.get()); item.add(isLogged); + item.add(isBuddieCondition); item.add(isPersonCondition); return item; } @@ -109,6 +114,7 @@ final AddAsBuddieAction action = addAsBuddie.get(); final MenuItemDescriptor item = new MenuItemDescriptor(action); item.add(isNotMe); + item.add(isNotBuddieCondition); item.add(isLogged); item.add(isPersonCondition); /** @@ -125,21 +131,27 @@ return item; } }; - final Provider<MenuItemDescriptor> startChatWithUserItem = new Provider<MenuItemDescriptor>() { + final Provider<MenuItemDescriptor> startChatWithPersonItem = new Provider<MenuItemDescriptor>() { @Override public MenuItemDescriptor get() { - final MenuItemDescriptor item = new MenuItemDescriptor(startChatWithUserAction.get()); + final MenuItemDescriptor item = new MenuItemDescriptor(startChatWithPersonAction.get()); item.add(isNotMe); item.add(isLogged); item.add(isPersonCondition); + item.add(isNotBuddieCondition); return item; } }; snAdminsRegistry.get().add(startChatWithMemberItem); snCollabsItemsRegistry.get().add(startChatWithMemberItem); - snPendingItemsRegistry.get().add(startChatWithUserItem); + snPendingItemsRegistry.get().add(startChatWithPersonItem); + snAdminsRegistry.get().add(startChatWithBuddieItem); + snCollabsItemsRegistry.get().add(startChatWithBuddieItem); + snPendingItemsRegistry.get().add(startChatWithBuddieItem); + userItemsRegistry.get().add(startChatWithBuddieItem); + userItemsRegistry.get().add(startChatWithPersonItem); userItemsRegistry.get().add(addAsBuddieItem); groupConfActions.get().add(startAssembly.get()); buddieButton.get(); Modified: trunk/src/main/java/cc/kune/chat/client/KuneHablarSignals.java =================================================================== --- trunk/src/main/java/cc/kune/chat/client/KuneHablarSignals.java 2011-07-09 22:25:58 UTC (rev 1445) +++ trunk/src/main/java/cc/kune/chat/client/KuneHablarSignals.java 2011-07-10 18:29:52 UTC (rev 1446) @@ -34,7 +34,6 @@ import com.calclab.hablar.signals.client.unattended.UnattendedPagesManager; import com.calclab.hablar.signals.client.unattended.UnattendedPresenter; import com.calclab.hablar.user.client.UserContainer; -import com.calclab.suco.client.Suco; import com.google.gwt.core.client.GWT; import com.google.gwt.event.shared.EventBus; import com.google.gwt.user.client.Window; @@ -71,9 +70,9 @@ // FIXME: move to gin @SuppressWarnings("deprecation") public KuneHablarSignals(final EventBus kuneEventBus, final XmppSession session, final Hablar hablar, - final ChatClientAction action) { + final ChatClientAction action, final ChatInstances chatInstances) { final HablarEventBus hablarEventBus = hablar.getEventBus(); - final PrivateStorageManager storageManager = Suco.get(PrivateStorageManager.class); + final PrivateStorageManager storageManager = chatInstances.privateStorageManager; final HasText titleDisplay = new HasText() { @Override Added: trunk/src/main/java/cc/kune/chat/client/MediumAvatarDecoratorImpl.java =================================================================== --- trunk/src/main/java/cc/kune/chat/client/MediumAvatarDecoratorImpl.java (rev 0) +++ trunk/src/main/java/cc/kune/chat/client/MediumAvatarDecoratorImpl.java 2011-07-10 18:29:52 UTC (rev 1446) @@ -0,0 +1,17 @@ +package cc.kune.chat.client; + +import cc.kune.core.client.avatar.MediumAvatarDecorator; +import cc.kune.core.client.resources.CoreResources; + +import com.google.inject.Inject; + +public class MediumAvatarDecoratorImpl extends AvatarDecoratorImpl implements MediumAvatarDecorator { + + @Inject + public MediumAvatarDecoratorImpl(final CoreResources res, final ChatInstances chatInstances, + final ChatClient chatClient) { + super(chatInstances, chatClient, res.chatDotBusyMedium(), res.chatDotAwayMedium(), + res.chatDotAwayMedium(), res.chatDotExtendedAwayMedium(), res.chatDotAvailableMedium()); + setImagePosition(53, -6, -10); + } +} Added: trunk/src/main/java/cc/kune/chat/client/SmallAvatarDecoratorImpl.java =================================================================== --- trunk/src/main/java/cc/kune/chat/client/SmallAvatarDecoratorImpl.java (rev 0) +++ trunk/src/main/java/cc/kune/chat/client/SmallAvatarDecoratorImpl.java 2011-07-10 18:29:52 UTC (rev 1446) @@ -0,0 +1,17 @@ +package cc.kune.chat.client; + +import cc.kune.core.client.avatar.SmallAvatarDecorator; +import cc.kune.core.client.resources.CoreResources; + +import com.google.inject.Inject; + +public class SmallAvatarDecoratorImpl extends AvatarDecoratorImpl implements SmallAvatarDecorator { + + @Inject + public SmallAvatarDecoratorImpl(final CoreResources res, final ChatInstances chatInstances, + final ChatClient chatClient) { + super(chatInstances, chatClient, res.chatDotBusySmall(), res.chatDotAwaySmall(), + res.chatDotAwaySmall(), res.chatDotExtendedAwaySmall(), res.chatDotAvailableSmall()); + setImagePosition(23, -9, -8); + } +} Modified: trunk/src/main/java/cc/kune/chat/client/actions/AddAsBuddieHeaderButton.java =================================================================== --- trunk/src/main/java/cc/kune/chat/client/actions/AddAsBuddieHeaderButton.java 2011-07-09 22:25:58 UTC (rev 1445) +++ trunk/src/main/java/cc/kune/chat/client/actions/AddAsBuddieHeaderButton.java 2011-07-10 18:29:52 UTC (rev 1446) @@ -20,6 +20,7 @@ package cc.kune.chat.client.actions; import cc.kune.chat.client.ChatClient; +import cc.kune.chat.client.ChatInstances; import cc.kune.common.client.actions.AbstractAction; import cc.kune.common.client.actions.AbstractExtendedAction; import cc.kune.common.client.actions.Action; @@ -38,10 +39,8 @@ import cc.kune.core.shared.dto.StateAbstractDTO; import cc.kune.core.shared.i18n.I18nTranslationService; -import com.calclab.emite.im.client.roster.XmppRoster; import com.calclab.emite.im.client.roster.events.RosterGroupChangedEvent; import com.calclab.emite.im.client.roster.events.RosterGroupChangedHandler; -import com.calclab.suco.client.Suco; import com.google.inject.Inject; public class AddAsBuddieHeaderButton { @@ -52,7 +51,8 @@ @Inject public AddAsBuddieAction(final ChatClient chatEngine, final Session session, - final StateManager stateManager, final I18nTranslationService i18n, final CoreResources img) { + final ChatInstances chatInstances, final StateManager stateManager, + final I18nTranslationService i18n, final CoreResources img) { super(); this.chatEngine = chatEngine; this.session = session; @@ -62,7 +62,7 @@ setState(event.getState()); } }); - Suco.get(XmppRoster.class).addRosterGroupChangedHandler(new RosterGroupChangedHandler() { + chatInstances.roster.addRosterGroupChangedHandler(new RosterGroupChangedHandler() { @Override public void onGroupChanged(final RosterGroupChangedEvent event) { Modified: trunk/src/main/java/cc/kune/chat/client/actions/ChatSitebarActions.java =================================================================== --- trunk/src/main/java/cc/kune/chat/client/actions/ChatSitebarActions.java 2011-07-09 22:25:58 UTC (rev 1445) +++ trunk/src/main/java/cc/kune/chat/client/actions/ChatSitebarActions.java 2011-07-10 18:29:52 UTC (rev 1446) @@ -20,6 +20,7 @@ package cc.kune.chat.client.actions; import cc.kune.chat.client.ChatClient; +import cc.kune.chat.client.ChatInstances; import cc.kune.chat.client.resources.ChatResources; import cc.kune.common.client.actions.AbstractAction; import cc.kune.common.client.actions.AbstractExtendedAction; @@ -40,144 +41,151 @@ import com.calclab.emite.im.client.presence.PresenceManager; import com.calclab.emite.im.client.presence.events.OwnPresenceChangedEvent; import com.calclab.emite.im.client.presence.events.OwnPresenceChangedHandler; -import com.calclab.suco.client.Suco; import com.google.gwt.resources.client.ImageResource; import com.google.inject.Inject; public class ChatSitebarActions { - public class ChangeOfflineStatusAction extends AbstractExtendedAction { - public ChangeOfflineStatusAction(final ImageResource icon) { - xmppSession.addSessionStateChangedHandler(true, new StateChangedHandler() { - @Override - public void onStateChanged(final StateChangedEvent event) { - if (!xmppSession.isReady()) { - SiteUserOptionsPresenter.LOGGED_USER_MENU.putValue(AbstractAction.SMALL_ICON, icon); - } - } - }); - } + public class ChangeOfflineStatusAction extends AbstractExtendedAction { + private final XmppSession session; + public ChangeOfflineStatusAction(final XmppSession session, final ImageResource icon) { + this.session = session; + session.addSessionStateChangedHandler(true, new StateChangedHandler() { @Override - public void actionPerformed(final ActionEvent event) { - // presenceManager.changeOwnPresence(Presence.build(NO_STATUS, - // Show.xa)); - xmppSession.logout(); + public void onStateChanged(final StateChangedEvent event) { + if (!session.isReady()) { + SiteUserOptionsPresenter.LOGGED_USER_MENU.putValue(AbstractAction.SMALL_ICON, icon); + } } + }); } - public class ChangeOnlineStatusAction extends AbstractExtendedAction { - private final Presence thisPresence; - public ChangeOnlineStatusAction(final String statusText, final Show show, final ImageResource icon) { - thisPresence = Presence.build(statusText, show); - presenceManager.addOwnPresenceChangedHandler(new OwnPresenceChangedHandler() { + @Override + public void actionPerformed(final ActionEvent event) { + // presenceManager.changeOwnPresence(Presence.build(NO_STATUS, + // Show.xa)); + session.logout(); + } + } + public class ChangeOnlineStatusAction extends AbstractExtendedAction { + private final PresenceManager manager; + private final Presence thisPresence; - @Override - public void onOwnPresenceChanged(final OwnPresenceChangedEvent event) { - updateStatusIcon(icon, event.getCurrentPresence()); - } + public ChangeOnlineStatusAction(final PresenceManager presenceManager, final String statusText, + final Show show, final ImageResource icon) { + this.manager = presenceManager; + thisPresence = Presence.build(statusText, show); + presenceManager.addOwnPresenceChangedHandler(new OwnPresenceChangedHandler() { - }); - updateStatusIcon(icon, presenceManager.getOwnPresence()); - } - @Override - public void actionPerformed(final ActionEvent event) { - if (!chatClient.loginIfNecessary()) { - presenceManager.changeOwnPresence(thisPresence); - } - nextPresence = thisPresence; + public void onOwnPresenceChanged(final OwnPresenceChangedEvent event) { + updateStatusIcon(icon, event.getCurrentPresence()); } - private void updateStatusIcon(final ImageResource icon, final Presence currentPresence) { - if (thisPresence.getShow().equals(currentPresence.getShow()) - && ((currentPresence.getStatus() == null) || currentPresence.getStatus().equals( - thisPresence.getStatus()))) { - SiteUserOptionsPresenter.LOGGED_USER_MENU.putValue(AbstractAction.SMALL_ICON, icon); - } - } + }); + updateStatusIcon(icon, presenceManager.getOwnPresence()); } - private static final String CHAT_STATUS = "k-chat-status-group"; - private static final String GROUP_CHAT_STATUS = "k-group-chat-status"; - private static final String NO_STATUS = null; - private final ChatClient chatClient; - private final I18nTranslationService i18n; - private Presence nextPresence = Presence.build(NO_STATUS, Show.notSpecified); - private final PresenceManager presenceManager = Suco.get(PresenceManager.class); - private final ChatResources res; - private final Session session; - private final SiteUserOptions userOptions; - private final XmppSession xmppSession = Suco.get(XmppSession.class); + @Override + public void actionPerformed(final ActionEvent event) { + if (!chatClient.loginIfNecessary()) { + manager.changeOwnPresence(thisPresence); + } + nextPresence = thisPresence; + } - @Inject - public ChatSitebarActions(final Session session, final ChatClient chatClient, final SiteUserOptions userOptions, - final I18nTranslationService i18n, final ChatResources res) { - this.session = session; - this.chatClient = chatClient; - this.userOptions = userOptions; - this.i18n = i18n; - this.res = res; - createActions(); + private void updateStatusIcon(final ImageResource icon, final Presence currentPresence) { + if (thisPresence.getShow().equals(currentPresence.getShow()) + && ((currentPresence.getStatus() == null) || currentPresence.getStatus().equals( + thisPresence.getStatus()))) { + SiteUserOptionsPresenter.LOGGED_USER_MENU.putValue(AbstractAction.SMALL_ICON, icon); + } } + } - private void createActions() { - final MenuTitleItemDescriptor chatActionsTitle = new MenuTitleItemDescriptor( - SiteUserOptionsPresenter.LOGGED_USER_MENU, i18n.t("Set your chat status")); - userOptions.addAction(new MenuSeparatorDescriptor(SiteUserOptionsPresenter.LOGGED_USER_MENU)); - userOptions.addAction(chatActionsTitle); - final MenuRadioItemDescriptor onlineItem = createChatStatusAction(res.online(), i18n.t("Available"), - onlineAction(NO_STATUS, Show.notSpecified, res.online())); - final MenuRadioItemDescriptor availableItem = createChatStatusAction(res.xa(), i18n.t("Available for chat"), - onlineAction(NO_STATUS, Show.chat, res.xa())); - final MenuRadioItemDescriptor awayItem = createChatStatusAction(res.away(), i18n.t("Away"), - onlineAction(NO_STATUS, Show.away, res.away())); - final MenuRadioItemDescriptor busyItem = createChatStatusAction(res.busy(), i18n.t("Busy"), - onlineAction(NO_STATUS, Show.dnd, res.busy())); - final MenuRadioItemDescriptor offlineItem = createChatStatusAction(res.offline(), i18n.t("Sign out of chat"), - new ChangeOfflineStatusAction(res.offline())); - userOptions.addAction(onlineItem); - userOptions.addAction(availableItem); - userOptions.addAction(awayItem); - userOptions.addAction(busyItem); - userOptions.addAction(offlineItem); - xmppSession.addSessionStateChangedHandler(false, new StateChangedHandler() { + private static final String CHAT_STATUS = "k-chat-status-group"; + private static final String GROUP_CHAT_STATUS = "k-group-chat-status"; + private static final String NO_STATUS = null; + private final ChatClient chatClient; + private final I18nTranslationService i18n; + private Presence nextPresence = Presence.build(NO_STATUS, Show.notSpecified); + private final PresenceManager presenceManager; + private final ChatResources res; + private final SiteUserOptions userOptions; + private final XmppSession xmppSession; - @Override - public void onStateChanged(final StateChangedEvent event) { - if (xmppSession.isReady()) { - presenceManager.changeOwnPresence(nextPresence); - switch (nextPresence.getShow()) { - case notSpecified: - onlineItem.setChecked(true); - break; - case dnd: - busyItem.setChecked(true); - break; - case chat: - availableItem.setChecked(true); - break; - case away: - awayItem.setChecked(true); - break; - } - } else { - offlineItem.setChecked(true); - } - } - }); - } + @Inject + public ChatSitebarActions(final Session session, final ChatClient chatClient, + final SiteUserOptions userOptions, final I18nTranslationService i18n, final ChatResources res, + final ChatInstances chatInstances) { + this.chatClient = chatClient; + this.userOptions = userOptions; + this.i18n = i18n; + this.res = res; + xmppSession = chatInstances.xmppSession; + presenceManager = chatInstances.presenceManager; + createActions(); + } - private MenuRadioItemDescriptor createChatStatusAction(final ImageResource icon, final String text, - final AbstractAction action) { - final MenuRadioItemDescriptor item = new MenuRadioItemDescriptor(SiteUserOptionsPresenter.LOGGED_USER_MENU, - action, GROUP_CHAT_STATUS); - item.putValue(AbstractAction.NAME, text); - item.putValue(AbstractAction.SMALL_ICON, icon); - return item; - } + private void createActions() { + final MenuTitleItemDescriptor chatActionsTitle = new MenuTitleItemDescriptor( + SiteUserOptionsPresenter.LOGGED_USER_MENU, i18n.t("Set your chat status")); + userOptions.addAction(new MenuSeparatorDescriptor(SiteUserOptionsPresenter.LOGGED_USER_MENU)); + userOptions.addAction(chatActionsTitle); + final MenuRadioItemDescriptor onlineItem = createChatStatusAction(res.online(), i18n.t("Available"), + onlineAction(NO_STATUS, Show.notSpecified, res.online())); + final MenuRadioItemDescriptor availableItem = createChatStatusAction(res.xa(), + i18n.t("Available for chat"), onlineAction(NO_STATUS, Show.chat, res.xa())); + final MenuRadioItemDescriptor awayItem = createChatStatusAction(res.away(), i18n.t("Away"), + onlineAction(NO_STATUS, Show.away, res.away())); + final MenuRadioItemDescriptor busyItem = createChatStatusAction(res.busy(), i18n.t("Busy"), + onlineAction(NO_STATUS, Show.dnd, res.busy())); + final MenuRadioItemDescriptor offlineItem = createChatStatusAction(res.offline(), + i18n.t("Sign out of chat"), new ChangeOfflineStatusAction(xmppSession, res.offline())); + userOptions.addAction(onlineItem); + userOptions.addAction(availableItem); + userOptions.addAction(awayItem); + userOptions.addAction(busyItem); + userOptions.addAction(offlineItem); + xmppSession.addSessionStateChangedHandler(false, new StateChangedHandler() { - private AbstractExtendedAction onlineAction(final String statusText, final Show show, final ImageResource icon) { - return new ChangeOnlineStatusAction(statusText, show, icon); - } + @Override + public void onStateChanged(final StateChangedEvent event) { + if (xmppSession.isReady()) { + presenceManager.changeOwnPresence(nextPresence); + switch (nextPresence.getShow()) { + case notSpecified: + onlineItem.setChecked(true); + break; + case dnd: + busyItem.setChecked(true); + break; + case chat: + availableItem.setChecked(true); + break; + case away: + awayItem.setChecked(true); + break; + } + } else { + offlineItem.setChecked(true); + } + } + }); + } + + private MenuRadioItemDescriptor createChatStatusAction(final ImageResource icon, final String text, + final AbstractAction action) { + final MenuRadioItemDescriptor item = new MenuRadioItemDescriptor( + SiteUserOptionsPresenter.LOGGED_USER_MENU, action, GROUP_CHAT_STATUS); + item.putValue(AbstractAction.NAME, text); + item.putValue(AbstractAction.SMALL_ICON, icon); + return item; + } + + private AbstractExtendedAction onlineAction(final String statusText, final Show show, + final ImageResource icon) { + return new ChangeOnlineStatusAction(presenceManager, statusText, show, icon); + } } Modified: trunk/src/main/java/cc/kune/chat/client/actions/OpenGroupPublicChatRoomAction.java =================================================================== --- trunk/src/main/java/cc/kune/chat/client/actions/OpenGroupPublicChatRoomAction.java 2011-07-09 22:25:58 UTC (rev 1445) +++ trunk/src/main/java/cc/kune/chat/client/actions/OpenGroupPublicChatRoomAction.java 2011-07-10 18:29:52 UTC (rev 1446) @@ -23,6 +23,7 @@ import java.util.List; import cc.kune.chat.client.ChatClient; +import cc.kune.chat.client.ChatInstances; import cc.kune.chat.client.resources.ChatResources; import cc.kune.common.client.actions.Action; import cc.kune.common.client.actions.ActionEvent; @@ -43,7 +44,6 @@ import com.calclab.emite.xep.muc.client.Occupant; import com.calclab.emite.xep.muc.client.Room; import com.calclab.emite.xep.muc.client.RoomManager; -import com.calclab.suco.client.Suco; import com.google.inject.Inject; public class OpenGroupPublicChatRoomAction extends RolActionAutoUpdated { @@ -51,19 +51,19 @@ private final ChatClient chatClient; private final I18nTranslationService i18n; private boolean inviteMembers; - private final RoomManager roomManager; private final Session session; @SuppressWarnings("deprecation") @Inject public OpenGroupPublicChatRoomAction(final Session session, final AccessRightsClientManager accessRightsClientManager, final ChatClient chatClient, - final StateManager stateManager, final I18nTranslationService i18n, final ChatResources res) { + final StateManager stateManager, final I18nTranslationService i18n, final ChatResources res, + final ChatInstances chatInstances) { super(stateManager, session, accessRightsClientManager, AccessRolDTO.Editor, true, false, true); this.session = session; this.chatClient = chatClient; this.i18n = i18n; - roomManager = Suco.get(RoomManager.class); + final RoomManager roomManager = chatInstances.roomManager; stateManager.onStateChanged(true, new StateChangedHandler() { @Override public void onStateChanged(final StateChangedEvent event) { Modified: trunk/src/main/java/cc/kune/chat/client/actions/StartChatWithMemberAction.java =================================================================== --- trunk/src/main/java/cc/kune/chat/client/actions/StartChatWithMemberAction.java 2011-07-09 22:25:58 UTC (rev 1445) +++ trunk/src/main/java/cc/kune/chat/client/actions/StartChatWithMemberAction.java 2011-07-10 18:29:52 UTC (rev 1446) @@ -26,33 +26,40 @@ import cc.kune.common.client.notify.NotifyUser; import cc.kune.core.client.resources.CoreResources; import cc.kune.core.shared.dto.GroupDTO; +import cc.kune.core.shared.dto.UserSimpleDTO; import cc.kune.core.shared.i18n.I18nTranslationService; -import com.calclab.emite.core.client.xmpp.stanzas.XmppURI; import com.google.inject.Inject; import com.google.inject.Provider; public class StartChatWithMemberAction extends AbstractExtendedAction { - private final Provider<ChatClient> chatClient; - private final I18nTranslationService i18n; + private final Provider<ChatClient> chatClient; + private final I18nTranslationService i18n; - @Inject - public StartChatWithMemberAction(final I18nTranslationService i18n, final CoreResources res, - final Provider<ChatClient> chatClient) { - this.i18n = i18n; - this.chatClient = chatClient; - putValue(NAME, i18n.t("Chat with this member")); - putValue(Action.SMALL_ICON, res.newChat()); - } + @Inject + public StartChatWithMemberAction(final I18nTranslationService i18n, final CoreResources res, + final Provider<ChatClient> chatClient) { + this.i18n = i18n; + this.chatClient = chatClient; + putValue(NAME, i18n.t("Chat with this member")); + putValue(Action.SMALL_ICON, res.newChat()); + } - @Override - public void actionPerformed(final ActionEvent event) { - chatClient.get().show(); - if (chatClient.get().isLoggedIn()) { - chatClient.get().chat(XmppURI.jid(((GroupDTO) event.getTarget()).getShortName())); - } else { - NotifyUser.important(i18n.t("To start a chat you need to be 'online'")); - } + @Override + public void actionPerformed(final ActionEvent event) { + chatClient.get().show(); + if (chatClient.get().isLoggedIn()) { + String username = null; + if (event.getTarget() instanceof GroupDTO) { + username = ((GroupDTO) event.getTarget()).getShortName(); + } else if (event.getTarget() instanceof UserSimpleDTO) { + username = ((UserSimpleDTO) event.getTarget()).getShortName(); + } + if (username != null) { + chatClient.get().chat(username); + } + } else { + NotifyUser.important(i18n.t("To start a chat you need to be 'online'")); } - + } } Added: trunk/src/main/java/cc/kune/chat/client/actions/StartChatWithThisPersonAction.java =================================================================== --- trunk/src/main/java/cc/kune/chat/client/actions/StartChatWithThisPersonAction.java (rev 0) +++ trunk/src/main/java/cc/kune/chat/client/actions/StartChatWithThisPersonAction.java 2011-07-10 18:29:52 UTC (rev 1446) @@ -0,0 +1,36 @@ +/* + * + * Copyright (C) 2007-2011 The kune development team (see CREDITS for details) + * This file is part of kune. + * + * This program 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. + * + * This program 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 this program. If not, see <http://www.gnu.org/licenses/>. + * + */ +package cc.kune.chat.client.actions; + +import cc.kune.chat.client.ChatClient; +import cc.kune.core.client.resources.CoreResources; +import cc.kune.core.shared.i18n.I18nTranslationService; + +import com.google.inject.Inject; +import com.google.inject.Provider; + +public class StartChatWithThisPersonAction extends StartChatWithMemberAction { + @Inject + public StartChatWithThisPersonAction(final I18nTranslationService i18n, final CoreResources res, + final Provider<ChatClient> chatClient) { + super(i18n, res, chatClient); + putValue(NAME, i18n.t("Chat with this person")); + } +} Deleted: trunk/src/main/java/cc/kune/chat/client/actions/StartChatWithUserAction.java =================================================================== --- trunk/src/main/java/cc/kune/chat/client/actions/StartChatWithUserAction.java 2011-07-09 22:25:58 UTC (rev 1445) +++ trunk/src/main/java/cc/kune/chat/client/actions/StartChatWithUserAction.java 2011-07-10 18:29:52 UTC (rev 1446) @@ -1,36 +0,0 @@ -/* - * - * Copyright (C) 2007-2011 The kune development team (see CREDITS for details) - * This file is part of kune. - * - * This program 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. - * - * This program 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 this program. If not, see <http://www.gnu.org/licenses/>. - * - */ -package cc.kune.chat.client.actions; - -import cc.kune.chat.client.ChatClient; -import cc.kune.core.client.resources.CoreResources; -import cc.kune.core.shared.i18n.I18nTranslationService; - -import com.google.inject.Inject; -import com.google.inject.Provider; - -public class StartChatWithUserAction extends StartChatWithMemberAction { - @Inject - public StartChatWithUserAction(final I18nTranslationService i18n, final CoreResources res, - final Provider<ChatClient> chatClient) { - super(i18n, res, chatClient); - putValue(NAME, i18n.t("Chat with this person")); - } -} Added: trunk/src/main/java/cc/kune/chat/client/actions/conditions/IsBuddieCondition.java =================================================================== --- trunk/src/main/java/cc/kune/chat/client/actions/conditions/IsBuddieCondition.java (rev 0) +++ trunk/src/main/java/cc/kune/chat/client/actions/conditions/IsBuddieCondition.java 2011-07-10 18:29:52 UTC (rev 1446) @@ -0,0 +1,72 @@ +/* + * + * Copyright (C) 2007-2011 The kune development team (see CREDITS for details) + * This file is part of kune. + * + * This program 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. + * + * This program 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 this program. If not, see <http://www.gnu.org/licenses/>. + * + */ +package cc.kune.chat.client.actions.conditions; + +import cc.kune.chat.client.ChatClient; +import cc.kune.common.client.actions.ui.descrip.GuiActionDescrip; +import cc.kune.common.client.actions.ui.descrip.GuiAddCondition; +import cc.kune.common.client.errors.UIException; +import cc.kune.core.client.state.Session; +import cc.kune.core.shared.dto.GroupDTO; +import cc.kune.core.shared.dto.UserSimpleDTO; + +import com.google.inject.Inject; +import com.google.inject.Singleton; + +@Singleton +public class IsBuddieCondition implements GuiAddCondition { + + private final ChatClient chatClient; + private final Session session; + + @Inject + public IsBuddieCondition(final Session session, final ChatClient chatClient) { + this.chatClient = chatClient; + this.session = session; + } + + private boolean isBuddie(final String targetName) { + return chatClient.isBuddie(targetName); + } + + private boolean isThisGroupInRoster(final GuiActionDescrip descr) { + final String targetName = ((GroupDTO) descr.getTarget()).getShortName(); + return isBuddie(targetName); + } + + private boolean isThisPersonInRoster(final GuiActionDescrip descr) { + final String targetName = ((UserSimpleDTO) descr.getTarget()).getShortName(); + return isBuddie(targetName); + } + + @Override + public boolean mustBeAdded(final GuiActionDescrip descr) { + if (session.isNotLogged()) { + return false; + } + if (descr.getTarget() instanceof UserSimpleDTO) { + return isThisPersonInRoster(descr); + } else if (descr.getTarget() instanceof GroupDTO) { + return isThisGroupInRoster(descr); + } else { + throw new UIException("Unsupported target"); + } + } +} Added: trunk/src/main/java/cc/kune/chat/client/actions/conditions/IsNotBuddieCondition.java =================================================================== --- trunk/src/main/java/cc/kune/chat/client/actions/conditions/IsNotBuddieCondition.java (rev 0) +++ trunk/src/main/java/cc/kune/chat/client/actions/conditions/IsNotBuddieCondition.java 2011-07-10 18:29:52 UTC (rev 1446) @@ -0,0 +1,23 @@ +package cc.kune.chat.client.actions.conditions; + +import cc.kune.chat.client.ChatClient; +import cc.kune.common.client.actions.ui.descrip.GuiActionDescrip; +import cc.kune.core.client.state.Session; + +import com.google.inject.Inject; +import com.google.inject.Singleton; + +@Singleton +public class IsNotBuddieCondition extends IsBuddieCondition { + + @Inject + public IsNotBuddieCondition(final Session session, final ChatClient chatClient) { + super(session, chatClient); + } + + @Override + public boolean mustBeAdded(final GuiActionDescrip descr) { + return !super.mustBeAdded(descr); + } + +} Added: trunk/src/main/java/cc/kune/common/client/ui/AbstractDecorator.java =================================================================== --- trunk/src/main/java/cc/kune/common/client/ui/AbstractDecorator.java (rev 0) +++ trunk/src/main/java/cc/kune/common/client/ui/AbstractDecorator.java 2011-07-10 18:29:52 UTC (rev 1446) @@ -0,0 +1,79 @@ +package cc.kune.common.client.ui; + +import cc.kune.common.client.tooltip.Tooltip; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.Style.Float; +import com.google.gwt.dom.client.Style.Position; +import com.google.gwt.dom.client.Style.Unit; +import com.google.gwt.resources.client.ImageResource; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.Element; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.FlowPanel; +import com.google.gwt.user.client.ui.Image; +import com.google.gwt.user.client.ui.IsWidget; +import com.google.gwt.user.client.ui.SimplePanel; +import com.google.gwt.user.client.ui.Widget; + +public class AbstractDecorator extends Composite { + + interface Binder extends UiBinder<Widget, AbstractDecorator> { + } + private static final Binder BINDER = GWT.create(Binder.class); + @UiField + Image decorationImage; + private int left = 0; + + @UiField + FlowPanel mainPanel; + private int offset = 0; + private int top = 0; + @UiField + SimplePanel widgetContainer; + + public AbstractDecorator() { + initWidget(BINDER.createAndBindUi(this)); + } + + public void clearImage() { + decorationImage.setVisible(false); + } + + public void setDecoratorVisible(final boolean visible) { + decorationImage.setVisible(visible); + } + + public void setImage(final ImageResource img) { + decorationImage.setResource(img); + decorationImage.setVisible(true); + setPosition(); + } + + public void setImagePosition(final int top, final int left, final int offset) { + this.top = top; + this.left = left; + this.offset = offset; + setPosition(); + } + + public void setImageTooltip(final String text) { + Tooltip.to(decorationImage, text); + } + + private void setPosition() { + final Element elem = decorationImage.getElement(); + elem.getStyle().setPropertyPx("left", left); + elem.getStyle().setPropertyPx("top", top); + elem.getStyle().setPosition(Position.RELATIVE); + elem.getStyle().setFloat(Float.LEFT); + elem.getStyle().setMarginRight(offset, Unit.PX); + } + + public void setWidget(final IsWidget widget) { + widgetContainer.clear(); + widgetContainer.add(widget); + } + +} Added: trunk/src/main/java/cc/kune/common/client/ui/AbstractDecorator.ui.xml =================================================================== --- trunk/src/main/java/cc/kune/common/client/ui/AbstractDecorator.ui.xml (rev 0) +++ trunk/src/main/java/cc/kune/common/client/ui/AbstractDecorator.ui.xml 2011-07-10 18:29:52 UTC (rev 1446) @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> +<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' + xmlns:g='urn:import:com.google.gwt.user.client.ui'> + <ui:style> + .image { + position: relative; + top: 0px; + left: 0px; + float: left; + } + + .container { + float: left; + } + </ui:style> + + <g:FlowPanel ui:field="mainPanel"> + <g:SimplePanel ui:field="widgetContainer" styleName="{style.container}" /> + <g:Image ui:field="decorationImage" + styleName="{style.image}" /> + </g:FlowPanel> +</ui:UiBinder> Modified: trunk/src/main/java/cc/kune/core/client/CoreGinModule.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/CoreGinModule.java 2011-07-09 22:25:58 UTC (rev 1445) +++ trunk/src/main/java/cc/kune/core/client/CoreGinModule.java 2011-07-10 18:29:52 UTC (rev 1446) @@ -217,7 +217,7 @@ s(ErrorsDialog.class); s(XMLActionsParser.class); - bind(Services.class).to(GWTServices.class); + s(Services.class, GWTServices.class); } } Added: trunk/src/main/java/cc/kune/core/client/avatar/AvatarDecorator.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/avatar/AvatarDecorator.java (rev 0) +++ trunk/src/main/java/cc/kune/core/client/avatar/AvatarDecorator.java 2011-07-10 18:29:52 UTC (rev 1446) @@ -0,0 +1,13 @@ +package cc.kune.core.client.avatar; + +import com.google.gwt.user.client.ui.IsWidget; + +public interface AvatarDecorator { + + void setDecoratorVisible(boolean visible); + + void setItem(String name); + + void setWidget(IsWidget widget); + +} Added: trunk/src/main/java/cc/kune/core/client/avatar/MediumAvatarDecorator.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/avatar/MediumAvatarDecorator.java (rev 0) +++ trunk/src/main/java/cc/kune/core/client/avatar/MediumAvatarDecorator.java 2011-07-10 18:29:52 UTC (rev 1446) @@ -0,0 +1,5 @@ +package cc.kune.core.client.avatar; + +public interface MediumAvatarDecorator extends AvatarDecorator { + +} Added: trunk/src/main/java/cc/kune/core/client/avatar/SmallAvatarDecorator.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/avatar/SmallAvatarDecorator.java (rev 0) +++ trunk/src/main/java/cc/kune/core/client/avatar/SmallAvatarDecorator.java 2011-07-10 18:29:52 UTC (rev 1446) @@ -0,0 +1,5 @@ +package cc.kune.core.client.avatar; + +public interface SmallAvatarDecorator extends AvatarDecorator { + +} Modified: trunk/src/main/java/cc/kune/core/client/resources/CoreResources.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/resources/CoreResources.java 2011-07-09 22:25:58 UTC (rev 1445) +++ trunk/src/main/java/cc/kune/core/client/resources/CoreResources.java 2011-07-10 18:29:52 UTC (rev 1446) @@ -271,6 +271,42 @@ @Source("charfontname.png") ImageResource charfontname(); + @Source("chat-dot-available-medium.png") + ImageResource chatDotAvailableMedium(); + + @Source("chat-dot-available-small.png") + ImageResource chatDotAvailableSmall(); + + @Source("chat-dot-away-medium.png") + ImageResource chatDotAwayMedium(); + + @Source("chat-dot-away-small.png") + ImageResource chatDotAwaySmall(); + + @Source("chat-dot-busy-medium.png") + ImageResource chatDotBusyMedium(); + + @Source("chat-dot-busy-small.png") + ImageResource chatDotBusySmall(); + + @Source("chat-dot-extended-away-medium.png") + ImageResource chatDotExtendedAwayMedium(); + + @Source("chat-dot-extended-away-small.png") + ImageResource chatDotExtendedAwaySmall(); + + @Source("chat-dot-invisible-medium.png") + ImageResource chatDotInvisibleMedium(); + + @Source("chat-dot-invisible-small.png") + ImageResource chatDotInvisibleSmall(); + + @Source("chat-dot-offline-medium.png") + ImageResource chatDotOfflineMedium(); + + @Source("chat-dot-offline-small.png") + ImageResource chatDotOfflineSmall(); + @Source("checked.png") ImageResource checked(); Added: trunk/src/main/java/cc/kune/core/client/resources/chat-dot-available-medium.png =================================================================== (Binary files differ) Property changes on: trunk/src/main/java/cc/kune/core/client/resources/chat-dot-available-medium.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/src/main/java/cc/kune/core/client/resources/chat-dot-available-small.png =================================================================== (Binary files differ) Property changes on: trunk/src/main/java/cc/kune/core/client/resources/chat-dot-available-small.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/src/main/java/cc/kune/core/client/resources/chat-dot-away-medium.png =================================================================== (Binary files differ) Property changes on: trunk/src/main/java/cc/kune/core/client/resources/chat-dot-away-medium.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/src/main/java/cc/kune/core/client/resources/chat-dot-away-small.png =================================================================== (Binary files differ) Property changes on: trunk/src/main/java/cc/kune/core/client/resources/chat-dot-away-small.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/src/main/java/cc/kune/core/client/resources/chat-dot-busy-medium.png =================================================================== (Binary files differ) Property changes on: trunk/src/main/java/cc/kune/core/client/resources/chat-dot-busy-medium.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/src/main/java/cc/kune/core/client/resources/chat-dot-busy-small.png =================================================================== (Binary files differ) Property changes on: trunk/src/main/java/cc/kune/core/client/resources/chat-dot-busy-small.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/src/main/java/cc/kune/core/client/resources/chat-dot-extended-away-medium.png =================================================================== (Binary files differ) Property changes on: trunk/src/main/java/cc/kune/core/client/resources/chat-dot-extended-away-medium.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/src/main/java/cc/kune/core/client/resources/chat-dot-extended-away-small.png =================================================================== (Binary files differ) Property changes on: trunk/src/main/java/cc/kune/core/client/resources/chat-dot-extended-away-small.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/src/main/java/cc/kune/core/client/resources/chat-dot-invisible-medium.png =================================================================== (Binary files differ) Property changes on: trunk/src/main/java/cc/kune/core/client/resources/chat-dot-invisible-medium.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/src/main/java/cc/kune/core/client/resources/chat-dot-invisible-small.png =================================================================== (Binary files differ) Property changes on: trunk/src/main/java/cc/kune/core/client/resources/chat-dot-invisible-small.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/src/main/java/cc/kune/core/client/resources/chat-dot-offline-medium.png =================================================================== (Binary files differ) Property changes on: trunk/src/main/java/cc/kune/core/client/resources/chat-dot-offline-medium.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/src/main/java/cc/kune/core/client/resources/chat-dot-offline-small.png =================================================================== (Binary files differ) Property changes on: trunk/src/main/java/cc/kune/core/client/resources/chat-dot-offline-small.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Modified: trunk/src/main/java/cc/kune/core/client/sitebar/spaces/SpaceSelectorPresenter.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/sitebar/spaces/SpaceSelectorPresenter.java 2011-07-09 22:25:58 UTC (rev 1445) +++ trunk/src/main/java/cc/kune/core/client/sitebar/spaces/SpaceSelectorPresenter.java 2011-07-10 18:29:52 UTC (rev 1446) @@ -142,7 +142,7 @@ @Override public void onWindowFocus(final WindowFocusEvent event) { if (event.isHasFocus() && !mask.isShowing()) { - showTooltipWithDelay(); + // showTooltipWithDelay(); } } }); Modified: trunk/src/main/java/cc/kune/core/client/sn/AbstractSNPanel.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/sn/AbstractSNPanel.java 2011-07-09 22:25:58 UTC (rev 1445) +++ trunk/src/main/java/cc/kune/core/client/sn/AbstractSNPanel.java 2011-07-10 18:29:52 UTC (rev 1446) @@ -29,6 +29,7 @@ import cc.kune.common.client.actions.ui.descrip.MenuDescriptor; import cc.kune.common.client.tooltip.Tooltip; import cc.kune.common.client.ui.BasicThumb; +import cc.kune.core.client.avatar.SmallAvatarDecorator; import cc.kune.core.shared.i18n.I18nTranslationService; import cc.kune.gspace.client.GSpaceArmor; @@ -43,6 +44,7 @@ import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.ScrollPanel; import com.google.gwt.user.client.ui.Widget; +import com.google.inject.Provider; import com.gwtplatform.mvp.client.ViewImpl; public class AbstractSNPanel extends ViewImpl { @@ -52,11 +54,11 @@ private final static int AVATARLABELMAXSIZE = 4; private final static int AVATARSIZE = 22; - private final static String CATEG_HEIGHT = "80px"; + private final static String CATEG_HEIGHT = "84px"; private static AbstractSNPanelUiBinder uiBinder = GWT.create(AbstractSNPanelUiBinder.class); - protected final ActionSimplePanel actions; protected final GSpaceArmor armor; + protected final Provider<SmallAvatarDecorator> avatarDecoratorProv; ActionFlowPanel bottomActionsToolbar; @UiField FlowPanel bottomPanel; @@ -103,8 +105,9 @@ protected final Widget widget; public AbstractSNPanel(final I18nTranslationService i18n, final GuiProvider guiProvider, - final GSpaceArmor armor) { + final GSpaceArmor armor, final Provider<SmallAvatarDecorator> avatarDecorator) { this.armor = armor; + this.avatarDecoratorProv = avatarDecorator; widget = uiBinder.createAndBindUi(this); actions = new ActionSimplePanel(guiProvider); } @@ -144,6 +147,13 @@ return thumb; } + public SmallAvatarDecorator decorateAvatarWithXmppStatus(final String shortname, final BasicThumb thumb) { + final SmallAvatarDecorator decorator = avatarDecoratorProv.get(); + decorator.setWidget(thumb); + decorator.setItem(shortname); + return decorator; + } + public IsActionExtensible getBottomToolbar() { return bottomActionsToolbar; } Modified: trunk/src/main/java/cc/kune/core/client/sn/AbstractSNPanel.ui.xml =================================================================== --- trunk/src/main/java/cc/kune/core/client/sn/AbstractSNPanel.ui.xml 2011-07-09 22:25:58 UTC (rev 1445) +++ trunk/src/main/java/cc/kune/core/client/sn/AbstractSNPanel.ui.xml 2011-07-10 18:29:52 UTC (rev 1446) @@ -14,8 +14,9 @@ <g:Label ui:field="firstDeckLabel" addStyleNames="k-sn-novisible-label" /> <g:Label ui:field="sndDeckLabel" addStyleNames="k-sn-orphan-label" /> <g:FlowPanel width="100%" ui:field="categoriesFlow"> + <!-- Seed AbstractSNPanel.CATEG_HEIGHT--> <g:DockLayoutPanel unit="EM" width="100%" ui:field="firstCategoryPanel" - addStyleNames="k-sn-1st-panel" height="80px"> + addStyleNames="k-sn-1st-panel" height="84px"> <g:north size="1.2"> <g:FlowPanel> <g:Label text="Admins" ui:field="firstCategoryLabel" @@ -32,7 +33,7 @@ </g:DockLayoutPanel> <g:DockLayoutPanel unit="EM" width="100%" ui:field="sndCategoryPanel" addStyleNames="k-sn-2nd-panel" - height="80px"> + height="84px"> <g:north size="1.2"> <g:FlowPanel> <g:Label text="Collabs" ui:field="sndCategoryLabel" @@ -50,7 +51,7 @@ </g:DockLayoutPanel> <g:DockLayoutPanel unit="EM" width="100%" ui:field="trdCategoryPanel" addStyleNames="k-sn-3rd-panel" - height="80px"> + height="84px"> <g:north size="1.2"> <g:FlowPanel> <g:Label text="Pendings" ui:field="trdCategoryLabel" Modified: trunk/src/main/java/cc/kune/core/client/sn/GroupSNPanel.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/sn/GroupSNPanel.java 2011-07-09 22:25:58 UTC (rev 1445) +++ trunk/src/main/java/cc/kune/core/client/sn/GroupSNPanel.java 2011-07-10 18:29:52 UTC (rev 1446) @@ -24,19 +24,22 @@ import cc.kune.common.client.actions.ui.descrip.GuiActionDescCollection; import cc.kune.common.client.tooltip.Tooltip; import cc.kune.common.client.ui.BasicThumb; +import cc.kune.core.client.avatar.SmallAvatarDecorator; import cc.kune.core.client.sn.GroupSNPresenter.GroupSNView; import cc.kune.core.shared.dto.GroupDTO; import cc.kune.core.shared.i18n.I18nTranslationService; import cc.kune.gspace.client.GSpaceArmor; +import com.google.gwt.user.client.ui.Widget; import com.google.inject.Inject; +import com.google.inject.Provider; public class GroupSNPanel extends AbstractSNPanel implements GroupSNView { @Inject public GroupSNPanel(final I18nTranslationService i18n, final GuiProvider guiProvider, - final GSpaceArmor armor) { - super(i18n, guiProvider, armor); + final GSpaceArmor armor, final Provider<SmallAvatarDecorator> avatarDecorator) { + super(i18n, guiProvider, armor, avatarDecorator); setVisibleImpl(false); mainTitle.setText(i18n.t("Group members")); Tooltip.to(mainTitle, i18n.t("People and groups collaborating in this group")); @@ -59,14 +62,16 @@ public void addAdmin(final GroupDTO group, final String avatarUrl, final String tooltip, final String tooltipTitle, final GuiActionDescCollection menu) { final BasicThumb thumb = createThumb(group.getShortName(), avatarUrl, tooltip, tooltipTitle, menu); - firstCategoryFlow.add(thumb); + firstCategoryFlow.add(group.isPersonal() ? (Widget) decorateAvatarWithXmppStatus( + group.getShortName(), thumb) : thumb); } @Override public void addCollab(final GroupDTO group, final String avatarUrl, final String tooltip, final String tooltipTitle, final GuiActionDescCollection menu) { final BasicThumb thumb = createThumb(group.getShortName(), avatarUrl, tooltip, tooltipTitle, menu); - sndCategoryFlow.add(thumb); + sndCategoryFlow.add(group.isPersonal() ? (Widget) decorateAvatarWithXmppStatus(group.getShortName(), + thumb) : thumb); } @Override Modified: trunk/src/main/java/cc/kune/core/client/sn/UserSNPanel.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/sn/UserSNPanel.java 2011-07-09 22:25:58 UTC (rev 1445) +++ trunk/src/main/java/cc/kune/core/client/sn/UserSNPanel.java 2011-07-10 18:29:52 UTC (rev 1446) @@ -22,6 +22,8 @@ import cc.kune.common.client.actions.ui.ActionFlowPanel; import cc.kune.common.client.actions.ui.bind.GuiProvider; import cc.kune.common.client.actions.ui.descrip.GuiActionDescCollection; +import cc.kune.common.client.ui.BasicThumb; +import cc.kune.core.client.avatar.SmallAvatarDecorator; import cc.kune.core.client.resources.CoreMessages; import cc.kune.core.client.sn.UserSNPresenter.UserSNView; import cc.kune.core.shared.dto.GroupDTO; @@ -30,7 +32,9 @@ import cc.kune.gspace.client.GSpaceArmor; import com.google.gwt.user.client.ui.Label; +import com.google.gwt.user.client.ui.Widget; import com.google.inject.Inject; +import com.google.inject.Provider; public class UserSNPanel extends AbstractSNPanel implements UserSNView { @@ -38,9 +42,10 @@ @Inject public UserSNPanel(final I18nTranslationService i18n, final GuiProvider guiProvider, - final GSpaceArmor armor) { - super(i18n, guiProvider, armor); + final GSpaceArmor armor, final Provider<SmallAvatarDecorator> avatarDecorator) { + super(i18n, guiProvider, armor, avatarDecorator); this.i18n = i18n; + setVisibleImpl(false); mainTitle.setText(i18n.t("His/her network:")); mainTitle.setTitle(i18n.t("This user buddies and groups where participes")); @@ -62,7 +67,8 @@ @Override public void addBuddie(final UserSimpleDTO user, final String avatarUrl, final String tooltip, final String tooltipTitle, final GuiActionDescCollection menu) { - firstCategoryFlow.add(createThumb(user.getShortName(), avatarUrl, tooltip, tooltipTitle, menu)); + final BasicThumb thumb = createThumb(user.getShortName(), avatarUrl, tooltip, tooltipTitle, menu); + firstCategoryFlow.add((Widget) decorateAvatarWithXmppStatus(user.getShortName(), thumb)); } @Override Modified: trunk/src/main/java/cc/kune/core/client/sn/actions/conditions/IsMeCondition.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/sn/actions/conditions/IsMeCondition.java 2011-07-09 22:25:58 UTC (rev 1445) +++ trunk/src/main/java/cc/kune/core/client/sn/actions/conditions/IsMeCondition.java 2011-07-10 18:29:52 UTC (rev 1446) @@ -28,13 +28,16 @@ @Singleton public class IsMeCondition extends IsNotMeCondition { - @Inject - public IsMeCondition(final Session session) { - super(session); - } + @Inject + public IsMeCondition(final Session session) { + super(session); + } - @Override - public boolean mustBeAdded(final GuiActionDescrip descr) { - return !super.mustBeAdded(descr); + @Override + public boolean mustBeAdded(final GuiActionDescrip descr) { + if (session.isNotLogged()) { + return false; } + return !super.mustBeAdded(descr); + } } Modified: trunk/src/main/java/cc/kune/core/client/sn/actions/conditions/IsNotMeCondition.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/sn/actions/conditions/IsNotMeCondition.java 2011-07-09 22:25:58 UTC (rev 1445) +++ trunk/src/main/java/cc/kune/core/client/sn/actions/conditions/IsNotMeCondition.java 2011-07-10 18:29:52 UTC (rev 1446) @@ -32,40 +32,40 @@ @Singleton public class IsNotMeCondition implements GuiAddCondition { - private final Session session; + protected final Session session; - @Inject - public IsNotMeCondition(final Session session) { - this.session = session; - } + @Inject + public IsNotMeCondition(final Session session) { + this.session = session; + } - private String currentName() { - return session.getCurrentUser().getShortName(); - } + private String currentName() { + return session.getCurrentUser().getShortName(); + } - private boolean isNotThisGroup(final GuiActionDescrip descr) { - final String targetName = ((GroupDTO) descr.getTarget()).getShortName(); - final String currentName = currentName(); - return !currentName.equals(targetName); - } + private boolean isNotThisGroup(final GuiActionDescrip descr) { + final String targetName = ((GroupDTO) descr.getTarget()).getShortName(); + final String currentName = currentName(); + return !currentName.equals(targetName); + } - private boolean isNotThisPerson(final GuiActionDescrip descr) { - final String targetName = ((UserSimpleDTO) descr.getTarget()).getShortName(); - final String currentName = currentName(); - return !currentName.equals(targetName); - } + private boolean isNotThisPerson(final GuiActionDescrip descr) { + final String targetName = ((UserSimpleDTO) descr.getTarget()).getShortName(); + final String currentName = currentName(); + return !currentName.equals(targetName); + } - @Override - public boolean mustBeAdded(final GuiActionDescrip descr) { - if (session.isNotLogged()) { - return true; - } - if (descr.getTarget() instanceof UserSimpleDTO) { - return isNotThisPerson(descr); - } else if (descr.getTarget() instanceof GroupDTO) { - return isNotThisGroup(descr); - } else { - throw new UIException("Unsupported target"); - } + @Override + public boolean mustBeAdded(final GuiActionDescrip descr) { + if (session.isNotLogged()) { + return true; } + if (descr.getTarget() instanceof UserSimpleDTO) { + return isNotThisPerson(descr); + } else if (descr.getTarget() instanceof GroupDTO) { + return isNotThisGroup(descr); + } else { + throw new UIException("Unsupported target"); + } + } } Modified: trunk/src/main/java/cc/kune/core/client/sn/actions/registry/UserSNMenuItemsRegistry.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/sn/actions/registry/UserSNMenuItemsRegistry.java 2011-07-09 22:25:58 UTC (rev 1445) +++ trunk/src/main/java/cc/kune/core/client/sn/actions/registry/UserSNMenuItemsRegistry.java 2011-07-10 18:29:52 UTC (rev 1446) @@ -43,43 +43,52 @@ @SuppressWarnings("serial") public class UserSNMenuItemsRegistry extends AbstractSNMembersActionsRegistry { - @Inject - public UserSNMenuItemsRegistry(final Session session, - final IsCurrentStateAdministrableCondition isAdministrableCondition, - final IsPersonCondition isPersonCondition, final IsGroupCondition isGroupCondition, - final IsLoggedCondition isLoggedCondition, final IsMeCondition isMe, final IsNotMeCondition isNotMe, - final ChangeToCollabAction changeToCollabAction, final ChangeToAdminAction changeToAdminAction, - final RemoveMemberAction removeMemberAction, final AcceptJoinGroupAction acceptJoinGroupAction, - final DenyJoinGroupAction denyJoinGroupAction, final GotoGroupAction gotoGroupAction, - final GotoPersonAction gotoPersonAction, final UnJoinGroupAction unjoinAction, - final GotoYourHomePageAction gotoYourHomePageAction) { - add(new Provider<MenuItemDescriptor>() { - @Override - public MenuItemDescriptor get() { - final MenuItemDescriptor item = new MenuItemDescriptor(gotoPersonAction); - item.add(isPersonCondition); - item.add(isNotMe); - return item; - } - }); - add(new Provider<MenuItemDescriptor>() { - @Override - public MenuItemDescriptor get() { - final MenuItemDescriptor item = new MenuItemDescriptor(gotoGroupAction); - item.add(isGroupCondition); - return item; - } - }); - // This doesn't works, because its unregister from current state not - // from target group - // add(new Provider<MenuItemDescriptor>() { - // @Override - // public MenuItemDescriptor get() { - // final MenuItemDescriptor item = new MenuItemDescriptor(unjoinAction); - // item.add(isLoggedCondition); - // item.add(isGroupCondition); - // return item; - // } - // }); - } + @Inject + public UserSNMenuItemsRegistry(final Session session, + final IsCurrentStateAdministrableCondition isAdministrableCondition, + final IsPersonCondition isPersonCondition, final IsGroupCondition isGroupCondition, + final IsLoggedCondition isLoggedCondition, final IsMeCondition isMe, + final IsNotMeCondition isNotMe, final ChangeToCollabAction changeToCollabAction, + final ChangeToAdminAction changeToAdminAction, final RemoveMemberAction removeMemberAction, + final AcceptJoinGroupAction acceptJoinGroupAction, final DenyJoinGroupAction denyJoinGroupAction, + final GotoGroupAction gotoGroupAction, final GotoPersonAction gotoPersonAction, + final UnJoinGroupAction unjoinAction, final GotoYourHomePageAction gotoYourHomePageAction) { + add(new Provider<MenuItemDescriptor>() { + @Override + public MenuItemDescriptor get() { + final MenuItemDescriptor item = new MenuItemDescriptor(gotoPersonAction); + item.add(isPersonCondition); + item.add(isNotMe); + return item; + } + }); + add(new Provider<MenuItemDescriptor>() { + @Override + public MenuItemDescriptor get() { + final MenuItemDescriptor item = new MenuItemDescriptor(gotoGroupAction); + item.add(isGroupCondition); + return item; + } + }); + add(new Provider<MenuItemDescriptor>() { + @Override + public MenuItemDescriptor get() { + final MenuItemDescriptor item = new MenuItemDescriptor(gotoYourHomePageAction); + item.add(isPersonCondition); + item.add(isMe); + return item; + } + }); + // This doesn't works, because its unregister from current state not + // from target group + // add(new Provider<MenuItemDescriptor>() { + // @Override + // public MenuItemDescriptor get() { + // final MenuItemDescriptor item = new MenuItemDescriptor(unjoinAction); + // item.add(isLoggedCondition); + // item.add(isGroupCondition); + // return item; + // } + // }); + } } Modified: trunk/src/main/java/cc/kune/core/client/ws/entheader/EntityHeaderPanel.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/ws/entheader/EntityHeaderPanel.java 2011-07-09 22:25:58 UTC (rev 1445) +++ trunk/src/main/java/cc/kune/core/client/ws/entheader/EntityHeaderPanel.java 2011-07-10 18:29:52 UTC (rev 1446) @@ -44,109 +44,116 @@ public class EntityHeaderPanel extends ViewImpl implements EntityHeaderView { - private final Provider<FileDownloadUtils> downloadProvider; - private final EntityTextLogo entityTextLogo; - private final CoreResources images; - private final HorizontalPanel mainPanel; - private final ActionFlowPanel toolbar; - private final VerticalPanel vpanel; + private final Provider<FileDownloadUtils> downloadProvider; + private final EntityTextLogo entityTextLogo; + private final CoreResources images; + private final HorizontalPanel mainPanel; + private final ActionFlowPanel toolbar; + private final VerticalPanel vpanel; - @Inject - public EntityHeaderPanel(final Provider<FileDownloadUtils> downloadProvider, final CoreResources images, - final GuiProvider bindings, final GSpaceArmor armor) { - mainPanel = new HorizontalPanel(); - mainPanel.setWidth("100%"); - this.downloadProvider = downloadProvider; - this.images = images; - vpanel = new VerticalPanel(); - vpanel.setWidth("100%"); - vpanel.setHorizontalAlignment(HorizontalPanel.ALIGN_RIGHT); - entityTextLogo = new EntityTextLogo(); - mainPanel.add(entityTextLogo); - toolbar = new ActionFlowPanel(bindings); - vpanel.add(toolbar); - mainPanel.add(vpanel); - armor.getEntityHeader().add(mainPanel); - } + @Inject + public EntityHeaderPanel(final Provider<FileDownloadUtils> downloadProvider, + final CoreResources images, final GuiProvider bindings, final GSpaceArmor armor, + final EntityTextLogo entityTextLogo) { + this.entityTextLogo = entityTextLogo; + mainPanel = new HorizontalPanel(); + mainPanel.setWidth("100%"); + this.downloadProvider = downloadProvider; + this.images = images; + vpanel = new VerticalPanel(); + vpanel.setWidth("100%"); + vpanel.setHorizontalAlignment(HorizontalPanel.ALIGN_RIGHT); + mainPanel.add(entityTextLogo); + toolbar = new ActionFlowPanel(bindings); + vpanel.add(toolbar); + mainPanel.add(vpanel); + armor.getEntityHeader().add(mainPanel); + } - @Override - public void addAction(final GuiActionDescrip descriptor) { - toolbar.add(descriptor); - } + @Override + public void addAction(final GuiActionDescrip descriptor) { + toolbar.add(descriptor); + } - @Override - public void addWidget(final IsWidget view) { - final Widget widget = (Widget) view; - vpanel.add(widget); - } + @Override + public void addWidget(final IsWidget view) { + final Widget widget = (Widget) view; + vpanel.add(widget); + } - @Override - public Widget asWidget() { - return mainPanel; - } + @Override + public Widget asWidget() { + return mainPanel; + } - @Override - public void reloadImage(final GroupDTO group) { - entityTextLogo.setLogoImage(downloadProvider.get().getLogoImageUrl(group.getStateToken()) + "&nocache=" - + new Date().getTime()); - } + private String getAvatarDecoratorParam(final GroupDTO group) { + return group.isPersonal() ? group.getShortName() : null; + } - @Deprecated - public void setFullLogo(final StateToken stateToken, final boolean clipped) { - mainPanel.clear(); - final String imageUrl = downloadProvider.get().getImageUrl(stateToken); - Image logo; - if (clipped) { - logo = new Image(imageUrl, 0, 0, FileConstants.LOGO_DEF_WIDTH, FileConstants.LOGO_DEF_HEIGHT); - } else { - logo = new Image(imageUrl); - logo.setWidth(String.valueOf(FileConstants.LOGO_DEF_WIDTH)); - logo.setHeight(String.valueOf(FileConstants.LOGO_DEF_HEIGHT)); - } - mainPanel.add(logo); - } + @Override + public void reloadImage(final GroupDTO group) { + entityTextLogo.setLogoImage(downloadProvider.get().getLogoImageUrl(group.getStateToken()) + + "&nocache=" + new Date().getTime(), getAvatarDecoratorParam(group)); + } - @Override - public void setLargeFont() { - entityTextLogo.setLargeFont(); + @Deprecated + public void setFullLogo(final StateToken stateToken, final boolean clipped) { + mainPanel.clear(); + final String imageUrl = downloadProvider.get().getImageUrl(stateToken); + Image logo; + if (clipped) { + logo = new Image(imageUrl, 0, 0, FileConstants.LOGO_DEF_WIDTH, FileConstants.LOGO_DEF_HEIGHT); + } else { + logo = new Image(imageUrl); + logo.setWidth(String.valueOf(FileConstants.LOGO_DEF_WIDTH)); + logo.setHeight(String.valueOf(FileConstants.LOGO_DEF_HEIGHT)); } + mainPanel.add(logo); + } - @Override - public void setLogoImage(final StateToken stateToken) { - entityTextLogo.setLogoImage(downloadProvider.get().getLogoImageUrl(stateToken)); - } + @Override + public void setLargeFont() { + entityTextLogo.setLargeFont(); + } - @Override - public void setLogoImageVisible(final boolean visible) { - entityTextLogo.setLogoVisible(visible); - } + @Override + public void setLogoImage(final GroupDTO group) { + entityTextLogo.setLogoImage(downloadProvider.get().getLogoImageUrl(group.getStateToken()), + getAvatarDecoratorParam(group)); + } - @Override - public void setLogoText(final String groupName) { - entityTextLogo.setLogoText(groupName); - } + @Override + public void setLogoImageVisible(final boolean visible) { + entityTextLogo.setLogoVisible(visible); + } - @Override - public void setMediumFont() { - entityTextLogo.setMediumFont(); - } + @Override + public void setLogoText(final String groupName) { + entityTextLogo.setLogoText(groupName); + } - // - // @Override - // public void setTheme(final WsTheme oldTheme, final WsTheme newTheme) { - // if (oldTheme != null) { - // entityTextLogo.removeStyleDependentName(oldTheme.toString()); - // } - // entityTextLogo.addStyleDependentName(newTheme.toString()); - // } + @Override + public void setMediumFont() { + entityTextLogo.setMediumFont(); + } - @Override - public void setSmallFont() { - entityTextLogo.setSmallFont(); - } + // + // @Override + // public void setTheme(final WsTheme oldTheme, final WsTheme newTheme) { + // if (oldTheme != null) { + // entityTextLogo.removeStyleDependentName(oldTheme.toString()); + // } + // entityTextLogo.addStyleDependentName(newTheme.toString()); + // } - @Override - public void showDefUserLogo() { - entityTextLogo.setLogoImage(AbstractImagePrototype.create(images.unknown60())); - } + @Override + public void setSmallFont() { + entityTextLogo.setSmallFont(); + } + + @Override + public void showDefUserLogo(final GroupDTO group) { + entityTextLogo.setLogoImage(AbstractImagePrototype.create(images.unknown60()), + getAvatarDecoratorParam(group)); + } } Modified: trunk/src/main/java/cc/kune/core/client/ws/entheader/EntityHeaderPresenter.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/ws/entheader/EntityHeaderPresenter.java 2011-07-09 22:25:58 UTC (rev 1445) +++ trunk/src/main/java/cc/kune/core/client/ws/entheader/EntityHeaderPresenter.java 2011-07-10 18:29:52 UTC (rev 1446) @@ -24,7 +24,6 @@ import cc.kune.core.client.state.GroupChangedEvent.GroupChangedHandler; import cc.kune.core.client.state.Session; import cc.kune.core.client.state.StateManager; -import cc.kune.core.shared.domain.utils.StateToken; import cc.kune.core.shared.dto.GroupDTO; import cc.kune.gspace.client.options.logo.CurrentLogoChangedEvent; import cc.kune.gspace.client.options.logo.CurrentLogoChangedEvent.CurrentLogoChangedHandler; @@ -54,7 +53,7 @@ void setLargeFont(); - void setLogoImage(StateToken stateToken); + void setLogoImage(GroupDTO group); void setLogoImageVisible(boolean visible); @@ -66,7 +65,7 @@ // void setTheme(final WsTheme oldTheme, WsTheme newTheme); - void showDefUserLogo(); + void showDefUserLogo(GroupDTO group); } private static final int LARGE_NAME_LIMIT = 17; @@ -126,12 +125,12 @@ void setGroupLogo(final GroupDTO group) { if (group.hasLogo()) { setLogoText(group.getLongName()); - getView().setLogoImage(group.getStateToken()); + getView().setLogoImage(group); getView().setLogoImageVisible(true); } else { setLogoText(group.getLongName()); if (group.isPersonal()) { - getView().showDefUserLogo(); + getView().showDefUserLogo(group); getView().setLogoImageVisible(true); } else { getView().setLogoImageVisible(false); Modified: trunk/src/main/java/cc/kune/core/client/ws/entheader/EntityTextLogo.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/ws/entheader/EntityTextLogo.java 2011-07-09 22:25:58 UTC (rev 1445) +++ trunk/src/main/java/cc/kune/core/client/ws/entheader/EntityTextLogo.java 2011-07-10 18:29:52 UTC (rev 1446) @@ -19,11 +19,15 @@ */ package cc.kune.core.client.ws.entheader; +import cc.kune.core.client.avatar.MediumAvatarDecorator; + import com.google.gwt.user.client.ui.AbstractImagePrototype; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.VerticalPanel; +import com.google.gwt.user.client.ui.Widget; +import com.google.inject.Inject; public class EntityTextLogo extends VerticalPanel { @@ -34,16 +38,20 @@ private static final String LOGO_MEDIUM_FONT_STYLE = "k-elogo-l-m"; public static final String LOGO_NAME = "k-elogop-ln"; private static final String LOGO_SMALL_FONT_STYLE = "k-elogo-l-s"; + private final MediumAvatarDecorator avatarDecorator; private final Image logoImage; private final Label logoLabel; - public EntityTextLogo() { + @Inject + public EntityTextLogo(final MediumAvatarDecorator avatarDecorator) { // Initialize super(); + this.avatarDecorator = avatarDecorator; final HorizontalPanel generalHP = new HorizontalPanel(); final VerticalPanel logoTextVP = new VerticalPanel(); logoImage = new Image(); logoLabel = new Label(); + avatarDecorator.setWidget(logoImage); final Label expandCell = new Label(""); logoImage.ensureDebugId(LOGO_IMAGE); @@ -51,7 +59,7 @@ // Layout add(generalHP); - generalHP.add(logoImage); + generalHP.add((Widget) avatarDecorator); generalHP.add(logoTextVP); logoTextVP.add(logoLabel); @@ -84,14 +92,16 @@ logoLabel.addStyleName(LOGO_LARGE_FONT_STYLE); } - public void setLogoImage(final AbstractImagePrototype imageProto) { + public void setLogoImage(final AbstractImagePrototype imageProto, final String groupName) { imageProto.applyTo(logoImage); + avatarDecorator.setItem(groupName); } - public void setLogoImage(final String url) { + public void setLogoImage(final String url, final String groupName) { logoImage.setUrl("images/clear.gif"); Image.prefetch(url); logoImage.setUrl(url); + avatarDecorator.setItem(groupName); } public void setLogoText(final String text) { @@ -104,6 +114,7 @@ public void setLogoVisible(final boolean visible) { logoImage.setVisible(visible); + avatarDecorator.setDecoratorVisible(visible); } public void setMediumFont() { Modified: trunk/src/main/java/cc/kune/gspace/client/viewers/FolderViewerPresenter.java =================================================================== --- trunk/src/main/java/cc/kune/gspace/client/viewers/FolderViewerPresenter.java 2011-07-09 22:25:58 UTC (rev 1445) +++ trunk/src/main/java/cc/kune/gspace/client/viewers/FolderViewerPresenter.java 2011-07-10 18:29:52 UTC (rev 1446) @@ -81,8 +81,6 @@ void attach(); - void highlightTitle(); - void clear(); void detach(); @@ -91,6 +89,8 @@ HasEditHandler getEditTitle(); + void highlightTitle(); + void setActions(GuiActionDescCollection actions); void setContainer(StateContainerDTO state); @@ -176,10 +176,6 @@ } } - public void highlightTitle() { - getView().highlightTitle(); - } - String calculateStyle(final int pos, final int length) { if (length == 1) { return CSSBTN; @@ -205,6 +201,7 @@ } // Other contents (docs, etc) for (final ContentSimpleDTO content : container.getContents()) { + assert content != null; addItem(content, content.getMimeType(), content.getStatus(), content.getStateToken().copy().clearDocument(), content.getRights(), content.getModifiedOn()); } @@ -284,6 +281,10 @@ } } + public void highlightTitle() { + getView().highlightTitle(); + } + public void refreshState() { setContent((HasContent) session.getCurrentState()); } Modified: trunk/src/main/java/cc/kune/wave/client/WaveStatusIndicator.java =================================================================== --- trunk/src/main/java/cc/kune/wave/client/WaveStatusIndicator.java 2011-07-09 22:25:58 UTC (rev 1445) +++ trunk/src/main/java/cc/kune/wave/client/WaveStatusIndicator.java 2011-07-10 18:29:52 UTC (rev 1446) @@ -45,7 +45,7 @@ super(session, true); ClientEvents.get().addNetworkStatusEventHandler(new NetworkStatusEventHandler() { private void goOnline() { - putValue(Action.NAME, i18n.t("Online")); + putValue(Action.NAME, ""); // i18n.t("Online")); putValue(AbstractAction.STYLES, "k-sitebar-wave-status, k-sitebar-wave-status-online"); NotifyUser.hideProgress(); }
participants (1)
-
Vicente J. Ruiz Jurado