package org.tizen.dynamicanalyzer.ui.widgets;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Timer;
import org.eclipse.swt.custom.StackLayout;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.tizen.dynamicanalyzer.common.AnalyzerManager;
import org.tizen.dynamicanalyzer.common.DASelectionData;
import org.tizen.dynamicanalyzer.common.DesignConstants;
import org.tizen.dynamicanalyzer.model.DAView;
import org.tizen.dynamicanalyzer.resources.FontResources;
import org.tizen.dynamicanalyzer.swap.logparser.LogPackage;
import org.tizen.dynamicanalyzer.swap.model.data.LogData;
+import org.tizen.dynamicanalyzer.ui.page.DAPageComposite;
import org.tizen.dynamicanalyzer.ui.page.ViewAction;
+import org.tizen.dynamicanalyzer.ui.range.RangePage;
+import org.tizen.dynamicanalyzer.ui.timeline.TimelinePage;
import org.tizen.dynamicanalyzer.widgets.button.DACustomButton;
-import org.tizen.dynamicanalyzer.widgets.button.DACustomButtonClickEventListener;
public class DATabComposite extends DAView {
private Composite tabComposite = null;
private Composite contentsComposite = null;
private StackLayout stackLayout = null;
-
+
+ private DATabButton sourceButton = null;
+ private int targetButtonIndex = -1;
+ private int sourceButtonIndex = -1;
+
+ private boolean drag = false;
+
private int tabWidth = LONG_TAB_WIDTH;
public DATabComposite(Composite parent, int style) {
tabButton.setLayoutData(data);
final Composite tempChild = child;
- DACustomButtonClickEventListener buttonListener = new DACustomButtonClickEventListener() {
+
+ Listener tabMoveEvent = new Listener() {
@Override
- public void handleClickEvent(DACustomButton button) {
- stackLayout.topControl = tempChild;
- changeButtonState(tabButton);
- tabComposite.layout();
- contentsComposite.layout();
- ((ViewAction) tempChild).updateView();
+ public void handleEvent(Event event) {
+ Point cursorLocation = tabComposite.getDisplay().getCurrent().getCursorLocation();
+ Point curPosition = tabComposite.toControl(cursorLocation);
+
+ switch(event.type) {
+ case SWT.MouseDown:
+ drag = true;
+ sourceButton = (DATabButton) event.widget;
+ sourceButtonIndex = getButtons().indexOf(sourceButton);
+
+ break;
+ case SWT.MouseUp:
+ drag = false;
+ for (int i = 0; i < getButtons().size(); i++) {
+ Rectangle rec = getButtons().get(i).getBounds();
+ if (rec.contains(curPosition.x, 0)
+ && (event.y > rec.y && event.y < rec.y+ rec.height)) {
+ targetButtonIndex = i;
+ break;
+ } else {
+ targetButtonIndex = -1;
+ }
+ }
+
+ if (targetButtonIndex == sourceButtonIndex) {
+ stackLayout.topControl = tempChild;
+ changeButtonState(tabButton);
+ tabComposite.layout();
+ contentsComposite.layout();
+ tempChild.update();
+ ((ViewAction) tempChild).updateView();
+
+ return;
+ }
+
+ if (targetButtonIndex != -1) {
+ if (sourceButtonIndex == 0) { // source == first tab
+ // source
+ FormData data = new FormData();
+ data.top = new FormAttachment(0, 0);
+ data.bottom = new FormAttachment(100, 0);
+ data.left = new FormAttachment(getButtons().get(targetButtonIndex));
+ data.width = tabWidth;
+ sourceButton.setLayoutData(data);
+
+ // source+1
+ data = new FormData();
+ data.top = new FormAttachment(0, 0);
+ data.bottom = new FormAttachment(100, 0);
+ data.left = new FormAttachment(0, 0);
+ data.width = tabWidth;
+ getButtons().get(sourceButtonIndex + 1).setLayoutData(data);
+
+ // target+1
+ if (targetButtonIndex != getButtons().size()-1) {
+ data = new FormData();
+ data.top = new FormAttachment(0, 0);
+ data.bottom = new FormAttachment(100, 0);
+ data.left = new FormAttachment(getButtons().get(sourceButtonIndex));
+ data.width = tabWidth;
+ getButtons().get(targetButtonIndex+1).setLayoutData(data);
+ }
+
+ Collections.rotate(getButtons().subList(sourceButtonIndex, targetButtonIndex + 1), -1);
+ Collections.rotate(getTabChildren().subList(sourceButtonIndex, targetButtonIndex + 1), -1);
+
+ } else if (sourceButtonIndex == getButtons().size() - 1) { // source == last tab
+ // source
+ FormData data = new FormData();
+ data.top = new FormAttachment(0, 0);
+ data.bottom = new FormAttachment(100, 0);
+ if (targetButtonIndex != 0) {
+ data.left = new FormAttachment(getButtons().get(targetButtonIndex - 1));
+ } else {
+ data.left = new FormAttachment(0, 0);
+ }
+ data.width = tabWidth;
+ sourceButton.setLayoutData(data);
+
+ // target
+ data = new FormData();
+ data.top = new FormAttachment(0, 0);
+ data.bottom = new FormAttachment(100, 0);
+ data.left = new FormAttachment(getButtons().get(sourceButtonIndex));
+ data.width = tabWidth;
+ ((DATabButton) getButtons().get(targetButtonIndex)).setLayoutData(data);
+
+ Collections.rotate(getButtons().subList(targetButtonIndex, sourceButtonIndex + 1), 1);
+ Collections.rotate(getTabChildren().subList(targetButtonIndex, sourceButtonIndex + 1), 1);
+
+ } else { // first tab < source < last tab
+ // source
+ FormData data = new FormData();
+
+ if (sourceButtonIndex < targetButtonIndex) { //forward
+ // source
+ data = new FormData();
+ data.top = new FormAttachment(0, 0);
+ data.bottom = new FormAttachment(100, 0);
+ data.left = new FormAttachment(getButtons().get(targetButtonIndex));
+ data.width = tabWidth;
+ sourceButton.setLayoutData(data);
+
+ // source +1
+ data = new FormData();
+ data.top = new FormAttachment(0, 0);
+ data.bottom = new FormAttachment(100, 0);
+ data.left = new FormAttachment(getButtons().get(sourceButtonIndex - 1));
+ data.width = tabWidth;
+ getButtons().get(sourceButtonIndex + 1).setLayoutData(data);
+
+ // target+1
+ if (targetButtonIndex != getButtons().size()-1) {
+ data = new FormData();
+ data.top = new FormAttachment(0, 0);
+ data.bottom = new FormAttachment(100, 0);
+ data.left = new FormAttachment(getButtons().get(sourceButtonIndex));
+ data.width = tabWidth;
+ getButtons().get(targetButtonIndex + 1).setLayoutData(data);
+ }
+
+ Collections.rotate(getButtons().subList(sourceButtonIndex, targetButtonIndex + 1), -1);
+ Collections.rotate(getTabChildren().subList(sourceButtonIndex, targetButtonIndex + 1), -1);
+
+ } else { //backward
+ // source
+ data = new FormData();
+ data.top = new FormAttachment(0, 0);
+ data.bottom = new FormAttachment(100, 0);
+ if (targetButtonIndex == 0) {
+ data.left = new FormAttachment(0,0);
+ } else {
+ data.left = new FormAttachment(getButtons().get(targetButtonIndex - 1));
+ }
+ data.width = tabWidth;
+ sourceButton.setLayoutData(data);
+
+ // source +1
+ data = new FormData();
+ data.top = new FormAttachment(0, 0);
+ data.bottom = new FormAttachment(100, 0);
+ data.left = new FormAttachment(getButtons().get(sourceButtonIndex - 1));
+ data.width = tabWidth;
+ getButtons().get(sourceButtonIndex + 1).setLayoutData(data);
+
+ // tartget
+ data = new FormData();
+ data.top = new FormAttachment(0, 0);
+ data.bottom = new FormAttachment(100, 0);
+ data.left = new FormAttachment(getButtons().get(sourceButtonIndex));
+ data.width = tabWidth;
+ getButtons().get(targetButtonIndex).setLayoutData(data);
+
+ Collections.rotate(getButtons().subList(targetButtonIndex, sourceButtonIndex + 1), 1);
+ Collections.rotate(getTabChildren().subList(targetButtonIndex, sourceButtonIndex + 1), 1);
+ }
+ }
+ }
+
+ stackLayout.topControl = tempChild;
+ tabComposite.layout();
+ contentsComposite.layout();
+
+ break;
+ case SWT.MouseMove:
+ if(drag){
+ DATabButton selectedBtn = (DATabButton)event.widget;
+ for (int i = 0; i < getButtons().size(); i++) {
+ Rectangle r = getButtons().get(i).getBounds();
+ DATabButton btn = (DATabButton) getButtons().get(i);
+
+ if (selectedBtn.equals(btn)) {
+ btn.setGradationColor(DACustomButton.STATE_DISABLE,
+ ColorResources.TAB_SELECTED_COLOR_START,
+ ColorResources.TAB_SELECTED_COLOR_END);
+ btn.setButtonEnabled(false);
+ stackLayout.topControl = tempChild;
+ tabComposite.layout();
+ contentsComposite.layout();
+
+ } else {
+ if (r.contains(curPosition.x, 0)
+ && (event.y > r.y && event.y < r.y+ r.height)) {
+ btn.changeButtonState(btn.STATE_HOVER);
+ } else {
+ btn.changeButtonState(btn.STATE_NORMAL);
+ }
+ }
+ }
+ }
+ break;
+ }
}
};
- tabButton.addClickListener(buttonListener);
-
+ tabButton.addListener(SWT.MouseUp, tabMoveEvent);
+ tabButton.addListener(SWT.MouseDown, tabMoveEvent);
+ tabButton.addListener(SWT.MouseMove, tabMoveEvent);
+
childrenMap.put(ID, child);
buttonMap.put(ID, tabButton);
getButtons().add(tabButton); // TODO : think about button map??
Composite child = childrenMap.get(ID);
getTabChildren().remove(child);
childrenMap.remove(ID);
+ tabComposite.layout();
+
final DACustomButton button = buttonMap.get(ID);
if (!usingAnimation) {
button.setLayoutData(null);
getButtons().remove(button);
buttonMap.remove(ID);
- tabComposite.layout();
} else {
Display.getDefault().syncExec(new Runnable() {
@Override
}
}
}
-
+
private synchronized List<Composite> getTabChildren() {
if (null == children) {
children = new ArrayList<Composite>();