package org.limewire.ui.swing.menu; import java.awt.event.ActionEvent; import javax.swing.Action; import javax.swing.ButtonGroup; import javax.swing.JCheckBoxMenuItem; import org.limewire.friend.api.FriendConnection; import org.limewire.friend.api.FriendConnectionEvent; import org.limewire.listener.EventBean; import org.limewire.listener.EventUtils; import org.limewire.ui.swing.action.AbstractAction; import org.limewire.ui.swing.friends.chat.ChatMediator; import org.limewire.ui.swing.friends.login.AutoLoginService; import org.limewire.ui.swing.friends.login.LoginPopupPanel; import org.limewire.ui.swing.home.HomeMediator; import org.limewire.ui.swing.mainframe.ChangeLanguageAction; import org.limewire.ui.swing.nav.NavCategory; import org.limewire.ui.swing.nav.Navigator; import org.limewire.ui.swing.transfer.TransferTrayNavigator; import org.limewire.ui.swing.util.I18n; import com.google.inject.Inject; import com.google.inject.Provider; class ViewMenu extends DelayedMnemonicMenu { private static final String visibleText = I18n.tr("Hide &Chat Window"); private static final String notVisibleText = I18n.tr("Show &Chat Window"); private final Provider<LoginPopupPanel> friendsSignInPanelProvider; private final Provider<AutoLoginService> autoLoginServiceProvider; private final EventBean<FriendConnectionEvent> friendConnectionEventBean; private final Provider<HideTransferTrayAction> hideTransferTrayTrayActionProvider; private final Provider<ShowDownloadsTrayAction> showDownloadsTrayActionProvider; private final Provider<ShowUploadsTrayAction> showUploadsTrayActionProvider; private final Provider<ChatMediator> chatFrameProvider; private final Provider<ChangeLanguageAction> changeLanguageActionProvider; private final Provider<TransferTrayNavigator> transferTrayNavigator; private final Provider<HomeMediator> homeMediatorProvider; private final Provider<Navigator> navigatorProvider; @Inject public ViewMenu(Provider<LoginPopupPanel> friendsSignInPanel, Provider<AutoLoginService> autoLoginServiceProvider, EventBean<FriendConnectionEvent> friendConnectionEventBean, Provider<HideTransferTrayAction> hideTransferTrayTrayActionProvider, Provider<ShowDownloadsTrayAction> showHideDownloadTrayAction, Provider<ShowUploadsTrayAction> uploadTrayActionProvider, Provider<ChatMediator> chatFrameProvider, Provider<ChangeLanguageAction> changeLanguageActionProvider, Provider<TransferTrayNavigator> transferTrayNavigator, Provider<HomeMediator> homeMediatorProvider, Provider<Navigator> navigatorProvider) { super(I18n.tr("&View")); this.friendsSignInPanelProvider = friendsSignInPanel; this.hideTransferTrayTrayActionProvider = hideTransferTrayTrayActionProvider; this.autoLoginServiceProvider = autoLoginServiceProvider; this.friendConnectionEventBean = friendConnectionEventBean; this.showDownloadsTrayActionProvider = showHideDownloadTrayAction; this.showUploadsTrayActionProvider = uploadTrayActionProvider; this.chatFrameProvider = chatFrameProvider; this.changeLanguageActionProvider = changeLanguageActionProvider; this.transferTrayNavigator = transferTrayNavigator; this.homeMediatorProvider = homeMediatorProvider; this.navigatorProvider = navigatorProvider; } @Override public void createMenuItems() { JCheckBoxMenuItem hideTransferTray = new JCheckBoxMenuItem( hideTransferTrayTrayActionProvider.get()); JCheckBoxMenuItem showDownloads = new JCheckBoxMenuItem(showDownloadsTrayActionProvider .get()); JCheckBoxMenuItem showUploads = new JCheckBoxMenuItem(showUploadsTrayActionProvider.get()); boolean showTransfers = transferTrayNavigator.get().isTrayShowing(); hideTransferTray.setSelected(!showTransfers); showDownloads.setSelected(showTransfers && transferTrayNavigator.get().isDownloadsSelected()); showUploads.setSelected(showTransfers && transferTrayNavigator.get().isUploadsSelected()); ButtonGroup group = new ButtonGroup(); group.add(hideTransferTray); group.add(showDownloads); group.add(showUploads); add(buildShowHomeScreenAction()); add(buildShowHideChatWindowAction(chatFrameProvider)); addSeparator(); add(hideTransferTray); add(showDownloads); add(showUploads); addSeparator(); add(changeLanguageActionProvider.get()); } /** * @return if there is a connection that is either logged in, logging in or * a login service provider is attempting to log in. */ private boolean hasActiveConnection() { if (autoLoginServiceProvider.get().isAttemptingLogin()) { return true; } FriendConnection friendConnection = EventUtils.getSource(friendConnectionEventBean); if (friendConnection != null) { return friendConnection.isLoggedIn() || friendConnection.isLoggingIn(); } return false; } private boolean isLoggingIn() { FriendConnection friendConnection = EventUtils.getSource(friendConnectionEventBean); return friendConnection != null && friendConnection.isLoggingIn(); } private Action buildShowHideChatWindowAction(final Provider<ChatMediator> chatFrameProvider) { Action action = new AbstractAction(chatFrameProvider.get().isVisible() ? visibleText : notVisibleText) { @Override public void actionPerformed(ActionEvent e) { if(!chatFrameProvider.get().isVisible() && !hasActiveConnection()) { friendsSignInPanelProvider.get().setVisible(true); } else { // TODO: nothing happens if we are logging in, seems strange. if (!autoLoginServiceProvider.get().isAttemptingLogin() && !isLoggingIn()) { chatFrameProvider.get().setVisible(!chatFrameProvider.get().isVisible()); } } } }; return action; } private Action buildShowHomeScreenAction(){ return new AbstractAction(I18n.tr("&Home Screen")) { @Override public void actionPerformed(ActionEvent e) { navigatorProvider.get().getNavItem(NavCategory.LIMEWIRE, HomeMediator.NAME).select(); homeMediatorProvider.get().getComponent().loadDefaultUrl(); } }; } }