Étape 1. Implémentez l'interface IConsoleTab.
Pour créer un onglet Console, vous devez créer une classe qui implémente l'interface Microsoft.HomeServer.Extensibility.IConsoleTab. L'interface IConsoleTab comporte des méthodes et des propriétés que tous les onglets Console devraient inclure. Au cours de cette étape, vous déclarez une classe qui implémente l'interface Microsoft.HomeServer.Extensibility.IConsoleTab. Plus loin dans ce chapitre, vous implémenterez les méthodes et propriétés de l'interface Microsoft.HomeServer.Extensibility.IConsoleTab.
Dans un premier temps, veillez à définir l'espace de noms adéquat. Dans le cadre de ce didacticiel, où le nom de l'onglet Console est SDKSample, définissez l'espace de noms comme suit :
namespace Microsoft.HomeServer.HomeServerConsoleTab.SDKSample
Important |
Lors de la création d'une classe qui implémente IConsoleTab, vous devez définir l'espace de noms sous la forme Microsoft.HomeServer.HomeServerConsoleTab.VotreNomOnglet (où VotreNomOnglet est le nom de votre onglet Console). Autrement, la Console Windows Home Server ne reconnaît pas votre onglet. |
Dans un deuxième temps, déclarez une classe qui implémente l'interface IConsoleTab. Supprimez la déclaration de classe existante pour Class1, et remplacez-la avec la déclaration suivante :
public class HomeServerTabExtender : Microsoft.HomeServer.Extensibility.IConsoleTab
Important |
Notez que le nom de classe est HomeServerTabExtender. Vous devez attribuer ce même nom à votre classe pour permettre à votre onglet Console d'être reconnu par la Console Windows Home Server. En effet, HomeServerConsole.exe parcourt votre .dll à la recherche d'une classe sous ce nom lorsqu'il tente de charger votre onglet Console. Si HomeServerConsole.exe ne trouve pas de classe sous ce nom, il ne charge pas votre onglet. |
Étape 2. Codez les champs de classe et le constucteur HomeServerTabExtender.
HomeServerConsole.exe est le programme qui exécute la Console Windows Home Server. Lorsque HomeServerConsole.exe trouve la classe HomeServerTabExtender dans votre dll, il appelle le constructeur de la classe HomeServerTabExtender pour initialiser l'onglet. Le constructeur doit être signé comme suit :
public HomeServerTabExtender(int width, int height, IConsoleServices services)
Lorsque HomeServerConsole.exe invoque la méthode de constructeur de la classe HomeServerExtender, il passe des valeurs pour la largeur et la hauteur, et des objets Console Services (Services de Console) pour votre onglet Console, en tant que paramètres pour l'appel du constructeur.
Remarque |
|
Les objets Console Services (Services de Console) sont décrits dans le chapitre de référence sur l'API IConsoleServices. |
Au cours de cette étape, vous créez un champ privé dans la classe HomeServerTabExtender pour associer la référence à l'objet IConsoleServices qui est passé avec l'appel du constructeur. Vous créez également un champ privé pour référencer l'instance du contrôle utilisateur, ShowWHSInfoPanel, qui s'affiche dans le volet de l'onglet Console. Par ailleurs, l'onglet Console doit accéder aux informations relatives aux objets Windows Home Server sur le serveur. Vous devez donc créer un champ privé pour une instance de WHSInfoClass. Il s'agit d'un type Microsoft.HomeServer.SDK.Interop.v1 qui fournit des méthodes pour obtenir des informations sur plusieurs objets Windows Home Server.
Par la suite, dans le constructeur HomeServerTabExtender, initialisez chacun des champs privés, et reliez les gestionnaires d'événements (que vous codez plus loin dans ce chapitre) aux clics de souris pour les trois boutons sur l'instance du contrôle utilisateur ShowWHSInfoPanel. Voici le code complet :
// The class declaration
public class HomeServerTabExtender : Microsoft.HomeServer.Extensibility.IConsoleTab
{
// Private fields declared
private IConsoleServices services;
// Declare an instance of the UserControl, ShowWHSInfoPanel
private ShowWHSInfoPanel nPanel;
private WHSInfoClass whsInfo;
// The constructor
public HomeServerTabExtender(int width, int height, IConsoleServices consoleServices)
{
// Initialize the private fields
nPanel = new NotificationPanel();
nPanel.Size = new Size(width, height);
this.services = consoleServices;
whsInfo = new WHSInfoClass();
// Hook up event handlers for the nPanel buttons
nPanel.btnClearInfo.Click += new EventHandler(BtnClearInfo_Click);
nPanel.btnShowInfo.Click += new EventHandler(BtnShowInfo_Click);
nPanel.btnOpenSettings.Click += new EventHandler(BtnOpenSettings_Click);
}
}
Étape 3. Codez les gestionnaires d'événements.
Dans la section de code ci-dessus, vous avez relié les gestionnaires d'événements aux clics de souris pour chacun des trois boutons sur l'instance ShowWHSInfoPanel, nPanel. Au cours de cette étape, vous écrivez les trois méthodes de gestionnaire d'événement.
Dans un premier temps, codez le gestionnaire d'événements pour l'événement nPanel.btnShowInfo.Click. La méthode BtnShowInfo_Click fait le gros du travail pour l'onglet Console. Lorsqu'un utilisateur clique sur Show WHS Info (Afficher les informations sur WHS) dans le volet de l'onglet Console, la méthode BtnShowInfo_Click définit la propriété Text pour le contrôle RichTextBox, nPanel.rtShowWHSInfo, avec une chaîne qui contient des informations relatives à des objets Windows Home Server sur le serveur.
La méthode BtnShowInfo_Click crée trois objets Array, puis les remplit avec des objets d'un type Windows Home Server donné. Par la suite, la méthode effectue une boucle sur chaque tableau, en recueillant des informations sur chaque élément dans le tableau. Enfin, la propriété Text du contrôle RichTextBox nPanel.rtShowInfo reçoit la chaîne qui comporte toutes les informations collectées :
internal void BtnShowInfo_Click(object sender, EventArgs e)
{
string displayText;
// Fill each array with WHS objects
Array disks = whsInfo.GetDiskInfo();
Array volumes = whsInfo.GetVolumeInfo();
Array shares = whsInfo.GetShareInfo();
displayText = "DISK INFORMATION:\nSystem Name\t\tSize\n";
// Iterate through each array and get individual WHS object information
foreach (IDiskInfo pDisk in disks)
{
displayText += pDisk.DevicePath.ToString() + "\t\t" + pDisk.Size.ToString() + "\n\n";
}
displayText += "VOLUME INFORMATION:\nPath\t\tSize\n";
foreach (IVolumeInfo pVolume in volumes)
{
displayText += pVolume.Path.ToString() + "\t\t" + pVolume.Size.ToString() + "\n\n";
}
displayText += "SHARE INFORMATION:\nName\t\tIs Duplicated\n";
foreach (IShareInfo pShare in shares)
{
displayText += pShare.Name.ToString() + "\t\t" + pShare.IsDuplicated.ToString() + "\n\n";
}
// Display the collected information
nPanel.rtShowWHSInfo.Text = displayText;
}
Dans un deuxième temps, codez le gestionnaire d'événements pour l'événement nPanel.btnClearInfo.Click. La méthode BtnClearInfo_Click est relativement simple. Elle utilise une seule ligne de code pour supprimer le texte de la zone d'affichage du contrôle utilisateur nPanel.
Lorsqu'un utilisateur clique sur Clear Display (Effacer l'écran) sur le contrôle utilisateur nPanel, la méthode BtnShowInfo_Click définit la propriété Text du contrôle RichTextBox, nPanel.rtShowWHSInfo par une chaîne vide :
internal void BtnClearInfo_Click(object sender, EventArgs e)
{
nPanel.rtShowWHSInfo.Clear();
}
Enfin, codez le gestionnaire d'événements pour l'événement nPanel.btnOpenSettings.Click. La méthode BtnOpenSettings_Click ouvre la boîte de dialogue Paramètres Windows Home Server sur un onglet Paramètres spécifique.
Lorsqu'un utilisateur clique sur Open Settings (Ouvrir les paramètres) sur le contrôle utilisateur nPanel, la méthode BtnOpenSettings_Click invoque la méthode Microsoft.HomeServer.Extensibility.IConsoleServices.OpenSettings(System.Guid), en passant l'Identificateur global unique (GUID) pour un onglet Paramètres spécifique en tant que seul argument :
internal void BtnOpenSettings_Click(object sender, EventArgs e)
{
this.services.OpenSettings(new Guid("{A99FEB96-A120-44af-9972-3CB942F521A0}"));
}
(Plus loin dans ce didacticiel, vous coderez l'onglet Paramètres dont il est question ici.)
Étape 4. Implémentez la propriété TabText.
La propriété TabText est en lecture seule et retourne une chaîne qui comporte la légende ou le texte de l'onglet Console. Il s'agit de la légende qui décrit votre onglet Console. Par exemple, la propriété TabText de l'onglet Console qui gère les comptes d'utilisateurs est Comptes.
Remarque |
|
L'espace disponible pour le texte de l'onglet est restreint. Limitez votre texte à 14 caractères maximum. |
Codez la propriété TabText pour qu'elle retourne " SDK Sample" comme dans l'extrait de code ci-dessous :
public string TabText { get { return "SDK Sample"; } }
Étape 5. Implémentez la propriété TabImage.
La propriété TabImage de l'interface IConsoleTab retourne une image bitmap. Celle-ci s'affiche sur l'onglet Console au-dessus de la propriété TabText.
Important |
|
La taille de l'image bitmap doit être de 32 x 32 pixels. Une image d'une autre taille ne s'affichera pas correctement. |
Utilisez le fichier d'image SDKSampleImg que vous avez ajouté en tant que ressource dans le projet SDKSample au cours du chapitre Création d'un complément :
public Bitmap TabImage
{
get
{
return Properties.Resources.SDKSampleImg;
}
}
Étape 6. Implémentez la propriété TabControl.
La propriété TabControl retourne le contrôle qui apparaît sur le volet de la console lorsque vous sélectionnez l'onglet, comme indiqué à l'étape 1. Dans le cadre de ce didacticiel, retournez le contrôle utilisateur nPanel que vous avez instancié dans le constructeur de classe HomeServerTabExtender.
Codez la propriété TabControl pour qu'elle retourne le contrôle nPanel :
public Control TabControl { get { return nPanel; } }
Important |
|
Vous devez respecter l'approche présentée ici, où la propriété TabControl retourne une référence au même objet Control que vous avez créé et initialisé dans le constructeur pour votre onglet Console. L'utilisation de la propriété TabControl pour qu'elle crée et retourne un nouvel objet Control à chaque fois, génère des résultats indésirables. |
Étape 7. Implémentez la méthode GetHelp().
Vous pouvez utiliser GetHelp (Obtenir de l'aide) pour afficher le contenu d'une aide lorsqu'un utilisateur sélectionne votre onglet et appuie sur l'une des touches d'aide (Aide sur la boîte de dialogue Paramètres de Windows Home Server ou F1). Vous devez implémenter la méthode GetHelp dans le cadre de l'interface IConsoleTab. Toutefois, vous n'avez pas besoin de relier votre propre contenu d'aide à votre onglet Console : c'est alors le contenu de l'aide de Windows Home Server par défaut qui s'affiche lorsqu'un utilisateur appuie sur l'une des touches d'aide.
Pour signer la méthode GetHelp, vous devez retourner une valeur booléenne qui indique si vous souhaitez ou non afficher un contenu d'aide pour votre onglet Console. Une valeur de retour true indique que vous souhaitez l'afficher.
Pour ce didacticiel, ne fournissez pas de contenu d'aide pour votre application. Codez la méthode GetHelp pour qu'elle retourne false :
public bool GetHelp()
{
return false;
}
Étape 8. Implémentez la propriété SettingsGuid.
Selon le fonctionnement de votre complément, vous pouvez autoriser les utilisateurs à paramétrer des options pour votre application. Pour ce faire, créez un onglet Paramètres personnalisé dans la page de dialogue Paramètres de la Console Windows Home Server. Cet onglet doit être une implémentation de l'interface ISettingsTab.
Par exemple, un utilisateur qui souhaite modifier les paramètres des dossiers partagés clique sur le bouton Paramètres de la console. À l'affichage de la page de dialogue Paramètres, l'utilisateur clique sur Dossiers partagés et modifie les paramètres.
Vous pouvez également associer un onglet Paramètres à un onglet Console. Vous créez cette association à l'aide de la propriété SettingsGuid.
Vous avez le choix entre deux options pour la propriété SettingsGuid :
- Retourner un GUID pour un onglet Paramètres spécifique. Pour ce faire, retournez un objet
System.Guid avec le GUID de l'onglet Paramètres que vous souhaitez associer à votre onglet Console.
- Retourner un GUID vide. En retournant un objet
System.Guid vide, vous indiquez que vous ne souhaitez pas associer un onglet Paramètres à votre onglet Console.
N'utilisez pas cette propriété ici pour créer une association entre l'onglet Console et un onglet Paramètres. En effet, dans le cadre de ce didacticiel, vous implémentez un bouton sur le volet de l'onglet Console qui ouvre directement la page Paramètres.
Codez la propriété SettingsGuid afin qu'elle ne crée pas d'association avec un onglet Paramètres :
public Guid SettingsGuid { get { return Guid.Empty; } }.