How to make as sel list item go up one position in the list

sseguron

New Member
I'm trying to find a easy way to make an element in a selection list go up one position. Basically it is the result of using the 'up' button for a selection list.

I cannot find a simple way, I may not see an easy solution.

Thanks for your help.

:rolleyes: :rolleyes:
 
These work correctly only when each item in the selection list is unique in value.

To move up use:

SELECT-1:SCREEN-VALUE = SELECT-1:ENTRY(SELECT-1:LOOKUP(SELECT-1:SCREEN-VALUE) - 1).

To move down use:

SELECT-1:SCREEN-VALUE = SELECT-1:ENTRY(SELECT-1:LOOKUP(SELECT-1:SCREEN-VALUE) + 1).

To move to the first item:

SELECT-1:SCREEN-VALUE = SELECT-1:ENTRY(1).

To move to the last item use:

SELECT-1:SCREEN-VALUE = SELECT-1:ENTRY(SELECT-1:NUM-ITEMS).

Changing the position of an item is a bit more difficult. Basically, you need to remove the item from the list and then re-add it at the new position.

In the definitions section, define a variable to hold the current index of the selected item.

DEFINE VARIABLE iIndex AS INTEGER NO-UNDO.

To move an item up use:

SELECT-1:pRIVATE-DATA = SELECT-1:SCREEN-VALUE.
iIndex = SELECT-1:LOOKUP(SELECT-1:pRIVATE-DATA).
SELECT-1:DELETE(SELF:pRIVATE-DATA).
SELECT-1:INSERT(SELF:pRIVATE-DATA,iIndex - 1).
SELECT-1:SCREEN-VALUE = SELECT-1:pRIVATE-DATA.
APPLY "VALUE-CHANGED" TO SELECT-1.

To move an item down use:

SELECT-1:pRIVATE-DATA = SELECT-1:SCREEN-VALUE.
iIndex = SELECT-1:LOOKUP(SELECT-1:pRIVATE-DATA).
SELECT-1:DELETE(SELF:pRIVATE-DATA).
SELECT-1:INSERT(SELF:pRIVATE-DATA,iIndex + 1).
SELECT-1:SCREEN-VALUE = SELECT-1:pRIVATE-DATA.
APPLY "VALUE-CHANGED" TO SELECT-1.

To move an item to the top use:
SELECT-1:pRIVATE-DATA = SELECT-1:SCREEN-VALUE.
SELECT-1:DELETE(SELF:pRIVATE-DATA).
SELECT-1:INSERT(SELF:pRIVATE-DATA,1).
SELECT-1:SCREEN-VALUE = SELECT-1:pRIVATE-DATA.
APPLY "VALUE-CHANGED" TO SELECT-1.

To move an item to the bottom use:

SELECT-1:pRIVATE-DATA = SELECT-1:SCREEN-VALUE.
SELECT-1:DELETE(SELF:pRIVATE-DATA).
SELECT-1:INSERT(SELF:pRIVATE-DATA,SELECT-1:NUM-ITEMS + 1).
SELECT-1:SCREEN-VALUE = SELECT-1:pRIVATE-DATA.
APPLY "VALUE-CHANGED" TO SELECT-1.

Note that there's no bounds checking in these examples because usually, you would disable the buttons when the associated function is not valid. For example, when the first item is selected then the 'move-up' and 'move-to-top' buttons should be disabled. You can do this enabling/disabling from the VALUE-CHANGED trigger.
 
Top