📄 tab.java
字号:
/*
* Created on 29 juin 2003
* Copyright (C) 2003, 2004, 2005, 2006 Aelitis, All Rights Reserved.
*
* 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 2
* 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* AELITIS, SAS au capital de 46,603.30 euros
* 8 Allee Lenotre, La Grille Royale, 78600 Le Mesnil le Roi, France.
*
*/
package org.gudy.azureus2.ui.swt;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
import org.gudy.azureus2.core3.internat.MessageText;
import org.gudy.azureus2.core3.util.AEMonitor;
import org.gudy.azureus2.core3.util.Debug;
import org.gudy.azureus2.core3.util.IndentWriter;
import org.gudy.azureus2.plugins.PluginView;
import org.gudy.azureus2.ui.swt.mainwindow.MainWindow;
import org.gudy.azureus2.ui.swt.plugins.UISWTPluginView;
import org.gudy.azureus2.ui.swt.plugins.UISWTView;
import org.gudy.azureus2.ui.swt.pluginsimpl.UISWTViewImpl;
import org.gudy.azureus2.ui.swt.views.*;
/**
* @author Olivier
* @author James Yeh Added Add/Remove event listeners
*/
public class Tab {
private static HashMap tabs;
private static AEMonitor class_mon = new AEMonitor( "Tab:class" );
private boolean useCustomTab;
private static Composite _folder;
private Composite folder;
private Item tabItem;
private static boolean eventCloseAllowed = true;
private static Item selectedItem = null;
private IView view;
// events
private static List tabAddListeners;
private static List tabRemoveListeners;
private static MainWindow mainwindow;
static {
tabs = new HashMap();
tabAddListeners = new LinkedList();
tabRemoveListeners = new LinkedList();
}
public Item getTabItem() {
return tabItem;
}
public Tab(IView _view) {
this(_view, true);
}
public Tab(IView _view, boolean bFocus) {
this.useCustomTab = mainwindow.isUseCustomTab();
this.view = _view;
this.folder = _folder;
if (useCustomTab) {
CTabFolder tabFolder = (CTabFolder) folder;
tabItem = new CTabItem(tabFolder, SWT.NULL,
(_view instanceof MyTorrentsSuperView) ? 0 : tabFolder.getItemCount());
folder.addMouseListener(new MouseAdapter() {
public void mouseDown(MouseEvent arg0) {
if(arg0.button == 2) {
if(eventCloseAllowed) {
Rectangle rectangle =((CTabItem)tabItem).getBounds();
if(rectangle.contains(arg0.x, arg0.y)) {
eventCloseAllowed = false;
folder.removeMouseListener(this);
closed(tabItem);
}
}
} else {
selectedItem = ((CTabFolder) folder).getSelection();
}
}
public void mouseUp(MouseEvent arg0) {
eventCloseAllowed = true;
if(selectedItem != null) {
if(_folder instanceof CTabFolder)
((CTabFolder) _folder).setSelection((CTabItem)selectedItem);
}
}
});
}
else {
TabFolder tabFolder = (TabFolder) folder;
tabItem = new TabItem(tabFolder, SWT.NULL,
(_view instanceof MyTorrentsSuperView) ? 0 : tabFolder.getItemCount());
}
Listener activateListener = new Listener() {
public void handleEvent(Event event) {
IView view = null;
Composite parent = (Composite)event.widget;
IView oldView = getView(selectedItem);
if (oldView instanceof IViewExtension) {
((IViewExtension)oldView).viewDeactivated();
}
while (parent != null && !parent.isDisposed() && view == null) {
if (parent instanceof CTabFolder) {
CTabFolder folder = (CTabFolder)parent;
selectedItem = folder.getSelection();
view = getView(selectedItem);
} else if (parent instanceof TabFolder) {
TabFolder folder = (TabFolder)parent;
TabItem[] selection = folder.getSelection();
if (selection.length > 0) {
selectedItem = selection[0];
view = getView(selectedItem);
}
}
if (view == null)
parent = parent.getParent();
}
if (view != null) {
if (view instanceof IViewExtension) {
((IViewExtension)view).viewActivated();
}
view.refresh();
}
}
};
tabs.put(tabItem, view);
try {
// Always create a composite around the IView, because a lot of them
// assume that their parent is of GridLayout layout.
final Composite tabArea = new Composite(folder, SWT.NONE);
GridLayout layout = new GridLayout();
layout.marginHeight = 0;
layout.marginWidth = 0;
tabArea.setLayout(layout);
_view.initialize(tabArea);
tabItem.setText(escapeAccelerators(view.getShortTitle()));
Composite viewComposite = _view.getComposite();
if (viewComposite != null && !viewComposite.isDisposed()) {
viewComposite.addListener(SWT.Activate, activateListener);
// make sure the view's layout data is of GridLayoutData
if ((tabArea.getLayout() instanceof GridLayout)
&& !(viewComposite.getLayoutData() instanceof GridData)) {
viewComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
}
if (viewComposite != tabArea) {
viewComposite.addDisposeListener(new DisposeListener() {
public void widgetDisposed(DisposeEvent e) {
Utils.disposeComposite(tabArea);
}
});
}
}
if (useCustomTab) {
((CTabItem) tabItem).setControl(tabArea);
// Disabled for SWT 3.2RC5.. CTabItem tooltip doesn't always disappear
// ((CTabItem) tabItem).setToolTipText(view.getFullTitle());
if (bFocus)
((CTabFolder) folder).setSelection((CTabItem) tabItem);
} else {
((TabItem) tabItem).setControl(tabArea);
((TabItem) tabItem).setToolTipText(view.getFullTitle());
TabItem items[] = { (TabItem) tabItem };
if (bFocus)
((TabFolder) folder).setSelection(items);
}
} catch (Exception e) {
tabs.remove(tabItem);
Debug.printStackTrace(e);
}
if (bFocus) {
mainwindow.refreshIconBar();
selectedItem = tabItem;
}
// events
notifyListeners(tabAddListeners, tabItem);
tabItem.addDisposeListener(new DisposeListener() {
public void widgetDisposed(DisposeEvent event) {
notifyListeners(tabRemoveListeners, tabItem);
}
});
// System.out.println("selected: "+selectedItem.getText());
}
//public static IView getView(TabItem item) {
//public static IView getView(CTabItem item) {
public static IView getView(Item item) {
return (IView) tabs.get(item);
}
public IView
getView()
{
return( view );
}
public static Item
getTab(
IView view )
{
try{
class_mon.enter();
Iterator iter = tabs.keySet().iterator();
while( iter.hasNext()){
Item item = (Item) iter.next();
IView this_view = (IView) tabs.get(item);
if ( this_view == view ){
return( item );
}
}
return( null );
}finally{
class_mon.exit();
}
}
public static Item[] getAllTabs() {
try {
class_mon.enter();
Item[] tabItems = new Item[tabs.size()];
if (tabItems.length > 0) {
tabItems = (Item[]) tabs.keySet().toArray(tabItems);
}
return tabItems;
} finally {
class_mon.exit();
}
}
public static IView[] getAllViews() {
try {
class_mon.enter();
IView[] views = new IView[tabs.size()];
if (views.length > 0) {
views = (IView[])tabs.values().toArray(views);
}
return views;
} finally {
class_mon.exit();
}
}
public static void refresh() {
try{
class_mon.enter();
Iterator iter = tabs.keySet().iterator();
while (iter.hasNext()) {
//TabItem item = (TabItem) iter.next();
//CTabItem item = (CTabItem) iter.next();
Item item = (Item) iter.next();
IView view = (IView) tabs.get(item);
try {
if (item.isDisposed())
continue;
String lastTitle = item.getText();
String newTitle = view.getShortTitle();
if (lastTitle == null || !lastTitle.equals(newTitle)) {
item.setText(escapeAccelerators(newTitle));
}
if (item instanceof CTabItem) {
// Disabled for SWT 3.2RC5.. CTabItem tooltip doesn't always disappear
// String lastToolTip = ((CTabItem) item).getToolTipText();
// String newToolTip = view.getFullTitle();
// if (lastToolTip == null || !lastToolTip.equals(newToolTip)) {
// ((CTabItem) item).setToolTipText(newToolTip);
// }
}
else if (item instanceof TabItem) {
String lastToolTip = ((TabItem) item).getToolTipText();
String newToolTip = view.getFullTitle() + " " +
MessageText.getString("Tab.closeHint");
if (lastToolTip == null || !lastToolTip.equals(newToolTip)) {
((TabItem) item).setToolTipText(newToolTip);
}
}
}
catch (Exception e){
Debug.printStackTrace(e);
}
}
}finally{
class_mon.exit();
}
}
public static void
updateLanguage()
{
IView[] views;
try{
class_mon.enter();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -