From c8e8fc8665d3a66fddd7eadb18093788fa3b44f4 Mon Sep 17 00:00:00 2001 From: Artem Bochkarev Date: Thu, 3 May 2018 16:47:00 +0700 Subject: [PATCH] IDEA-163208: use principal group-item to center main confirmation buttons of dialog --- bin/mac/libnst64.dylib | Bin 42488 -> 42680 bytes native/MacTouchBar/src/Button.m | 2 +- native/MacTouchBar/src/TouchBar.m | 17 ++++++++++ .../intellij/openapi/ui/DialogWrapper.java | 2 +- .../src/com/intellij/ui/mac/touchbar/NST.java | 8 +++++ .../intellij/ui/mac/touchbar/NSTLibrary.java | 2 ++ .../intellij/ui/mac/touchbar/TBItemGroup.java | 29 ++++++++++++++++++ .../intellij/ui/mac/touchbar/TouchBar.java | 8 +++++ .../ui/mac/touchbar/TouchBarsManager.java | 17 +++++++++- 9 files changed, 82 insertions(+), 3 deletions(-) create mode 100644 platform/platform-impl/src/com/intellij/ui/mac/touchbar/TBItemGroup.java diff --git a/bin/mac/libnst64.dylib b/bin/mac/libnst64.dylib index fbb8f8cc4989b167db412d363be452efc82e943f..2192d63be1002c16b0f24b69ce5896e0268f00e9 100755 GIT binary patch literal 42680 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

