⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pythonabstractpathpage.java

📁 Python Development Environment (Python IDE plugin for Eclipse). Features editor, code completion, re
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*
 * Created on Jan 17, 2006
 */
package org.python.pydev.ui.wizards.files;

import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.dialogs.ElementListSelectionDialog;
import org.eclipse.ui.model.WorkbenchLabelProvider;
import org.python.pydev.core.IPythonPathNature;
import org.python.pydev.plugin.PydevPlugin;
import org.python.pydev.plugin.nature.PythonNature;
import org.python.pydev.ui.dialogs.PythonPackageSelectionDialog;
import org.python.pydev.ui.dialogs.SourceFolder;

/**
 * The default creation page may be found at org.eclipse.ui.dialogs.WizardNewFileCreationPage
 */
public abstract class PythonAbstractPathPage extends WizardPage implements KeyListener{

    private IStructuredSelection selection;
    private Text textSourceFolder;
    private Button btBrowseSourceFolder;
    private Text textPackage;
    private Button btBrowsePackage;
    private Text textName;
    private String initialTextName = "";
    /**
     * It is not null only when the source folder was correctly validated
     */
    private IContainer validatedSourceFolder;
    /**
     * It is not null only when the package was correctly validated
     */
    private IContainer validatedPackage;
    /**
     * This is the project
     */
    private IProject validatedProject;
    /**
     * It is not null only when the name was correctly validated
     */
    private String validatedName;
    private Text textProject;
    private Button btBrowseProject;
    
    public IContainer getValidatedSourceFolder(){
        return validatedSourceFolder;
    }
    public IContainer getValidatedPackage(){
        return validatedPackage;
    }
    public String getValidatedName(){
        return validatedName;
    }
    public IProject getValidatedProject(){
        return validatedProject;
    }

    protected PythonAbstractPathPage(String pageName, IStructuredSelection selection) {
        super(pageName);
        setPageComplete(false);
        this.selection = selection;
    }

    private Text lastWithFocus;
    protected String lastWithFocusStr;
    private void setFocusOn(Text txt, String string) {
        if(txt != null){
            //System.out.println("seting focus on:"+string);
            txt.setFocus();
            lastWithFocus = txt;
            lastWithFocusStr = string;
        }
    }
    public void resetFocusOnLast(){
        if(lastWithFocus != null){
            //System.out.println("reseting focus on:"+lastWithFocusStr);
            lastWithFocus.setFocus();
        }
    }
    
    @Override
    public void setVisible(boolean visible) {
        super.setVisible(visible);
        if(visible == true){
            resetFocusOnLast();
        }
    }

