//=======================================================================================
//
// This source code is only intended as a supplement to existing Microsoft documentation.
//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
// KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
// PURPOSE.
//
// Copyright (C) Microsoft Corporation. All Rights Reserved.
//
//=======================================================================================
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Text;
namespace Microsoft.ManagementConsole.Samples
{
///
/// MmcListView - Result Pane view to list Result Nodes
/// DragDropListView - Adds some drag drop handling behavior to MmcListView
///
public class DragDropListView : MmcListView
{
///
/// Constructor
///
public DragDropListView()
{
}
///
/// Define the ListView's structure and actions
///
/// asynchronous status for updating the console
protected override void OnInitialize(AsyncStatus status)
{
// do default handling
base.OnInitialize(status);
// Create a set of columns for use in the list view
// Define the default column title
this.Columns[0].Title = "User";
this.Columns[0].SetWidth(300);
// Add detail column
this.Columns.Add(new MmcListViewColumn("Birthday", 200));
// Set to show all columns
this.Mode = MmcListViewMode.Report;
// Load the list with values
Refresh();
}
///
/// Manage shortcut menu for selection
///
/// asynchronous status for updating the console
protected override void OnSelectionChanged(SyncStatus status)
{
if (this.SelectedNodes.Count == 0)
{
this.SelectionData.Clear();
}
else
{
//// store dragged name
WritableSharedData writableSharedData = new WritableSharedData();
WritableSharedDataItem writableSharedDataItem = new WritableSharedDataItem("DisplayName", false);
writableSharedDataItem.SetData(Encoding.Unicode.GetBytes(this.SelectedNodes[0].Tag + "\0"));
writableSharedData.Add(writableSharedDataItem);
// update context
this.SelectionData.Update(null, this.SelectedNodes.Count > 1, null, writableSharedData);
this.SelectionData.EnabledStandardVerbs = StandardVerbs.Copy | StandardVerbs.Paste | StandardVerbs.Refresh;
//Set SetAllowedClipboardFormatIdsForPaste so that ListView only accepts clipboard objects that support "DisplayName" clipboard format
this.SelectionData.SetAllowedClipboardFormatIdsForPaste(new string[] { "DisplayName" });
}
}
///
/// Drop handler
///
/// shared data
/// verbs one of {Copy | Move}
/// synchronous status for updating the console
/// true for success
protected override bool OnPaste(SharedData data, DragAndDropVerb pasteType, SyncStatus status)
{
string displayName = "";
// get pasted name
data.Add(new SharedDataItem("DisplayName"));
try
{
displayName = Encoding.Unicode.GetString(data.GetItem("DisplayName").GetData());
}
catch (Microsoft.ManagementConsole.Advanced.PrimarySnapInDataException)
{
return false;
}
// find string in buffer
displayName = displayName.Substring(0, displayName.IndexOf("\0"));
// update pasted on node to show the drop
this.SelectedNodes[0].DisplayName += " ( " + displayName + " Dropped)";
return true;
}
///
/// Refresh handler
///
/// asynchronous status for updating the console
protected override void OnRefresh(AsyncStatus status)
{
this.Refresh();
}
///
/// Loads the ListView with data
///
public void Refresh()
{
// Clear existing information
this.ResultNodes.Clear();
// Get some fictitious data to populate the lists with
string[][] users = { new string[] {"Karen", "February 14th"},
new string[] {"Sue", "May 5th"},
new string[] {"Tina", "April 15th"},
new string[] {"Lisa", "March 27th"},
new string[] {"Tom", "December 25th"},
new string[] {"John", "January 1st"},
new string[] {"Harry", "October 31st"},
new string[] {"Bob", "July 4th"}
};
// Populate the list.
foreach (string[] user in users)
{
ResultNode node = new ResultNode();
node.DisplayName = user[0];
node.SubItemDisplayNames.Add(user[1]);
node.Tag = node.DisplayName;
this.ResultNodes.Add(node);
}
}
} // class
} //namespace