2016-06-20 2 views
0

Est-ce possible?Développement de plugins Intellij, comment empêcher une action de se produire, comme la fermeture d'un onglet

Je dois souscrire à l'événement en quelque sorte et éventuellement retourner faux ou similaire, je devine. J'ai aucune idée comment cependant.

De quel événement s'agit-il?

Où puis-je l'enregistrer?

Quelqu'un?

EDIT:

J'ai essayé:

import com.intellij.openapi.components.ApplicationComponent; 
import com.intellij.openapi.editor.impl.EditorComponentImpl; 
import org.jetbrains.annotations.NotNull; 

import java.awt.*; 
import java.awt.event.AWTEventListener; 
import java.awt.event.KeyEvent; 

public class MyPlugin implements ApplicationComponent { 

    static { 
     /*MessageBus bus = ApplicationManager.getApplication().get 

     MessageBusConnection connection = bus.connect(); 

     connection.subscribe(AppTopics.FILE_DOCUMENT_SYNC, 
      new FileDocumentManagerAdapter() { 
       @Override 
       public void beforeDocumentSaving(Document document) { 
        // create your custom logic here 
       } 
      });*/ 
    } 

    private final AWTEventListener listener; 

    public MyPlugin() { 
     System.out.println("111111111111111111"); 
     listener = new AWTEventListener() { 

      @Override 
      public void eventDispatched(AWTEvent event) { 

       if (event instanceof KeyEvent) { 
        KeyEvent kv = (KeyEvent) event; 
        Component component = kv.getComponent(); 

        if (component instanceof EditorComponentImpl) { 
         EditorComponentImpl cp = (EditorComponentImpl) component; 

        } 

        System.out.println("3333333" + component.getClass()); 
       } 

       System.out.println("aaaaaaa" + event.getClass()); 

      } 
     }; 
    } 

    @Override 
    public void initComponent() { 
     System.out.println("bbbbbbbbbbbbbbbbbbbbbbbbbbb"); 
     Toolkit.getDefaultToolkit().addAWTEventListener(listener, AWTEvent.KEY_EVENT_MASK); 
    } 

    @Override 
    public void disposeComponent() { 
     Toolkit.getDefaultToolkit().removeAWTEventListener(listener); 
    } 

    @NotNull 
    @Override 
    public String getComponentName() { 
     return "temp"; 
    } 

} 

Mais cela ne fonctionne pas. Je reçois des événements mais le mauvais type.

+0

Il n'y a pas d'API dans IntelliJ IDEA qui vous permettra d'empêcher la fermeture d'un onglet de l'éditeur. Si vous pouviez décrire le problème que vous tentez de résoudre, nous pourrions peut-être vous proposer une approche différente. – yole

+0

@yole J'ai déjà développé un plugin pour cela. Vérifiez-le ;) – momomo

Répondre