blob: 06ac648d8298e0f4b958d289862695e7acdb4a31 [file] [log] [blame]
/*
* Copyright 2000-2012 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.designer.designSurface.tools;
import com.intellij.designer.designSurface.EditOperation;
import com.intellij.designer.designSurface.EditableArea;
import com.intellij.designer.designSurface.ZoomProvider;
import com.intellij.designer.propertyTable.InplaceContext;
import com.intellij.util.ThrowableRunnable;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.Nullable;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.util.List;
/**
* @author Alexander Lobas
*/
public abstract class ToolProvider implements ZoomProvider {
private InputTool myTool;
private EditableArea myArea;
private MouseEvent myEvent;
public void processKeyEvent(KeyEvent event, EditableArea area) {
if (myTool != null) {
try {
switch (event.getID()) {
case KeyEvent.KEY_PRESSED:
myTool.keyPressed(event, area);
break;
case KeyEvent.KEY_TYPED:
myTool.keyTyped(event, area);
break;
case KeyEvent.KEY_RELEASED:
myTool.keyReleased(event, area);
break;
}
}
catch (Throwable e) {
showError("Edit operation", e);
}
}
}
public void processMouseEvent(MouseEvent event, EditableArea area) {
if (myTool != null) {
try {
switch (event.getID()) {
case MouseEvent.MOUSE_PRESSED:
myTool.mouseDown(event, area);
if (event.isPopupTrigger()) {
myTool.mousePopup(event, area);
}
break;
case MouseEvent.MOUSE_RELEASED:
myTool.mouseUp(event, area);
if (event.isPopupTrigger()) {
myTool.mousePopup(event, area);
}
break;
case MouseEvent.MOUSE_ENTERED:
myTool.mouseEntered(event, area);
break;
case MouseEvent.MOUSE_EXITED:
myTool.mouseExited(event, area);
break;
case MouseEvent.MOUSE_CLICKED:
if (event.getClickCount() == 2) {
myTool.mouseDoubleClick(event, area);
}
if (event.isPopupTrigger()) {
myTool.mousePopup(event, area);
}
break;
case MouseEvent.MOUSE_MOVED:
myTool.mouseMove(event, area);
break;
case MouseEvent.MOUSE_DRAGGED:
myTool.mouseDrag(event, area);
break;
}
}
catch (Throwable e) {
showError("Edit operation", e);
}
}
}
public void setEvent(MouseEvent event) {
myEvent = event;
}
public void setArea(@Nullable EditableArea area) {
myArea = area;
}
public abstract void showError(@NonNls String message, Throwable e);
public InputTool getActiveTool() {
return myTool;
}
public void setActiveTool(InputTool tool) {
if (myTool != null) {
myTool.deactivate();
}
myTool = tool;
if (myTool != null) {
myTool.setToolProvider(this);
myTool.activate();
// hack: update cursor
if (myArea != null) {
myTool.setArea(myArea);
myTool.refreshCursor();
try {
myTool.mouseMove(myEvent, myArea);
}
catch (Exception e) {
showError("Edit operation", e);
}
}
}
}
public abstract void loadDefaultTool();
public abstract boolean execute(ThrowableRunnable<Exception> operation, String command, boolean updateProperties);
public abstract void executeWithReparse(ThrowableRunnable<Exception> operation, String command);
public abstract void execute(List<EditOperation> operations, String command);
public abstract void startInplaceEditing(@Nullable InplaceContext inplaceContext);
public abstract void hideInspections();
}