mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-20 07:25:23 +02:00
[222829] [useractions] MoveUp/Down Broken in Work with User Actions Dialog
This commit is contained in:
parent
12ee882ba1
commit
33f5ea9a40
3 changed files with 161 additions and 25 deletions
|
@ -10,6 +10,7 @@ package org.eclipse.rse.internal.useractions.ui.uda;
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* IBM Corporation - initial API and implementation
|
* IBM Corporation - initial API and implementation
|
||||||
* Xuan Chen (IBM) - [222263] Need to provide a PropertySet Adapter for System Team View (cleanup some use action stuff)
|
* Xuan Chen (IBM) - [222263] Need to provide a PropertySet Adapter for System Team View (cleanup some use action stuff)
|
||||||
|
* Kevin Doyle (IBM) - [222829] MoveUp/Down Broken in Work with User Actions Dialog
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
/**
|
/**
|
||||||
* @author coulthar
|
* @author coulthar
|
||||||
|
@ -34,22 +35,26 @@ public interface ISystemUDAConstants {
|
||||||
* or for iSeries "Object" and "Member" domains
|
* or for iSeries "Object" and "Member" domains
|
||||||
*/
|
*/
|
||||||
public static final String XE_DOMAIN = "Domain"; //$NON-NLS-1$
|
public static final String XE_DOMAIN = "Domain"; //$NON-NLS-1$
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The name of the xml attribute of domain tags which
|
* The name of the xml attribute of domain tags which
|
||||||
* identifies the domain type. Its values will be
|
* identifies the domain type. Its values will be
|
||||||
* an untranslated name like "Object" or "Folder".
|
* an untranslated name like "Object" or "Folder".
|
||||||
*/
|
*/
|
||||||
public static final String XE_DOMTYPE = "DomainType"; //$NON-NLS-1$
|
public static final String XE_DOMTYPE = "DomainType"; //$NON-NLS-1$
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The name of the xml attribute of domain tags which
|
* The name of the xml attribute of domain tags which
|
||||||
* identifies the domain name. Its values will be
|
* identifies the domain name. Its values will be
|
||||||
* a translated name like "Object" or "Folder".
|
* a translated name like "Object" or "Folder".
|
||||||
*/
|
*/
|
||||||
public static final String XE_DOMNAME = "name"; //$NON-NLS-1$
|
public static final String XE_DOMNAME = "name"; //$NON-NLS-1$
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The name of the attribute we consistently use to store an element's name
|
* The name of the attribute we consistently use to store an element's name
|
||||||
*/
|
*/
|
||||||
public static final String NAME_ATTR = "name"; //$NON-NLS-1$
|
public static final String NAME_ATTR = "name"; //$NON-NLS-1$
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The type of the attribute we consistently use to store an element's name
|
* The type of the attribute we consistently use to store an element's name
|
||||||
*/
|
*/
|
||||||
|
@ -59,6 +64,12 @@ public interface ISystemUDAConstants {
|
||||||
* The name of the attribute we consistently use to store an element's original IBM-supplied name
|
* The name of the attribute we consistently use to store an element's original IBM-supplied name
|
||||||
*/
|
*/
|
||||||
public static final String ORIGINAL_NAME_ATTR = "OriginalName"; //$NON-NLS-1$
|
public static final String ORIGINAL_NAME_ATTR = "OriginalName"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The position in the list of other user actions a user action should show up in
|
||||||
|
*/
|
||||||
|
public static final String ORDER_ATTR = "Order"; //$NON-NLS-1$
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The name of the attribute we consistently use to store a release number
|
* The name of the attribute we consistently use to store a release number
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Kevin Doyle (IBM) - [222828] Icons for some Actions Missing
|
* Kevin Doyle (IBM) - [222828] Icons for some Actions Missing
|
||||||
* Kevin Doyle (IBM) - [240725] Add Null Pointer checking when there are no default user actions
|
* Kevin Doyle (IBM) - [240725] Add Null Pointer checking when there are no default user actions
|
||||||
* Kevin Doyle (IBM) - [239702] Copy/Paste doesn't work with User Defined Actions and Named Types
|
* Kevin Doyle (IBM) - [239702] Copy/Paste doesn't work with User Defined Actions and Named Types
|
||||||
|
* Kevin Doyle (IBM) - [222829] MoveUp/Down Broken in Work with User Actions Dialog
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
||||||
package org.eclipse.rse.internal.useractions.ui.uda;
|
package org.eclipse.rse.internal.useractions.ui.uda;
|
||||||
|
@ -34,6 +35,7 @@ import org.eclipse.jface.viewers.ITreeContentProvider;
|
||||||
import org.eclipse.jface.viewers.Viewer;
|
import org.eclipse.jface.viewers.Viewer;
|
||||||
import org.eclipse.rse.core.RSECorePlugin;
|
import org.eclipse.rse.core.RSECorePlugin;
|
||||||
import org.eclipse.rse.core.SystemResourceManager;
|
import org.eclipse.rse.core.SystemResourceManager;
|
||||||
|
import org.eclipse.rse.core.model.IProperty;
|
||||||
import org.eclipse.rse.core.model.IPropertySet;
|
import org.eclipse.rse.core.model.IPropertySet;
|
||||||
import org.eclipse.rse.core.model.IPropertySetContainer;
|
import org.eclipse.rse.core.model.IPropertySetContainer;
|
||||||
import org.eclipse.rse.core.model.ISystemProfile;
|
import org.eclipse.rse.core.model.ISystemProfile;
|
||||||
|
@ -666,20 +668,32 @@ public abstract class SystemUDBaseManager implements IResourceChangeListener, IS
|
||||||
IPropertySet element = elementWrapper.getElement();
|
IPropertySet element = elementWrapper.getElement();
|
||||||
IPropertySetContainer parentElement = element.getContainer();
|
IPropertySetContainer parentElement = element.getContainer();
|
||||||
IPropertySet[] allChildren = parentElement.getPropertySets();
|
IPropertySet[] allChildren = parentElement.getPropertySets();
|
||||||
for (int i = 0; i < allChildren.length; ++i)
|
|
||||||
|
IPropertySet elementBelow = null;
|
||||||
|
int elementOrder = getOrder(element);
|
||||||
|
// Find the element whose order index is 1 more then the current element
|
||||||
|
for (int i = 0; i < allChildren.length && elementBelow == null; ++i)
|
||||||
{
|
{
|
||||||
if (allChildren[i] == element)
|
// Get the order attribute of the current property set
|
||||||
{
|
int order = getOrder(allChildren[i]);
|
||||||
if (i < allChildren.length - 1) //not the last one
|
|
||||||
{
|
// Compare to the current elements order attribute
|
||||||
allChildren[i] = allChildren[i+1];
|
if (order != -1 && (elementOrder + 1) == order)
|
||||||
allChildren[i+1] = element;
|
elementBelow = allChildren[i];
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Swap the order for the 2 elements
|
||||||
|
if (elementBelow != null) {
|
||||||
|
elementBelow.addProperty(ISystemUDAConstants.ORDER_ATTR, Integer.toString(elementOrder));
|
||||||
|
element.addProperty(ISystemUDAConstants.ORDER_ATTR, Integer.toString(elementOrder + 1));
|
||||||
|
|
||||||
|
// Save User Data
|
||||||
|
setProfileIndexedInstanceVariable_hasChanged(elementWrapper.getProfile(), true);
|
||||||
saveUserData(elementWrapper.getProfile());
|
saveUserData(elementWrapper.getProfile());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Move given element up one in document, save document
|
* Move given element up one in document, save document
|
||||||
|
@ -690,20 +704,31 @@ public abstract class SystemUDBaseManager implements IResourceChangeListener, IS
|
||||||
IPropertySet element = elementWrapper.getElement();
|
IPropertySet element = elementWrapper.getElement();
|
||||||
IPropertySetContainer parentElement = element.getContainer();
|
IPropertySetContainer parentElement = element.getContainer();
|
||||||
IPropertySet[] allChildren = parentElement.getPropertySets();
|
IPropertySet[] allChildren = parentElement.getPropertySets();
|
||||||
for (int i = 0; i < allChildren.length; ++i)
|
|
||||||
|
IPropertySet elementAbove = null;
|
||||||
|
int elementOrder = getOrder(element);
|
||||||
|
for (int i = 0; i < allChildren.length && elementAbove == null; ++i)
|
||||||
{
|
{
|
||||||
if (allChildren[i] == element)
|
// Get the order attribute of the current property set
|
||||||
{
|
int order = getOrder(allChildren[i]);
|
||||||
if (i > 0) //not the first one
|
|
||||||
{
|
// Compare to the current elements order attribute
|
||||||
allChildren[i] = allChildren[i-1];
|
if (order != -1 && (elementOrder - 1) == order)
|
||||||
allChildren[i-1] = element;
|
elementAbove = allChildren[i];
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Swap the order for the 2 elements
|
||||||
|
if (elementAbove != null) {
|
||||||
|
elementAbove.addProperty(ISystemUDAConstants.ORDER_ATTR, Integer.toString(elementOrder));
|
||||||
|
element.addProperty(ISystemUDAConstants.ORDER_ATTR, Integer.toString(elementOrder - 1));
|
||||||
|
|
||||||
|
// Save User Data
|
||||||
|
setProfileIndexedInstanceVariable_hasChanged(elementWrapper.getProfile(), true);
|
||||||
saveUserData(elementWrapper.getProfile());
|
saveUserData(elementWrapper.getProfile());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prepares a given element for the clipboard.
|
* Prepares a given element for the clipboard.
|
||||||
|
@ -760,11 +785,28 @@ public abstract class SystemUDBaseManager implements IResourceChangeListener, IS
|
||||||
|
|
||||||
if (selectedElementWrapper.isDomain()) {
|
if (selectedElementWrapper.isDomain()) {
|
||||||
parentElement = selectedElement;
|
parentElement = selectedElement;
|
||||||
|
IPropertySet[] allChildren = parentElement.getPropertySets();
|
||||||
|
currentNodeClone.addProperty(ISystemUDAConstants.ORDER_ATTR, Integer.toString(allChildren.length));
|
||||||
|
|
||||||
parentElement.addPropertySet(currentNodeClone);
|
parentElement.addPropertySet(currentNodeClone);
|
||||||
pastedElement = currentNodeClone;
|
pastedElement = currentNodeClone;
|
||||||
} else {
|
} else {
|
||||||
parentElement = selectedElement.getContainer();
|
parentElement = selectedElement.getContainer();
|
||||||
//TODO - Xuan: need to take care of order here.
|
IPropertySet[] allChildren = parentElement.getPropertySets();
|
||||||
|
IPropertySet elementBelow = null;
|
||||||
|
int elementOrder = getOrder(selectedElement);
|
||||||
|
for (int i = 0; i < allChildren.length && elementBelow == null; ++i)
|
||||||
|
{
|
||||||
|
// Get the order attribute of the current property set
|
||||||
|
int order = getOrder(allChildren[i]);
|
||||||
|
|
||||||
|
// Increment the order value for each property set greater then the current element's as we
|
||||||
|
// insert the new pasted element right below the selected
|
||||||
|
if (order > elementOrder) {
|
||||||
|
allChildren[i].addProperty(ISystemUDAConstants.ORDER_ATTR, Integer.toString(order + 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
currentNodeClone.addProperty(ISystemUDAConstants.ORDER_ATTR, Integer.toString(elementOrder + 1));
|
||||||
parentElement.addPropertySet(currentNodeClone);
|
parentElement.addPropertySet(currentNodeClone);
|
||||||
pastedElement = currentNodeClone;
|
pastedElement = currentNodeClone;
|
||||||
}
|
}
|
||||||
|
@ -1014,6 +1056,12 @@ public abstract class SystemUDBaseManager implements IResourceChangeListener, IS
|
||||||
}
|
}
|
||||||
child.addProperty(ISystemUDAConstants.NAME_ATTR, uppercaseName() ? name.toUpperCase() : name);
|
child.addProperty(ISystemUDAConstants.NAME_ATTR, uppercaseName() ? name.toUpperCase() : name);
|
||||||
child.addProperty(ISystemUDAConstants.TYPE_ATTR, getTagName());
|
child.addProperty(ISystemUDAConstants.TYPE_ATTR, getTagName());
|
||||||
|
|
||||||
|
// Set the Order
|
||||||
|
IPropertySetContainer parentElement = child.getContainer();
|
||||||
|
IPropertySet[] allChildren = parentElement.getPropertySets();
|
||||||
|
child.addProperty(ISystemUDAConstants.ORDER_ATTR, Integer.toString(allChildren.length - 1)); // -1 the length because we are already part of the child list
|
||||||
|
|
||||||
SystemXMLElementWrapper newElementWrapper = null;
|
SystemXMLElementWrapper newElementWrapper = null;
|
||||||
|
|
||||||
newElementWrapper = createElementWrapper(child, profile, domain);
|
newElementWrapper = createElementWrapper(child, profile, domain);
|
||||||
|
@ -1287,4 +1335,15 @@ public abstract class SystemUDBaseManager implements IResourceChangeListener, IS
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int getOrder(IPropertySet elm) {
|
||||||
|
IProperty orderProperty = elm.getProperty(ISystemUDAConstants.ORDER_ATTR);
|
||||||
|
int order = -1;
|
||||||
|
|
||||||
|
if (orderProperty != null)
|
||||||
|
{
|
||||||
|
order = Integer.valueOf(orderProperty.getValue()).intValue();
|
||||||
|
}
|
||||||
|
return order;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
* Martin Oberhuber (Wind River) - [180562][api] dont implement ISystemUDAConstants
|
* Martin Oberhuber (Wind River) - [180562][api] dont implement ISystemUDAConstants
|
||||||
* Xuan Chen (IBM) - [222263] Need to provide a PropertySet Adapter for System Team View (cleanup some use action stuff)
|
* Xuan Chen (IBM) - [222263] Need to provide a PropertySet Adapter for System Team View (cleanup some use action stuff)
|
||||||
* Kevin Doyle (IBM) - [240725] Add Null Pointer checking when there are no default user actions
|
* Kevin Doyle (IBM) - [240725] Add Null Pointer checking when there are no default user actions
|
||||||
|
* Kevin Doyle (IBM) - [222829] MoveUp/Down Broken in Work with User Actions Dialog
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
||||||
package org.eclipse.rse.internal.useractions.ui.uda;
|
package org.eclipse.rse.internal.useractions.ui.uda;
|
||||||
|
@ -20,6 +21,7 @@ import org.eclipse.core.runtime.IAdaptable;
|
||||||
import org.eclipse.core.runtime.Platform;
|
import org.eclipse.core.runtime.Platform;
|
||||||
import org.eclipse.rse.core.model.IProperty;
|
import org.eclipse.rse.core.model.IProperty;
|
||||||
import org.eclipse.rse.core.model.IPropertySet;
|
import org.eclipse.rse.core.model.IPropertySet;
|
||||||
|
import org.eclipse.rse.core.model.IPropertySetContainer;
|
||||||
import org.eclipse.rse.core.model.ISystemProfile;
|
import org.eclipse.rse.core.model.ISystemProfile;
|
||||||
import org.eclipse.swt.graphics.Image;
|
import org.eclipse.swt.graphics.Image;
|
||||||
|
|
||||||
|
@ -205,6 +207,24 @@ public abstract class SystemXMLElementWrapper implements IAdaptable {
|
||||||
setUserChanged(true);
|
setUserChanged(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the value of this node's "order" attribute
|
||||||
|
*/
|
||||||
|
public int getOrder() {
|
||||||
|
IProperty orderProperty = elm.getProperty(ISystemUDAConstants.ORDER_ATTR);
|
||||||
|
int order = -1;
|
||||||
|
|
||||||
|
if (orderProperty != null)
|
||||||
|
{
|
||||||
|
order = Integer.valueOf(orderProperty.getValue()).intValue();
|
||||||
|
}
|
||||||
|
return order;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOrder(int order) {
|
||||||
|
elm.addProperty(ISystemUDAConstants.ORDER_ATTR, Integer.toString(order));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* For IBM-supplied elements that have been edited, returns the original IBM-supplied name
|
* For IBM-supplied elements that have been edited, returns the original IBM-supplied name
|
||||||
*/
|
*/
|
||||||
|
@ -283,7 +303,25 @@ public abstract class SystemXMLElementWrapper implements IAdaptable {
|
||||||
public void deleteElement() {
|
public void deleteElement() {
|
||||||
// Not intended for root. Only for Actions
|
// Not intended for root. Only for Actions
|
||||||
//elm.getParentNode().removeChild(elm);
|
//elm.getParentNode().removeChild(elm);
|
||||||
|
int elmOrder = getOrder();
|
||||||
elm.getContainer().removePropertySet(elm.getName());
|
elm.getContainer().removePropertySet(elm.getName());
|
||||||
|
IPropertySetContainer parentElement = elm.getContainer();
|
||||||
|
IPropertySet[] allChildren = parentElement.getPropertySets();
|
||||||
|
for (int i = 0; i < allChildren.length; i++) {
|
||||||
|
IProperty orderProperty = allChildren[i].getProperty(ISystemUDAConstants.ORDER_ATTR);
|
||||||
|
int order = -1;
|
||||||
|
if (orderProperty != null)
|
||||||
|
{
|
||||||
|
order = Integer.valueOf(orderProperty.getValue()).intValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Decrease the order of all elements greater then elmOrder
|
||||||
|
if (order > elmOrder) {
|
||||||
|
allChildren[i].addProperty(ISystemUDAConstants.ORDER_ATTR, Integer.toString(order - 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -426,6 +464,7 @@ public abstract class SystemXMLElementWrapper implements IAdaptable {
|
||||||
*/
|
*/
|
||||||
public static Vector getChildren(Vector children, IPropertySet parentElement, IPropertySet xdoc, ISystemProfile profile, ISystemXMLElementWrapperFactory factory, int domain) {
|
public static Vector getChildren(Vector children, IPropertySet parentElement, IPropertySet xdoc, ISystemProfile profile, ISystemXMLElementWrapperFactory factory, int domain) {
|
||||||
if (children == null) children = new Vector();
|
if (children == null) children = new Vector();
|
||||||
|
Vector ordered = new Vector();
|
||||||
String tagName = factory.getTagName();
|
String tagName = factory.getTagName();
|
||||||
|
|
||||||
IPropertySet[] subList = null;
|
IPropertySet[] subList = null;
|
||||||
|
@ -434,15 +473,42 @@ public abstract class SystemXMLElementWrapper implements IAdaptable {
|
||||||
else if (xdoc != null)
|
else if (xdoc != null)
|
||||||
subList = xdoc.getPropertySets();
|
subList = xdoc.getPropertySets();
|
||||||
if (subList != null) {
|
if (subList != null) {
|
||||||
|
Vector unordered = new Vector();
|
||||||
for (int idx = 0; idx < subList.length; idx++) {
|
for (int idx = 0; idx < subList.length; idx++) {
|
||||||
IPropertySet sn = subList[idx];
|
IPropertySet sn = subList[idx];
|
||||||
if (sn.getPropertyValue(ISystemUDAConstants.TYPE_ATTR).equals(tagName))
|
if (sn.getPropertyValue(ISystemUDAConstants.TYPE_ATTR).equals(tagName))
|
||||||
{
|
{
|
||||||
SystemXMLElementWrapper thisWrapper = factory.createElementWrapper(sn, profile, domain);
|
unordered.add(sn);
|
||||||
children.add(thisWrapper);
|
|
||||||
}
|
}
|
||||||
} // end for all subnodes
|
} // end for all subnodes
|
||||||
|
ordered.setSize(unordered.size());
|
||||||
|
for (int i = 0; i < unordered.size(); i++) {
|
||||||
|
int order = i;
|
||||||
|
// get the ordering
|
||||||
|
IPropertySet sn = ((IPropertySet) unordered.get(i));
|
||||||
|
IProperty orderProperty = sn.getProperty(ISystemUDAConstants.ORDER_ATTR);
|
||||||
|
if (orderProperty != null) {
|
||||||
|
order = Integer.valueOf(orderProperty.getValue()).intValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
SystemXMLElementWrapper thisWrapper = factory.createElementWrapper(sn, profile, domain);
|
||||||
|
try {
|
||||||
|
ordered.remove(order);
|
||||||
|
ordered.add(order, thisWrapper);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
} // end if sublist != null
|
} // end if sublist != null
|
||||||
|
// Set the order position of all attributes to handle 3.0 where we didn't have the order attribute
|
||||||
|
for (int i = 0; i < ordered.size(); i++) {
|
||||||
|
if (ordered.get(i) instanceof SystemXMLElementWrapper) {
|
||||||
|
SystemXMLElementWrapper element = (SystemXMLElementWrapper) ordered.get(i);
|
||||||
|
if (element != null)
|
||||||
|
element.setOrder(i);
|
||||||
|
}
|
||||||
|
children.add(ordered.get(i));
|
||||||
|
}
|
||||||
return children;
|
return children;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue