| /* |
| * 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(); |
| } |