change action parent class
authorAlexander Marchuk <Alexander.Marchuk@jetbrains.com>
Fri, 15 Aug 2014 10:50:33 +0000 (14:50 +0400)
committerAlexander Marchuk <Alexander.Marchuk@jetbrains.com>
Fri, 15 Aug 2014 10:50:33 +0000 (14:50 +0400)
add table and editor in ui
add value provider base class and numpy stub

python/src/com/jetbrains/python/actions/PyViewArrayAction.java

index e50822eb2e968af1b495b951f4f8dfadc95dd364..273f8ef08fd02c69fed26dc53011d8030b760dec 100644 (file)
  */
 package com.jetbrains.python.actions;
 
+import com.intellij.openapi.actionSystem.AnActionEvent;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.ui.DialogWrapper;
-import com.intellij.openapi.util.text.StringUtil;
-import com.intellij.ui.EditorTextField;
-import com.intellij.xdebugger.impl.ui.TextViewer;
-import com.intellij.xdebugger.impl.ui.tree.actions.XFetchValueActionBase;
+import com.intellij.xdebugger.impl.ui.tree.SetValueInplaceEditor;
+import com.intellij.xdebugger.impl.ui.tree.XDebuggerTreeInplaceEditor;
+import com.intellij.xdebugger.impl.ui.tree.actions.XDebuggerTreeActionBase;
+import com.intellij.xdebugger.impl.ui.tree.nodes.XValueNodeImpl;
 import org.jetbrains.annotations.NotNull;
 
 import javax.swing.*;
+import javax.swing.table.DefaultTableModel;
 import java.awt.*;
 
 /**
- * Created by Alexander.Marchuk
+ * @author amarch
  */
 
-public class PyViewArrayAction extends XFetchValueActionBase {
+public class PyViewArrayAction extends XDebuggerTreeActionBase {
+
   @Override
-  protected void handle(Project project, String value) {
-    final MyDialog dialog = new MyDialog(project);
+  protected void perform(XValueNodeImpl node, @NotNull String nodeName, AnActionEvent e) {
+    final MyDialog dialog = new MyDialog(e.getProject(), node, nodeName);
     dialog.setTitle("View Array");
-    dialog.setText(StringUtil.unquoteString(value));
+    dialog.setValue(node);
     dialog.show();
   }
 
-  private static class MyDialog extends DialogWrapper {
-    private final EditorTextField myTextViewer;
+  private abstract class ArrayValueProvider {
+
+    public abstract Object[][] parseValues(String rawValue);
+  }
+
+  private class NumpyArrayValueProvider extends ArrayValueProvider {
+
+    @Override
+    public Object[][] parseValues(String rawValue) {
+      return new String[][]{{"a", "b", "c"}, {"a", "b", "c"}};
+    }
+  }
+
+  private class MyDialog extends DialogWrapper {
+    private JTable myTable;
+    private XDebuggerTreeInplaceEditor myEditor;
 
-    private MyDialog(Project project) {
+    private MyDialog(Project project, XValueNodeImpl node, @NotNull String nodeName) {
       super(project, false);
       setModal(false);
       setCancelButtonText("Close");
       setCrossClosesWindow(true);
 
-      myTextViewer = new TextViewer(project, true, true);
+      myEditor = new SetValueInplaceEditor(node, nodeName);
+
+      myTable = new JTable() {
+        @Override
+        public boolean isCellEditable(int row, int column) {
+          return true;
+        }
+      };
+
       init();
     }
 
-    public void setText(String text) {
-      myTextViewer.setText(text);
+    public void setValue(XValueNodeImpl node) {
+      ArrayValueProvider valueProvider;
+
+      if (node.getValuePresentation().getType().equals("ndarray")) {
+        valueProvider = new NumpyArrayValueProvider();
+        final Object[][] data = valueProvider.parseValues(node.getRawValue());
+        DefaultTableModel model = new DefaultTableModel(data, range(0, data.length));
+        myTable.setModel(model);
+      }
+    }
+
+    private String[] range(int min, int max) {
+      String[] array = new String[max - min + 1];
+      for (int i = min; i <= max; i++) {
+        array[i] = new Integer(i).toString();
+      }
+      return array;
     }
 
     @Override
     @NotNull
     protected Action[] createActions() {
-      return new Action[] {getCancelAction()};
+      return new Action[]{getCancelAction()};
     }
 
     @Override
@@ -70,8 +110,9 @@ public class PyViewArrayAction extends XFetchValueActionBase {
     @Override
     protected JComponent createCenterPanel() {
       final JPanel panel = new JPanel(new BorderLayout());
-      panel.add(myTextViewer, BorderLayout.CENTER);
-      panel.setPreferredSize(new Dimension(300, 200));
+      panel.add(myTable, BorderLayout.CENTER);
+      //panel.add(myEditor.getEditorComponent());
+      panel.setPreferredSize(new Dimension(450, 300));
       return panel;
     }
   }