/*
 * Copyright 2000-2013 JetBrains s.r.o.
 *
 * 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 icons;

import com.intellij.openapi.util.IconLoader;

import javax.swing.*;

/**
 * NOTE THIS FILE IS AUTO-GENERATED
 * DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead
 */
public class UIDesignerIcons {
  private static Icon load(String path) {
    return IconLoader.getIcon(path, UIDesignerIcons.class);
  }

  
  @SuppressWarnings("unused")
  public static final Icon Button = load("/com/intellij/uiDesigner/icons/button.png"); // 16x16
  public static final Icon ButtonGroup = load("/com/intellij/uiDesigner/icons/buttonGroup.png"); // 16x16
  
  @SuppressWarnings("unused")
  public static final Icon CheckBox = load("/com/intellij/uiDesigner/icons/checkBox.png"); // 16x16
  public static final Icon ChooseLocale = load("/com/intellij/uiDesigner/icons/chooseLocale.png"); // 16x16
  public static final Icon CollapseNode = load("/com/intellij/uiDesigner/icons/collapseNode.png"); // 9x9
  
  @SuppressWarnings("unused")
  public static final Icon ComboBox = load("/com/intellij/uiDesigner/icons/comboBox.png"); // 16x16
  public static final Icon DataBindingWizard = load("/com/intellij/uiDesigner/icons/dataBindingWizard.png"); // 16x16
  public static final Icon DeleteCell = load("/com/intellij/uiDesigner/icons/deleteCell.png"); // 7x7
  public static final Icon Drag = load("/com/intellij/uiDesigner/icons/drag.png"); // 11x11
  
  @SuppressWarnings("unused")
  public static final Icon EditorPane = load("/com/intellij/uiDesigner/icons/editorPane.png"); // 16x16
  public static final Icon Empty = load("/com/intellij/uiDesigner/icons/empty.png"); // 16x16
  public static final Icon ExpandNode = load("/com/intellij/uiDesigner/icons/expandNode.png"); // 9x9
  
  @SuppressWarnings("unused")
  public static final Icon FormattedTextField = load("/com/intellij/uiDesigner/icons/formattedTextField.png"); // 16x16
  
  @SuppressWarnings("unused")
  public static final Icon Hspacer = load("/com/intellij/uiDesigner/icons/hspacer.png"); // 16x16
  public static final Icon InsertColumnLeft = load("/com/intellij/uiDesigner/icons/insertColumnLeft.png"); // 7x7
  public static final Icon InsertColumnRight = load("/com/intellij/uiDesigner/icons/insertColumnRight.png"); // 7x7
  public static final Icon InsertRowAbove = load("/com/intellij/uiDesigner/icons/insertRowAbove.png"); // 7x7
  public static final Icon InsertRowBelow = load("/com/intellij/uiDesigner/icons/insertRowBelow.png"); // 7x7
  public static final Icon InspectionSuppression = load("/com/intellij/uiDesigner/icons/inspectionSuppression.png"); // 16x16
  
  @SuppressWarnings("unused")
  public static final Icon Label = load("/com/intellij/uiDesigner/icons/label.png"); // 16x16
  
  @SuppressWarnings("unused")
  public static final Icon List = load("/com/intellij/uiDesigner/icons/list.png"); // 16x16
  public static final Icon Listener = load("/com/intellij/uiDesigner/icons/listener.png"); // 16x16
  
  @SuppressWarnings("unused")
  public static final Icon Panel = load("/com/intellij/uiDesigner/icons/panel.png"); // 16x16
  
  @SuppressWarnings("unused")
  public static final Icon PasswordField = load("/com/intellij/uiDesigner/icons/passwordField.png"); // 16x16
  
  @SuppressWarnings("unused")
  public static final Icon Progressbar = load("/com/intellij/uiDesigner/icons/progressbar.png"); // 16x16
  
  @SuppressWarnings("unused")
  public static final Icon RadioButton = load("/com/intellij/uiDesigner/icons/radioButton.png"); // 16x16
  
  @SuppressWarnings("unused")
  public static final Icon Scrollbar = load("/com/intellij/uiDesigner/icons/scrollbar.png"); // 16x16
  
  @SuppressWarnings("unused")
  public static final Icon ScrollPane = load("/com/intellij/uiDesigner/icons/scrollPane.png"); // 16x16
  
  @SuppressWarnings("unused")
  public static final Icon Separator = load("/com/intellij/uiDesigner/icons/separator.png"); // 16x16
  
  @SuppressWarnings("unused")
  public static final Icon Slider = load("/com/intellij/uiDesigner/icons/slider.png"); // 16x16
  
  @SuppressWarnings("unused")
  public static final Icon Spinner = load("/com/intellij/uiDesigner/icons/spinner.png"); // 16x16
  public static final Icon SplitColumn = load("/com/intellij/uiDesigner/icons/splitColumn.png"); // 7x7
  
  @SuppressWarnings("unused")
  public static final Icon SplitPane = load("/com/intellij/uiDesigner/icons/splitPane.png"); // 16x16
  public static final Icon SplitRow = load("/com/intellij/uiDesigner/icons/splitRow.png"); // 7x7
  
  @SuppressWarnings("unused")
  public static final Icon TabbedPane = load("/com/intellij/uiDesigner/icons/tabbedPane.png"); // 16x16
  
  @SuppressWarnings("unused")
  public static final Icon Table = load("/com/intellij/uiDesigner/icons/table.png"); // 16x16
  
  @SuppressWarnings("unused")
  public static final Icon TextArea = load("/com/intellij/uiDesigner/icons/textArea.png"); // 16x16
  
  @SuppressWarnings("unused")
  public static final Icon TextField = load("/com/intellij/uiDesigner/icons/textField.png"); // 16x16
  
  @SuppressWarnings("unused")
  public static final Icon TextPane = load("/com/intellij/uiDesigner/icons/textPane.png"); // 16x16
  
  @SuppressWarnings("unused")
  public static final Icon Toolbar = load("/com/intellij/uiDesigner/icons/toolbar.png"); // 16x16
  
  @SuppressWarnings("unused")
  public static final Icon ToolbarSeparator = load("/com/intellij/uiDesigner/icons/toolbarSeparator.png"); // 16x16
  public static final Icon ToolWindowUIDesigner = load("/com/intellij/uiDesigner/icons/toolWindowUIDesigner.png"); // 13x13
  
  @SuppressWarnings("unused")
  public static final Icon Tree = load("/com/intellij/uiDesigner/icons/tree.png"); // 16x16
  public static final Icon Unknown_small = load("/com/intellij/uiDesigner/icons/unknown-small.png"); // 16x16
  public static final Icon Unknown = load("/com/intellij/uiDesigner/icons/unknown.png"); // 16x16
  
  @SuppressWarnings("unused")
  public static final Icon Vspacer = load("/com/intellij/uiDesigner/icons/vspacer.png"); // 16x16
}
