/**
* Copyright (c) 2015 by Brainwy Software Ltda. All Rights Reserved.
* Licensed under the terms of the Eclipse Public License (EPL).
* Please see the license.txt included with this distribution for details.
* Any modifications to this file must keep this entire header intact.
*/
package org.python.pydev.debug.console;
import java.io.IOException;
import java.lang.ref.WeakReference;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.ActionContributionItem;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IMenuCreator;
import org.eclipse.jface.preference.IPersistentPreferenceStore;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.ui.IEditorActionDelegate;
import org.eclipse.ui.texteditor.IUpdate;
import org.python.pydev.core.log.Log;
import org.python.pydev.debug.core.PydevDebugPlugin;
import org.python.pydev.debug.core.PydevDebugPreferencesInitializer;
import org.python.pydev.shared_ui.SharedUiPlugin;
import org.python.pydev.shared_ui.UIConstants;
import org.python.pydev.shared_ui.actions.BaseAction;
public class ShowPromptOverlayAction extends BaseAction implements IUpdate, IEditorActionDelegate,
IPropertyChangeListener {
private final WeakReference<PromptOverlay> promptOverlay;
private Menu fMenu;
private final IPreferenceStore preferences;
private final SetLayoutAction setLayoutAction;
private final SetFullLayoutAction setFullLayoutAction;
private final SetBufferedOutputAction setBufferedOutputAction;
private IMenuCreator menuCreator;
public ShowPromptOverlayAction(PromptOverlay promptOverlay) {
this.promptOverlay = new WeakReference<PromptOverlay>(promptOverlay);
preferences = PydevDebugPlugin.getDefault().getPreferenceStore();
preferences.addPropertyChangeListener(this);
this.setLayoutAction = new SetLayoutAction(this.promptOverlay);
this.setFullLayoutAction = new SetFullLayoutAction(this.promptOverlay);
this.setBufferedOutputAction = new SetBufferedOutputAction(this.promptOverlay);
update();
this.menuCreator = new IMenuCreator() {
@Override
public Menu getMenu(Menu parent) {
return null;
}
@Override
public void dispose() {
if (fMenu != null) {
fMenu.dispose();
}
fMenu = null;
}
@Override
public Menu getMenu(Control parent) {
if (fMenu != null) {
fMenu.dispose();
}
fMenu = new Menu(parent);
addActionToMenu(fMenu, setLayoutAction);
addActionToMenu(fMenu, setFullLayoutAction);
addActionToMenu(fMenu, setBufferedOutputAction);
return fMenu;
}
private void addActionToMenu(Menu parent, Action action) {
ActionContributionItem item = new ActionContributionItem(action);
item.fill(parent, -1);
}
};
setMenuCreator(this.menuCreator);
}
@Override
public void update() {
PromptOverlay overlay = promptOverlay.get();
if (overlay == null) {
return;
}
boolean show = preferences.getBoolean(PydevDebugPreferencesInitializer.SHOW_CONSOLE_PROMPT_ON_DEBUG);
if (show) {
this.setImageDescriptor(SharedUiPlugin.getImageCache().getDescriptor(UIConstants.CONSOLE_ENABLED));
this.setToolTipText("Hide console prompt");
} else {
this.setImageDescriptor(SharedUiPlugin.getImageCache().getDescriptor(UIConstants.CONSOLE_DISABLED));
this.setToolTipText("Show console prompt");
}
overlay.setOverlayVisible(show);
}
@Override
public void propertyChange(PropertyChangeEvent event) {
if (PydevDebugPreferencesInitializer.SHOW_CONSOLE_PROMPT_ON_DEBUG.equals(event.getProperty())) {
this.update();
}
}
@Override
public void run(IAction action) {
preferences.setValue(PydevDebugPreferencesInitializer.SHOW_CONSOLE_PROMPT_ON_DEBUG,
!preferences.getBoolean(PydevDebugPreferencesInitializer.SHOW_CONSOLE_PROMPT_ON_DEBUG));
if (preferences instanceof IPersistentPreferenceStore) {
try {
((IPersistentPreferenceStore) preferences).save();
} catch (IOException e) {
Log.log(e);
}
}
}
@Override
public void run() {
run(this);
}
public void dispose() {
this.menuCreator.dispose();
preferences.removePropertyChangeListener(this);
this.setLayoutAction.dispose();
this.setBufferedOutputAction.dispose();
}
}