mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-76142: Gradle support - cannot update IDEA projects once one of build.gradle files changes
Added 'filters' toolbar
This commit is contained in:
@@ -29,6 +29,7 @@ gradle.import.structure.settings.label.root.excluded=Excluded roots:
|
||||
gradle.import.structure.settings.label.library.path.binary=Binary paths
|
||||
gradle.import.structure.settings.label.library.path.source=Source paths
|
||||
gradle.import.structure.settings.label.library.path.doc=Doc paths
|
||||
gradle.import.structure.settings.label.filters=Filters:
|
||||
|
||||
gradle.import.title.error.resolve.generic=Resolve error
|
||||
gradle.import.text.error.resolve.generic.without.reason=Can''t resolve target gradle project at ''{0}''
|
||||
|
||||
@@ -100,16 +100,28 @@
|
||||
<action id="Gradle.LinkToProject" class="org.jetbrains.plugins.gradle.action.GradleLinkToProjectAction" icon="/general/add.png"/>
|
||||
<action id="Gradle.RefreshProject" class="org.jetbrains.plugins.gradle.action.GradleRefreshProjectAction" icon="/actions/sync.png"/>
|
||||
<action id="Gradle.OpenScript" class="org.jetbrains.plugins.gradle.action.GradleOpenScriptAction" icon="/icons/gradleNavigate.png"/>
|
||||
<action id="Gradle.ImportEntity" class="org.jetbrains.plugins.gradle.action.GradleImportEntityAction" icon="/icons/gradleImport.png"/>
|
||||
<action id="Gradle.ShowConflict" class="org.jetbrains.plugins.gradle.action.GradleShowConflictDetailsAction" icon="/actions/diff.png"/>
|
||||
<group id="Gradle.ChangeActionsToolbar">
|
||||
<reference id="Gradle.RefreshProject"/>
|
||||
<reference id="Gradle.OpenScript"/>
|
||||
</group>
|
||||
|
||||
<action id="Gradle.ImportEntity" class="org.jetbrains.plugins.gradle.action.GradleImportEntityAction" icon="/icons/gradleImport.png"/>
|
||||
<action id="Gradle.ShowConflict" class="org.jetbrains.plugins.gradle.action.GradleShowConflictDetailsAction" icon="/actions/diff.png"/>
|
||||
<group id="Gradle.SyncTreeGroup">
|
||||
<reference id="Gradle.ImportEntity"/>
|
||||
<reference id="Gradle.ShowConflict"/>
|
||||
</group>
|
||||
|
||||
<action id="Gradle.SyncTreeFilter.GradleLocal" class="org.jetbrains.plugins.gradle.action.GradleLocalSyncTreeFilterAction"/>
|
||||
<action id="Gradle.SyncTreeFilter.IntellijLocal" class="org.jetbrains.plugins.gradle.action.IntellijLocalSyncTreeFilterAction"/>
|
||||
<action id="Gradle.SyncTreeFilter.Conflict" class="org.jetbrains.plugins.gradle.action.GradleConflictSyncTreeFilterAction"/>
|
||||
<action id="Gradle.SyncTreeFilter.Confirmed" class="org.jetbrains.plugins.gradle.action.GradleConfirmedSyncTreeFilterAction"/>
|
||||
<group id="Gradle.SyncTreeFilter">
|
||||
<reference id="Gradle.SyncTreeFilter.GradleLocal"/>
|
||||
<reference id="Gradle.SyncTreeFilter.IntellijLocal"/>
|
||||
<reference id="Gradle.SyncTreeFilter.Conflict"/>
|
||||
<reference id="Gradle.SyncTreeFilter.Confirmed"/>
|
||||
</group>
|
||||
</actions>
|
||||
|
||||
</idea-plugin>
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
package org.jetbrains.plugins.gradle.action;
|
||||
|
||||
import com.intellij.openapi.actionSystem.AnAction;
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent;
|
||||
import com.intellij.openapi.actionSystem.ToggleAction;
|
||||
import com.intellij.openapi.editor.colors.EditorColorsManager;
|
||||
import com.intellij.openapi.options.colors.AttributesDescriptor;
|
||||
import com.intellij.util.ui.ColorIcon;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
|
||||
/**
|
||||
* @author Denis Zhdanov
|
||||
* @since 3/7/12 3:48 PM
|
||||
*/
|
||||
public abstract class GradleAbstractSyncTreeFilterAction extends ToggleAction {
|
||||
|
||||
@NotNull private final AttributesDescriptor myDescriptor;
|
||||
|
||||
protected GradleAbstractSyncTreeFilterAction(@NotNull AttributesDescriptor descriptor) {
|
||||
myDescriptor = descriptor;
|
||||
getTemplatePresentation().setText(descriptor.getDisplayName());
|
||||
final Color color = EditorColorsManager.getInstance().getGlobalScheme().getAttributes(descriptor.getKey()).getForegroundColor();
|
||||
getTemplatePresentation().setIcon(new ColorIcon(new JLabel("").getFont().getSize(), color));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSelected(AnActionEvent e) {
|
||||
// TODO den implement
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSelected(AnActionEvent e, boolean state) {
|
||||
// TODO den implement
|
||||
System.out.println("GradleAbstractSyncTreeFilterAction.setSelected(): " + state);
|
||||
}
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
package org.jetbrains.plugins.gradle.action;
|
||||
|
||||
import org.jetbrains.plugins.gradle.config.GradleColorAndFontDescriptorsProvider;
|
||||
|
||||
/**
|
||||
* @author Denis Zhdanov
|
||||
* @since 3/7/12 6:07 PM
|
||||
*/
|
||||
public class GradleConfirmedSyncTreeFilterAction extends GradleAbstractSyncTreeFilterAction {
|
||||
|
||||
public GradleConfirmedSyncTreeFilterAction() {
|
||||
super(GradleColorAndFontDescriptorsProvider.CONFIRMED);
|
||||
}
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
package org.jetbrains.plugins.gradle.action;
|
||||
|
||||
import org.jetbrains.plugins.gradle.config.GradleColorAndFontDescriptorsProvider;
|
||||
|
||||
/**
|
||||
* @author Denis Zhdanov
|
||||
* @since 3/7/12 6:08 PM
|
||||
*/
|
||||
public class GradleConflictSyncTreeFilterAction extends GradleAbstractSyncTreeFilterAction {
|
||||
|
||||
public GradleConflictSyncTreeFilterAction() {
|
||||
super(GradleColorAndFontDescriptorsProvider.CONFLICT);
|
||||
}
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
package org.jetbrains.plugins.gradle.action;
|
||||
|
||||
import org.jetbrains.plugins.gradle.config.GradleColorAndFontDescriptorsProvider;
|
||||
|
||||
/**
|
||||
* @author Denis Zhdanov
|
||||
* @since 3/7/12 3:54 PM
|
||||
*/
|
||||
public class GradleLocalSyncTreeFilterAction extends GradleAbstractSyncTreeFilterAction {
|
||||
|
||||
public GradleLocalSyncTreeFilterAction() {
|
||||
super(GradleColorAndFontDescriptorsProvider.GRADLE_LOCAL);
|
||||
}
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
package org.jetbrains.plugins.gradle.action;
|
||||
|
||||
import com.intellij.openapi.options.colors.AttributesDescriptor;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.gradle.config.GradleColorAndFontDescriptorsProvider;
|
||||
|
||||
/**
|
||||
* @author Denis Zhdanov
|
||||
* @since 3/7/12 3:59 PM
|
||||
*/
|
||||
public class IntellijLocalSyncTreeFilterAction extends GradleAbstractSyncTreeFilterAction {
|
||||
|
||||
public IntellijLocalSyncTreeFilterAction() {
|
||||
super(GradleColorAndFontDescriptorsProvider.INTELLIJ_LOCAL);
|
||||
}
|
||||
}
|
||||
+26
-22
@@ -17,28 +17,32 @@ import org.jetbrains.plugins.gradle.util.GradleBundle;
|
||||
*/
|
||||
public class GradleColorAndFontDescriptorsProvider implements ColorAndFontDescriptorsProvider {
|
||||
|
||||
private static final AttributesDescriptor[] DESCRIPTORS = {
|
||||
new AttributesDescriptor(
|
||||
GradleBundle.message("gradle.sync.change.type.conflict"),
|
||||
GradleTextAttributes.CHANGE_CONFLICT
|
||||
),
|
||||
new AttributesDescriptor(
|
||||
GradleBundle.message("gradle.sync.change.type.confirmed"),
|
||||
GradleTextAttributes.CONFIRMED_CONFLICT
|
||||
),
|
||||
new AttributesDescriptor(
|
||||
GradleBundle.message("gradle.sync.change.type.gradle"),
|
||||
GradleTextAttributes.GRADLE_LOCAL_CHANGE
|
||||
),
|
||||
new AttributesDescriptor(
|
||||
GradleBundle.message("gradle.sync.change.type.intellij", ApplicationNamesInfo.getInstance().getProductName()),
|
||||
GradleTextAttributes.INTELLIJ_LOCAL_CHANGE
|
||||
),
|
||||
new AttributesDescriptor(
|
||||
GradleBundle.message("gradle.sync.change.type.unchanged"),
|
||||
GradleTextAttributes.NO_CHANGE
|
||||
)
|
||||
};
|
||||
public static final AttributesDescriptor CONFLICT = new AttributesDescriptor(
|
||||
GradleBundle.message("gradle.sync.change.type.conflict"),
|
||||
GradleTextAttributes.CHANGE_CONFLICT
|
||||
);
|
||||
|
||||
public static final AttributesDescriptor CONFIRMED = new AttributesDescriptor(
|
||||
GradleBundle.message("gradle.sync.change.type.confirmed"),
|
||||
GradleTextAttributes.CONFIRMED_CONFLICT
|
||||
);
|
||||
|
||||
public static final AttributesDescriptor GRADLE_LOCAL = new AttributesDescriptor(
|
||||
GradleBundle.message("gradle.sync.change.type.gradle"),
|
||||
GradleTextAttributes.GRADLE_LOCAL_CHANGE
|
||||
);
|
||||
|
||||
public static final AttributesDescriptor INTELLIJ_LOCAL = new AttributesDescriptor(
|
||||
GradleBundle.message("gradle.sync.change.type.intellij", ApplicationNamesInfo.getInstance().getProductName()),
|
||||
GradleTextAttributes.INTELLIJ_LOCAL_CHANGE
|
||||
);
|
||||
|
||||
public static final AttributesDescriptor NO_CHANGE = new AttributesDescriptor(
|
||||
GradleBundle.message("gradle.sync.change.type.unchanged", ApplicationNamesInfo.getInstance().getProductName()),
|
||||
GradleTextAttributes.NO_CHANGE
|
||||
);
|
||||
|
||||
private static final AttributesDescriptor[] DESCRIPTORS = { CONFLICT, CONFIRMED, GRADLE_LOCAL, INTELLIJ_LOCAL, NO_CHANGE };
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
|
||||
@@ -5,7 +5,9 @@ import com.intellij.openapi.actionSystem.ActionManager;
|
||||
import com.intellij.openapi.actionSystem.ActionToolbar;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.SimpleToolWindowPanel;
|
||||
import com.intellij.ui.IdeBorderFactory;
|
||||
import com.intellij.ui.ScrollPaneFactory;
|
||||
import com.intellij.ui.SideBorder;
|
||||
import com.intellij.util.messages.MessageBusConnection;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -14,6 +16,8 @@ import org.jetbrains.plugins.gradle.util.GradleBundle;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Base class for high-level Gradle GUI controls used at the Gradle tool window. The basic idea is to encapsulate the same features in
|
||||
@@ -42,14 +46,12 @@ public abstract class GradleToolWindowPanel extends SimpleToolWindowPanel {
|
||||
private final JPanel myContent = new JPanel(myLayout);
|
||||
|
||||
private final Project myProject;
|
||||
private final String myPlace;
|
||||
|
||||
protected GradleToolWindowPanel(@NotNull Project project, @NotNull String place) {
|
||||
super(true);
|
||||
myProject = project;
|
||||
final ActionManager actionManager = ActionManager.getInstance();
|
||||
final ActionGroup actionGroup = (ActionGroup)actionManager.getAction(TOOL_WINDOW_TOOLBAR_ID);
|
||||
ActionToolbar actionToolbar = actionManager.createActionToolbar(place, actionGroup, true);
|
||||
setToolbar(actionToolbar.getComponent());
|
||||
myPlace = place;
|
||||
setContent(myContent);
|
||||
|
||||
MessageBusConnection connection = project.getMessageBus().connect(project);
|
||||
@@ -62,6 +64,22 @@ public abstract class GradleToolWindowPanel extends SimpleToolWindowPanel {
|
||||
}
|
||||
|
||||
public void initContent() {
|
||||
final ActionManager actionManager = ActionManager.getInstance();
|
||||
final ActionGroup actionGroup = (ActionGroup)actionManager.getAction(TOOL_WINDOW_TOOLBAR_ID);
|
||||
ActionToolbar actionToolbar = actionManager.createActionToolbar(myPlace, actionGroup, true);
|
||||
JPanel toolbarControl = new JPanel(new GridBagLayout());
|
||||
GridBagConstraints constraints = new GridBagConstraints();
|
||||
constraints.gridwidth = GridBagConstraints.REMAINDER;
|
||||
constraints.weightx = 1;
|
||||
constraints.fill = GridBagConstraints.HORIZONTAL;
|
||||
constraints.anchor = GridBagConstraints.WEST;
|
||||
toolbarControl.add(actionToolbar.getComponent(), constraints);
|
||||
for (JComponent component : getToolbarControls()) {
|
||||
component.setBorder(IdeBorderFactory.createBorder(SideBorder.TOP));
|
||||
toolbarControl.add(component, constraints);
|
||||
}
|
||||
setToolbar(toolbarControl);
|
||||
|
||||
final JComponent payloadControl = buildContent();
|
||||
myContent.add(ScrollPaneFactory.createScrollPane(payloadControl), CONTENT_CARD_NAME);
|
||||
RichTextControlBuilder builder = new RichTextControlBuilder();
|
||||
@@ -74,6 +92,14 @@ public abstract class GradleToolWindowPanel extends SimpleToolWindowPanel {
|
||||
update();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return list of UI controls to be displayed vertically at the toolbar
|
||||
*/
|
||||
@NotNull
|
||||
protected List<JComponent> getToolbarControls() {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
/**
|
||||
* Asks current control to update its state.
|
||||
*/
|
||||
|
||||
+13
-6
@@ -30,7 +30,6 @@ import javax.swing.*;
|
||||
import javax.swing.tree.DefaultMutableTreeNode;
|
||||
import javax.swing.tree.TreePath;
|
||||
import java.awt.*;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.event.MouseMotionAdapter;
|
||||
import java.util.ArrayList;
|
||||
@@ -46,9 +45,10 @@ import java.util.List;
|
||||
public class GradleProjectStructureChangesPanel extends GradleToolWindowPanel {
|
||||
|
||||
private static final int TOOLTIP_DELAY_MILLIS = 500;
|
||||
|
||||
private final Alarm myToolbarAppearanceAlarm = new Alarm(Alarm.ThreadToUse.SWING_THREAD);
|
||||
private final Alarm myToolbarTrackingAlarm = new Alarm(Alarm.ThreadToUse.SWING_THREAD);
|
||||
|
||||
private final Alarm myToolbarAppearanceAlarm = new Alarm(Alarm.ThreadToUse.SWING_THREAD);
|
||||
private final Alarm myToolbarTrackingAlarm = new Alarm(Alarm.ThreadToUse.SWING_THREAD);
|
||||
private final List<JComponent> myToolbarControls = new ArrayList<JComponent>();
|
||||
|
||||
private Tree myTree;
|
||||
private GradleProjectStructureTreeModel myTreeModel;
|
||||
@@ -75,6 +75,7 @@ public class GradleProjectStructureChangesPanel extends GradleToolWindowPanel {
|
||||
});
|
||||
}
|
||||
});
|
||||
myToolbarControls.add(new GradleProjectStructureFiltersPanel());
|
||||
initContent();
|
||||
}
|
||||
|
||||
@@ -93,6 +94,8 @@ public class GradleProjectStructureChangesPanel extends GradleToolWindowPanel {
|
||||
applyInitialAppearance(myTree, (DefaultMutableTreeNode)myTreeModel.getRoot());
|
||||
|
||||
GridBagConstraints constraints = new GridBagConstraints();
|
||||
constraints.gridwidth = GridBagConstraints.REMAINDER;
|
||||
constraints.anchor = GridBagConstraints.WEST;
|
||||
constraints.fill = GridBagConstraints.BOTH;
|
||||
constraints.weightx = constraints.weighty = 1;
|
||||
result.add(myTree, constraints);
|
||||
@@ -103,10 +106,14 @@ public class GradleProjectStructureChangesPanel extends GradleToolWindowPanel {
|
||||
return result;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
protected List<JComponent> getToolbarControls() {
|
||||
return myToolbarControls;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void updateContent() {
|
||||
// TODO den implement
|
||||
int i = 1;
|
||||
}
|
||||
|
||||
private void setupToolbar() {
|
||||
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
package org.jetbrains.plugins.gradle.sync;
|
||||
|
||||
import com.intellij.openapi.actionSystem.ActionGroup;
|
||||
import com.intellij.openapi.actionSystem.ActionManager;
|
||||
import com.intellij.openapi.actionSystem.ActionToolbar;
|
||||
import org.jetbrains.plugins.gradle.util.GradleBundle;
|
||||
import org.jetbrains.plugins.gradle.util.GradleConstants;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
/**
|
||||
* @author Denis Zhdanov
|
||||
* @since 3/6/12 3:44 PM
|
||||
*/
|
||||
public class GradleProjectStructureFiltersPanel extends JPanel {
|
||||
|
||||
|
||||
public GradleProjectStructureFiltersPanel() {
|
||||
setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
|
||||
add(Box.createHorizontalStrut(7));
|
||||
add(new JLabel(GradleBundle.message("gradle.import.structure.settings.label.filters")));
|
||||
final ActionManager actionManager = ActionManager.getInstance();
|
||||
final ActionGroup group = (ActionGroup)actionManager.getAction("Gradle.SyncTreeFilter");
|
||||
final ActionToolbar toolbar = actionManager.createActionToolbar(GradleConstants.SYNC_TREE_FILTER_PLACE, group, true);
|
||||
add(toolbar.getComponent());
|
||||
}
|
||||
}
|
||||
@@ -18,6 +18,7 @@ public class GradleConstants {
|
||||
@NonNls public static final String TOOL_WINDOW_TOOLBAR_PLACE = "GRADLE_SYNC_CHANGES_TOOLBAR";
|
||||
@NonNls public static final String SYNC_TREE_CONTEXT_MENU_PLACE = "GRADLE_SYNC_TREE_CONTEXT_MENU_PLACE";
|
||||
@NonNls public static final String SYNC_TREE_FLOATING_TOOLBAR_PLACE = "GRADLE_SYNC_TREE_FLOATING_TOOLBAR_PLACE";
|
||||
@NonNls public static final String SYNC_TREE_FILTER_PLACE = "GRADLE_SYNC_TREE_FILTER_PLACE";
|
||||
|
||||
@NonNls public static final String ACTION_GROUP_SYNC_TREE = "Gradle.SyncTreeGroup";
|
||||
|
||||
|
||||
Reference in New Issue
Block a user