message-box: use custom button
authorminkee.lee <minkee.lee@samsung.com>
Wed, 13 Jan 2016 10:46:08 +0000 (19:46 +0900)
committerSeokYeon Hwang <syeon.hwang@samsung.com>
Fri, 22 Jan 2016 02:16:09 +0000 (11:16 +0900)
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 <minkee.lee@samsung.com>
src/org/tizen/emulator/manager/ui/renewal/dialog/DragHandler.java
src/org/tizen/emulator/manager/ui/renewal/dialog/MessageBox.java
src/org/tizen/emulator/manager/ui/renewal/widgets/GrayButton.java
src/org/tizen/emulator/manager/ui/renewal/widgets/ImageButton.java

index 33e29e6..aa50a0a 100644 (file)
@@ -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));
                                        }
index e9a9d10..1f4d9c7 100644 (file)
 
 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<GrayButton> buttonList = new ArrayList<GrayButton>();
+
        // 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);
index 226cc9d..16eed0c 100644 (file)
 
 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() {
index e57c591..639c7a2 100644 (file)
@@ -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;