package jetbrains.mps.ide.make.actions;
/*Generated by MPS */
import com.intellij.openapi.wm.StatusBarWidget;
import com.intellij.openapi.wm.CustomStatusBarWidget;
import com.intellij.ide.ui.UISettingsListener;
import java.beans.PropertyChangeListener;
import org.jetbrains.annotations.NotNull;
import com.intellij.openapi.wm.StatusBar;
import javax.swing.Icon;
import jetbrains.mps.icons.MPSIcons;
import jetbrains.mps.generator.IModifiableGenerationSettings;
import java.awt.KeyboardFocusManager;
import jetbrains.mps.generator.GenerationSettingsProvider;
import com.intellij.ide.ui.UISettings;
import org.jetbrains.annotations.Nullable;
import com.intellij.util.Consumer;
import java.awt.event.MouseEvent;
import java.awt.Dimension;
import java.awt.Point;
import com.intellij.ui.awt.RelativePoint;
import javax.swing.JComponent;
import java.beans.PropertyChangeEvent;
/*package*/ class TransientModelsWidget implements StatusBarWidget, CustomStatusBarWidget, StatusBarWidget.TextPresentation, StatusBarWidget.WidgetPresentation, UISettingsListener, PropertyChangeListener {
public static final String WIDGET_ID = "TransientModelsWidget";
@NotNull
private final StatusBar myStatusBar;
private final Icon myIcon = MPSIcons.Nodes.TransientModule;
private final Icon myIconDisable = MPSIcons.Nodes.TransientModuleDisabled;
private final IModifiableGenerationSettings myGenerationSettins;
private TransientModelsPanel myComponent;
private KeyboardFocusManager myFocusManager;
public TransientModelsWidget(StatusBar bar) {
myStatusBar = bar;
myGenerationSettins = GenerationSettingsProvider.getInstance().getGenerationSettings();
}
@Override
public void install(@NotNull StatusBar bar) {
// Use approach from com.intellij.openapi.wm.impl.status.ToolWindowsWidget
UISettings.getInstance().addUISettingsListener(this, this);
myFocusManager = KeyboardFocusManager.getCurrentKeyboardFocusManager();
myFocusManager.addPropertyChangeListener("focusOwner", this);
}
@Nullable
@Override
public String getTooltipText() {
if (isSaveTransientModels()) {
return "Stop saving transient models";
}
return "Save transient models";
}
@Nullable
@Override
public Consumer<MouseEvent> getClickConsumer() {
return new Consumer<MouseEvent>() {
@Override
public void consume(MouseEvent e) {
if (!(e.isPopupTrigger()) && MouseEvent.BUTTON1 == e.getButton()) {
boolean saveTransientModels = myGenerationSettins.isSaveTransientModels();
myGenerationSettins.setSaveTransientModels(!(saveTransientModels));
TransientModelsNotification.updateWidgets();
} else if (e.isPopupTrigger() || MouseEvent.BUTTON2 == e.getButton()) {
WidgetSettingsPanel panel = new WidgetSettingsPanel();
Dimension dimension = panel.getPreferredSize();
Point point = new Point(0, 0);
point = new Point(point.x - dimension.width, point.y - dimension.height);
panel.showComponent(new RelativePoint(e.getComponent(), point));
}
}
};
}
public void update() {
if (myComponent != null) {
myComponent.update();
}
myStatusBar.updateWidget(ID());
}
@Nullable
@Override
public StatusBarWidget.WidgetPresentation getPresentation(@NotNull StatusBarWidget.PlatformType type) {
return this;
}
@Override
public void dispose() {
// no need to removeUISettingsListener as it is registered with Disposable and UISettings removes the listener on dispose
if (myFocusManager != null) {
myFocusManager.removePropertyChangeListener("focusOwner", this);
myFocusManager = null;
}
}
@NotNull
/*package*/ Icon getIcon() {
if (isSaveTransientModels()) {
return myIcon;
}
// TODO: Use only one Icon. This hack helps to avoid tests fails
return myIconDisable;
}
@NotNull
@Override
public String ID() {
return WIDGET_ID;
}
public boolean isSaveTransientModels() {
return myGenerationSettins.isSaveTransientModels();
}
@Override
public JComponent getComponent() {
if (myComponent == null) {
// getComponent() is invoked EARLIER than install(), so this is the only place to instantiate panel
// except cons of this class (which is bad, because this goes to TMP, which uses it e.g. to getText() on un-initialized instance)
myComponent = new TransientModelsPanel(this);
}
return myComponent;
}
@NotNull
public String getText() {
if (isSaveTransientModels()) {
return ":ON ";
}
return ":OFF";
}
@NotNull
public String getMaxPossibleText() {
return ":OFF";
}
public float getAlignment() {
return JComponent.RIGHT_ALIGNMENT;
}
public void uiSettingsChanged(UISettings settings) {
update();
}
public void propertyChange(PropertyChangeEvent event) {
update();
}
}