All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.intellij.ide.browsers.BrowserSelector Maven / Gradle / Ivy

Go to download

A packaging of the IntelliJ Community Edition xml library. This is release number 1 of trunk branch 142.

The newest version!
/*
 * Copyright 2000-2014 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 com.intellij.ide.browsers;

import com.intellij.openapi.options.ShowSettingsUtil;
import com.intellij.openapi.ui.ComboBox;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.IconLoader;
import com.intellij.ui.ComboboxWithBrowseButton;
import com.intellij.ui.ListCellRendererWrapper;
import com.intellij.ui.MutableCollectionComboBoxModel;
import com.intellij.util.PlatformIcons;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

public class BrowserSelector {
  private final ComboboxWithBrowseButton myBrowserComboWithBrowse;
  private MutableCollectionComboBoxModel myModel;

  public BrowserSelector() {
    this(true);
  }

  public BrowserSelector(final boolean allowDefaultBrowser) {
    this(new Condition() {
      @Override
      public boolean value(WebBrowser browser) {
        return allowDefaultBrowser || browser != null;
      }
    });
  }

  public BrowserSelector(@NotNull final Condition browserCondition) {
    myModel = createBrowsersComboModel(browserCondition);
    myBrowserComboWithBrowse = new ComboboxWithBrowseButton(new ComboBox(myModel));
    myBrowserComboWithBrowse.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        WebBrowserManager browserManager = WebBrowserManager.getInstance();
        long modificationCount = browserManager.getModificationCount();
        ShowSettingsUtil.getInstance().editConfigurable(myBrowserComboWithBrowse, new BrowserSettings());

        WebBrowser selectedItem = getSelected();
        if (modificationCount != browserManager.getModificationCount()) {
          myModel = createBrowsersComboModel(browserCondition);
          //noinspection unchecked
          myBrowserComboWithBrowse.getComboBox().setModel(myModel);
        }
        if (selectedItem != null) {
          setSelected(selectedItem);
        }
      }
    });

    //noinspection unchecked
    myBrowserComboWithBrowse.getComboBox().setRenderer(new ListCellRendererWrapper() {
      @Override
      public void customize(JList list,
                            WebBrowser value,
                            int index,
                            boolean selected,
                            boolean hasFocus) {
        Icon baseIcon;
        if (value == null) {
          WebBrowser firstBrowser = WebBrowserManager.getInstance().getFirstActiveBrowser();
          baseIcon = firstBrowser == null ? PlatformIcons.WEB_ICON : firstBrowser.getIcon();
        }
        else {
          baseIcon = value.getIcon();
        }
        setIcon(myBrowserComboWithBrowse.isEnabled() ? baseIcon : IconLoader.getDisabledIcon(baseIcon));
        setText(value != null ? value.getName() : "Default");
      }
    });
  }

  public JComponent getMainComponent() {
    return myBrowserComboWithBrowse;
  }

  private static MutableCollectionComboBoxModel createBrowsersComboModel(@NotNull Condition browserCondition) {
    List list = new ArrayList();
    if (browserCondition.value(null)) {
      list.add(null);
    }
    list.addAll(WebBrowserManager.getInstance().getBrowsers(browserCondition));
    return new MutableCollectionComboBoxModel(list);
  }

  @Nullable
  public WebBrowser getSelected() {
    return myModel.getSelected();
  }

  @Nullable
  public String getSelectedBrowserId() {
    WebBrowser browser = getSelected();
    return browser != null ? browser.getId().toString() : null;
  }

  public void setSelected(@Nullable WebBrowser selectedItem) {
    myBrowserComboWithBrowse.getComboBox().setSelectedItem(selectedItem);
  }

  public boolean addAndSelect(@NotNull WebBrowser browser) {
    if (myModel.contains(browser)) {
      return false;
    }

    myModel.addItem(browser);
    return true;
  }

  public int getSize() {
    return myModel.getSize();
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy