/* * Copyright (C) 2013 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.intellij.android.designer.model.layout.actions; import com.intellij.android.designer.model.RadViewComponent; import com.intellij.designer.designSurface.DesignerEditorPanel; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.Presentation; import com.intellij.psi.xml.XmlTag; import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.util.List; import static com.android.SdkConstants.*; public class ToggleSizeAction extends LayoutAction { private final List<? extends RadViewComponent> myComponents; private final String myAttribute; private final Icon myFillIcon; private final Icon myWrapIcon; public ToggleSizeAction(@NotNull DesignerEditorPanel designer, @NotNull List<? extends RadViewComponent> components, @NotNull String label, @NotNull String attribute, @NotNull Icon fillIcon, @NotNull Icon wrapIcon) { super(designer, label, null, null); myComponents = components; myAttribute = attribute; myFillIcon = fillIcon; myWrapIcon = wrapIcon; updateLabel(getTemplatePresentation(), isFill()); } private boolean isFill() { XmlTag tag = myComponents.get(0).getTag(); String value = tag.getAttributeValue(myAttribute, ANDROID_URI); return VALUE_MATCH_PARENT.equals(value) || VALUE_FILL_PARENT.equals(value); } private void updateLabel(Presentation presentation, boolean isFill) { // The icon shows what we're currently set to presentation.setIcon(isFill ? myFillIcon : myWrapIcon); // The label says what the action will do: String text = String.format("Set %1$s to %2$s", myAttribute, isFill ? VALUE_WRAP_CONTENT : VALUE_MATCH_PARENT); presentation.setDescription(text); } @Override public void actionPerformed(AnActionEvent e) { boolean isFill = isFill(); updateLabel(e.getPresentation(), !isFill); super.actionPerformed(e); } @Override protected void performWriteAction() { boolean isFill = isFill(); for (RadViewComponent component : myComponents) { XmlTag tag = component.getTag(); if (isFill) { tag.setAttribute(myAttribute, ANDROID_URI, VALUE_WRAP_CONTENT); } else { // TODO: Worry about using FILL_PARENT on older platforms? tag.setAttribute(myAttribute, ANDROID_URI, VALUE_MATCH_PARENT); } } } }