Merge remote-tracking branch 'origin/master' into amakeev/remote-debug_linux
authorAnton Makeev <Anton.Makeev@jetbrains.com>
Sat, 25 Jun 2016 11:33:38 +0000 (13:33 +0200)
committerAnton Makeev <Anton.Makeev@jetbrains.com>
Sat, 25 Jun 2016 11:33:38 +0000 (13:33 +0200)
platform/platform-api/src/com/intellij/openapi/options/SettingsEditor.java
platform/platform-api/src/com/intellij/ui/AddEditRemovePanel.java
platform/platform-api/src/com/intellij/ui/InplaceAddEditRemovePanel.java [new file with mode: 0644]
platform/util/src/com/intellij/util/ui/GridBag.java

index 372467d0eeca1157272a4ccdead27a79acb2b150..59f0e4e836d4a41dfd9fb4edc7a9570150f77fe3 100644 (file)
@@ -38,8 +38,8 @@ public abstract class SettingsEditor<Settings> implements Disposable {
   private CompositeSettingsEditor<Settings> myOwner;
   private JComponent myEditorComponent;
 
-  protected abstract void resetEditorFrom(Settings s);
-  protected abstract void applyEditorTo(Settings s) throws ConfigurationException;
+  protected abstract void resetEditorFrom(@NotNull Settings s);
+  protected abstract void applyEditorTo(@NotNull Settings s) throws ConfigurationException;
 
   @NotNull
   protected abstract JComponent createEditor();
index a242efc668fc7daab6c19e33ee99dff524c7c1b7..7c14b854004ba62f159ce417f73f0dbdd0409e86 100644 (file)
@@ -63,11 +63,15 @@ public abstract class AddEditRemovePanel<T> extends PanelWithButtons implements
   @Nullable
   protected abstract T editItem(T o);
 
+  public boolean isUpDownSupported() {
+    return false;
+  }
+
   @Override
   protected void initPanel() {
     setLayout(new BorderLayout());
 
-    final JPanel panel = ToolbarDecorator.createDecorator(myTable)
+    ToolbarDecorator decorator = ToolbarDecorator.createDecorator(myTable)
       .setAddAction(new AnActionButtonRunnable() {
         @Override
         public void run(AnActionButton button) {
@@ -89,10 +93,27 @@ public abstract class AddEditRemovePanel<T> extends PanelWithButtons implements
           }
           doEdit();
         }
-      })
-      .disableUpAction()
-      .disableDownAction()
-      .createPanel();
+      });
+
+    if (isUpDownSupported()) {
+      decorator
+        .setMoveUpAction(new AnActionButtonRunnable() {
+          @Override
+          public void run(AnActionButton button) {
+            doUp();
+          }})
+        .setMoveDownAction(new AnActionButtonRunnable() {
+          @Override
+          public void run(AnActionButton button) {
+            doDown();
+          }
+        });
+    }
+    else {
+      decorator.disableUpAction().disableDownAction();
+    }
+
+    final JPanel panel = decorator.createPanel();
     add(panel, BorderLayout.CENTER);
     final String label = getLabelText();
     if (label != null) {
@@ -218,6 +239,38 @@ public abstract class AddEditRemovePanel<T> extends PanelWithButtons implements
       myTable.setRowSelectionInterval(selection, selection);
     }
   }
