From 9d7c740ff0962728883cdd7ce7c2c79a0469207c Mon Sep 17 00:00:00 2001 From: "minkee.lee" Date: Wed, 13 Jan 2016 19:46:08 +0900 Subject: [PATCH] message-box: use custom button Use a custom button instead of SWT default button. - Add traverse listener for keyboard input. - Remove setFocus() to title bar when drag. (It was unnecessary function call and it steals focus from button) Change-Id: I4f1f87fba6a0998023cfb212d95d4772cdb8239b Signed-off-by: minkee.lee --- .../manager/ui/renewal/dialog/DragHandler.java | 2 - .../manager/ui/renewal/dialog/MessageBox.java | 84 ++++++++++++++++++++-- .../manager/ui/renewal/widgets/GrayButton.java | 30 ++++++++ .../manager/ui/renewal/widgets/ImageButton.java | 5 ++ 4 files changed, 113 insertions(+), 8 deletions(-) diff --git a/src/org/tizen/emulator/manager/ui/renewal/dialog/DragHandler.java b/src/org/tizen/emulator/manager/ui/renewal/dialog/DragHandler.java index 33e29e6..aa50a0a 100644 --- a/src/org/tizen/emulator/manager/ui/renewal/dialog/DragHandler.java +++ b/src/org/tizen/emulator/manager/ui/renewal/dialog/DragHandler.java @@ -78,7 +78,6 @@ public class DragHandler { @Override public void mouseDown(MouseEvent e) { - ((Control)e.widget).setFocus(); isMouseDown = true; posX = e.x; posY = e.y; @@ -94,7 +93,6 @@ public class DragHandler { @Override public void mouseMove(MouseEvent e) { if (isMouseDown && dialog != null) { - ((Control)e.widget).setFocus(); dialog.setLocation(dialog.getLocation().x + (e.x - posX), dialog.getLocation().y + (e.y - posY)); } diff --git a/src/org/tizen/emulator/manager/ui/renewal/dialog/MessageBox.java b/src/org/tizen/emulator/manager/ui/renewal/dialog/MessageBox.java index e9a9d10..1f4d9c7 100644 --- a/src/org/tizen/emulator/manager/ui/renewal/dialog/MessageBox.java +++ b/src/org/tizen/emulator/manager/ui/renewal/dialog/MessageBox.java @@ -30,13 +30,15 @@ package org.tizen.emulator.manager.ui.renewal.dialog; +import java.util.ArrayList; +import java.util.List; + import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.FormAttachment; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.layout.FormLayout; -import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; @@ -47,6 +49,7 @@ import org.tizen.emulator.manager.renewal.resources.ColorResources; import org.tizen.emulator.manager.renewal.resources.FontResources; import org.tizen.emulator.manager.ui.renewal.MainDialog; import org.tizen.emulator.manager.ui.renewal.widgets.CustomScrolledComposite; +import org.tizen.emulator.manager.ui.renewal.widgets.GrayButton; public class MessageBox { private final int MIN_WIDTH = 300; @@ -85,6 +88,8 @@ public class MessageBox { private Composite titleComp = null; + private final List buttonList = new ArrayList(); + // TODO: Icon SWT.ICON_ERROR ... protected static final Shell shell; static { @@ -179,12 +184,76 @@ public class MessageBox { // need contentsBox size dialog.setBackground(ColorResources.MESSAGE_BOX_BG.getColor()); dialog.setBounds(computeDialogBounds()); + dialog.setBackgroundMode(SWT.INHERIT_FORCE); // need dialog size makeButtons(); titleComp.setBounds(0, 0, width, TITLE_HEIGHT); scrolledList.setBounds(0, TITLE_HEIGHT, width, height - TITLE_HEIGHT - BOTTOM_HEIGHT); + + addTraverseListener(); + } + + private void selectNext(GrayButton button, boolean isLeftToRight) { + for (int i = 0 ; i < buttonList.size() ; i++) { + GrayButton btn = buttonList.get(i); + if (btn == button) { + int nextIndex = 0; + if (isLeftToRight) { + nextIndex = (i < buttonList.size() - 1) ? + i+1 : 0; + + } else { // right to left + nextIndex = (i == 0) ? + buttonList.size() - 1 : i-1; + } + + buttonList.get(i).setSelected(false); + buttonList.get(nextIndex).setSelected(true); + buttonList.get(nextIndex).setFocus(); + break; + } + } + + } + + + private void addTraverseListener() { + Listener traverseListener = new Listener() { + @Override + public void handleEvent(Event event) { + + switch (event.detail) { + case SWT.TRAVERSE_RETURN: + if (event.widget instanceof GrayButton) { + event.widget.notifyListeners(SWT.Selection, event); + } + break; + + case SWT.TRAVERSE_ARROW_PREVIOUS: + case SWT.TRAVERSE_TAB_PREVIOUS: + if (event.widget instanceof GrayButton) { + selectNext((GrayButton)event.widget, false); + } + break; + + case SWT.TRAVERSE_ARROW_NEXT: + case SWT.TRAVERSE_TAB_NEXT: + if (event.widget instanceof GrayButton) { + selectNext((GrayButton)event.widget, true); + } + break; + + default: + // don't care another event + } + } + }; + + for (GrayButton button : buttonList) { + button.addListener(SWT.Traverse, traverseListener); + } } private void makeTitleLabel() { @@ -228,10 +297,9 @@ public class MessageBox { contentsHeight = contentsBox.getSize().y; } - private int buttonCount = 1; private void makeButton(String text, final int buttonType) { if ((style & buttonType) == buttonType) { - Button button = new Button(dialog, SWT.PUSH); + GrayButton button = new GrayButton(dialog, SWT.PUSH); button.setFont(FontResources.GRAY_BTN_FONT.getFont()); button.setText(text); button.setBackground(null); @@ -245,15 +313,19 @@ public class MessageBox { } }); - button.setBounds(width - (BUTTON_WIDTH + BUTTON_SPACING) * buttonCount, + buttonList.add(0, button); // for traverse + button.setBounds(width - (BUTTON_WIDTH + BUTTON_SPACING) * buttonList.size(), height - (BOTTOM_HEIGHT + BUTTON_HEIGHT)/2, BUTTON_WIDTH, BUTTON_HEIGHT); - buttonCount++; + + if (buttonType == SWT.OK || buttonType == SWT.YES) { + button.setSelected(true); + button.setFocus(); + } } } private void makeButtons() { - buttonCount = 1; makeButton("Yes", SWT.YES); makeButton("Ok", SWT.OK); makeButton("No", SWT.NO); diff --git a/src/org/tizen/emulator/manager/ui/renewal/widgets/GrayButton.java b/src/org/tizen/emulator/manager/ui/renewal/widgets/GrayButton.java index 226cc9d..16eed0c 100644 --- a/src/org/tizen/emulator/manager/ui/renewal/widgets/GrayButton.java +++ b/src/org/tizen/emulator/manager/ui/renewal/widgets/GrayButton.java @@ -30,7 +30,10 @@ package org.tizen.emulator.manager.ui.renewal.widgets; +import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Listener; import org.tizen.emulator.manager.renewal.resources.ColorResources; import org.tizen.emulator.manager.renewal.resources.FontResources; import org.tizen.emulator.manager.renewal.resources.ImageResources; @@ -43,6 +46,33 @@ public class GrayButton extends NinePatchButton { super(parent, style); initFont(); initNinePatchResourceMap(); + setMouseEnterListener(); + } + + public void setSelected(boolean selected) { + if (selected) { + state = WSTATE.PUSH; + } else { + state = WSTATE.NORMAL; + } + redraw(); + } + + + private void setMouseEnterListener() { + Listener mouseListener = new Listener() { + + @Override + public void handleEvent(Event event) { + + if (event.type == SWT.MouseEnter) { + state = WSTATE.HOVER; + redraw(); + } + } + }; + + setMouseListener(SWT.MouseEnter, mouseListener); } protected void initFont() { diff --git a/src/org/tizen/emulator/manager/ui/renewal/widgets/ImageButton.java b/src/org/tizen/emulator/manager/ui/renewal/widgets/ImageButton.java index e57c591..639c7a2 100644 --- a/src/org/tizen/emulator/manager/ui/renewal/widgets/ImageButton.java +++ b/src/org/tizen/emulator/manager/ui/renewal/widgets/ImageButton.java @@ -122,6 +122,11 @@ public class ImageButton extends Canvas { addDisposeListener(disposeListener); } + protected void setMouseListener(int event, Listener listener) { + removeListener(event, mouseListener); + addListener(event, listener); + } + public void setPainListener(PaintListener listener) { removePaintListener(paintListener); this.paintListener = listener; -- 2.7.4