com.wefika.androidResourceResizer.ui.ResizeDialog.java Source code

Java tutorial

Introduction

Here is the source code for com.wefika.androidResourceResizer.ui.ResizeDialog.java

Source

/*
 * Copyright 2013 Bla olar
 *
 *    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 com.wefika.androidResourceResizer.ui;

import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.psi.PsiDirectory;
import com.intellij.psi.PsiFile;
import com.wefika.androidResourceResizer.Density;
import com.wefika.androidResourceResizer.manager.DirManager;
import com.wefika.androidResourceResizer.manager.ResourceManager;
import com.wefika.androidResourceResizer.renderer.CheckListRenderer;
import com.wefika.androidResourceResizer.widget.CheckListItem;

import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Arrays;

import javax.swing.BoxLayout;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListModel;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.ListSelectionModel;

/**
 * Created by blazsolar on 25/12/13.
 */
public class ResizeDialog extends DialogWrapper {

    private JPanel mContentPanel;
    private JList mImageList;
    private JComboBox mInDensity;
    private JPanel mOutDensityPanel;

    private DefaultListModel mModel;

    @NotNull
    private final AnActionEvent mEvent;

    @NotNull
    private final DirManager mDirManager;

    @Nullable
    private final ResourceManager mResourceManager;

    public ResizeDialog(@NotNull AnActionEvent event) {
        super(event.getProject());

        mEvent = event;
        mDirManager = new DirManager(mEvent);
        PsiDirectory dir = mDirManager.getResourceDirectory();
        if (dir != null) {
            mResourceManager = new ResourceManager(dir);
        } else {
            mResourceManager = null;
        }

        mModel = new DefaultListModel();
        mImageList.setModel(mModel);
        initList();
        initInDensity();
        initOutDensity();

        setTitle("Resize");
        init();

        setOKButtonText("Resize");

        setFiles();
    }

    private void initOutDensity() {
        Density[] densities = Density.values();

        boolean enabled = mDirManager != null;
        mOutDensityPanel.setLayout(new BoxLayout(mOutDensityPanel, BoxLayout.Y_AXIS));
        for (Density density : densities) {
            JCheckBox checkBox = new JCheckBox(density.toString(), true);
            checkBox.setEnabled(enabled);
            mOutDensityPanel.add(checkBox);
        }
    }

    private void initInDensity() {
        Density densities[] = Density.values();
        ComboBoxModel model = new DefaultComboBoxModel(densities);
        mInDensity.setModel(model);

        if (mResourceManager != null) {
            Density density = mResourceManager.getDirDensity();
            if (density != null) {
                int index = Arrays.binarySearch(densities, density);
                mInDensity.setSelectedIndex(index);
            }
        } else {
            mInDensity.setEnabled(false);
        }
    }

    @Nullable
    @Override
    protected JComponent createCenterPanel() {
        return mContentPanel;
    }

    private void initList() {
        mImageList.setCellRenderer(new CheckListRenderer());
        mImageList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
        mImageList.setVisibleRowCount(5);
        mImageList.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent mouseEvent) {
                selectItem(mouseEvent.getPoint());
            }
        });
    }

    private PsiFile[] getFiles() {
        DirManager dirManager = new DirManager(mEvent);
        PsiDirectory dir = dirManager.getResourceDirectory();
        if (dir != null) {
            ResourceManager rm = new ResourceManager(dir);
            return rm.getImageFiles();
        } else {
            return null;
        }
    }

    private void setFiles() {

        PsiFile[] files = getFiles();

        mModel.clear();
        if (files == null || files.length == 0) {
            setOKActionEnabled(false);
            // TODO do something when there is no files
        } else {
            for (PsiFile f : files) {
                mModel.addElement(new CheckListItem(f.getName()));
            }
        }

    }

    private void selectItem(Point point) {
        int index = mImageList.locationToIndex(point);

        if (index >= 0) {
            CheckListItem item = (CheckListItem) mImageList.getModel().getElementAt(index);
            item.setSelected(!item.isSelected());
            mImageList.repaint(mImageList.getCellBounds(index, index));
        }
    }
}