+  
+  protected void doUp() {
+    doMove(true);
+  }
+
+  protected void doDown() {
+    doMove(false);
+  }
+
+  protected void doMove(boolean up) {
+    if (myTable.isEditing()) {
+      myTable.getCellEditor().stopCellEditing();
+    }
+    
+    final int[] selected = myTable.getSelectedRows();
+    if (selected == null || selected.length == 0) return;
+    Arrays.sort(selected);
+
+    for (int i = up ? 0 : selected.length - 1; (up ? i < selected.length : i >= 0); i += up ? 1 : -1) {
+      int each = selected[i];
+      T tmp = myData.get(each + (up ? -1 : 1));
+      myData.set(each + (up ? -1 : 1), myData.get(each));
+      myData.set(each, tmp);
+    }
+    
+    myTableModel.fireTableDataChanged();
+    
+    for (int each : selected) {
+      int i = each + (up ? -1 : 1);
+      myTable.addRowSelectionInterval(i, i);
+    }
+  }
 
   public void setData(List<T> data) {
     myData = data;
diff --git a/platform/platform-api/src/com/intellij/ui/InplaceAddEditRemovePanel.java b/platform/platform-api/src/com/intellij/ui/InplaceAddEditRemovePanel.java
new file mode 100644 (file)
index 0000000..ac0e692
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2000-2016 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.ui;
+
+import com.intellij.ui.table.JBTable;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+
+
+public abstract class InplaceAddEditRemovePanel<T> extends AddEditRemovePanel<T> {
+  public InplaceAddEditRemovePanel(TableModel<T> model, List<T> data) {
+    super(model, data);
+  }
+
+  public InplaceAddEditRemovePanel(TableModel<T> model, List<T> data, @Nullable String label) {
+    super(model, data, label);
+  }
+
+  @Override
+  protected void doAdd() {
+    super.doAdd();
+    JBTable table = getTable();
+    int selected = table.getSelectedRow();
+    if (selected != -1) {
+      table.editCellAt(selected, 0);
+    }
+  }
+
+  @Override
+  protected void doEdit() {
+    JBTable table = getTable();
+    if (!table.isEditing()) {
+      int selected = table.getSelectedRow();
+      if (selected != -1) {
+        table.editCellAt(selected, 0);
+      }
+    }
+  }
+  
+  @Nullable
+  @Override
+  protected T editItem(T o) {
+    return o;
+  }
+}
index 9d4b538edbb62eeef730a63ab28ed0ac1b31f8c8..bfa35f55df9f8391a68260d05e291823b403bcc6 100644 (file)
@@ -54,7 +54,7 @@ import java.awt.*;
  * </pre>
  * Note that every call of {@link #nextLine()} or {@link #next()} resets settings to the defaults for the corresponding column.
  */
-@SuppressWarnings({"JavaDoc"})
+@SuppressWarnings("unused")
 public class GridBag extends GridBagConstraints {
   private int myDefaultAnchor = anchor;
   @NotNull private final TIntIntHashMap myDefaultColumnAnchors = new TIntIntHashMap();
@@ -212,7 +212,27 @@ public class GridBag extends GridBagConstraints {
    */
   @NotNull
   public GridBag insets(int top, int left, int bottom, int right) {
-    return insets(new Insets(top, left, bottom, right));
+    return insets(JBUI.insets(top, left, bottom, right));
+  }
+
+  @NotNull
+  public GridBag insetTop(int top) {
+    return insets(JBUI.insets(top, -1, -1, -1));
+  }
+
+  @NotNull
+  public GridBag insetBottom(int bottom) {
+    return insets(JBUI.insets(-1, -1, bottom, -1));
+  }
+
+  @NotNull
+  public GridBag insetLeft(int left) {
+    return insets(JBUI.insets(-1, left, -1, -1));
+  }
+
+  @NotNull
+  public GridBag insetRight(int right) {
+    return insets(JBUI.insets(-1, -1, -1, right));
   }
 
   /**
@@ -392,7 +412,7 @@ public class GridBag extends GridBagConstraints {
 
   @NotNull
   public GridBag setDefaultInsets(int top, int left, int bottom, int right) {
-    return setDefaultInsets(new Insets(top, left, bottom, right));
+    return setDefaultInsets(JBUI.insets(top, left, bottom, right));
   }
 
   public GridBag setDefaultInsets(@Nullable Insets insets) {
@@ -407,7 +427,7 @@ public class GridBag extends GridBagConstraints {
 
   @NotNull
   public GridBag setDefaultInsets(int column, int top, int left, int bottom, int right) {
-    return setDefaultInsets(column, new Insets(top, left, bottom, right));
+    return setDefaultInsets(column, JBUI.insets(top, left, bottom, right));
   }
 
   @NotNull