configview.java
来自「Azureus is a powerful, full-featured, cr」· Java 代码 · 共 746 行 · 第 1/2 页
JAVA
746 行
/*
* Created on 2 juil. 2003
*
*/
package org.gudy.azureus2.ui.swt.views;
import java.io.File;
import java.util.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.program.Program;
import org.eclipse.swt.custom.StackLayout;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.gudy.azureus2.core3.config.COConfigurationManager;
import org.gudy.azureus2.core3.internat.*;
import org.gudy.azureus2.core3.util.*;
import org.gudy.azureus2.plugins.ui.config.Parameter;
import org.gudy.azureus2.plugins.ui.config.ConfigSection;
import org.gudy.azureus2.plugins.ui.config.ConfigSectionSWT;
import org.gudy.azureus2.pluginsimpl.local.ui.config.ConfigSectionRepository;
import org.gudy.azureus2.pluginsimpl.local.ui.config.ParameterRepository;
import org.gudy.azureus2.ui.swt.Messages;
import org.gudy.azureus2.ui.swt.Utils;
import org.gudy.azureus2.ui.swt.config.*;
import org.gudy.azureus2.ui.swt.config.plugins.PluginParameter;
import org.gudy.azureus2.plugins.PluginInterface;
import org.gudy.azureus2.core3.logging.LGLogger;
import org.gudy.azureus2.ui.swt.mainwindow.Colors;
import org.gudy.azureus2.ui.swt.mainwindow.Cursors;
import org.gudy.azureus2.ui.swt.mainwindow.MainWindow;
import org.gudy.azureus2.ui.swt.views.configsections.*;
import com.aelitis.azureus.core.*;
/**
* @author Olivier
*
*/
public class ConfigView extends AbstractIView {
private static final String sSectionPrefix = "ConfigView.section.";
/*
public static final int upRates[] =
{
0,
5,6,7,8,9,10,
11,12,13,14,15,16,17,18,19,20,
21,22,23,24,25,26,27,28,29,30,
31,32,33,34,35,36,37,38,39,40,
41,42,43,44,45,46,47,48,49,50,
55,60,65,70,75,80,85,90,95,100,
110,120,130,140,150,160,170,180,190,200,
210,220,230,240,250,
275,300,325,350,375,400,425,450,475,500,
550,600,650,700,750,
800,900,1000,1100,1200,1300,1400,1500,
1750,2000,2250,2500,2750,3000,
3500,4000,4500,5000 };
*/
AzureusCore azureus_core;
Composite cConfig;
Composite cConfigSection;
StackLayout layoutConfigSection;
Label lHeader;
Font headerFont;
Tree tree;
TreeItem treePlugins;
ArrayList pluginSections;
public
ConfigView(
AzureusCore _azureus_core )
{
azureus_core = _azureus_core;
}
/* (non-Javadoc)
* @see org.gudy.azureus2.ui.swt.IView#initialize(org.eclipse.swt.widgets.Composite)
*/
public void initialize(Composite composite) {
GridData gridData;
/*
/--cConfig-------------------------------------------------------\
| ###SashForm#form############################################## |
| # /--tree--\ /--cRightSide---------------------------------\ # |
| # | | | ***cHeader********************************* | # |
| # | | | * lHeader * | # |
| # | | | ******************************************* | # |
| # | | | ###Composite cConfigSection################ | # |
| # | | | # # | # |
| # | | | # # | # |
| # | | | # # | # |
| # | | | # # | # |
| # | | | ########################################### | # |
| # \--------/ \---------------------------------------------/ # |
| ############################################################## |
| [Button] |
\----------------------------------------------------------------/
*/
try {
cConfig = new Composite(composite, SWT.NONE);
GridLayout configLayout = new GridLayout();
configLayout.marginHeight = 0;
configLayout.marginWidth = 0;
cConfig.setLayout(configLayout);
gridData = new GridData(GridData.FILL_BOTH);
cConfig.setLayoutData(gridData);
SashForm form = new SashForm(cConfig,SWT.HORIZONTAL);
gridData = new GridData(GridData.FILL_BOTH);
form.setLayoutData(gridData);
tree = new Tree(form, SWT.BORDER);
tree.setLayout(new FillLayout());
Composite cRightSide = new Composite(form, SWT.NULL);
configLayout = new GridLayout();
configLayout.marginHeight = 3;
configLayout.marginWidth = 0;
cRightSide.setLayout(configLayout);
// Header
Composite cHeader = new Composite(cRightSide, SWT.BORDER);
configLayout = new GridLayout();
configLayout.marginHeight = 3;
configLayout.marginWidth = 0;
cHeader.setLayout(configLayout);
gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_CENTER);
cHeader.setLayoutData(gridData);
Display d = cRightSide.getDisplay();
cHeader.setBackground(d.getSystemColor(SWT.COLOR_LIST_SELECTION));
cHeader.setForeground(d.getSystemColor(SWT.COLOR_LIST_SELECTION_TEXT));
lHeader = new Label(cHeader, SWT.NULL);
lHeader.setBackground(d.getSystemColor(SWT.COLOR_LIST_SELECTION));
lHeader.setForeground(d.getSystemColor(SWT.COLOR_LIST_SELECTION_TEXT));
FontData[] fontData = lHeader.getFont().getFontData();
fontData[0].setStyle(SWT.BOLD);
int fontHeight = (int)(fontData[0].getHeight() * 1.2);
fontData[0].setHeight(fontHeight);
headerFont = new Font(d, fontData);
lHeader.setFont(headerFont);
gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_CENTER);
lHeader.setLayoutData(gridData);
// Config Section
cConfigSection = new Composite(cRightSide, SWT.NULL);
layoutConfigSection = new StackLayout();
cConfigSection.setLayout(layoutConfigSection);
gridData = new GridData(GridData.FILL_BOTH);
cConfigSection.setLayoutData(gridData);
form.setWeights(new int[] {20,80});
tree.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
Tree tree = (Tree)e.getSource();
//Check that at least an item is selected
//OSX lets you select nothing in the tree for example when a child is selected
//and you close its parent.
if(tree.getSelection().length > 0)
showSection(tree.getSelection()[0]);
}
});
// Double click = expand/contract branch
tree.addListener(SWT.DefaultSelection, new Listener() {
public void handleEvent(Event e) {
TreeItem item = (TreeItem)e.item;
if (item != null)
item.setExpanded(!item.getExpanded());
}
});
} catch (Exception e) {
LGLogger.log(LGLogger.ERROR, "Error initializing ConfigView");
Debug.printStackTrace( e );
}
// Add sections
/** How to add a new section
* 1) Create a new implementation of ConfigSectionSWT in a new file
* (Use the ConfigSectionTMP.java as a template if it's still around)
* 2) import it into here
* 3) add it to the internal sections list
*/
pluginSections = ConfigSectionRepository.getInstance().getList();
ConfigSection[] internalSections = { new ConfigSectionConnection(),
new ConfigSectionTransfer(),
new ConfigSectionFile(),
new ConfigSectionFileTorrents(),
new ConfigSectionFilePerformance(),
new ConfigSectionInterface(),
new ConfigSectionInterfaceLanguage(),
new ConfigSectionInterfaceStart(),
new ConfigSectionInterfaceDisplay(),
new ConfigSectionIPFilter(azureus_core),
new ConfigSectionStats(),
new ConfigSectionTracker(azureus_core),
new ConfigSectionTrackerClient(),
new ConfigSectionTrackerServer(azureus_core),
new ConfigSectionSecurity(),
new ConfigSectionSharing(),
new ConfigSectionLogging()
};
pluginSections.addAll(0, Arrays.asList(internalSections));
for (int i = 0; i < pluginSections.size(); i++) {
// slip the non-standard "plugins" initialisation inbetween the internal ones
// and the plugin ones so plugin ones can be children of it
boolean plugin_section = i >= internalSections.length;
if ( i == internalSections.length ){
// for now, init plugins seperately
try {
initGroupPlugins();
} catch (Exception e) {
LGLogger.log(LGLogger.ERROR, "Error initializing ConfigView.Plugins");
Debug.printStackTrace( e );
}
}
ConfigSection section = (ConfigSection)pluginSections.get(i);
if (section instanceof ConfigSectionSWT) {
String name;
try {
name = section.configSectionGetName();
} catch (Exception e) {
LGLogger.log(LGLogger.ERROR, "A ConfigSection plugin caused an error while trying to call its configSectionGetName function");
name = "Bad Plugin";
Debug.printStackTrace( e );
}
try {
TreeItem treeItem = null;
String location = section.configSectionGetParentSection();
if (location.equalsIgnoreCase(ConfigSection.SECTION_ROOT))
treeItem = new TreeItem(tree, SWT.NULL);
else if (location != "") {
TreeItem treeItemFound = findTreeItem(tree, location);
if (treeItemFound != null)
treeItem = new TreeItem(treeItemFound, SWT.NULL);
}
if (treeItem == null)
treeItem = new TreeItem(treePlugins, SWT.NULL);
ScrolledComposite sc = new ScrolledComposite(cConfigSection, SWT.H_SCROLL | SWT.V_SCROLL);
sc.setExpandHorizontal(true);
sc.setExpandVertical(true);
sc.setLayoutData(new GridData(GridData.FILL_BOTH));
//Composite c = ((ConfigSectionSWT)section).configSectionCreate(sc);
String section_key = name;
if ( plugin_section ){
// if resource exists without prefix then use it as plugins don't
// need to start with the prefix
if ( !MessageText.keyExists(section_key)){
section_key = sSectionPrefix + name;
}
}else{
section_key = sSectionPrefix + name;
}
Messages.setLanguageText(treeItem, section_key);
treeItem.setData("Panel", sc);
treeItem.setData("ID", name);
treeItem.setData("ConfigSectionSWT", section);
//sc.setContent(c);
} catch (Exception e) {
LGLogger.log(LGLogger.ERROR, "ConfigSection plugin '" + name + "' caused an error");
Debug.printStackTrace( e );
}
}
}
initSaveButton();
TreeItem[] items = { tree.getItems()[0] };
tree.setSelection(items);
// setSelection doesn't trigger a SelectionListener, so..
showSection(items[0]);
}
private void showSection(TreeItem section) {
ScrolledComposite item = (ScrolledComposite)section.getData("Panel");
if (item != null) {
ConfigSectionSWT configSection = (ConfigSectionSWT)section.getData("ConfigSectionSWT");
if (configSection != null) {
Composite c = ((ConfigSectionSWT)configSection).configSectionCreate(item);
item.setContent(c);
c.layout();
section.setData("ConfigSectionSWT", null);
}
layoutConfigSection.topControl = item;
ScrolledComposite sc = (ScrolledComposite)item;
Composite c = (Composite)sc.getContent();
sc.setMinSize(c.computeSize(SWT.DEFAULT, SWT.DEFAULT));
cConfigSection.layout();
updateHeader(section);
}
}
private void updateHeader(TreeItem section) {
if (section == null)
return;
String sHeader = section.getText();
section = section.getParentItem();
while (section != null) {
sHeader = section.getText() + " : " + sHeader;
section = section.getParentItem();
}
lHeader.setText(" " + sHeader);
}
private Composite createConfigSection(String sNameID) {
return createConfigSection(null, sNameID, -1, true);
}
private Composite createConfigSection(String sNameID, int position) {
return createConfigSection(null, sNameID, position, true);
}
private Composite createConfigSection(TreeItem treeItemParent,
String sNameID,
int position,
boolean bPrefix) {
ScrolledComposite sc = new ScrolledComposite(cConfigSection, SWT.H_SCROLL | SWT.V_SCROLL);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?