Enregistrement d’un document standard
L’environnement gère les commandes Enregistrer, Enregistrer sous et Enregistrer tout. Lorsqu’un utilisateur sélectionne Enregistrer, Enregistrer sous ou Enregistrer tout dans le menu Fichier ou lorsqu’il ferme la solution, ce qui entraîne Enregistrer tout, le processus suivant se produit.
Gestion des commandes Enregistrer, Enregistrer sous et Enregistrer tout pour un éditeur standard
Ce processus est décrit en détail dans les étapes suivantes :
Lorsque les commandes Enregistrer et Enregistrer sous sont sélectionnées, l’environnement utilise le service SVsShellMonitorSelection pour déterminer la fenêtre de document active et, par conséquent, les éléments à enregistrer. Une fois la fenêtre de document active connue, l’environnement recherche le pointeur de hiérarchie et l’identifiant d’élément (itemID) du document dans la table de documents en cours d’exécution. Pour plus d’informations, consultez Exécution de la table de documents.
Lorsque la commande Enregistrer tout est sélectionnée, l’environnement utilise les informations contenues dans la table de documents en cours d’exécution pour compiler la liste de tous les éléments à enregistrer.
Lorsque la solution reçoit un appel QueryStatus, elle effectue une itération dans l’ensemble d’éléments sélectionnés (autrement dit, les sélections multiples exposées par le service SVsShellMonitorSelection).
Pour chaque élément de la sélection, la solution utilise le pointeur de hiérarchie pour appeler la méthode IsItemDirty afin de déterminer si le menu de la commande Enregistrer doit être activée. Si un ou plusieurs éléments sont sales, la commande Enregistrer est activée. Si la hiérarchie utilise un éditeur standard, la hiérarchie délègue l’interrogation de l’état sale à l’éditeur en appelant la méthode IsDocDataDirty.
Pour chaque élément sale sélectionné, la solution utilise le pointeur de hiérarchie pour appeler la méthode SaveItem sur les hiérarchies appropriées.
Il est courant que la hiérarchie utilise un éditeur standard pour modifier le document. Dans ce cas, l’objet de données de document pour cet éditeur doit prendre en charge l’interface IVsPersistDocData2. Lors de la réception de l’appel de méthode SaveItem, le projet doit informer l’éditeur que le document est enregistré en appelant la méthode SaveDocData sur l’objet de données de document. L’éditeur peut autoriser l’environnement à gérer la boîte de dialogue Enregistrer sous en appelant
Query Service
pour l’interfaceSVsUIShell. Ceci renvoie un pointeur vers l’interface IVsUIShell. L’éditeur doit ensuite appeler la méthode SaveDocDataToFile, en transférant un pointeur à l’implémentation de l’éditeur IPersistFileFormat au moyen du paramètrepPersistFile
. L’environnement effectue ensuite l’opération Enregistrer et fournit la boîte de dialogue Enregistrer sous à l’éditeur. L’environnement rappelle ensuite l’éditeur avec IPersistFileFormat.Si l’utilisateur tente d’enregistrer un document sans titre (autrement dit, un document précédemment non enregistré), une commande Enregistrer sous est en fait effectuée.
Pour la commande Enregistrer sous, l’environnement affiche la boîte de dialogue Enregistrer sous, en invitant l’utilisateur à saisir un nom de fichier.
Si le nom du fichier a changé, la hiérarchie est chargée de mettre à jour les informations mises en cache du cadre du document en appelant SetProperty(VSFPROPID_MkDocument).
Si la commande Enregistrer sous déplace l’emplacement du document et que la hiérarchie est sensible à l’emplacement du document, la hiérarchie est chargée de remettre la propriété de la fenêtre de document ouverte à une autre hiérarchie. Par exemple, cela se produit si le projet détermine si le fichier est un fichier interne ou externe (fichier divers) par rapport au projet. Utilisez la procédure suivante pour modifier la propriété d’un fichier dans le projet de fichiers divers.
Modification de la propriété du fichier
Pour modifier la propriété du fichier dans le projet de fichiers divers
Service de requête pour l’interface SVsExternalFilesManager.
Un pointeur vers IVsExternalFilesManager2 est retourné.
Appelez la méthode TransferDocument (
pszMkDocumentNew
,punkWindowFrame
) pour transférer le document vers la nouvelle hiérarchie. La hiérarchie effectuant la commande Enregistrer sous appelle cette méthode.