home *** CD-ROM | disk | FTP | other *** search
/ Softwarová Záchrana 3 / Softwarova-zachrana-3.bin / StartRight / source.zip / UnitListViewMover.pas < prev    next >
Pascal/Delphi Source File  |  2002-10-18  |  5KB  |  172 lines

  1. unit UnitListViewMover;
  2. {
  3.     Purpose:
  4.         Given a listview, move items that are selected
  5.  
  6.     Updates:
  7.         Support for ImageIndex when moving        
  8. }
  9.  
  10. interface
  11. uses ComCtrls, Classes, Contnrs;
  12.  
  13. procedure MoveSelectedUp(lv : TListView);
  14. procedure MoveSelectedDown(lv : TListView);
  15. procedure MoveSelectedTop(lv : TListView);
  16. procedure MoveSelectedBottom(lv : TListView);
  17.  
  18. implementation
  19.  
  20. procedure MoveSelectedUp(lv : TListView);
  21. var i : integer;
  22.     li, liNew : TListItem;
  23.     lst1 : TList;
  24. begin
  25.     if (lv.SelCount > 0) then begin
  26.         lst1 := TList.Create();
  27.  
  28.         lv.SortType := stNone;
  29.         for i := 0 to (lv.Items.Count - 1) do begin
  30.             if (lv.Items.Item[i].Selected) and
  31.                 (lv.Items.Item[i].Index <> 0)then begin
  32.                 lst1.Add(lv.Items.Item[i]);
  33.             end;
  34.         end;
  35.  
  36.         for i := 0 to (lst1.Count - 1) do begin
  37.             li := TListItem( lst1.Items[i] );
  38.  
  39.             liNew := lv.Items.Insert(li.Index - 1);
  40.             liNew.Caption := li.Caption;
  41.             liNew.SubItems.AddStrings( li.SubItems );
  42.             liNew.Checked := li.Checked;
  43.             liNew.Selected := false;
  44.             liNew.ImageIndex := li.ImageIndex;
  45.             li.Delete;
  46.  
  47.             liNew.Selected := true;
  48.         end;
  49.  
  50.  
  51.         lst1.Free;
  52.     end;
  53. end;
  54.  
  55. procedure MoveSelectedDown(lv : TListView);
  56. var i : integer;
  57.     li, liNew : TListItem;
  58.     lst1 : TList;
  59. begin
  60.     if (lv.SelCount > 0) then begin
  61.         lst1 := TList.Create();
  62.         lv.SortType := stNone;
  63.  
  64.         //
  65.         // get a list of all selected items (that are not the last item)
  66.         //
  67.         for i := (lv.Items.Count - 1) downto 0 do begin
  68.             li := lv.Items.Item[i];
  69.             if (li.Selected) and (li.Index <> lv.Items.count - 1) then begin
  70.                 lst1.Add(li);
  71.             end;
  72.         end;
  73.  
  74.         //
  75.         // insert a copy in the new position, and remove the old item
  76.         //
  77.         for i := 0 to (lst1.Count - 1) do begin
  78.             li := TListItem( lst1.Items[i] );
  79.  
  80.             if (li.Index <> (lv.items.Count - 1) ) then begin
  81.                 liNew := lv.Items.Insert(li.Index + 2);
  82.                 liNew.Caption := li.Caption;
  83.                 liNew.SubItems.AddStrings( li.SubItems );
  84.                 liNew.Checked := li.Checked;
  85.                 liNew.Selected := true;
  86.                 liNew.ImageIndex := li.ImageIndex;
  87.                 li.Delete;
  88.             end;
  89.         end;
  90.  
  91.         lst1.Free;
  92.     end;
  93. end;
  94.  
  95. procedure MoveSelectedTop(lv : TListView);
  96. var i : integer;
  97.     li, liNew : TListItem;
  98.     ol : TObjectList;
  99. begin
  100.     if (lv.SelCount >= 1) then begin
  101.         ol := TObjectList.Create();
  102.  
  103.         //
  104.         // find all selected items (manipulating the list while
  105.         // enumerating is BAD)
  106.         //
  107.         for i := 0 to (lv.items.count - 1) do begin
  108.             if (lv.Items.Item[i].selected) then begin
  109.                 ol.Add(lv.Items.Item[i]);
  110.             end;
  111.         end;
  112.  
  113.         //
  114.         // Move them all to the top
  115.         //
  116.         lv.SortType := stNone;
  117.         for i := (ol.Count - 1) downto 0 do begin
  118.             li := TListItem(ol.Items[i]);
  119.             liNew := lv.Items.Insert(0);
  120.             liNew.Caption := li.Caption;
  121.             liNew.SubItems.AddStrings( li.SubItems );
  122.             liNew.Checked := li.Checked;
  123.             liNew.Selected := true;
  124.             liNew.ImageIndex := li.ImageIndex;
  125.  
  126.             ol.Delete(i);
  127.         end;
  128.  
  129.         ol.Free;
  130.     end;
  131. end;
  132. procedure MoveSelectedBottom(lv : TListView);
  133. var i : integer;
  134.     li, liNew : TListItem;
  135.     ol : TObjectList;
  136. begin
  137.     if (lv.SelCount >= 1) then begin
  138.         ol := TObjectList.Create();
  139.  
  140.         //
  141.         // find all selected items (manipulating the list while
  142.         // enumerating is BAD)
  143.         //
  144.         for i := 0 to (lv.items.count - 1) do begin
  145.             if (lv.Items.Item[i].selected) then begin
  146.                 ol.Add(lv.Items.Item[i]);
  147.             end;
  148.         end;
  149.  
  150.         //
  151.         // Move them all to the top
  152.         // delete the old items
  153.         //
  154.         lv.SortType := stNone;
  155.         for i := 0 to (ol.Count - 1) do begin
  156.             li := TListItem(ol.Items[i]);
  157.             liNew := lv.Items.Insert(lv.Items.Count);
  158.             liNew.Caption := li.Caption;
  159.             liNew.SubItems.AddStrings( li.SubItems );
  160.             liNew.Checked := li.Checked;
  161.             liNew.Selected := true;
  162.             liNew.ImageIndex := li.ImageIndex
  163.  
  164.         end;
  165.  
  166.         ol.Free;
  167.     end;
  168. end;
  169.  
  170.  
  171. end.
  172.