Package wicketforge.facet

Source Code of wicketforge.facet.WicketFacetEditorTab$AdditionalPathListCellRenderer

/*
* Copyright 2013 The WicketForge-Team
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package wicketforge.facet;

import com.intellij.facet.ui.FacetEditorContext;
import com.intellij.facet.ui.FacetEditorTab;
import com.intellij.openapi.actionSystem.ActionToolbarPosition;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.fileChooser.FileChooser;
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.pointers.VirtualFilePointer;
import com.intellij.openapi.vfs.pointers.VirtualFilePointerManager;
import com.intellij.ui.*;
import com.intellij.ui.components.JBList;
import com.intellij.util.PlatformIcons;
import com.intellij.util.SmartList;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.List;

/**
* WicketFacetEditorTab
*/
class WicketFacetEditorTab extends FacetEditorTab {
    private AdditionalPathPanel additionalPathPanel;

    public WicketFacetEditorTab(@NotNull FacetEditorContext editorContext) {
        super();
        this.additionalPathPanel = new AdditionalPathPanel(editorContext);
    }

    @Override
    public void reset() {
        additionalPathPanel.reset();
    }

    @Override
    public boolean isModified() {
        return additionalPathPanel.isModified();
    }

    @Override
    public void apply() throws ConfigurationException {
        additionalPathPanel.apply();
        ApplicationManager.getApplication().getMessageBus().syncPublisher(WicketForgeFacetConfiguration.ADDITIONAL_PATHS_CHANGED).run();
    }

    @Override
    public JComponent createComponent() {
        return additionalPathPanel;
    }

    @Override
    public void disposeUIResources() {
        additionalPathPanel = null;
    }

    @Override
    @Nls
    public String getDisplayName() {
        return "Wicket";
    }

    /**
     *
     */
    private static class AdditionalPathPanel extends JPanel {
        private final FacetEditorContext editorContext;
        private final WicketForgeFacet wicketForgeFacet;
        private DefaultListModel additionalPathModel = new DefaultListModel(); // List of VirtualFilePointer

        public AdditionalPathPanel(@NotNull FacetEditorContext editorContext) {
            super(new BorderLayout());
            this.editorContext = editorContext;
            this.wicketForgeFacet = (WicketForgeFacet) editorContext.getFacet();

            reset(); // fill current items into model

            final JBList listComponent = new JBList(additionalPathModel);
            listComponent.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
            listComponent.setCellRenderer(new AdditionalPathListCellRenderer());
            listComponent.getEmptyText().setText("No additional paths defined");
            listComponent.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    if (e.getClickCount() == 2) {
                        doEdit(listComponent.getSelectedIndex());
                    }
                }
            });
            JPanel panel = ToolbarDecorator.createDecorator(listComponent)
                    .setAddAction(new AnActionButtonRunnable() {
                        @Override
                        public void run(AnActionButton button) {
                            doEdit(-1);
                        }
                    }).setEditAction(new AnActionButtonRunnable() {
                        @Override
                        public void run(AnActionButton button) {
                            doEdit(listComponent.getSelectedIndex());
                        }
                    }).setRemoveAction(new AnActionButtonRunnable() {
                        @Override
                        public void run(AnActionButton button) {
                            ListUtil.removeSelectedItems(listComponent);
                        }
                    }).setToolbarPosition(ActionToolbarPosition.TOP).createPanel();
            UIUtil.addBorder(panel, IdeBorderFactory.createTitledBorder("Additional Resource Search Path", false));
            add(panel, BorderLayout.CENTER);
        }

        public void reset() {
            additionalPathModel.clear();
            for (VirtualFilePointer filePointer : wicketForgeFacet.getResourcePaths()) {
                additionalPathModel.addElement(filePointer);
            }
        }

        public boolean isModified() {
            List<VirtualFilePointer> originalList = wicketForgeFacet.getResourcePaths();
            if (originalList.size() != additionalPathModel.size()) {
                return true;
            }
            for (int i = 0, originalListSize = originalList.size(); i < originalListSize; i++) {
                if (!originalList.get(i).equals(additionalPathModel.get(i))) {
                    return true;
                }
            }
            return false;
        }

        public void apply() {
            List<VirtualFilePointer> list = new SmartList<VirtualFilePointer>();
            for (int i = 0, n = additionalPathModel.size(); i < n; i++) {
                list.add((VirtualFilePointer) additionalPathModel.get(i));
            }
            wicketForgeFacet.setResourcePaths(list);
        }

        private void doEdit(int index) {
            FileChooserDescriptor fileChooserDescriptor = new FileChooserDescriptor(false, true, false, false, false, false);
            fileChooserDescriptor.setHideIgnored(false);
            VirtualFile virtualFile = FileChooser.chooseFile(fileChooserDescriptor, editorContext.getProject(), index >= 0 ? ((VirtualFilePointer) additionalPathModel.get(index)).getFile() : null);
            if (virtualFile != null) {
                VirtualFilePointer filePointer = VirtualFilePointerManager.getInstance().create(virtualFile, wicketForgeFacet.getModule(), null);
                if (index >= 0) {
                    additionalPathModel.set(index, filePointer);
                } else {
                    additionalPathModel.addElement(filePointer);
                }
            }
        }
    }

    private static class AdditionalPathListCellRenderer extends ColoredListCellRenderer {
        @Override
        protected void customizeCellRenderer(JList list, Object value, int index, boolean selected, boolean hasFocus) {
            if (value instanceof VirtualFilePointer) {
                VirtualFilePointer filePointer = (VirtualFilePointer) value;
                setIcon(PlatformIcons.DIRECTORY_CLOSED_ICON);
                append(filePointer.getPresentableUrl(), filePointer.isValid() ? SimpleTextAttributes.REGULAR_ATTRIBUTES : SimpleTextAttributes.ERROR_ATTRIBUTES, null);
            }
        }
    }
}
TOP

Related Classes of wicketforge.facet.WicketFacetEditorTab$AdditionalPathListCellRenderer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.