y38E@es%o6?7Fvd8*ILh(It((`xw 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И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 diff --git a/native/MacTouchBar/src/Button.m b/native/MacTouchBar/src/Button.m index e5c340271cdd..9cd345ed1a84 100644 --- a/native/MacTouchBar/src/Button.m +++ b/native/MacTouchBar/src/Button.m @@ -53,7 +53,7 @@ static void _setButtonData(NSButtonJAction *button, int updateOptions, int butto if (updateOptions & BUTTON_UPDATE_FLAGS) { if (buttonFlags & BUTTON_FLAG_COLORED) { - button.bezelColor = NSColor.blueColor; + button.bezelColor = [NSColor colorWithRed:0 green:130/255.f blue:215/255.f alpha:1]; } else if (buttonFlags & BUTTON_FLAG_SELECTED) { button.bezelColor = NSColor.selectedControlColor; } else { diff --git a/native/MacTouchBar/src/TouchBar.m b/native/MacTouchBar/src/TouchBar.m index b6fcb383bd51..c896ed12d710 100644 --- a/native/MacTouchBar/src/TouchBar.m +++ b/native/MacTouchBar/src/TouchBar.m @@ -73,10 +73,27 @@ id createTouchBar(const char * name, createItem jcreator, const char * escId) { return result; } +void setPrincipal(id tbobj, const char * uid) { + TouchBar * tb = (TouchBar *)tbobj; // TODO: check types + [tb.touchBar setPrincipalItemIdentifier:getString(uid)]; +} + void releaseTouchBar(id tbobj) { [tbobj release]; } +id createGroupItem(const char * uid, id * items, int count) { + NSMutableArray *allItems = [NSMutableArray arrayWithCapacity:count]; + for (int c = 0; c < count; ++c) + [allItems addObject:items[c]]; + + NSGroupTouchBarItem * result = [NSGroupTouchBarItem groupItemWithIdentifier:getString(uid) items:allItems]; + // NOTE: should create non-autorelease object to be owned by java-wrapper + // the simplest way to create working NSGroupTouchBarItem with fixed item set is to call groupItemWithIdentifier, which creates autorelease object, so do retain.. + [result retain]; + return result; +} + void setTouchBar(id tb) { dispatch_async(dispatch_get_main_queue(), ^{ [[NSApplication sharedApplication] setTouchBar:((TouchBar *) tb).touchBar]; diff --git a/platform/platform-api/src/com/intellij/openapi/ui/DialogWrapper.java b/platform/platform-api/src/com/intellij/openapi/ui/DialogWrapper.java index beadc999837b..6dc3e4804d3b 100644 --- a/platform/platform-api/src/com/intellij/openapi/ui/DialogWrapper.java +++ b/platform/platform-api/src/com/intellij/openapi/ui/DialogWrapper.java @@ -772,7 +772,7 @@ public abstract class DialogWrapper { } @NotNull - private static Pair extractMnemonic(@Nullable String text) { + public static Pair extractMnemonic(@Nullable String text) { if (text == null) return Pair.create(0, null); int mnemonic = 0; diff --git a/platform/platform-impl/src/com/intellij/ui/mac/touchbar/NST.java b/platform/platform-impl/src/com/intellij/ui/mac/touchbar/NST.java index 713f1d06172d..5f4c3d296870 100644 --- a/platform/platform-impl/src/com/intellij/ui/mac/touchbar/NST.java +++ b/platform/platform-impl/src/com/intellij/ui/mac/touchbar/NST.java @@ -88,6 +88,10 @@ public class NST { ourNSTLibrary.selectItemsToShow(tbObj, ids, count); } + public static void setPrincipal(ID tbObj, String uid) { + ourNSTLibrary.setPrincipal(tbObj, uid); + } + public static ID createButton(String uid, int buttWidth, int buttFlags, @@ -117,6 +121,10 @@ public class NST { return ourNSTLibrary.createScrubber(uid, itemWidth, items, count); } + public static ID createGroupItem(String uid, ID[] items, int count) { + return ourNSTLibrary.createGroupItem(uid, items, count); + } + public static void updateButton(ID buttonObj, int updateOptions, int buttWidth, diff --git a/platform/platform-impl/src/com/intellij/ui/mac/touchbar/NSTLibrary.java b/platform/platform-impl/src/com/intellij/ui/mac/touchbar/NSTLibrary.java index 3e4ee65a1b7b..1aa9d52d5328 100644 --- a/platform/platform-impl/src/com/intellij/ui/mac/touchbar/NSTLibrary.java +++ b/platform/platform-impl/src/com/intellij/ui/mac/touchbar/NSTLibrary.java @@ -15,6 +15,7 @@ public interface NSTLibrary extends Library { void releaseTouchBar(ID tbObj); void setTouchBar(ID tbObj); void selectItemsToShow(ID tbObj, String[] ids, int count); + void setPrincipal(ID tbObj, String uid); interface Action extends Callback { void execute(); @@ -44,6 +45,7 @@ public interface NSTLibrary extends Library { ID createButton(String uid, int buttWidth, int buttonFlags, String text, byte[] raster4ByteRGBA, int w, int h, Action action); ID createPopover(String uid, int itemWidth, String text, byte[] raster4ByteRGBA, int w, int h, ID tbObjExpand, ID tbObjTapAndHold); ID createScrubber(String uid, int itemWidth, ScrubberItemData[] items, int count); + ID createGroupItem(String uid, ID[] items, int count); int BUTTON_UPDATE_WIDTH = 1; int BUTTON_UPDATE_FLAGS = 1 << 1; diff --git a/platform/platform-impl/src/com/intellij/ui/mac/touchbar/TBItemGroup.java b/platform/platform-impl/src/com/intellij/ui/mac/touchbar/TBItemGroup.java new file mode 100644 index 000000000000..358d4ab428e7 --- /dev/null +++ b/platform/platform-impl/src/com/intellij/ui/mac/touchbar/TBItemGroup.java @@ -0,0 +1,29 @@ +// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +package com.intellij.ui.mac.touchbar; + +import com.intellij.ui.mac.foundation.ID; +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +public class TBItemGroup extends TBItem { + private final List myGroupItems = new ArrayList<>(); + + TBItemGroup(@NotNull String uid, @NotNull List items) { + super(uid); + myGroupItems.addAll(items); + } + + @Override + protected void _updateNativePeer() { myGroupItems.forEach(item->item._updateNativePeer()); } + + @Override + protected ID _createNativePeer() { + if (myGroupItems.isEmpty()) + return ID.NIL; + + final ID[] ids = myGroupItems.stream().map(item->item.getNativePeer()).toArray(size -> new ID[size]); + return NST.createGroupItem(myUid, ids, ids.length); + } +} diff --git a/platform/platform-impl/src/com/intellij/ui/mac/touchbar/TouchBar.java b/platform/platform-impl/src/com/intellij/ui/mac/touchbar/TouchBar.java index f17b127d4fe1..3a43fd47b3f7 100644 --- a/platform/platform-impl/src/com/intellij/ui/mac/touchbar/TouchBar.java +++ b/platform/platform-impl/src/com/intellij/ui/mac/touchbar/TouchBar.java @@ -92,6 +92,12 @@ public class TouchBar implements NSTLibrary.ItemCreator { return butt; } + public TBItemGroup addGroup(List items) { + final TBItemGroup group = new TBItemGroup(_genNewID("group"), items); + myItems.add(group); + return group; + } + public TBItemPopover addPopover(Icon icon, String text, int width, TouchBar expandTB, TouchBar tapAndHoldTB) { final TBItemPopover popover = new TBItemPopover(_genNewID("popover"), icon, text, width, expandTB, tapAndHoldTB); myItems.add(popover); @@ -131,6 +137,8 @@ public class TouchBar implements NSTLibrary.ItemCreator { NST.selectItemsToShow(myNativePeer, ids, ids.length); } + public void setPrincipal(@NotNull TBItem item) { NST.setPrincipal(myNativePeer, item.myUid); } + public void onBeforeShow() {} public void onHide() {} diff --git a/platform/platform-impl/src/com/intellij/ui/mac/touchbar/TouchBarsManager.java b/platform/platform-impl/src/com/intellij/ui/mac/touchbar/TouchBarsManager.java index fbd04ab53d51..644dfd0a8269 100644 --- a/platform/platform-impl/src/com/intellij/ui/mac/touchbar/TouchBarsManager.java +++ b/platform/platform-impl/src/com/intellij/ui/mac/touchbar/TouchBarsManager.java @@ -265,6 +265,8 @@ public class TouchBarsManager { try (NSAutoreleaseLock lock = new NSAutoreleaseLock()) { TouchBarActionBase result = new TouchBarActionBase("dialog_buttons", project, null); final ModalityState ms = LaterInvocator.getCurrentModalityState(); + + // 1. add option buttons (at left) for (JButton jb : jbuttons) { if (jb instanceof JBOptionButton) { JBOptionButton ob = (JBOptionButton)jb; @@ -282,12 +284,25 @@ public class TouchBarsManager { if (ag.getChildrenCount() > 0) result.addActionGroupButtons(ag, ob, ms); } + } + // 2. add main buttons and make principal + final List groupButtons = new ArrayList<>(); + for (JButton jb : jbuttons) { + // TODO: make correct processing for disabled buttons, add them and update state by timer + // NOTE: can be true: jb.getAction().isEnabled() && !jb.isEnabled() final NSTLibrary.Action act = () -> ApplicationManager.getApplication().invokeLater(() -> jb.doClick(), ms); final boolean isDefault = jb.getAction().getValue(DialogWrapper.DEFAULT_ACTION) != null; - result.addButton(null, jb.getText(), act, isDefault ? NSTLibrary.BUTTON_FLAG_COLORED : 0); + final TBItemButton butt = new TBItemButton( + "dialog_buttons_group_item_" + jbuttons.indexOf(jb), + null, DialogWrapper.extractMnemonic(jb.getText()).second, act, -1, isDefault ? NSTLibrary.BUTTON_FLAG_COLORED : 0 + ); + groupButtons.add(butt); } + final TBItemGroup gr = result.addGroup(groupButtons); + result.setPrincipal(gr); + return result; } }