Java tutorial
/* * 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)); } } }