blob: d1da1929d91793e5a289ff15823723ff05cab00e [file] [log] [blame]
/*
* Copyright (C) 2015 The Android Open Source Project
*
* 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.android.tools.idea.run;
import com.intellij.icons.AllIcons;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.Presentation;
import com.intellij.openapi.actionSystem.impl.ActionButton;
import com.intellij.openapi.actionSystem.impl.PresentationFactory;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.util.Disposer;
import org.jetbrains.android.facet.AndroidFacet;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import static com.android.tools.idea.run.CloudConfiguration.Kind.SINGLE_DEVICE;
public class LaunchCloudDeviceDialog extends DialogWrapper {
private final Project myProject;
private JPanel myPanel;
private CloudConfigurationComboBox myCloudConfigurationCombo;
private ActionButton myCloudProjectIdUpdateButton;
private CloudProjectIdLabel myCloudProjectIdLabel;
private final CloudConfigurationProvider myCloudConfigurationProvider;
public LaunchCloudDeviceDialog(@NotNull AndroidFacet facet) {
super(facet.getModule().getProject(), true, IdeModalityType.PROJECT);
myProject = facet.getModule().getProject();
myCloudConfigurationProvider = CloudConfigurationProvider.getCloudConfigurationProvider();
setTitle("Launch Cloud Device");
init();
myCloudConfigurationCombo.getComboBox().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
updateOkButton();
}
});
myCloudProjectIdLabel.restoreChosenProjectId();
myCloudConfigurationCombo.setFacet(facet);
updateOkButton();
}
private void updateOkButton() {
getOKAction().setEnabled(isValidGoogleCloudSelection());
}
private boolean isValidGoogleCloudSelection() {
CloudConfiguration selection = (CloudConfiguration) myCloudConfigurationCombo.getComboBox().getSelectedItem();
return selection != null && selection.getDeviceConfigurationCount() > 0 && myCloudProjectIdLabel.isProjectSpecified();
}
public int getSelectedMatrixConfigurationId() {
CloudConfiguration selection = (CloudConfiguration) myCloudConfigurationCombo.getComboBox().getSelectedItem();
if (selection == null) {
return -1;
}
return selection.getId();
}
public String getChosenCloudProjectId() {
return myCloudProjectIdLabel.getText();
}
@Nullable
@Override
protected JComponent createCenterPanel() {
return myPanel;
}
private void createUIComponents() {
myCloudProjectIdLabel = new CloudProjectIdLabel(SINGLE_DEVICE);
AnAction action = new AnAction() {
@Override
public void actionPerformed(AnActionEvent e) {
if (myCloudConfigurationProvider == null) {
return;
}
String selectedProjectId =
myCloudConfigurationProvider.openCloudProjectConfigurationDialog(myProject, myCloudProjectIdLabel.getText());
if (selectedProjectId != null) {
myCloudProjectIdLabel.updateCloudProjectId(selectedProjectId);
updateOkButton();
}
}
@Override
public void update(AnActionEvent event) {
Presentation presentation = event.getPresentation();
presentation.setIcon(AllIcons.General.Settings);
}
};
myCloudProjectIdUpdateButton =
new ActionButton(action, new PresentationFactory().getPresentation(action), "MyPlace", new Dimension(25, 25));
myCloudConfigurationCombo = new CloudConfigurationComboBox(SINGLE_DEVICE);
Disposer.register(myDisposable, myCloudConfigurationCombo);
}
}