    public void createControl(Composite parent) {
        // top level group
        Composite topLevel = new Composite(parent, SWT.NONE);
        GridLayout gridLayout = new GridLayout();
        gridLayout.numColumns = 3;
        topLevel.setLayout(gridLayout);
        topLevel.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL));
        topLevel.setFont(parent.getFont());
        
        boolean previousFilled = true;
        //create either source folder
        if(shouldCreateSourceFolderSelect()){
            previousFilled = createSourceFolderSelect(topLevel);
        }else{
            //or the project selection
            previousFilled = createProjectSelect(topLevel);
        }
        
        //always call the package create (but not always will it create
        if(shouldCreatePackageSelect()){
            previousFilled = createPackageSelect(topLevel, previousFilled);
        }else{
            createPackageSelect(topLevel, previousFilled);
        }

        //always create the name
        createNameSelect(topLevel, previousFilled);
        
        // Show description on opening
        setErrorMessage(null);
        setMessage(null);
        setControl(topLevel);
    }
    protected boolean shouldCreateSourceFolderSelect() {
        return true;
    }
    protected abstract boolean shouldCreatePackageSelect() ;

    
    /**
     * @param topLevel
     */
    private void createNameSelect(Composite topLevel, boolean setFocus) {
        Label label;
        label = new Label(topLevel, SWT.NONE);
        label.setText("Name");
        textName = new Text(topLevel, SWT.BORDER);
        textName.addKeyListener(this);
        setLayout(label, textName, null);
        if(initialTextName != null){
            textName.setText(initialTextName);
        }
        if(setFocus){
            setFocusOn(textName, "name");
            textName.setSelection(textName.getText().length());
        }
    }


    private boolean createProjectSelect(Composite topLevel) {
        Label label;
        label = new Label(topLevel, SWT.NONE);
        label.setText("Project");
        textProject = new Text(topLevel, SWT.BORDER);
        textProject.addKeyListener(this);
        btBrowseProject = new Button(topLevel, SWT.NONE);
        setLayout(label, textProject, btBrowseProject);
        setFocusOn(textProject, "project");

        btBrowseProject.addSelectionListener(new SelectionListener(){

            public void widgetSelected(SelectionEvent e) {
                ElementListSelectionDialog dialog = new ElementListSelectionDialog(getShell(), new WorkbenchLabelProvider());
                dialog.setTitle("Project selection");
                dialog.setTitle("Select a project.");
                dialog.setElements(ResourcesPlugin.getWorkspace().getRoot().getProjects());
                dialog.open();
                
                Object[] result = dialog.getResult();
                if(result != null && result.length > 0){
                    textProject.setText(((IProject)result[0]).getName());
                }
            }

            public void widgetDefaultSelected(SelectionEvent e) {
            }
            
        });
        
        Object element = selection.getFirstElement();
        
        if (element instanceof IAdaptable) {
            IAdaptable adaptable = (IAdaptable) element;
            element = adaptable.getAdapter(IResource.class);
        }
        
        if (element instanceof IResource) {
            IResource f = (IResource) element;
            element = f.getProject();
        }
        
        if (element instanceof IProject) {
            textProject.setText(((IProject)element).getName());
            return true;
        }
            

        return false;
    }

    /**
     * @param topLevel
     * @return 
     */
    private boolean createPackageSelect(Composite topLevel, boolean setFocus) {
        if(shouldCreatePackageSelect()){
            Label label;
            label = new Label(topLevel, SWT.NONE);
            label.setText("Package");
            textPackage = new Text(topLevel, SWT.BORDER);
            textPackage.addKeyListener(this);
            btBrowsePackage = new Button(topLevel, SWT.NONE);
            setLayout(label, textPackage, btBrowsePackage);
    
            if(setFocus){
                setFocusOn(textPackage, "package");
            }
    
            btBrowsePackage.addSelectionListener(new SelectionListener(){
    
                public void widgetSelected(SelectionEvent e) {
                    try {
                        PythonPackageSelectionDialog dialog = new PythonPackageSelectionDialog(getShell(), false);
                        dialog.open();
                        Object firstResult = dialog.getFirstResult();
                        if(firstResult instanceof SourceFolder){ //it is the default package
                            SourceFolder f = (SourceFolder) firstResult;
                            textPackage.setText("");
                            textSourceFolder.setText(f.folder.getFullPath().toString());
                            
                        }
                        if(firstResult instanceof org.python.pydev.ui.dialogs.Package){
                            org.python.pydev.ui.dialogs.Package f = (org.python.pydev.ui.dialogs.Package) firstResult;
                            textPackage.setText(f.getPackageName());
                            textSourceFolder.setText(f.sourceFolder.folder.getFullPath().toString());
                        }
                    } catch (Exception e1) {
                        PydevPlugin.log(e1);
                    }
                    
                }
    
                public void widgetDefaultSelected(SelectionEvent e) {
                }
                
            });
        }
        
        Object element = selection.getFirstElement();
        
        try {
            if (element instanceof IAdaptable) {
                IAdaptable adaptable = (IAdaptable) element;
                element = adaptable.getAdapter(IFile.class);
                if(element == null){
                    element = adaptable.getAdapter(IFolder.class);
                }
            }

            if (element instanceof IFile) {
                IFile f = (IFile) element;
                element = f.getParent();
            }
            
            
            if (element instanceof IFolder) {
                IFolder f = (IFolder) element;
                String srcPath = getSrcFolderFromFolder(f);
                if(srcPath == null){
                    return false;
                }
                String complete = f.getFullPath().toString();
                if(complete.startsWith(srcPath)){
                    complete = complete.substring(srcPath.length()).replace('/', '.');
                    if(complete.startsWith(".")){
                        complete = complete.substring(1);
                    }
                    if(shouldCreatePackageSelect()){
                        textPackage.setText(complete);
                    }else{
                        initialTextName = complete;
                    }
                }
            }
            
        } catch (Exception e) {
            PydevPlugin.log(e);
        }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -