[SRADA-779] Implements a search dialog
authorjoon.c.baek <joon.c.baek@samsung.com>
Thu, 9 Jun 2016 08:41:14 +0000 (17:41 +0900)
committerdongkyu6 lee <dongkyu6.lee@samsung.com>
Fri, 17 Jun 2016 01:51:49 +0000 (10:51 +0900)
Implements a search dialog,
Search dialog written based on FindDialog class.

Known issues:
Not support category, Just support 'ALL',
Dropdown arrow disappeared,
Only support Startup, Calltrace table,
Checkbox color doesn't match width guide,
Contents area doesn't match with guide,

Change-Id: Ib24265ce63efdc656f77b3a710bd25b1e91e7c81
Signed-off-by: joon.c.baek <joon.c.baek@samsung.com>
12 files changed:
org.tizen.dynamicanalyzer.appearance/src/org/tizen/dynamicanalyzer/resources/ColorResources.java
org.tizen.dynamicanalyzer.appearance/src/org/tizen/dynamicanalyzer/theme/DAThemeFlat.java
org.tizen.dynamicanalyzer.widgets/META-INF/MANIFEST.MF
org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/button/dropdown/DACustomDropdown.java [new file with mode: 0644]
org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/button/dropdown/DACustomDropdownListener.java [new file with mode: 0644]
org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/button/dropdown/DACustomDropdownRenderer.java [new file with mode: 0644]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/AnalyzerLabels.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/AnalyzerLabels.properties
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/DAAdvancedPopupMenu.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/SearchDialog.java [new file with mode: 0644]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/table/DATableComposite.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/table/DAWindowingTableComposite.java

index 1e986db..27f9988 100644 (file)
@@ -590,7 +590,10 @@ public class ColorResources {
        // preferences and remote device dialog
        public static Color DIALOG_TOP_LINE_COLOR = getColor("dialog_top_line_color"); //$NON-NLS-1$
        public static Color DIALOG_CONTENT_BACKGROUND = getColor("dialog_content_background"); //$NON-NLS-1$
+       public static Color DIALOG_BUTTON_BACKGROUND = getColor("dialog_button_background"); //$NON-NLS-1$
        public static Color DIALOG_MIDDLE_LINE_COLOR = getColor("dialog_middle_line_color"); //$NON-NLS-1$
+       public static Color DIALOG_BUTTON_LINE_COLOR = getColor("dialog_button_line_color"); //$NON-NLS-1$
+       public static Color DIALOG_TEXT_FONT_COLOR = getColor("dialog_text_font_color"); //$NON-NLS-1$
 
        // setting
        public static Color SETTING_STROKE = getColor("setting_stroke"); //$NON-NLS-1$
index 3e4abc7..832ebfd 100644 (file)
@@ -582,7 +582,10 @@ public class DAThemeFlat extends DATheme {
                /*** preferences and remote device dialog ***/          
                setColor("dialog_top_line_color", new RGB(204, 204, 204)); //$NON-NLS-1$
                setColor("dialog_content_background", new RGB(244, 244, 244)); //$NON-NLS-1$
+               setColor("dialog_button_background", new RGB(255, 255, 255)); //$NON-NLS-1$
                setColor("dialog_middle_line_color", new RGB(173, 173, 173)); //$NON-NLS-1$
+               setColor("dialog_button_line_color", new RGB(170, 170, 170)); //$NON-NLS-1$
+               setColor("dialog_text_font_color", new RGB(88, 88, 88)); //$NON-NLS-1$
                
                /*** setting ***/
                setColor("setting_stroke", new RGB(186, 186, 186)); //$NON-NLS-1$
index 31413c2..ef2cee8 100644 (file)
@@ -13,6 +13,7 @@ Export-Package: org.tizen.dynamicanalyzer.widgets,
  org.tizen.dynamicanalyzer.widgets.animation,
  org.tizen.dynamicanalyzer.widgets.button,
  org.tizen.dynamicanalyzer.widgets.button.checkbox,
+ org.tizen.dynamicanalyzer.widgets.button.dropdown,
  org.tizen.dynamicanalyzer.widgets.button.radio,
  org.tizen.dynamicanalyzer.widgets.button.splitButton,
  org.tizen.dynamicanalyzer.widgets.button.toggle,
@@ -29,4 +30,3 @@ Export-Package: org.tizen.dynamicanalyzer.widgets,
  org.tizen.dynamicanalyzer.widgets.timeline,
  org.tizen.dynamicanalyzer.widgets.timer,
  org.tizen.dynamicanalyzer.widgets.tooltip
-Import-Package: org.tizen.dynamicanalyzer.widgets.scale
diff --git a/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/button/dropdown/DACustomDropdown.java b/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/button/dropdown/DACustomDropdown.java
new file mode 100644 (file)
index 0000000..df1b208
--- /dev/null
@@ -0,0 +1,1062 @@
+package org.tizen.dynamicanalyzer.widgets.button.dropdown;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.util.Timer;\r
+import java.util.TimerTask;\r
+\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.events.DisposeEvent;\r
+import org.eclipse.swt.events.DisposeListener;\r
+import org.eclipse.swt.events.PaintEvent;\r
+import org.eclipse.swt.events.PaintListener;\r
+import org.eclipse.swt.graphics.Color;\r
+import org.eclipse.swt.graphics.Font;\r
+import org.eclipse.swt.graphics.GC;\r
+import org.eclipse.swt.graphics.Image;\r
+import org.eclipse.swt.graphics.Point;\r
+import org.eclipse.swt.graphics.Rectangle;\r
+import org.eclipse.swt.layout.FormAttachment;\r
+import org.eclipse.swt.layout.FormData;\r
+import org.eclipse.swt.layout.FormLayout;\r
+import org.eclipse.swt.widgets.Canvas;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Display;\r
+import org.eclipse.swt.widgets.Event;\r
+import org.eclipse.swt.widgets.Listener;\r
+import org.eclipse.swt.widgets.Shell;\r
+import org.tizen.dynamicanalyzer.util.Logger;\r
+import org.tizen.dynamicanalyzer.widgets.DAWidgetConstants;\r
+import org.tizen.dynamicanalyzer.widgets.button.DACustomButton;\r
+import org.tizen.dynamicanalyzer.widgets.button.DACustomButtonAttribute;\r
+import org.tizen.dynamicanalyzer.widgets.button.IDACustomButtonRenderer;\r
+import org.tizen.dynamicanalyzer.widgets.combo.DACustomComboPopupRenderer;\r
+import org.tizen.dynamicanalyzer.widgets.combo.IDACustomComboPopupRenderer;\r
+import org.tizen.dynamicanalyzer.widgets.combo.Messages;\r
+import org.tizen.dynamicanalyzer.widgets.helper.ColorResources;\r
+\r
+public class DACustomDropdown extends Canvas {\r
+       public static final int MAX_SIZE = 10;\r
+       public static final int STATE_NORMAL = 0;\r
+       public static final int STATE_HOVER = 1;\r
+       public static final int STATE_PUSH = 2;\r
+       public static final int STATE_DISABLE = 3;\r
+       public static final int STATE_DROP = 4;\r
+       \r
+       public static final int TEXT_ALIGN_CENTER = SWT.CENTER;\r
+       public static final int TEXT_ALIGN_LEFT = SWT.LEFT;\r
+       public static final int TEXT_ALIGN_RIGHT = SWT.RIGHT;\r
+\r
+       public static final int TYPE_IMAGE = 0;\r
+       public static final int TYPE_COLOR = 1;\r
+       public static final int TYPE_GRADATION = 2;\r
+\r
+       private static final int pageSize = 5;\r
+\r
+       Composite parent;\r
+       private Canvas dropdown = null;\r
+       private Canvas popup = null;\r
+       private int itemHeight = 0;\r
+       private int tmpItemIndex = 0;\r
+       private int itemIndex = 0;\r
+       private boolean dirty = false;\r
+       private Timer closeTimer = null;\r
+       private static final int CLOSE_WAITING_TIME = 500;\r
+       private List<String> items;\r
+       private List<Rectangle> rects = null;\r
+       private boolean enabled = true;\r
+       private Shell childShell = null;\r
+       private Shell parentShell = null;\r
+       private int selection = 0;\r
+       private int tmpSelection = 0;\r
+       private Font itemFont = null;\r
+       private Color itemFontColor = null;\r
+       private IDACustomComboPopupRenderer popupRenderer = new DACustomComboPopupRenderer();\r
+       \r
+       //Tooltip Disabled\r
+       //private DACustomdropdownTooltip tooltip = null;\r
+\r
+       // dropdown button\r
+       private int state = STATE_NORMAL; // 0 normal 1 hover 2 push 3 disable\r
+       protected DACustomButtonAttribute attr;\r
+       private boolean showSelectedText = true;\r
+       private DACustomDropdownRenderer dropdownRenderer = new DACustomDropdownRenderer();\r
+\r
+       // arrow button\r
+       private static final int arrowButtonHeight = 15;\r
+       private DACustomButton upArrowButton = null;\r
+       private DACustomButton downArrowButton = null;\r
+       private Image buttonUp = null;\r
+       private Image buttonDown = null;\r
+       private List<Color> arrowColors = null;\r
+       private List<Color> arrowOutlineColors = null;\r
+       private List<Image> arrowImages = null;\r
+       private IDACustomButtonRenderer buttonRenderer = null;\r
+       \r
+       public DACustomDropdown(Composite parent, int style) {\r
+               super(parent, style);\r
+               dropdown = this;\r
+\r
+               this.parent = parent;\r
+               parentShell = parent.getShell();\r
+               parentShell.addListener(SWT.Move, parentShellListener);\r
+               addPaintListener(dropdownPaintListener);\r
+               setForeground(ColorResources.WHITE);\r
+               addListeners();\r
+               initdropdown();\r
+               attr = new DACustomButtonAttribute();\r
+               attr.setAlign(TEXT_ALIGN_LEFT);\r
+       }\r
+\r
+       protected void addListeners() {\r
+               addListener(SWT.MouseEnter, dropdownMouseListener);\r
+               addListener(SWT.MouseHover, dropdownMouseListener);\r
+               addListener(SWT.MouseExit, dropdownMouseListener);\r
+               addListener(SWT.MouseDown, dropdownMouseListener);\r
+               addListener(SWT.MouseMove, dropdownMouseListener);\r
+               addListener(SWT.MouseUp, dropdownMouseListener);\r
+       }\r
+\r
+       public void setFontPoint(Point fontPoint) {\r
+               attr.setFontPoint(fontPoint);\r
+       }\r
+\r
+       public String getText() {\r
+               if (selection < 0) {\r
+                       return attr.getText();\r
+               }\r
+               if (getItems().size() > 0) {\r
+                       return getItems().get(itemIndex + selection);\r
+               }\r
+               return null;\r
+       }\r
+\r
+       public List<String> getItems() {\r
+               if (null == items) {\r
+                       items = new ArrayList<String>();\r
+               }\r
+               return items;\r
+       }\r
+       \r
+       private List<Rectangle> getRects() {\r
+               if (null == rects) {\r
+                       rects = new ArrayList<Rectangle>();\r
+               }\r
+               return rects;\r
+       }\r
+\r
+       private void changedropdownState(int s) {\r
+               state = s;\r
+               redraw();\r
+       }\r
+\r
+       public void addSelectionListener(DACustomDropdownListener listener) {\r
+               popupSelectionListener = listener;\r
+       }\r
+       \r
+       private Listener popupSelectionListener = new DACustomDropdownListener() {\r
+\r
+               @Override\r
+               public void selectionEvent(DACustomDropdown dropdown) {\r
+                       // TODO Auto-generated method stub\r
+                       Logger.debug("default selection" + dropdown.getText()); //$NON-NLS-1$\r
+               }\r
+       };\r
+       \r
+       private Listener parentShellListener = new Listener() {\r
+               @Override\r
+               public void handleEvent(Event event) {\r
+                       if (event.type == SWT.Move) {\r
+                               if (childShell != null && !childShell.isDisposed()) {\r
+                                       \r
+                                       // Tooltip Disabled\r
+                                       //if (null != tooltip) {\r
+                                       //      tooltip.close();\r
+                                       //}\r
+                                       childShell.close();\r
+                                       childShell = null;\r
+\r
+                               }\r
+                       }\r
+               }\r
+       };\r
+       \r
+       private Listener dropdownMouseListener = new Listener() {\r
+               @Override\r
+               public void handleEvent(Event event) {\r
+                       Canvas dropdownArea = (Canvas) event.widget;\r
+                       Rectangle rect = dropdownArea.getClientArea();\r
+                       if (enabled) {\r
+                               if (event.type == SWT.MouseEnter) {\r
+                                       changedropdownState(STATE_HOVER);\r
+                                       if (null != closeTimer) {\r
+                                               closeTimer.cancel();\r
+                                               closeTimer = null;\r
+                                       }\r
+                               }\r
+\r
+                               if (event.type == SWT.MouseHover) {\r
+                                       if (rect.contains(event.x, event.y)) {\r
+                                               if (0 != (event.stateMask & SWT.BUTTON1)) {\r
+                                                       changedropdownState(STATE_PUSH);\r
+                                               } else if (0 == (event.stateMask & SWT.BUTTON1)) {\r
+                                                       changedropdownState(STATE_HOVER);\r
+                                               }\r
+                                       }\r
+                               }\r
+\r
+                               if (event.type == SWT.MouseDown) {\r
+                                       changedropdownState(STATE_PUSH);\r
+                               }\r
+\r
+                               if (event.type == SWT.MouseUp) {\r
+                                       changedropdownState(STATE_HOVER);\r
+                                       if (childShell == null || childShell.isDisposed()) {\r
+                                               if (closeTimer != null) {\r
+                                                       closeTimer.cancel();\r
+                                                       closeTimer = null;\r
+                                               }\r
+                                               openChildShell();\r
+                                       } else {\r
+                                               childShell.close();\r
+                                               childShell = null;\r
+                                       }\r
+                               }\r
+\r
+                               if (event.type == SWT.MouseMove) {\r
+                                       if (!rect.contains(event.x, event.y)) {\r
+                                               changedropdownState(STATE_NORMAL);\r
+                                       } else if (!rect.contains(event.x, event.y)) {\r
+                                               if (0 != (event.stateMask & SWT.BUTTON1)) {\r
+                                                       changedropdownState(STATE_PUSH);\r
+                                               } else if (0 == (event.stateMask & SWT.BUTTON1)) {\r
+                                                       changedropdownState(STATE_HOVER);\r
+                                               }\r
+                                       }\r
+                               }\r
+\r
+                               if (event.type == SWT.MouseExit) {\r
+                                       changedropdownState(STATE_NORMAL);\r
+                                       if (event.x < rect.x || event.x >= rect.x + rect.width\r
+                                                       || event.y < rect.y ){\r
+                                               closePopup(CLOSE_WAITING_TIME);\r
+                                       }\r
+                               }\r
+                       }\r
+               }\r
+       };\r
+\r
+       private int getShellWidth() {\r
+               if (getItems().isEmpty()) {\r
+                       return 0;\r
+               }\r
+               int max = 0;\r
+               int size = items.size();\r
+               GC gc = new GC(parent.getDisplay(), SWT.NONE);\r
+               for (int i = 0; i < size; i++) {\r
+                       Point p = gc.textExtent(items.get(i), SWT.DRAW_MNEMONIC);\r
+                       if (p.x > max) {\r
+                               max = p.x;\r
+                       }\r
+               }\r
+               max += 10;\r
+               gc.dispose();\r
+               return max;\r
+       }\r
+\r
+       public int getItemHeight() {\r
+               return itemHeight;\r
+       }\r
+\r
+       public void setItemHeight(int height) {\r
+               itemHeight = height;\r
+       }\r
+\r
+       private void openChildShell() {\r
+               childShell = new Shell(parent.getShell(), SWT.NO_TRIM);\r
+               childShell.setLayout(new FormLayout());\r
+               Point p = dropdown.toDisplay(0, 0);\r
+               Rectangle rect = dropdown.getBounds();\r
+               int size = getItems().size();\r
+\r
+               int boundSize = (size > MAX_SIZE) ? MAX_SIZE : (size > 0) ? size : 1;\r
+\r
+               int textSize = getShellWidth() + 4;\r
+               int shellWidth = (textSize > rect.width) ? textSize : rect.width;\r
+               int height = 0;\r
+\r
+               if (getItemHeight() == 0) {\r
+                       height = rect.height;\r
+               } else {\r
+                       height = getItemHeight();\r
+               }\r
+               int shellHeight = height * boundSize + 5;\r
+\r
+               childShell.setSize(shellWidth, shellHeight);\r
+               childShell.setLocation(p.x, p.y + rect.height);\r
+               childShell.addDisposeListener(new DisposeListener() {\r
+\r
+                       @Override\r
+                       public void widgetDisposed(DisposeEvent e) {\r
+                               if (null != closeTimer) {\r
+                                       closeTimer.cancel();\r
+                                       closeTimer = null;\r
+                               }\r
+                       }\r
+               });\r
+               setSelect(attr.getText());\r
+\r
+               tmpSelection = selection;\r
+               tmpItemIndex = itemIndex;\r
+\r
+               popup = new Canvas(childShell, SWT.DOUBLE_BUFFERED);\r
+               popup.setData(this);\r
+               popup.setBackground(ColorResources.WHITE);\r
+               popup.addPaintListener(popupPaintListener);\r
+               popup.addListener(SWT.MouseUp, popupMouseEventListener);\r
+               popup.addListener(SWT.MouseMove, popupMouseEventListener);\r
+               popup.addListener(SWT.FocusIn, popupMouseEventListener);\r
+               popup.addListener(SWT.MouseUp, popupSelectionListener);\r
+               popup.addListener(SWT.MouseWheel, popupMouseEventListener);\r
+               popup.addListener(SWT.MouseExit, popupMouseEventListener);\r
+               popup.addListener(SWT.MouseEnter, popupMouseEventListener);\r
+\r
+               if (size > MAX_SIZE) {\r
+                       upArrowButton = makeButton();\r
+                       if (buttonUp == null) {\r
+                               upArrowButton.setText(Messages.DACustomCombo_1);\r
+                       } else {\r
+                               upArrowButton.setButtonImages(buttonUp, buttonUp, buttonUp, buttonUp);\r
+                       }\r
+                       FormData data = new FormData();\r
+                       data.top = new FormAttachment(0, 0);\r
+                       data.left = new FormAttachment(0, 0);\r
+                       data.right = new FormAttachment(100, 0);\r
+                       data.height = arrowButtonHeight;\r
+                       upArrowButton.setLayoutData(data);\r
+                       upArrowButton.addListener(SWT.MouseExit, upButtonMouseListener);\r
+                       upArrowButton.addListener(SWT.MouseEnter, upButtonMouseListener);\r
+                       upArrowButton.addListener(SWT.MouseUp, upButtonMouseListener);\r
+                       upArrowButton.addListener(SWT.FocusIn, upButtonMouseListener);\r
+                       shellHeight += arrowButtonHeight;\r
+                       if (tmpItemIndex > 0) {\r
+                               upArrowButton.setButtonEnabled(true);\r
+                       } else {\r
+                               upArrowButton.setButtonEnabled(false);\r
+                       }\r
+\r
+                       data = new FormData();\r
+                       data.top = new FormAttachment(upArrowButton, 0);\r
+                       data.left = new FormAttachment(0, 0);\r
+                       data.right = new FormAttachment(100, 0);\r
+                       data.height = height * boundSize + 5 - 2;\r
+                       popup.setLayoutData(data);\r
+\r
+                       downArrowButton = makeButton();\r
+                       if (null == buttonDown) {\r
+                               downArrowButton.setText(Messages.DACustomCombo_2);\r
+                       } else {\r
+                               downArrowButton.setButtonImages(buttonDown, buttonDown, buttonDown,\r
+                                               buttonDown);\r
+                       }\r
+                       data = new FormData();\r
+                       data.top = new FormAttachment(popup, 0);\r
+                       data.left = new FormAttachment(0, 0);\r
+                       data.right = new FormAttachment(100, 0);\r
+                       data.height = arrowButtonHeight;\r
+                       downArrowButton.setLayoutData(data);\r
+                       downArrowButton.addListener(SWT.MouseExit, downButtonMouseListener);\r
+                       downArrowButton.addListener(SWT.MouseEnter, downButtonMouseListener);\r
+                       downArrowButton.addListener(SWT.MouseUp, downButtonMouseListener);\r
+                       downArrowButton.addListener(SWT.FocusIn, downButtonMouseListener);\r
+                       shellHeight += arrowButtonHeight;\r
+                       if (tmpItemIndex + MAX_SIZE < size - 1) {\r
+                               downArrowButton.setButtonEnabled(true);\r
+                       } else {\r
+                               downArrowButton.setButtonEnabled(false);\r
+                       }\r
+\r
+                       childShell.setSize(shellWidth, shellHeight);\r
+               } else {\r
+                       FormData data = new FormData();\r
+                       data.top = new FormAttachment(0, 0);\r
+                       data.left = new FormAttachment(0, 0);\r
+                       data.right = new FormAttachment(100, 0);\r
+                       data.height = shellHeight - 2;\r
+                       popup.setLayoutData(data);\r
+               }\r
+\r
+               getRects().clear();\r
+               for (int i = 0; i < boundSize; i++) {\r
+                       Rectangle r = new Rectangle(2, 2 + i * height, shellWidth - 2, height);\r
+                       getRects().add(r);\r
+               }\r
+               childShell.open();\r
+       }\r
+\r
+       private PaintListener popupPaintListener = new PaintListener() {\r
+\r
+               @Override\r
+               public void paintControl(PaintEvent e) {\r
+                       List<String> items = getItems();\r
+                       List<String> input = new ArrayList<String>();\r
+                       int size = (items.size() > MAX_SIZE) ? MAX_SIZE : items.size();\r
+                       for (int i = 0; i < size; i++) {\r
+                               input.add(items.get(tmpItemIndex + i));\r
+                       }\r
+                       if (input.size() != getRects().size()) {\r
+                               int inputSize = input.size();\r
+                               int rectsSize = getRects().size();\r
+\r
+                               if (inputSize > rectsSize) {\r
+                                       reAdjustRectsAdd(rectsSize, inputSize);\r
+                               }\r
+                               if (inputSize < rectsSize) {\r
+                                       reAdjustRectsRemove(rectsSize, inputSize);\r
+                               }\r
+                               popupRenderer.draw(e.gc, popup, getRects(), tmpSelection,\r
+                                               input, itemFont, itemFontColor);\r
+                               childShell.close();\r
+                               childShell = null;\r
+                               openChildShell();\r
+                               redraw();\r
+                               //Tooltip Disabled\r
+                               //setTooltip(tooltip);\r
+\r
+                       } else {\r
+                               popupRenderer.draw(e.gc, popup, getRects(), tmpSelection,\r
+                                               input, itemFont, itemFontColor);\r
+                       }\r
+\r
+               }\r
+       };\r
+       \r
+       public void reAdjustRectsAdd(int sizeofRects, int sizeofInput){         \r
+               for(int i = sizeofRects; i<sizeofInput; i++)\r
+               {\r
+                       Rectangle rect = dropdown.getBounds();\r
+                       int textSize = getShellWidth() + 4;\r
+                       int shellWidth = (textSize > rect.width) ? textSize : rect.width;\r
+                       int height = 0;\r
+                       if (getItemHeight() == 0) {\r
+                               height = rect.height;\r
+                       } else {\r
+                               height = getItemHeight();\r
+                       }\r
+                       Rectangle r = new Rectangle(2, 50 + i * height, shellWidth - 2, height);\r
+                       getRects().add(i, r);\r
+               }\r
+       }\r
+       \r
+       public void reAdjustRectsRemove(int sizeofRects, int sizeofInput){              \r
+               for(int i = sizeofInput; i<sizeofRects; i++)\r
+               {\r
+                       getRects().remove(i);\r
+               }       \r
+       }\r
+       \r
+       public void setItemFont(Font itemFont) {\r
+               this.itemFont = itemFont;\r
+       }\r
+\r
+       public void setText(String text) {\r
+               if (!setSelect(text)) {\r
+                       attr.setText(text);\r
+                       selection = -1;\r
+                       redraw();\r
+               }\r
+       }\r
+       \r
+       public void setTextForce(String text) {\r
+                       attr.setText(text);\r
+                       selection = -1;\r
+                       redraw();\r
+       }\r
+\r
+       \r
+       private boolean setSelect(String text) {\r
+               if (getItems().isEmpty()) {\r
+                       return false;\r
+               }\r
+\r
+               int index = items.indexOf(text);\r
+               if (index < 0) {\r
+                       Logger.debug("dropdown indexing bug!");\r
+                       return false;\r
+               }\r
+\r
+               itemIndex = 0;\r
+               int size = items.size();\r
+               if (size < MAX_SIZE) {\r
+                       selection = index;\r
+                       select(selection);\r
+               } else if (index + MAX_SIZE >= size) {\r
+                       int lower = size - index;\r
+                       selection = MAX_SIZE - lower;\r
+                       itemIndex = size - MAX_SIZE;\r
+                       select(selection);\r
+               } else {\r
+                       if (index >= MAX_SIZE) { \r
+                               itemIndex = index / MAX_SIZE;\r
+                               itemIndex *= MAX_SIZE;\r
+                               index %= MAX_SIZE;\r
+                       }\r
+\r
+                       selection = index;\r
+                       select(selection);\r
+               }\r
+               return true;\r
+       }\r
+\r
+       public void upEvent() {\r
+               if (isShowSelectedText()) {\r
+                       if (getItems().size() > 0) {\r
+                               setText(getItems().get(itemIndex + selection));\r
+                       }\r
+               } else if (null != attr.getText()) {\r
+                       setText(attr.getText());\r
+               } else {\r
+                       setText(DAWidgetConstants.EMPTY_STRING);\r
+               }\r
+               if (childShell != null) {\r
+                       childShell.close();\r
+               }\r
+               childShell = null;\r
+       }\r
+\r
+       private Listener popupMouseEventListener = new Listener() {\r
+\r
+               @Override\r
+               public void handleEvent(Event event) {\r
+                       if (event.type == SWT.MouseMove) {\r
+                               List<Rectangle> rs = getRects();\r
+                               int size = rs.size();\r
+                               for (int i = 0; i < size; i++) {\r
+                                       if (rs.get(i).contains(event.x, event.y)) {\r
+                                               tmpSelection = i;\r
+                                               popup.redraw();\r
+                                               break;\r
+                                       }\r
+                               }\r
+                       }\r
+\r
+                       if (event.type == SWT.MouseUp) {\r
+                               selection = tmpSelection;\r
+                               itemIndex = tmpItemIndex;\r
+                       }\r
+\r
+                       if (event.type == SWT.MouseWheel) {\r
+                               int size = getItems().size();\r
+                               if (null != downArrowButton && !downArrowButton.isDisposed()\r
+                                               && null != upArrowButton && !upArrowButton.isDisposed()) {\r
+                                       if (event.count < 0) {\r
+                                               if (tmpItemIndex - event.count + MAX_SIZE >= size - 1) {\r
+                                                       tmpItemIndex = size - MAX_SIZE;\r
+                                                       downArrowButton.setButtonEnabled(false);\r
+                                               } else {\r
+                                                       tmpItemIndex -= event.count;\r
+                                               }\r
+\r
+                                               if (tmpItemIndex > 0) {\r
+                                                       upArrowButton.setButtonEnabled(true);\r
+                                               }\r
+                                       } else {\r
+\r
+                                               if (tmpItemIndex - event.count < 0) {\r
+                                                       tmpItemIndex = 0;\r
+                                                       upArrowButton.setButtonEnabled(false);\r
+                                               } else {\r
+                                                       tmpItemIndex -= event.count;\r
+                                               }\r
+\r
+                                               if (tmpItemIndex + event.count < size - 1) {\r
+                                                       downArrowButton.setButtonEnabled(true);\r
+                                               }\r
+                                       }\r
+                                       popup.redraw();\r
+                               }\r
+                       }\r
+\r
+                       if (event.type == SWT.MouseExit) {\r
+                               Canvas canvas = (Canvas) event.widget;\r
+                               Rectangle rect = canvas.getClientArea();\r
+                               if (event.x < rect.x || event.x >= rect.x + rect.width\r
+                                               || event.y < rect.y || event.y >= rect.y + rect.height) {\r
+                                       closePopup(CLOSE_WAITING_TIME);\r
+                               }\r
+                       }\r
+\r
+                       if (event.type == SWT.MouseEnter || event.type == SWT.FocusIn) {\r
+                               if (null != closeTimer) {\r
+                                       closeTimer.cancel();\r
+                                       closeTimer = null;\r
+                               }\r
+                       }\r
+\r
+                       // tooltip open and move\r
+               //      if (event.type == SWT.MouseEnter || event.type == SWT.MouseMove) {\r
+               //              if ((null != tooltip) && (tmpSelection >= 0)) {\r
+               //                      tooltip.setSeletedItem(items.get(tmpItemIndex + tmpSelection));\r
+               //                      tooltip.openAndMove(childShell);\r
+               //              }\r
+               //      }\r
+               }\r
+       };\r
+       \r
+       // Tooltip Disabled\r
+       //public void setTooltip(DACustomdropdownTooltip tooltip) {\r
+       //      this.tooltip = tooltip;\r
+       //}\r
+\r
+       public void setEnabled(boolean enabled) {\r
+               super.setEnabled(enabled);\r
+               this.enabled = enabled;\r
+               if (enabled) {\r
+                       changedropdownState(STATE_NORMAL);\r
+                       setBackgroundImageAndColor(STATE_NORMAL);\r
+               } else {\r
+                       changedropdownState(STATE_DISABLE);\r
+                       setBackgroundImageAndColor(STATE_DISABLE);\r
+\r
+                       Display.getDefault().syncExec(new Runnable() {\r
+                               @Override\r
+                               public void run() {\r
+                                       if (null != childShell && !childShell.isDisposed()) {\r
+                                               childShell.close();\r
+                                               childShell = null;\r
+                                       }\r
+                               }\r
+                       });\r
+               }\r
+       }\r
+\r
+       private void setBackgroundImageAndColor(int state) {\r
+               int drawType = attr.getDrawType();\r
+               if (drawType == TYPE_IMAGE) {\r
+                       setBackgroundImage(attr.getImage(state));\r
+               } else if (drawType == TYPE_COLOR) {\r
+                       setBackground(attr.getColor(state));\r
+               } else if (drawType == TYPE_GRADATION) {\r
+                       int index = state * 2;\r
+                       setForeground(attr.getColor(index));\r
+                       setBackground(attr.getColor(index + 1));\r
+               } else {\r
+                       Logger.debug("DACustomdropdown drawType : " + state);\r
+               }\r
+       }\r
+\r
+       private PaintListener dropdownPaintListener = new PaintListener() {\r
+               @Override\r
+               public void paintControl(PaintEvent e) {\r
+                       dropdownRenderer.draw(e.gc, dropdown, state, attr, isChildShellOpened());\r
+               }\r
+       };\r
+\r
+       public void setdropdownRender(DACustomDropdownRenderer newRenderer) {\r
+               dropdownRenderer = newRenderer;\r
+       }\r
+\r
+       public void setdropdownPopupRender(DACustomComboPopupRenderer newRenderer) {\r
+               popupRenderer = newRenderer;\r
+       }\r
+\r
+       public void add(String item) {\r
+               if (dirty) {\r
+                       getItems().add(item);\r
+               } else {\r
+                       getItems().set(0, item);\r
+                       dirty = true;\r
+               }\r
+       }\r
+\r
+       public void select(int index) {\r
+               selection = index;\r
+               if (isShowSelectedText()) {\r
+                       String text = items.get(itemIndex + selection);\r
+                       attr.setText(text);\r
+                       this.setToolTipText(text);\r
+               }\r
+               redraw();\r
+       }\r
+\r
+       public String getItem(int index) {\r
+               if (getItems().size() > 0) {\r
+                       return getItems().get(index);\r
+               }\r
+               return DAWidgetConstants.EMPTY_STRING;\r
+       }\r
+\r
+       public void setdropdownColors(Color normal, Color push, Color hover, Color disable) {\r
+               attr.setColor(STATE_NORMAL, normal);\r
+               attr.setColor(STATE_HOVER, hover);\r
+               attr.setColor(STATE_PUSH, push);\r
+               attr.setColor(STATE_DISABLE, disable);\r
+               attr.setDrawType(TYPE_COLOR);\r
+       }\r
+\r
+       public void setdropdownGradation(Color normalStart, Color normalEnd, Color pushStart,\r
+                       Color pushEnd, Color hoverStart, Color hoverEnd, Color disableStart,\r
+                       Color disableEnd) {\r
+               attr.setColor(0, normalStart);\r
+               attr.setColor(1, normalEnd);\r
+               attr.setColor(2, hoverStart);\r
+               attr.setColor(3, hoverEnd);\r
+               attr.setColor(4, pushStart);\r
+               attr.setColor(5, pushEnd);\r
+               attr.setColor(6, disableStart);\r
+               attr.setColor(7, disableEnd);\r
+               attr.setDrawType(TYPE_GRADATION);\r
+       }\r
+\r
+       public void setImages(Image normal, Image hover, Image push, Image disable) {\r
+               if (null == normal || null == hover || null == push || null == disable) {\r
+                       Logger.debug("DACustomdropdown setImages parameter is null");\r
+                       return;\r
+               }\r
+               attr.setImage(STATE_NORMAL, normal);\r
+               attr.setImage(STATE_HOVER, hover);\r
+               attr.setImage(STATE_PUSH, push);\r
+               attr.setImage(STATE_DISABLE, disable);\r
+               attr.setDrawType(TYPE_IMAGE);\r
+       }\r
+\r
+       public void setOutlineColors(Color normal, Color push, Color hover, Color disable) {\r
+               attr.setOutlineColor(STATE_NORMAL, normal);\r
+               attr.setOutlineColor(STATE_HOVER, hover);\r
+               attr.setOutlineColor(STATE_PUSH, push);\r
+               attr.setOutlineColor(STATE_DISABLE, disable);\r
+       }\r
+\r
+       public void setdropdownImages(Image normal, Image push, Image hover, Image disable) {\r
+               attr.setButtonImage(STATE_NORMAL, normal);\r
+               attr.setButtonImage(STATE_HOVER, hover);\r
+               attr.setButtonImage(STATE_PUSH, push);\r
+               attr.setButtonImage(STATE_DISABLE, disable);\r
+       }\r
+\r
+       public void setdropdownImagePoint(Point dropdownImagePoint) {\r
+               attr.setButtonImagePoint(dropdownImagePoint);\r
+       }\r
+\r
+       private Listener upButtonMouseListener = new Listener() {\r
+               @Override\r
+               public void handleEvent(Event event) {\r
+                       DACustomButton upButton = (DACustomButton) event.widget;\r
+                       Rectangle rect = upButton.getBounds();\r
+\r
+                       if (event.type == SWT.MouseExit) {\r
+                               if (event.y < rect.y || \r
+                                               event.x < rect.x || event.x >= rect.x + rect.width) {\r
+                                       closePopup(CLOSE_WAITING_TIME);\r
+                               }\r
+                       }\r
+\r
+                       if (event.type == SWT.MouseEnter || event.type == SWT.FocusIn) {\r
+                               if (null != closeTimer) {\r
+                                       closeTimer.cancel();\r
+                                       closeTimer = null;\r
+                               }\r
+                       }\r
+\r
+                       if (event.type == SWT.MouseUp) {\r
+                               if (!upArrowButton.isButtonEnabled()) {\r
+                                       return;\r
+                               }\r
+\r
+                               if (null != upArrowButton) {\r
+                                       Rectangle rectangle = upArrowButton.getBounds();\r
+                                       int x = event.x;\r
+                                       int y = event.y;\r
+\r
+                                       if (x < 0 || x > rectangle.width || y < 0 || y > rectangle.height) {\r
+                                               return;\r
+                                       }\r
+                               }\r
+\r
+                               int size = getItems().size();\r
+                               if (tmpItemIndex - pageSize < 0) {\r
+                                       tmpItemIndex = 0;\r
+                                       upArrowButton.setButtonEnabled(false);\r
+                               } else {\r
+                                       tmpItemIndex -= pageSize;\r
+                               }\r
+\r
+                               if (tmpItemIndex + pageSize < size - 1) {\r
+                                       downArrowButton.setButtonEnabled(true);\r
+                               }\r
+                               popup.redraw();\r
+                       }\r
+                       \r
+                       // tooltip close Tooltip Disabled\r
+                       //if (event.type == SWT.MouseEnter) {\r
+                       //      if (null != tooltip) {\r
+                       //              tooltip.close();\r
+                       //      }\r
+                       //}\r
+               }\r
+       };\r
+\r
+       private Listener downButtonMouseListener = new Listener() {\r
+               @Override\r
+               public void handleEvent(Event event) {\r
+                       DACustomButton upButton = (DACustomButton) event.widget;\r
+                       Rectangle rect = upButton.getClientArea();\r
+\r
+                       if (event.type == SWT.MouseExit) {\r
+                               if ( event.x < rect.x || event.x >= rect.x + rect.width\r
+                                               || event.y >= rect.y + rect.height ){\r
+                                       closePopup(CLOSE_WAITING_TIME);\r
+                               }\r
+                       }\r
+\r
+                       if (event.type == SWT.MouseEnter || event.type == SWT.FocusIn) {\r
+                               if (null != closeTimer) {\r
+                                       closeTimer.cancel();\r
+                                       closeTimer = null;\r
+                               }\r
+                       }\r
+\r
+                       if (event.type == SWT.MouseUp) {\r
+                               if (!downArrowButton.isButtonEnabled()) {\r
+                                       return;\r
+                               }\r
+\r
+                               if (null != downArrowButton) {\r
+                                       Rectangle rectangle = downArrowButton.getBounds();\r
+                                       int x = event.x;\r
+                                       int y = event.y;\r
+\r
+                                       if (x < 0 || x > rectangle.width || y < 0 || y > rectangle.height) {\r
+                                               return;\r
+                                       }\r
+                               }\r
+\r
+                               int size = getItems().size();\r
+                               if (tmpItemIndex + pageSize + MAX_SIZE >= size - 1) {\r
+                                       tmpItemIndex = size - MAX_SIZE;\r
+                                       downArrowButton.setButtonEnabled(false);\r
+                               } else {\r
+                                       tmpItemIndex += pageSize;\r
+                               }\r
+\r
+                               if (tmpItemIndex > 0) {\r
+                                       upArrowButton.setButtonEnabled(true);\r
+                               }\r
+                               popup.redraw();\r
+                       }\r
+                       \r
+                       // tooltip close Tooltip Disabled                       \r
+                       //if (event.type == SWT.MouseEnter) {\r
+                       //      if (null != tooltip) {\r
+                       //              tooltip.close();\r
+                       //      }\r
+                       //}\r
+               }\r
+       };\r
+\r
+       public boolean isDirty() {\r
+               return dirty;\r
+       }\r
+\r
+       public void initdropdown() {\r
+               getItems().clear();\r
+               tmpItemIndex = 0;\r
+               selection = 0;\r
+               items.add(DAWidgetConstants.EMPTY_STRING);\r
+               dirty = false;\r
+               itemIndex = 0;\r
+       }\r
+\r
+       public void initdropdownText(String text) {\r
+               getItems().clear();\r
+               tmpItemIndex = 0;\r
+               selection = 0;\r
+               items.add(text);\r
+               dirty = false;\r
+               itemIndex = 0;\r
+       }\r
+       \r
+       public void setdropdownButtonColor(Color normal, Color push, Color hover, Color disable) {\r
+               arrowColors = new ArrayList<Color>();\r
+               arrowColors.add(normal);\r
+               arrowColors.add(hover);\r
+               arrowColors.add(push);\r
+               arrowColors.add(disable);\r
+       }\r
+\r
+       public void setdropdownButtonImage(Image normal, Image push, Image hover, Image disable) {\r
+               arrowImages = new ArrayList<Image>();\r
+               arrowImages.add(normal);\r
+               arrowImages.add(push);\r
+               arrowImages.add(hover);\r
+               arrowImages.add(disable);\r
+       }\r
+\r
+       public void setdropdownButtonGradation(Color normalStart, Color normalEnd,\r
+                       Color pushStart, Color pushEnd, Color hoverStart, Color hoverEnd,\r
+                       Color disableStart, Color disableEnd) {\r
+               arrowColors = new ArrayList<Color>();\r
+               arrowColors.add(normalStart);\r
+               arrowColors.add(normalEnd);\r
+               arrowColors.add(hoverStart);\r
+               arrowColors.add(hoverEnd);\r
+               arrowColors.add(pushStart);\r
+               arrowColors.add(pushEnd);\r
+               arrowColors.add(disableStart);\r
+               arrowColors.add(disableEnd);\r
+       }\r
+\r
+       private List<Color> getArrowOutlineColors() {\r
+               if (null == arrowOutlineColors) {\r
+                       arrowOutlineColors = new ArrayList<Color>();\r
+               }\r
+               return arrowOutlineColors;\r
+       }\r
+\r
+       public void setArrowOutlineColors(Color normal, Color push, Color hover, Color disable) {\r
+               List<Color> dropdownArrowOutlineColors = getArrowOutlineColors();\r
+               dropdownArrowOutlineColors.add(normal);\r
+               dropdownArrowOutlineColors.add(hover);\r
+               dropdownArrowOutlineColors.add(push);\r
+               dropdownArrowOutlineColors.add(disable);\r
+       }\r
+\r
+       private DACustomButton makeButton() {\r
+               DACustomButton button = null;\r
+               if (arrowImages != null) {\r
+                       // image\r
+                       button = new DACustomButton(childShell, arrowImages.get(STATE_NORMAL),\r
+                                       arrowImages.get(STATE_PUSH), arrowImages.get(STATE_HOVER),\r
+                                       arrowImages.get(STATE_DISABLE));\r
+               } else if (arrowColors != null) {\r
+                       if (arrowColors.size() > 4) {\r
+                               // gradation\r
+                               button = new DACustomButton(childShell, arrowColors.get(STATE_NORMAL),\r
+                                               arrowColors.get(STATE_NORMAL + 1),\r
+                                               arrowColors.get(STATE_PUSH * 2),\r
+                                               arrowColors.get(STATE_PUSH * 2 + 1),\r
+                                               arrowColors.get(STATE_HOVER * 2),\r
+                                               arrowColors.get(STATE_HOVER * 2 + 1),\r
+                                               arrowColors.get(STATE_DISABLE * 2),\r
+                                               arrowColors.get(STATE_DISABLE * 2 + 1));\r
+                       } else {\r
+                               // color\r
+                               button = new DACustomButton(childShell, SWT.NONE);\r
+                               button.setColors(arrowColors.get(STATE_NORMAL),\r
+                                               arrowColors.get(STATE_PUSH), arrowColors.get(STATE_HOVER),\r
+                                               arrowColors.get(STATE_DISABLE));\r
+                       }\r
+\r
+                       if (arrowOutlineColors != null) {\r
+                               button.setOutlineColors(arrowOutlineColors.get(STATE_NORMAL),\r
+                                               arrowOutlineColors.get(STATE_PUSH),\r
+                                               arrowOutlineColors.get(STATE_HOVER),\r
+                                               arrowOutlineColors.get(STATE_DISABLE));\r
+                       }\r
+               } else {\r
+                       button = new DACustomButton(childShell, SWT.NONE);\r
+               }\r
+               if (null != buttonRenderer) {\r
+                       button.setRenderer(buttonRenderer);\r
+               }\r
+\r
+               return button;\r
+       }\r
+\r
+       public void setButtonRenderer(IDACustomButtonRenderer renderer) {\r
+               buttonRenderer = renderer;\r
+       }\r
+\r
+       public void setButtonImages(Image up, Image down) {\r
+               buttonUp = up;\r
+               buttonDown = down;\r
+       }\r
+\r
+       public boolean isChildShellOpened() {\r
+               if (childShell == null || childShell.isDisposed()) {\r
+                       return false;\r
+               }\r
+               return true;\r
+       }\r
+\r
+       public void closePopup(int interval) {\r
+               if (null == childShell || childShell.isDisposed()) {\r
+                       return;\r
+               }\r
+               closeTimer = new Timer();\r
+               closeTimer.schedule(new TimerTask() {\r
+                       public void run() {\r
+                               Display.getDefault().syncExec(new Runnable() {\r
+                                       @Override\r
+                                       public void run() {\r
+                                               if (null != childShell && !childShell.isDisposed()) {\r
+                                                       // tooltip close Tooltip Disabled\r
+                                                       //if (null != tooltip) {\r
+                                                       //      tooltip.close();\r
+                                                       //}\r
+\r
+                                                       childShell.close();\r
+                                                       childShell = null;\r
+                                                       redraw();\r
+                                               } else {\r
+                                                       Logger.debug("dropdown timer bug : try close child shell ");\r
+                                               }\r
+                                       }\r
+                               });\r
+                       }\r
+               }, interval);\r
+       }\r
+\r
+       public void setTextAlign(int align) {\r
+               attr.setAlign(align);\r
+       }\r
+\r
+       public void setdropdownFont(Font font) {\r
+               attr.setFont(font);\r
+       }\r
+\r
+       public void setFontColors(Color normal, Color push, Color hover, Color disable) {\r
+               attr.setFontColor(STATE_NORMAL, normal);\r
+               attr.setFontColor(STATE_PUSH, push);\r
+               attr.setFontColor(STATE_HOVER, hover);\r
+               attr.setFontColor(STATE_DISABLE, disable);\r
+       }\r
+\r
+       public void setItemFontColor(Color itemFontColor) {\r
+               this.itemFontColor = itemFontColor;\r
+       }\r
+\r
+       public boolean isShowSelectedText() {\r
+               return showSelectedText;\r
+       }\r
+\r
+       public void setShowSelectedText(boolean showSelectedText) {\r
+               this.showSelectedText = showSelectedText;\r
+       }\r
+\r
+       public void initDropdown() {\r
+               // TODO Auto-generated method stub\r
+               \r
+       }\r
+\r
+       public void setDropdownFont(Font combo) {\r
+               // TODO Auto-generated method stub\r
+               \r
+       }\r
+\r
+       public void setDropdownColors(Color black, Color black2, Color black3, Color gRAY_170) {\r
+               // TODO Auto-generated method stub\r
+               \r
+       }\r
+\r
+       public void setDropdownImagePoint(Point point) {\r
+               // TODO Auto-generated method stub\r
+               \r
+       }\r
+\r
+       public void setDropdownImages(Image dropArrowDownNor, Image dropArrowDownSel, Image dropArrowDownHover,\r
+                       Image dropArrowDownDim) {\r
+               // TODO Auto-generated method stub\r
+               \r
+       }\r
+}\r
diff --git a/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/button/dropdown/DACustomDropdownListener.java b/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/button/dropdown/DACustomDropdownListener.java
new file mode 100644 (file)
index 0000000..de23fa7
--- /dev/null
@@ -0,0 +1,20 @@
+package org.tizen.dynamicanalyzer.widgets.button.dropdown;\r
+\r
+import org.eclipse.swt.widgets.Canvas;\r
+import org.eclipse.swt.widgets.Event;\r
+import org.eclipse.swt.widgets.Listener;\r
+\r
+public abstract class DACustomDropdownListener implements Listener {\r
+\r
+       @Override\r
+       public void handleEvent(Event event) {\r
+               Canvas popup = (Canvas) event.widget;\r
+               DACustomDropdown combo = (DACustomDropdown) popup.getData();\r
+               if (null != combo) {\r
+                       selectionEvent(combo);\r
+                       combo.upEvent();\r
+               }\r
+       }\r
+\r
+       public abstract void selectionEvent(DACustomDropdown combo);\r
+}\r
diff --git a/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/button/dropdown/DACustomDropdownRenderer.java b/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/button/dropdown/DACustomDropdownRenderer.java
new file mode 100644 (file)
index 0000000..07268bb
--- /dev/null
@@ -0,0 +1,213 @@
+package org.tizen.dynamicanalyzer.widgets.button.dropdown;\r
+\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.graphics.Color;\r
+import org.eclipse.swt.graphics.Font;\r
+import org.eclipse.swt.graphics.GC;\r
+import org.eclipse.swt.graphics.Image;\r
+import org.eclipse.swt.graphics.Point;\r
+import org.eclipse.swt.graphics.Rectangle;\r
+import org.eclipse.swt.widgets.Canvas;\r
+import org.tizen.dynamicanalyzer.util.Logger;\r
+import org.tizen.dynamicanalyzer.widgets.DAWidgetConstants;\r
+import org.tizen.dynamicanalyzer.widgets.button.DACustomButton;\r
+import org.tizen.dynamicanalyzer.widgets.button.DACustomButtonAttribute;\r
+import org.tizen.dynamicanalyzer.widgets.button.IDACustomButtonRenderer;\r
+import org.tizen.dynamicanalyzer.widgets.combo.DACustomCombo;\r
+import org.tizen.dynamicanalyzer.widgets.helper.ColorResources;\r
+import org.tizen.dynamicanalyzer.widgets.helper.FontResources;\r
+\r
+public class DACustomDropdownRenderer implements IDACustomButtonRenderer {\r
+\r
+       public static final int STATE_COMBO_DROP = 4;\r
+       public static final int DEVICE_COMBO = 0;\r
+       public static final int APP_COMBO = 1;\r
+       public static final int PROCESS_COMBO = 2;\r
+\r
+       public void draw(GC gc, Canvas combo, int state,\r
+                       DACustomButtonAttribute attr, boolean childOpen) {\r
+               Rectangle rect = combo.getClientArea();\r
+               if (attr.getDrawType() == DACustomCombo.TYPE_IMAGE) {\r
+                       drawImageButton(gc, rect, state, attr);         \r
+               } else if (attr.getDrawType() == DACustomCombo.TYPE_COLOR\r
+                               || attr.getDrawType() == DACustomCombo.TYPE_GRADATION) {\r
+                       drawButton(gc, rect, state, attr, childOpen);\r
+               } else {\r
+                       Logger.debug("DACustomCombo drawType : " + state);\r
+               }\r
+       }\r
+\r
+       protected void drawImageButton(GC gc, Rectangle rect, int state,\r
+                       DACustomButtonAttribute attr) {\r
+               Image image = attr.getImage(state);\r
+               if (null == image) {\r
+                       return;\r
+               }\r
+\r
+               // draw image\r
+               gc.drawImage(image, rect.x, rect.y);\r
+\r
+               // draw text\r
+               drawButtonText(gc, rect, attr, state);\r
+               Rectangle clipping = new Rectangle(rect.x + rect.width - 17, rect.y, 17, rect.height);\r
+               gc.setClipping(clipping);\r
+               gc.drawImage(image, rect.x, rect.y);\r
+       }\r
+\r
+       protected void drawButton(GC gc, Rectangle rect, int state,\r
+                       DACustomButtonAttribute attr, boolean isChildOpen) {\r
+                       // draw color\r
+                       if (attr.getDrawType() == DACustomCombo.TYPE_COLOR) {\r
+                               gc.setBackground(attr.getColor(state));\r
+                               gc.fillRectangle(rect);\r
+                       } else if (attr.getDrawType() == DACustomCombo.TYPE_GRADATION) {\r
+                               gc.setBackground(attr.getColor(state));\r
+                               gc.fillRectangle(rect);         \r
+                       }\r
+\r
+                       // draw text\r
+                       drawButtonText(gc, rect, attr, state);\r
+\r
+                       // stroke\r
+                       Color c = gc.getForeground();\r
+                       Rectangle r = new Rectangle(rect.x, rect.y, rect.width - 1, rect.height - 1);\r
+                       if (null != attr.getOutlineColor(state)) {\r
+                               gc.setForeground(ColorResources.GRAY_170);\r
+                       } else {\r
+                               gc.setForeground(ColorResources.GRAY_170);\r
+                               return;\r
+                       }\r
+                       //gc.drawRectangle(r);\r
+                       gc.drawLine(rect.x, rect.y, rect.x + 168, rect.y);\r
+                       gc.drawLine(rect.x, rect.y + 24 - 1, rect.x + 168 + 10 , rect.y + 24 - 1);\r
+                       gc.drawLine(rect.x, rect.y, rect.x, rect.y + 24);\r
+\r
+                       //draw triangle\r
+                       gc.setForeground(c);\r
+\r
+                       // draw button image\r
+                       if(isChildOpen){\r
+                               drawButtonImage(gc, rect, attr, STATE_COMBO_DROP);\r
+                       }\r
+                       else{\r
+                               drawButtonImage(gc, rect, attr, state);\r
+                       }\r
+       }\r
+\r
+       protected void drawButtonImage(GC gc, Rectangle rect,\r
+                       DACustomButtonAttribute attr, int state) {\r
+\r
+               if (attr != null) {\r
+                       Image img = attr.getButtonImage(state);\r
+\r
+                       if(state == STATE_COMBO_DROP){\r
+                               // TODO: Assign image file\r
+                               img = null;\r
+                       }\r
+\r
+                       if(img != null) {\r
+                               Point p = null;\r
+                               Rectangle imgRect = img.getBounds();\r
+\r
+                               int x = 0, y = 0;\r
+                               if (null == (p = attr.getButtonImagePoint())) {\r
+                                       int width = rect.width - imgRect.width;\r
+                                       int height = rect.height - imgRect.height;\r
+                                       if (width > 0) {\r
+                                               x = width / 2;\r
+                                       } // else : the image is drawn without the left and right margins.\r
+\r
+                                       if (height > 0) {\r
+                                               y = height / 2;\r
+                                       } // else : the image is drawn without the top and bottom margin.\r
+                               } else {\r
+                                       // Combo Button text position\r
+                                       x = p.x + 10;\r
+                                       y = p.y;\r
+                               }\r
+\r
+                               gc.drawImage(img, x, y);\r
+                       } // else : imag is null\r
+               } // else : attr is null\r
+       }\r
+\r
+       protected void drawButtonText(GC gc, Rectangle rect,\r
+                       DACustomButtonAttribute attr, int state) {\r
+               Font font = attr.getFont();\r
+               Point fontPoint = attr.getFontPoint();\r
+               String text = attr.getText();\r
+               int align = attr.getAlign();\r
+\r
+               // set font style, size\r
+               if (null == font) {\r
+                       gc.setFont(FontResources.COMBO);\r
+               } else {\r
+                       gc.setFont(font);\r
+               }\r
+\r
+               // set font color\r
+               if (null != attr.getFontColor(state)) {\r
+                       gc.setForeground(attr.getFontColor(state));\r
+               } else {\r
+                       if (state == DACustomButton.STATE_DISABLE) {\r
+                               gc.setForeground(ColorResources.COMBO_DISABLE_FONT);\r
+                       } else {\r
+                               gc.setForeground(ColorResources.COMBO_ENABLE_FONT);\r
+                       }\r
+               }\r
+\r
+               if (text == null) {\r
+                       text = DAWidgetConstants.EMPTY_STRING;\r
+               } // else case text is not null\r
+\r
+               // text position\r
+               if (fontPoint == null) {\r
+                       Point p = gc.textExtent(text, SWT.DRAW_MNEMONIC);\r
+                       int textX = 0;\r
+                       if (align == DACustomCombo.TEXT_ALIGN_LEFT) {\r
+                               textX = 5;\r
+                       } else if (align == DACustomCombo.TEXT_ALIGN_RIGHT) {\r
+                               textX = rect.width - p.x;\r
+                       } else { // DACustomCombo.TEXT_ALIGN_CENTER\r
+                               textX = (rect.width / 2) - (p.x / 2);\r
+                       }\r
+                       String dispText = cuttingTextbyRectWidth(text,gc,rect.width - 60);\r
+                       gc.drawString(dispText, textX + 10, (rect.height - p.y) / 2, true);\r
+               } else {\r
+                       String dispText = cuttingTextbyRectWidth(text,gc,rect.width - 60);\r
+                       gc.drawString(dispText, fontPoint.x + 10, fontPoint.y, true);   \r
+               }\r
+       }\r
+\r
+       //// cutting String by input Width Pixel\r
+       private String cuttingTextbyRectWidth(String srcText, GC gc, int srcWidth){\r
+\r
+               String cutText = "";\r
+               int pixelSize = 0;\r
+               int cutIndex = 0;\r
+\r
+               for(char ch : srcText.toCharArray()){\r
+                       if(gc.getCharWidth(ch) == 1){\r
+                               /// char pixel val "1" is not real pixel value... (ex : 'i', 'l' take more 1 pixel)\r
+                               pixelSize += (gc.getFontMetrics().getAverageCharWidth() / 2);\r
+                       }\r
+                       else {\r
+                               pixelSize += (gc.getCharWidth(ch));\r
+                       }\r
+                       if(pixelSize > srcWidth){\r
+                               cutText = srcText.substring(0, cutIndex - 2);\r
+                               cutText = cutText + "...";\r
+                               return cutText;\r
+                       }\r
+                       cutIndex++;\r
+               }\r
+\r
+               return srcText;\r
+       }\r
+\r
+       @Override\r
+       public void draw(GC gc, Canvas canvas, int state, DACustomButtonAttribute attr) {\r
+               // TODO Auto-generated method stub\r
+\r
+       }\r
+}\r
index ab4286b..99e8e4e 100644 (file)
@@ -189,7 +189,17 @@ public class AnalyzerLabels extends NLS {
        public static String FIND_DLG_OPTION;
        public static String FIND_DLG_CASE_SENSITIVE;
        public static String FIND_DLG_WHOLE_WORD;
-       
+
+       public static String SEARCH_DLG_TITLE;
+       public static String SEARCH_DLG_DESC_PREFIX;
+       public static String SEARCH_DLG_DESC_POSTFIX;
+       public static String SEARCH_DLG_CANCEL_BUTTON;
+       public static String SEARCH_DLG_BACK_BUTTON;
+       public static String SEARCH_DLG_NEXT_BUTTON;
+       public static String SEARCH_DLG_OPTION;
+       public static String SEARCH_DLG_CASE_SENSITIVE;
+       public static String SEARCH_DLG_WHOLE_WORD;
+
        public static String FILTER_DLG_TITLE_PREFIX;
        public static String FILTER_DLG_TITLE_POSTFIX;
        public static String FILTER_DLG_ADD_BUTTON;
@@ -228,19 +238,23 @@ public class AnalyzerLabels extends NLS {
 
        public static String HEAP_MEMORY_WARNING_PRE;
        public static String HEAP_MEMORY_WARNING_POST;
-       
+
        public static String TIME_MS;
-       
+
        public static String DETAIL_INFORMATION_PACKAGE_NAME;
        public static String DETAIL_INFORMATION_PACKAGE_VERSION; 
        public static String DETAIL_INFORMATION_PACKAGE_INSTALL_TIME;
        public static String DETAIL_INFORMATION_APPLICATION_NAME; 
        public static String DETAIL_INFORMATION_APPLICATION_EXEC_PATH; 
-       
+
        // advanced menu text
        public static String ADVANCED_MENU_SEARCH;
        public static String ADVANCED_MENU_FILTER;
-       
+
+       // Search dialog
+       public static String SEARCH_DROPDOWN_TITLE;
+       public static String SEARCH_DROPDOWN_PID;
+
        static {
                NLS.initializeMessages(BUNDLE_NAME, AnalyzerLabels.class);
        }
index 6768947..0786f95 100644 (file)
@@ -165,6 +165,16 @@ FIND_DLG_OPTION=Option :
 FIND_DLG_CASE_SENSITIVE=Case sensitive
 FIND_DLG_WHOLE_WORD=Whole word
 
+SEARCH_DLG_TITLE=Search
+SEARCH_DLG_DESC_PREFIX=Search for
+SEARCH_DLG_DESC_POSTFIX= table
+SEARCH_DLG_CANCEL_BUTTON=Cancel
+SEARCH_DLG_BACK_BUTTON=Back
+SEARCH_DLG_NEXT_BUTTON=Next
+SEARCH_DLG_OPTION=Option
+SEARCH_DLG_CASE_SENSITIVE=Case sensitive
+SEARCH_DLG_WHOLE_WORD=Whole word
+
 FILTER_DLG_TITLE_PREFIX=Filter from
 FILTER_DLG_TITLE_POSTFIX= table
 FILTER_DLG_ADD_BUTTON=Add
@@ -205,3 +215,6 @@ DETAIL_INFORMATION_APPLICATION_EXEC_PATH=Application Exec Path :
 
 ADVANCED_MENU_SEARCH=Search
 ADVANCED_MENU_FILTER=Filter
+
+SEARCH_DROPDOWN_TITLE=All
+SEARCH_DROPDOWN_PID=Pid
index 8b37ec7..b5d0568 100644 (file)
@@ -83,8 +83,8 @@ public class DAAdvancedPopupMenu extends DAPopupMenu {
                                        public void run() {
                                                Shell shell = WorkbenchUtil.getWorkbenchWindow()
                                                                .getShell();
-                                               FindDialog findDialog = new FindDialog(shell, ownTable);
-                                               findDialog.open();
+                                               SearchDialog searchDialog = new SearchDialog(shell, ownTable);
+                                               searchDialog.open();
                                        }
                                });
                        }               
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/SearchDialog.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/SearchDialog.java
new file mode 100644 (file)
index 0000000..7d0d071
--- /dev/null
@@ -0,0 +1,458 @@
+/*
+ *  Dynamic Analyzer
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: 
+ * Jooyoul Lee <jy.exe.lee@samsung.com>
+ * Juyoung Kim <j0.kim@samsung.com>
+ *
+ * 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.
+ * 
+ * Contributors:
+ * - S-Core Co., Ltd
+ * 
+ */
+
+package org.tizen.dynamicanalyzer.ui.widgets;
+
+import java.util.List;
+
+import org.eclipse.nebula.widgets.grid.Grid;
+import org.eclipse.nebula.widgets.grid.GridItem;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.KeyListener;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Shell;
+import org.tizen.dynamicanalyzer.appearance.DesignConstants;
+import org.tizen.dynamicanalyzer.common.AnalyzerConstants;
+import org.tizen.dynamicanalyzer.constant.CommonConstants;
+import org.tizen.dynamicanalyzer.model.FindProperty;
+import org.tizen.dynamicanalyzer.nl.AnalyzerLabels;
+import org.tizen.dynamicanalyzer.resources.ColorResources;
+import org.tizen.dynamicanalyzer.resources.FontResources;
+import org.tizen.dynamicanalyzer.resources.ImageResources;
+import org.tizen.dynamicanalyzer.ui.widgets.table.DATableComposite;
+import org.tizen.dynamicanalyzer.ui.widgets.table.DATreeComposite;
+import org.tizen.dynamicanalyzer.widgets.button.DACustomButton;
+import org.tizen.dynamicanalyzer.widgets.button.DACustomButtonClickEventListener;
+import org.tizen.dynamicanalyzer.widgets.button.DACustomButtonRenderer;
+import org.tizen.dynamicanalyzer.widgets.button.checkbox.DACheckBox;
+import org.tizen.dynamicanalyzer.widgets.button.checkbox.DACheckboxSelectionListener;
+import org.tizen.dynamicanalyzer.widgets.button.dropdown.DACustomDropdown;
+import org.tizen.dynamicanalyzer.widgets.da.base.DAButton;
+import org.tizen.dynamicanalyzer.widgets.da.base.DAMessageBox;
+import org.tizen.dynamicanalyzer.widgets.da.base.DATextBox;
+
+public class SearchDialog extends DAMessageBox {
+
+       private static final int ENTER_KEY_CODE = 13;
+
+       final private int WIDTH = 430;
+       final private int HEIGHT = 230 - 7;     // Should remove 7 pixel on titlebar area at MAC
+
+       private DACustomDropdown categoryDropdown= null;
+       private DATextBox textBox = null;
+       private DAButton cancelButton = null;
+       private DAButton backButton = null;
+       private DAButton nextButton = null;
+       private DACheckBox caseButton = null;
+       private DACheckBox wholeWordButton = null;
+
+       private FindProperty findProperty = null;
+
+       private Grid table = null;
+       private String viewName = null;
+       private Composite composite = null;
+
+       public SearchDialog(Shell parentShell, Composite comp) {
+               super(parentShell);
+               if (comp instanceof DATableComposite) {
+                       this.table = ((DATableComposite) comp).getTable();
+                       viewName = ((DATableComposite) comp).getTableName();
+               } else if (comp instanceof DATreeComposite) {
+                       this.table = ((DATreeComposite) comp).getTable();
+                       viewName = ((DATreeComposite) comp).getTableName();
+               } else {
+                       table = null;
+                       return;
+               }
+               this.composite = comp;
+               findProperty = DATableComposite.getFindProferty();
+               findProperty.setIndex(table.getSelectionIndex());
+       }
+
+       protected boolean run() {
+               if (null == table) {
+                       return false;
+               }
+               int dialogLocationX = shell.getParent().getLocation().x + (shell.getParent().getSize().x - WIDTH)/2;
+               int dialogLocationY = shell.getParent().getLocation().y + (shell.getParent().getSize().y - HEIGHT)/2;
+               shell.setLocation(dialogLocationX, dialogLocationY);
+               shell.setSize(WIDTH, HEIGHT);
+               shell.setLayout(new FormLayout());
+               shell.setText(AnalyzerLabels.SEARCH_DLG_TITLE);
+               shell.setBackground(ColorResources.DIALOG_BG_UPPER);
+               shell.addPaintListener(new PaintListener() {
+                       public void paintControl(PaintEvent e) {
+                               e.gc.setForeground(ColorResources.DIALOG_TOP_LINE_COLOR);
+                               e.gc.drawLine(0, 0,  WIDTH, 0);
+                               e.gc.setForeground(ColorResources.DIALOG_BUTTON_LINE_COLOR);
+                               e.gc.drawLine(0,  139,  WIDTH, 139);
+                       }
+               });
+
+               Composite contentComp = new Composite(shell, SWT.NONE);
+               FormLayout contentLayout = new FormLayout();
+               contentComp.setLayout(contentLayout);
+               contentComp.setBackground(ColorResources.DIALOG_CONTENT_BACKGROUND);
+
+               FormData data = new FormData();
+               data.top = new FormAttachment(0, 1);
+               data.left = new FormAttachment(0, 0);
+               data.width = WIDTH;
+               data.height = 138;
+               contentComp.setLayoutData(data);
+
+               Label descriptionLabel = new Label(contentComp, SWT.TRANSPARENT);
+               data = new FormData();
+               data.top = new FormAttachment(0, 30);
+               data.left = new FormAttachment(0, 20);
+               data.height = 26;
+               data.width = WIDTH-20;
+               descriptionLabel.setLayoutData(data);
+               descriptionLabel.setBackground(ColorResources.DIALOG_CONTENT_BACKGROUND);
+               descriptionLabel.setForeground(ColorResources.DIALOG_TEXT_FONT_COLOR);
+               descriptionLabel.setText(AnalyzerLabels.SEARCH_DLG_DESC_PREFIX
+                                                                       + CommonConstants.SPACE + viewName + CommonConstants.SPACE
+                                                                       + AnalyzerLabels.SEARCH_DLG_DESC_POSTFIX);
+
+               categoryDropdown = makeDACustomDropdown(contentComp);
+               data = new FormData();
+               data.top = new FormAttachment(0, 30+26);
+               data.left = new FormAttachment(0, 20);
+               data.height = 24;
+               data.width = 96;
+               categoryDropdown.setLayoutData(data);
+               categoryDropdown.addListener(SWT.Selection, dropdownListener);
+
+               textBox = new DATextBox(contentComp, SWT.SINGLE);
+               data = new FormData();
+               data.top = new FormAttachment(0, 30+26);
+               data.left = new FormAttachment(0, 20+96+10);
+               data.height = 24;
+               data.width = 284;
+               textBox.setLayoutData(data);
+               textBox.setBackground(ColorResources.WHITE);
+               textBox.setForeground(ColorResources.BLACK);
+               // TODO: TextBox set outline color
+               // TODO: TextBox font size, cursor location
+               textBox.getControl().addKeyListener(keyListener);
+               textBox.setText(findProperty.getLastSearch());
+               textBox.getControl().setSelection(0, findProperty.getLastSearch().length());
+
+               Label optionLabel = new Label(contentComp, SWT.TRANSPARENT);
+               data = new FormData();
+               data.top = new FormAttachment(0, 30+26+24+16);
+               data.left = new FormAttachment(0, 20);
+               data.height = 14;
+               data.width = 40 + 66;
+               optionLabel.setLayoutData(data);
+               optionLabel.setBackground(ColorResources.DIALOG_CONTENT_BACKGROUND);
+               optionLabel.setForeground(ColorResources.DIALOG_TEXT_FONT_COLOR);
+               optionLabel.setText(AnalyzerLabels.SEARCH_DLG_OPTION);
+
+               caseButton = new DACheckBox(contentComp, SWT.NONE);
+               data = new FormData();
+               data.top = new FormAttachment(0, 30+26+24+16);
+               data.left = new FormAttachment(optionLabel, 0);
+               data.height = 14;
+               data.width = 14 + 4 + 80 + 38;
+               caseButton.setLayoutData(data);
+               caseButton.setBackground(ColorResources.DIALOG_CONTENT_BACKGROUND);
+               caseButton.setForeground(ColorResources.DIALOG_TEXT_FONT_COLOR);
+               caseButton.setText(AnalyzerLabels.SEARCH_DLG_CASE_SENSITIVE);
+               caseButton.addSelectionListener(caseButtonListener);
+               caseButton.setChecked(findProperty.isCaseSensitive());
+
+               wholeWordButton = new DACheckBox(contentComp, SWT.NONE);
+               data = new FormData();
+               data.top = new FormAttachment(0, 30+26+24+16);
+               data.left = new FormAttachment(caseButton, 0);
+               data.height = 14;
+               data.width = 14 + 4 + 130;
+               wholeWordButton.setLayoutData(data);
+               wholeWordButton.setBackground(ColorResources.DIALOG_CONTENT_BACKGROUND);
+               wholeWordButton.setForeground(ColorResources.DIALOG_TEXT_FONT_COLOR);
+               wholeWordButton.setText(AnalyzerLabels.SEARCH_DLG_WHOLE_WORD);
+               wholeWordButton.addSelectionListener(wholeWordButtonListener);
+               wholeWordButton.setChecked(findProperty.isWholeWord());
+
+               Composite buttonComp = new Composite(shell, SWT.NONE);
+               FormLayout buttonLayout = new FormLayout();
+               buttonComp.setLayout(buttonLayout);
+               buttonComp.setBackground(ColorResources.DIALOG_BUTTON_BACKGROUND);
+
+               data = new FormData();
+               data.top = new FormAttachment(0, 140);
+               data.left = new FormAttachment(0, 0);
+               data.width = WIDTH;
+               data.height = 60;
+               buttonComp.setLayoutData(data);
+
+               cancelButton = new DAButton(buttonComp, SWT.NONE);
+               data = new FormData();
+               data.top = new FormAttachment(0, 17);
+               data.left = new FormAttachment(100, DesignConstants.DA_BUTTON_WIDTH*(-1)*3-20-20);
+               data.height = 25;
+               data.width = DesignConstants.DA_BUTTON_WIDTH;
+               cancelButton.setLayoutData(data);
+               cancelButton.setText(AnalyzerLabels.SEARCH_DLG_CANCEL_BUTTON);
+               cancelButton.addClickListener(cancelButtonListener);
+
+               backButton = new DAButton(buttonComp, SWT.NONE);
+               data = new FormData();
+               data.top = new FormAttachment(0, 17);
+               data.left = new FormAttachment(100, DesignConstants.DA_BUTTON_WIDTH*(-1)*2-20-10);
+               data.height = 25;
+               data.width = DesignConstants.DA_BUTTON_WIDTH;
+               backButton.setLayoutData(data);
+               backButton.setText(AnalyzerLabels.SEARCH_DLG_BACK_BUTTON);
+               backButton.addClickListener(backButtonListener);
+
+               nextButton = new DAButton(buttonComp, SWT.NONE);
+               data = new FormData();
+               data.top = new FormAttachment(0, 17);
+               data.left = new FormAttachment(100, DesignConstants.DA_BUTTON_WIDTH*(-1)*1-20);
+               data.height = 25;
+               data.width = DesignConstants.DA_BUTTON_WIDTH;
+               nextButton.setLayoutData(data);
+               nextButton.setText(AnalyzerLabels.SEARCH_DLG_NEXT_BUTTON);
+               nextButton.addClickListener(nextButtonListener);
+
+               updateCategoryDropdown();
+               return true;
+       }
+
+       private DACustomButtonClickEventListener cancelButtonListener = new DACustomButtonClickEventListener() {
+
+               @Override
+               public void handleClickEvent(DACustomButton button) {
+                       shell.close();
+               }
+       };
+
+       private DACustomButtonClickEventListener backButtonListener = new DACustomButtonClickEventListener() {
+
+               @Override
+               public void handleClickEvent(DACustomButton button) {
+                       findProperty.setBackward(true);
+                       findProperty.setLastSearch(textBox.getText());
+                       executeFindCommand();
+               }
+       };
+
+       private DACustomButtonClickEventListener nextButtonListener = new DACustomButtonClickEventListener() {
+
+               @Override
+               public void handleClickEvent(DACustomButton button) {
+                       findProperty.setBackward(false);
+                       findProperty.setLastSearch(textBox.getText());
+                       executeFindCommand();
+               }
+       };
+
+       private KeyListener keyListener = new KeyListener() {
+
+               @Override
+               public void keyReleased(KeyEvent e) {
+                       if (null != textBox.getText() && !textBox.getText().isEmpty()) {
+                               nextButton.setButtonEnabled(true);
+
+                               if (e.keyCode == ENTER_KEY_CODE) {
+                                       findProperty.setLastSearch(textBox.getText());
+                                       executeFindCommand();
+                               }
+                       } else {
+                               nextButton.setButtonEnabled(false);
+                       }
+               }
+
+               @Override
+               public void keyPressed(KeyEvent e) {
+               }
+       };
+
+       private DACheckboxSelectionListener caseButtonListener = new DACheckboxSelectionListener() {
+
+               @Override
+               public void handleSelectionEvent(DACheckBox checkbox) {
+                       findProperty.setCaseSensitive(!findProperty.isCaseSensitive());
+                       caseButton.setChecked(findProperty.isCaseSensitive());
+               }
+       };
+
+       private DACheckboxSelectionListener wholeWordButtonListener = new DACheckboxSelectionListener() {
+
+               @Override
+               public void handleSelectionEvent(DACheckBox checkbox) {
+                       findProperty.setWholeWord(!findProperty.isWholeWord());
+                       wholeWordButton.setChecked(findProperty.isWholeWord());
+               }
+       };
+
+       private boolean executeFindCommand() {
+
+               int index = findProperty.getIndex();
+               GridItem[] items = table.getItems();
+               int itemCount = items.length;
+               String selectedColumn = categoryDropdown.getText();
+
+               if (itemCount != 0) {
+                       if (findProperty.isBackward()) {
+                               index = (index - 1 < 0) ? itemCount - 1 : index - 1;
+                       } else {
+                               index = (index + 1 > itemCount - 1) ? 0 : index + 1;
+                       }
+                       int findIndex = -1;
+                       findProperty.setIndex(index);
+                       if (composite instanceof DATableComposite) {
+                               findIndex = ((DATableComposite) composite)
+                                               .searchString(findProperty);
+                       } else if (composite instanceof DATreeComposite) {
+                               findIndex = ((DATreeComposite) composite)
+                                               .searchString(findProperty);
+                       } else {
+                               return false;
+                       }
+                       findProperty.setIndex(findIndex);
+                       return true;
+               }
+               return false;
+       }
+
+       public DACustomDropdown getCategoryDropdown() {
+               return categoryDropdown;
+       }
+
+       private Listener dropdownListener = new Listener() {
+
+               @Override
+               public void handleEvent(Event event) {
+                       // TODO Auto-generated method stub
+                       // TODO: implement
+                       // Selected item should limit to searching area as column
+                       return;
+               }
+       };
+
+       private boolean selectCategoryDropdown(String item) {
+               // TODO: implement
+               boolean ret = false;
+
+               List<String> categoryList = categoryDropdown.getItems();
+               int size = categoryList.size();
+               for (int i = 0 ; i < size ; i++) {
+                       //ret = table.getCategory(item);
+                       if (ret) {
+                               categoryDropdown.select(i);
+                               if (!item.isEmpty()) {
+                                       categoryDropdown.setToolTipText(item);
+                               }
+                       }
+               }
+               return ret;
+       }
+
+       public boolean setCategory(final String text) {
+               // TODO: implement, At launch search dialog, possible category have to setted.
+               return true;
+       }
+
+       public boolean updateCategoryDropdown() {
+               categoryDropdown.add("All");
+               /* TODO: Add column by init or update
+               categoryDropdown.add("Pid");
+               categoryDropdown.add("Tid");
+               categoryDropdown.add("Tag");
+               categoryDropdown.add("Message");
+               */
+               categoryDropdown.select(0);
+               redrawDropdown(categoryDropdown);
+               return true;
+       }
+
+       private void redrawDropdown(final DACustomDropdown dropdown) {
+               Display.getDefault().asyncExec(new Runnable() {
+                       public void run() {
+                               dropdown.redraw();
+                       }
+               });
+       }
+
+       private DACustomDropdown makeDACustomDropdown(Composite parent) {
+               DACustomDropdown dropdown = new DACustomDropdown(parent, SWT.NONE);
+               dropdown.setdropdownGradation(ColorResources.WHITE,
+                               ColorResources.WHITE, ColorResources.WHITE,
+                               ColorResources.WHITE, ColorResources.WHITE,
+                               ColorResources.WHITE, ColorResources.WHITE,
+                               ColorResources.WHITE);
+               dropdown.setOutlineColors(ColorResources.GRAY_130,
+                               ColorResources.GRAY_130,
+                               ColorResources.GRAY_130,
+                               ColorResources.GRAY_130);
+               dropdown.setDropdownImages(ImageResources.DROP_ARROW_DOWN_NOR,
+                               ImageResources.DROP_ARROW_DOWN_SEL,
+                               ImageResources.DROP_ARROW_DOWN_HOVER,
+                               ImageResources.DROP_ARROW_DOWN_DIM);
+               dropdown.setDropdownImagePoint(new Point(90, 9));
+               dropdown.setdropdownButtonColor(ColorResources.WHITE,
+                               ColorResources.WHITE,
+                               ColorResources.WHITE,
+                               ColorResources.WHITE);
+               dropdown.setArrowOutlineColors(ColorResources.GRAY_220,
+                               ColorResources.GRAY_220,
+                               ColorResources.GRAY_220,
+                               ColorResources.GRAY_220);
+               dropdown.setButtonImages(ImageResources.COMBO_DROPDOWN_UP,
+                               ImageResources.COMBO_DROPDOWN_DOWN);
+               dropdown.setFontPoint(new Point(5, 5));
+               dropdown.setEnabled(true);
+               dropdown.setDropdownFont(FontResources.COMBO);
+               dropdown.setItemFont(FontResources.DROPDOWN);
+               dropdown.setDropdownColors(ColorResources.BLACK,
+                               ColorResources.BLACK,
+                               ColorResources.BLACK,
+                               ColorResources.BLACK);
+               dropdown.setButtonRenderer(new DACustomButtonRenderer());
+
+               return dropdown;
+       }
+
+       public boolean updateCategoryDropdown(String newItem) {
+               // TODO: Add item to dropdown at start dialog
+               categoryDropdown.add(newItem);
+               return true;
+       }
+}
index 6573373..9013eab 100755 (executable)
@@ -70,7 +70,7 @@ import org.tizen.dynamicanalyzer.ui.common.PopupAnalysisMenuItemClickListener;
 import org.tizen.dynamicanalyzer.ui.range.RangeDataManager;
 import org.tizen.dynamicanalyzer.ui.widgets.DAGrid;
 import org.tizen.dynamicanalyzer.ui.widgets.FilterDialog;
-import org.tizen.dynamicanalyzer.ui.widgets.FindDialog;
+import org.tizen.dynamicanalyzer.ui.widgets.SearchDialog;
 import org.tizen.dynamicanalyzer.util.Logger;
 import org.tizen.dynamicanalyzer.util.WorkbenchUtil;
 import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenu;
@@ -230,7 +230,7 @@ public abstract class DATableComposite extends Composite {
                                                ctrlPressed = false;
                                                if (findEnabled) {
                                                        Shell shell = WorkbenchUtil.getWorkbenchWindow().getShell();
-                                                       FindDialog dialog = new FindDialog(shell, me);
+                                                       SearchDialog dialog = new SearchDialog(shell, me);
                                                        dialog.open();
                                                }
                                        }
index a3c73f7..103818f 100644 (file)
@@ -51,7 +51,7 @@ import org.tizen.dynamicanalyzer.model.FindProperty;
 import org.tizen.dynamicanalyzer.model.TableInput;
 import org.tizen.dynamicanalyzer.resources.ColorResources;
 import org.tizen.dynamicanalyzer.ui.widgets.DAGrid;
-import org.tizen.dynamicanalyzer.ui.widgets.FindDialog;
+import org.tizen.dynamicanalyzer.ui.widgets.SearchDialog;
 import org.tizen.dynamicanalyzer.util.CommonUtil;
 import org.tizen.dynamicanalyzer.util.Logger;
 import org.tizen.dynamicanalyzer.util.WorkbenchUtil;
@@ -199,7 +199,7 @@ public abstract class DAWindowingTableComposite extends DATableComposite {
                                                ctrlPressed = false;
                                                if (findEnabled) {
                                                        Shell shell = WorkbenchUtil.getWorkbenchWindow().getShell();
-                                                       FindDialog dialog = new FindDialog(shell, me);
+                                                       SearchDialog dialog = new SearchDialog(shell, me);
                                                        dialog.open();
                                                }
                                        }