/* * Project: xdccBee * Copyright (C) 2009 snert@snert-lab.de, * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package de.snertlab.xdccBee.ui; import java.text.MessageFormat; import java.util.List; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.FormAttachment; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.layout.FormLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Tree; import de.snertlab.xdccBee.irc.DccPacket; import de.snertlab.xdccBee.irc.IrcChannel; import de.snertlab.xdccBee.irc.IrcServer; import de.snertlab.xdccBee.irc.ServerList; import de.snertlab.xdccBee.irc.listener.INotifyIrcServerEditNew; import de.snertlab.xdccBee.irc.listener.NotifyManagerIrcServerEditNew; import de.snertlab.xdccBee.messages.XdccBeeMessages; import de.snertlab.xdccBee.tools.MyMessageDialog; import de.snertlab.xdccBee.ui.actions.ActionConnectIrcServer; import de.snertlab.xdccBee.ui.actions.ActionDisconnectIrcServer; import de.snertlab.xdccBee.ui.actions.ActionEditIrcChannel; import de.snertlab.xdccBee.ui.actions.ActionEditIrcServer; import de.snertlab.xdccBee.ui.actions.ActionNewIrcChannelContextMenu; import de.snertlab.xdccBee.ui.actions.ActionNewIrcServer; import de.snertlab.xdccBee.ui.actions.ActionRemoveIrcChannelContextMenu; import de.snertlab.xdccBee.ui.actions.ActionRemoveIrcServerContextMenu; /** * @author snert * */ public class ViewMain implements INotifyIrcServerEditNew { private IrcTreeViewer ircTreeViewer; private PacketViewer packetViewer; private InfoTabFolder infoTabFolder; public void createContents(Composite parent) { createContentsView(parent); makeTreeMenu(); NotifyManagerIrcServerEditNew.getNotifyManager().register(this); connectAllAutoconnectServer(); } public void createContentsView(Composite parent) { Composite comp = new Composite(parent, SWT.NONE); FormLayout layout = new FormLayout(); layout.marginWidth = 5; layout.marginHeight = 5; comp.setLayout(layout); FormData data = new FormData(); data.top = new FormAttachment(0, 0); data.left = new FormAttachment(0, 0); data.right = new FormAttachment(100, 0); data.bottom = new FormAttachment(100, 0); comp.setLayoutData(data); FormData data2 = new FormData(); data2.top = new FormAttachment(0, 0); data2.left = new FormAttachment(0, 0); data2.right = new FormAttachment(25, 0); data2.bottom = new FormAttachment(60, 0); ircTreeViewer = new IrcTreeViewer(comp, SWT.BORDER); Tree treeIrcServer = ircTreeViewer.getTree(); treeIrcServer.setLayoutData(data2); // ircTreeViewer.addSelectionChangedListener(new // IrcTreeViewerSelectionChangedListener()); FormData data3 = new FormData(); data3.top = new FormAttachment(0, 31); data3.left = new FormAttachment(treeIrcServer, 5); data3.right = new FormAttachment(100, 0); data3.bottom = new FormAttachment(60, 0); packetViewer = new PacketViewer(comp, SWT.BORDER | SWT.FULL_SELECTION); packetViewer.getTable().setLayoutData(data3); FormData data3b = new FormData(); data3b.top = new FormAttachment(0, 0); data3b.left = new FormAttachment(treeIrcServer, 5); data3b.right = new FormAttachment(100, 0); data3b.bottom = new FormAttachment(packetViewer.getTable(), 5); new PacketFilterComposite(comp, data3b, packetViewer); FormData data4 = new FormData(); data4.top = new FormAttachment(treeIrcServer, 5); data4.left = new FormAttachment(0, 0); data4.right = new FormAttachment(100, 0); data4.bottom = new FormAttachment(100, 0); infoTabFolder = new InfoTabFolder(comp, SWT.BORDER); infoTabFolder.setLayoutData(data4); } public Object getSelectedTreeItem() { IStructuredSelection selectedItem = (IStructuredSelection) ircTreeViewer .getSelection(); return selectedItem.getFirstElement(); } public DccPacket getSelectedDccPacket() { return packetViewer.getSelectedDccPacket(); } private void makeTreeMenu() { Menu mnuIrcServer = new Menu(ircTreeViewer.getTree()); ircTreeViewer.getTree().setMenu(mnuIrcServer); final MenuItem mntmAddNewItems = new MenuItem(mnuIrcServer, SWT.CASCADE); mntmAddNewItems.setText(XdccBeeMessages .getString("ViewMain_MENUITEM_ADD")); //$NON-NLS-1$ final Menu menu_1 = new Menu(mntmAddNewItems); mntmAddNewItems.setMenu(menu_1); final MenuItem mntmAddServer = new MenuItem(menu_1, SWT.NONE); mntmAddServer.setText(XdccBeeMessages .getString("ViewMain_MENUITEM_SERVER")); //$NON-NLS-1$ mntmAddServer.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { addNewIrcServer(); } }); final MenuItem mntmAddChannel = new MenuItem(menu_1, SWT.NONE); mntmAddChannel.setText(XdccBeeMessages .getString("ViewMain_MENUITEM_CHANNEL")); //$NON-NLS-1$ mntmAddChannel.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { addNewIrcChannel(); } }); final MenuItem mntmEdit = new MenuItem(mnuIrcServer, SWT.NONE); mntmEdit.setText(XdccBeeMessages.getString("ViewMain_MENUITEM_EDIT")); //$NON-NLS-1$ mntmEdit.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { if (getSelectedTreeItem() instanceof IrcServer) { editIrcServer(); } else if (getSelectedTreeItem() instanceof IrcChannel) { editIrcChannel(); } } }); final MenuItem mntmRemove = new MenuItem(mnuIrcServer, SWT.NONE); mntmRemove.setText(XdccBeeMessages .getString("ViewMain_MENUITEM_REMOVE")); //$NON-NLS-1$ mntmRemove.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { if (getSelectedTreeItem() instanceof IrcServer) { removeIrcServer(); } else if (getSelectedTreeItem() instanceof IrcChannel) { removeIrcChannel(); } } }); new MenuItem(mnuIrcServer, SWT.SEPARATOR); final MenuItem mntmVerbinden = new MenuItem(mnuIrcServer, SWT.NONE); mntmVerbinden.setText(XdccBeeMessages .getString("ViewMain_MENUITEM_CONNECT")); //$NON-NLS-1$ mntmVerbinden.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { if (getSelectedTreeItem() instanceof IrcServer) { connectIrcServer(); } else if (getSelectedTreeItem() instanceof IrcChannel) { IrcChannel ircChannel = (IrcChannel) getSelectedTreeItem(); ircChannel.connect(); } } }); final MenuItem mntmTrennen = new MenuItem(mnuIrcServer, SWT.NONE); mntmTrennen.setText(XdccBeeMessages .getString("ViewMain_MENUITEM_DISCONNECT")); //$NON-NLS-1$ mntmTrennen.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { if (getSelectedTreeItem() instanceof IrcServer) { disconnectIrcServer(); } else if (getSelectedTreeItem() instanceof IrcChannel) { IrcChannel ircChannel = (IrcChannel) getSelectedTreeItem(); ircChannel.disconnect(); } } }); new MenuItem(mnuIrcServer, SWT.SEPARATOR); final MenuItem mntmShowAllPackets = new MenuItem(mnuIrcServer, SWT.NONE); mntmShowAllPackets.setText(XdccBeeMessages .getString("ViewMain_MENUITEM_SHOW_ALL_PACKETS")); //$NON-NLS-1$ mntmShowAllPackets.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { packetViewer.setFilterAll(); } }); final MenuItem mntmShowServerPackets = new MenuItem(mnuIrcServer, SWT.NONE); mntmShowServerPackets.setText(XdccBeeMessages .getString("ViewMain_MENUITEM_SHOW_ONLY_CHANNEL_PACKETS")); //$NON-NLS-1$ mntmShowServerPackets.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { if (getSelectedTreeItem() instanceof IrcServer) { packetViewer .setFilterIrcServer((IrcServer) getSelectedTreeItem()); } else if (getSelectedTreeItem() instanceof IrcChannel) { packetViewer .setFilterIrcServer(((IrcChannel) getSelectedTreeItem()) .getIrcServer()); } } }); final MenuItem mntmShowChannelPackets = new MenuItem(mnuIrcServer, SWT.NONE); mntmShowChannelPackets.setText(XdccBeeMessages .getString("ViewMain_MENUITEM_SHOW_CHANNEL_PACKETS")); //$NON-NLS-1$ mntmShowChannelPackets.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { if (getSelectedTreeItem() instanceof IrcChannel) { packetViewer .setFilterIrcChannel((IrcChannel) getSelectedTreeItem()); } } }); mnuIrcServer.addListener(SWT.Show, new Listener() { @Override public void handleEvent(Event event) { if (getSelectedTreeItem() == null) { mntmAddChannel.setEnabled(false); mntmEdit.setEnabled(false); mntmRemove.setEnabled(false); mntmTrennen.setEnabled(false); mntmVerbinden.setEnabled(false); mntmShowAllPackets.setEnabled(ServerList .isAnyServerConnected()); mntmShowServerPackets.setEnabled(false); mntmShowChannelPackets.setEnabled(false); } else if (getSelectedTreeItem() instanceof IrcServer) { IrcServer ircServer = (IrcServer) getSelectedTreeItem(); mntmAddChannel.setEnabled(true); mntmEdit.setEnabled(true); mntmRemove.setEnabled(true); mntmShowAllPackets.setEnabled(ServerList .isAnyServerConnected()); mntmShowChannelPackets.setEnabled(false); if (ircServer.isConnected() || ircServer.isConnecting()) { mntmVerbinden.setEnabled(false); } else { mntmVerbinden.setEnabled(true); } if (ircServer.isConnected()) { mntmTrennen.setEnabled(true); mntmShowServerPackets.setEnabled(true); } else { mntmTrennen.setEnabled(false); mntmShowServerPackets.setEnabled(false); } } else if (getSelectedTreeItem() instanceof IrcChannel) { IrcChannel ircChannel = (IrcChannel) getSelectedTreeItem(); mntmAddChannel.setEnabled(true); mntmEdit.setEnabled(true); mntmRemove.setEnabled(true); mntmShowAllPackets.setEnabled(ServerList .isAnyServerConnected()); mntmShowServerPackets.setEnabled(ircChannel.getIrcServer() .isConnected()); if (ircChannel.isConnected() || !ircChannel.getIrcServer().isConnected()) { mntmVerbinden.setEnabled(false); } else { mntmVerbinden.setEnabled(true); } if (ircChannel.isConnected()) { mntmShowChannelPackets.setEnabled(true); mntmTrennen.setEnabled(true); } else { mntmShowChannelPackets.setEnabled(false); mntmTrennen.setEnabled(false); } } else { throw new RuntimeException( "Undefined state for getSelectedTreeItem()"); //$NON-NLS-1$ } } }); } private void removeIrcServer() { IrcServer ircServer = (IrcServer) getSelectedTreeItem(); boolean isOk = MyMessageDialog .openConfirm( Display.getCurrent().getActiveShell(), XdccBeeMessages .getString("ViewMain_CONFIRM_TITLE_REMOVE_SERVER"), MessageFormat.format(XdccBeeMessages.getString("ViewMain_CONFIRM_MESSAGE_REMOVE_SERVER"), new Object[] { ircServer.getHostname() })); //$NON-NLS-1$ //$NON-NLS-2$ if (isOk) { new ActionRemoveIrcServerContextMenu(ircServer).run(); } } private void removeIrcChannel() { IrcChannel ircChannel = (IrcChannel) getSelectedTreeItem(); boolean isOk = MyMessageDialog.openConfirm(Display.getCurrent() .getActiveShell(), XdccBeeMessages .getString("ViewMain_CONFIRM_TITLE_REMOVE_CHANNEL"), MessageFormat.format(XdccBeeMessages .getString("ViewMain_CONFIRM_MESSAGE_REMOVE_CHANNEL"), new Object[] { ircChannel.getChannelName() })); if (isOk) { new ActionRemoveIrcChannelContextMenu(ircChannel).run(); } } private void editIrcServer() { new ActionEditIrcServer(Display.getCurrent().getActiveShell(), (IrcServer) getSelectedTreeItem()).run(); } private void editIrcChannel() { new ActionEditIrcChannel(Display.getCurrent().getActiveShell(), (IrcChannel) getSelectedTreeItem()).run(); } private void addNewIrcServer() { new ActionNewIrcServer(Display.getCurrent().getActiveShell()).run(); } private void addNewIrcChannel() { IrcServer ircServer = null; if (getSelectedTreeItem() instanceof IrcServer) { ircServer = (IrcServer) getSelectedTreeItem(); } else { ircServer = ((IrcChannel) getSelectedTreeItem()).getIrcServer(); } new ActionNewIrcChannelContextMenu(Display.getCurrent() .getActiveShell(), ircServer).run(); } private void connectIrcServer() { new ActionConnectIrcServer((IrcServer) getSelectedTreeItem()).run(); } private void disconnectIrcServer() { new ActionDisconnectIrcServer((IrcServer) getSelectedTreeItem()).run(); } private void connectAllAutoconnectServer() { List<IrcServer> listIrcServer = Application.getServerSettings() .getListServer(); for (IrcServer ircServer : listIrcServer) { if (ircServer.isAutoconnect()) ircServer.connect(); } } @Override public void notifyIrcServerEditNew(IrcServer ircServer, boolean deleted) { Object[] expandedElements = ircTreeViewer.getExpandedElements(); ircTreeViewer.setInput(Application.getServerSettings().getListServer()); ircTreeViewer.setExpandedElements(expandedElements); infoTabFolder.refreshTabForIrcServer(ircServer); } }