</xsl:when>
<xsl:when test="name() = 'gotoPage'">
</xsl:when>
+ <xsl:when test="name() = 'openUrl'">
+ </xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat($class_name, '.prototype.', @id, ' = ')"/>
<xsl:value-of select="concat('undefined;', $newline)"/>
</xsl:when>
<xsl:when test="name() = 'gotoPage'">
</xsl:when>
+<xsl:when test="name() = 'openUrl'">
+</xsl:when>
<xsl:otherwise>
<xsl:text>
/**
</xsl:if>
</xsl:for-each>
+<xsl:for-each select=".//tizen.page//*">
+<xsl:if test="name() = 'openUrl'">
+<xsl:if test="../@id != $page_name">
+<xsl:value-of select="concat($tab, $tab, $class_name, '.prototype.', ../@id, '.bind(')"/>
+<xsl:value-of select="concat('"', substring(@event, 3), '", ', 'function(event) { window.location.href = ', '"', @url, '"', ' });', $newline)"/>
+</xsl:if>
+</xsl:if>
+</xsl:for-each>
+
<xsl:value-of select="concat($newline, $tab, '});', $newline, $newline)"/>
<xsl:if test=".//tizen.page//*[@data-bind]">
/**
* Undoes a {@link SetPartMovePageEventCommand}.
*/
- // @Override
- // public void undo() {
- // part.setEventValue(eventName, oldEventValue, index);
- // }
+ @Override
+ public void undo() {
+ part.removeGotoPageEventValue(eventName);
+ }
}
--- /dev/null
+package org.tizen.webuibuilder.gef.commands;
+
+import org.eclipse.gef.commands.Command;
+import org.tizen.webuibuilder.model.Part;
+
+public class SetPartOpenUrlEventCommand extends Command {
+
+ private Part part;
+ private String eventName;
+ private String urlValue;
+
+ public SetPartOpenUrlEventCommand(Part model, String triggerNameSrc,
+ String urlValue) {
+ this.part = model;
+ this.eventName = triggerNameSrc;
+ this.urlValue = urlValue;
+ }
+
+ /**
+ * Checks whether a {@link SetPartOpenUrlEventCommand} can be executed.
+ *
+ * @return <code>true</code> if a {@link SetPartOpenUrlEventCommand} can be executed, and
+ * <code>false</code> otherwise
+ */
+ @Override
+ public boolean canExecute() {
+ if (part == null) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ /**
+ * Executes a {@link SetPartOpenUrlEventCommand}.
+ */
+ @Override
+ public void execute() {
+ if (canExecute()) {
+ part.setOpenUrlEventValue(eventName, urlValue);
+ }
+ }
+
+ /**
+ * Undoes a {@link SetPartOpenUrlEventCommand}.
+ */
+ @Override
+ public void undo() {
+ part.removeOpenUrlEventValue(eventName);
+ }
+
+}
private Map<String, CssSelector> selectors = new HashMap<String, CssSelector>();
private AbsolutePositionProvider absolutePositionProvider = null;
- private Map<String, GotoPageProperty> gotoPageproperties =
+ private Map<String, GotoPageProperty> gotoPageProperties =
new HashMap<String, GotoPageProperty>();
+ private Map<String, String> openUrlProperties = new HashMap<String, String>();
/**
* A dom element.
// fireEvent(new PartEvent(PartEvent.EventType.EVENT_CHANGED, this,
// eventName, oldValue));
// }
+
+ /**
+ * Resets event value corresponding event name.
+ *
+ * @param eventName
+ * an event name
+ */
+ public void resetEventValue(String eventName) {
+ events.remove(eventName);
+ }
public void setGotoPageEventValue(String eventName, String pageValue, String transitionValue) {
if (pageValue == null || transitionValue == null) {
}
if ((pageValue.equals(EMPTY)) || (transitionValue.equals(EMPTY))) {
- gotoPageproperties.put(eventName, null);
+ gotoPageProperties.remove(eventName);
} else {
- gotoPageproperties.put(eventName, new GotoPageProperty(pageValue, transitionValue));
+ gotoPageProperties.put(eventName, new GotoPageProperty(pageValue, transitionValue));
}
+ fireEvent(new PartEvent(PartEvent.EventType.EVENT_CHANGED, this, eventName, null));
}
public Map<String, GotoPageProperty> getGotoPageproperties() {
- return gotoPageproperties;
+ return gotoPageProperties;
}
public GotoPageProperty getGotoPageproperty(String eventName) {
- return gotoPageproperties.get(eventName);
+ return gotoPageProperties.get(eventName);
+ }
+
+ public void removeGotoPageEventValue(String eventName) {
+ gotoPageProperties.remove(eventName);
+ fireEvent(new PartEvent(PartEvent.EventType.EVENT_CHANGED, this, eventName, null));
+ }
+
+ public Map<String, String> getOpenUrlProperties() {
+ return openUrlProperties;
+ }
+
+ public String getOpenUrlEventValues(String eventName) {
+ return openUrlProperties.get(eventName);
}
- /**
- * Resets event value corresponding event name.
- *
- * @param eventName
- * an event name
- */
- public void resetEventValue(String eventName) {
- events.remove(eventName);
+ public void setOpenUrlEventValue(String eventName, String urlValue) {
+ if (urlValue == null ) {
+ return;
+ }
+
+ if (urlValue.equals(BuilderConstants.EMPTY)) {
+ openUrlProperties.remove(eventName);
+ } else {
+ String oldValue = getOpenUrlEventValues(eventName);
+ if (urlValue.equals(oldValue)) {
+ return;
+ }
+ openUrlProperties.put(eventName, urlValue);
+ }
+
+ fireEvent(new PartEvent(PartEvent.EventType.EVENT_CHANGED, this, eventName, null));
+ }
+
+ public void removeOpenUrlEventValue(String eventName) {
+ openUrlProperties.remove(eventName);
+ fireEvent(new PartEvent(PartEvent.EventType.EVENT_CHANGED, this, eventName, null));
}
/**
}
}
}
+
+ if ((partList.get(i).getOpenUrlProperties() != null)
+ && (!partList.get(i).getOpenUrlProperties().isEmpty())) {
+ for (Entry<String, String> url : partList.get(i).getOpenUrlProperties().entrySet()) {
+ String value = url.getValue();
+
+ if (value != null) {
+ targetPartList.get(i).setOpenUrlEventValue(url.getKey(), value);
+ }
+ }
+ }
if (partList.get(i).getChildren() != null) {
setActionProperties(targetPartList.get(i), partList.get(i));
part.setEventValue(eventAttr.getName(), eventAttr.getValue());
}
} else if (child.getNodeName().equals("gotoPage")) {
- List<String> strList = new ArrayList<String>();
-
attrList = child.getAttributes();
- for (int j = 0; j < attrList.getLength(); j++) {
- Attr eventAttr = (Attr) attrList.item(j);
- strList.add(eventAttr.getValue());
- }
- part.setGotoPageEventValue(strList.get(0), strList.get(1), strList.get(2));
-
+ String event = ((Attr)attrList.getNamedItem("event")).getValue();
+ String destinationPage = ((Attr)attrList.getNamedItem("destinationPage")).getValue();
+ String transition = ((Attr)attrList.getNamedItem("transition")).getValue();
+
+ part.setGotoPageEventValue(event, destinationPage, transition);
+ } else if (child.getNodeName().equals("openUrl")) {
+ attrList = child.getAttributes();
+ String event = ((Attr)attrList.getNamedItem("event")).getValue();
+ String url = ((Attr)attrList.getNamedItem("url")).getValue();
+
+ part.setOpenUrlEventValue(event, url);
} else {
childpart = parseElement(fileData, (Element)child, partFactory, selectors);
part.addChildWhenPageRead(childpart);
elem.appendChild(element);
}
}
+
+ for (Entry<String, String> openUrlEvent : part.getOpenUrlProperties().entrySet()) {
+ String value = openUrlEvent.getValue();
+ if (value != null) {
+ Element element = doc.createElement("openUrl");
+ element.setAttribute("event", openUrlEvent.getKey());
+ element.setAttribute("url", value);
+ elem.appendChild(element);
+ }
+ }
for (Part child : part.getChildren()) {
elem.appendChild(writePart(doc, child, includePid));
part.setEventValue(eventAttr.getName(), eventAttr.getValue());
}
} else if (childElem.getNodeName().equals("gotoPage")) {
- List<String> strList = new ArrayList<String>();
-
attrList = childElem.getAttributes();
- for (int j = 0; j < attrList.getLength(); j++) {
- Attr eventAttr = (Attr) attrList.item(j);
- strList.add(eventAttr.getValue());
- }
- part.setGotoPageEventValue(strList.get(0), strList.get(1), strList.get(2));
-
+ String event = ((Attr)attrList.getNamedItem("event")).getValue();
+ String destinationPage = ((Attr)attrList.getNamedItem("destinationPage")).getValue();
+ String transition = ((Attr)attrList.getNamedItem("transition")).getValue();
+
+ part.setGotoPageEventValue(event, destinationPage, transition);
+ } else if (childElem.getNodeName().equals("openUrl")) {
+ attrList = childElem.getAttributes();
+ String event = ((Attr)attrList.getNamedItem("event")).getValue();
+ String url = ((Attr)attrList.getNamedItem("url")).getValue();
+
+ part.setOpenUrlEventValue(event, url);
} else {
Part childpart = parseElement(childElem, partFactory);
part.addChildWhenPageRead(childpart);
elem.appendChild(element);
}
}
+
+ for (Entry<String, String> openUrlEvent : part.getOpenUrlProperties().entrySet()) {
+ String value = openUrlEvent.getValue();
+ if (value != null) {
+ Element element = doc.createElement("openUrl");
+ element.setAttribute("event", openUrlEvent.getKey());
+ element.setAttribute("url", value);
+ elem.appendChild(element);
+ }
+ }
for (Part child : part.getChildren()) {
elem.appendChild(writePart(doc, child, includePid));
ActionSelectBarComposite bar = addSelectionBar();
bar.setGotoPageUiRefresh();
}
+
+ String urlValue = model.getOpenUrlEventValues(triggerName);
+ if (urlValue != null) {
+ ActionSelectBarComposite bar = addSelectionBar();
+ bar.setOpenUrlUiRefresh();
+ }
}
}
--- /dev/null
+package org.tizen.webuibuilder.ui.views.properties.action;
+
+import org.tizen.webuibuilder.model.IPartListener;
+import org.tizen.webuibuilder.model.PartEvent;
+
+public class ActionEventDelegater implements IPartListener {
+
+ private ActionTab actionTab;
+
+ public ActionEventDelegater(ActionTab actionTab) {
+ this.actionTab = actionTab;
+ }
+
+ @Override
+ public void childAdded(PartEvent event) {
+ }
+
+ @Override
+ public void childMoved(PartEvent event) {
+ }
+
+ @Override
+ public void childRemoved(PartEvent event) {
+ }
+
+ @Override
+ public void propertyChanged(PartEvent event) {
+ }
+
+ @Override
+ public void positionChanged(PartEvent event) {
+ }
+
+ @Override
+ public void eventChanged(PartEvent event) {
+ actionTab.refresh();
+ }
+
+ @Override
+ public void visualPositionChanged(PartEvent event) {
+ }
+
+ @Override
+ public void needRefresh(PartEvent event) {
+ }
+
+}
--- /dev/null
+/*
+ * UI Builder
+ *
+ * Copyright (c) 2000 - 2014 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * 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.webuibuilder.ui.views.properties.action;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.FocusEvent;
+import org.eclipse.swt.events.FocusListener;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Text;
+import org.tizen.webuibuilder.BuilderConstants;
+import org.tizen.webuibuilder.gef.commands.SetPartOpenUrlEventCommand;
+
+
+/**
+ * gotoUrl ui composite making in action tab in properties view
+ *
+ */
+public class ActionOpenUrlComposite extends Composite implements IActionActionComposite {
+
+ private Composite parent;
+ private ActionEventComposite trigger;
+ private List<Composite> childComposites = new ArrayList<Composite>();
+ private Text urlText;
+
+ // private List<Method> methods = new ArrayList<Method>();
+
+ /**
+ * constructor
+ *
+ * @param parent
+ * {@link Composite}
+ * @param style
+ */
+ ActionOpenUrlComposite(Composite parent, int style, ActionEventComposite trigger) {
+ super(parent, style);
+
+ this.parent = parent;
+ this.trigger = trigger;
+
+ GridLayout layout = new GridLayout(1, false);
+ setLayout(layout);
+
+ init();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.swt.widgets.Widget#dispose()
+ */
+ @Override
+ public void dispose() {
+
+ if (childComposites != null)
+ childComposites.clear();
+
+ super.dispose();
+ }
+
+ /**
+ * initialize layout and composite
+ */
+ private void init() {
+ drawComponents();
+ this.layout();
+ parent.layout();
+ }
+
+ /**
+ * drawComponents
+ */
+ private void drawComponents() {
+
+ urlText = ActionCompositeUtils.createLabelAndText(this, "Url");
+ /* Button bt = ActionCompositeUtils.createLabelAndCheckbox(this, "Open in new window"); */
+
+ String url = trigger.getModel().getOpenUrlEventValues(trigger.getTriggerNameSrc());
+ if (url != null) {
+ urlText.setText(url);
+ }
+
+ addListenersToText(urlText);
+ }
+
+ private void addListenersToText(Text text) {
+ text.addListener(SWT.Traverse, new Listener() {
+
+ @Override
+ public void handleEvent(Event event) {
+
+ switch (event.type) {
+ case SWT.Traverse:
+ if (event.detail == SWT.TRAVERSE_RETURN) {
+ valueChanged();
+ } else if (event.detail == SWT.TRAVERSE_ESCAPE) {
+ ((ActionSelectBarComposite) parent).deleteCompositesCommnad();
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ });
+
+ text.addListener(SWT.MouseDoubleClick, new Listener() {
+
+ @Override
+ public void handleEvent(Event event) {
+
+ switch (event.type) {
+ case SWT.MouseDoubleClick:
+ valueChanged();
+ break;
+ default:
+ break;
+ }
+ }
+ });
+ }
+
+ private void valueChanged() {
+ String urlValue = urlText.getText();
+ if ((urlValue == null) || (urlValue.equals(BuilderConstants.EMPTY))) {
+ return;
+ }
+
+ trigger.getCommandStack().execute(new SetPartOpenUrlEventCommand(trigger.getModel(), trigger
+ .getTriggerNameSrc(), urlValue));
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.tizen.webuibuilder.animator.ui.action.IActionActionComposite#removeCommand()
+ */
+ @Override
+ public void removeCommand() {
+ trigger.getCommandStack().execute(new SetPartOpenUrlEventCommand(trigger.getModel(), trigger
+ .getTriggerNameSrc(), ""));
+
+ }
+}
public class ActionSelectBarComposite extends Composite {
public enum ActionSelecteTypes {
- RUN_JAVASCRIPT(0), GOTO_PAGE(1), GOTO_URL(2), START_ANIMATIONGROUP(3), PAUSE_ANIMATIONGROUP(
+ RUN_JAVASCRIPT(0), GOTO_PAGE(1), OPEN_URL(2), START_ANIMATIONGROUP(3), PAUSE_ANIMATIONGROUP(
4), CONTINUE_ANIMATIONGROUP(5), GOTOTIME_ANIMATIONGROUP(6), REMOVE(7), ENUM_MAX_SIZE(
8);
private String customEvent = null;
private static String[] actionListString = new String[] { "Run Java Script Function",
- "GO to Page..", "Go To URL..", "Start Animation Group..", "Pause Animation Group..",
+ "GO to Page..", "Open URL..", "Start Animation Group..", "Pause Animation Group..",
"Continue Animation Group..", "Go to Time in Animation Group.." };
/**
case 1: /* GoToPage */
createGoToPageComposite();
break;
- case 2: /* GoToURL */
- createGoToUrlComposite();
+ case 2: /* OpenURL */
+ createOpenUrlComposite();
break;
case 3: /* "Start Animation Group.." */
case 4: /* "Pause Animation Group..", */
/**
* createGoToPageComposite
*/
- private void createGoToUrlComposite() {
+ private void createOpenUrlComposite() {
- childComposite = new ActionGoToUrlComposite(thisComposite, style);
+ childComposite = new ActionOpenUrlComposite(thisComposite, style, triggerEvent);
childComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
}
selectCombo.select(ActionSelecteTypes.GOTO_PAGE.getIndex());
setGotoPageUiNSet();
}
+
+ /**
+ * setOpenUrlUiRefresh
+ */
+ public void setOpenUrlUiRefresh() {
+ selectCombo.select(ActionSelecteTypes.OPEN_URL.getIndex());
+ setOpenUrlUiNSet();
+ }
/**
* setEventHandlerUiNSet
private void setGotoPageUiNSet() {
createGoToPageComposite();
}
+
+ /**
+ * setOpenUrlUiNSet
+ */
+ private void setOpenUrlUiNSet() {
+ createOpenUrlComposite();
+ }
/**
* setAnimationUiNSet
private List<Method> actionsMethods = new ArrayList<Method>();
private final FormToolkit toolkit = new FormToolkit(Display.getCurrent());
+ private ActionEventDelegater delegater;
/**
* @param tabFolder
*/
public ActionTab(CTabFolder tabFolder, CommandStack commandStack, DesignerGoingBridge goingBridge) {
super(tabFolder, SWT.NONE, TabIndex.ACTION.getIndex(), goingBridge);
-
+ this.delegater = new ActionEventDelegater(this);
this.commandStack = commandStack;
init();
}
+
+ @Override
+ public void dispose() {
+ removeListeners();
+ }
+
+ @Override
+ public void setModel(List<Part> models) {
+ super.setModel(models);
+
+ removeListeners();
+ addListeners();
+ }
+
+ private void addListeners() {
+ Part model = getModel();
+ if (model != null) {
+ model.addPartListener(delegater);
+ }
+ }
+
+ private void removeListeners() {
+ Part model = getModel();
+ if (model != null) {
+ // TODO : support multi selection
+ model.removePartListener(delegater);
+ }
+ }
/**
* initialize layout and composite
return;
}
+ ActionEventComposite actionEventComposite;
+
// check already exist event handler in model
for (EventDescriptor event : events) {
- ActionEventComposite actionEventComposite =
+ actionEventComposite =
new ActionEventComposite(content, SWT.NONE, event, toolkit, model,
commandStack);
actionEventComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));