DHJJ DHJJ [Hatsune's Journal Japan]

Visual Studio 2010 β2 痛IDE化

Visual Studio 2010のIDEはWPFで作成されていることは有名になりつつありますが、MEF (Managed Extentions Framework) による拡張ができるのも特徴の1つです。

このMEFを使えばテキストエディタの背景に好きな画像を表示した痛IDEがつくれるのではないかとしばやんが今年の6月くらいにVS2010 β1のテキストエディタを痛化していたので秘かに色々調べていたりしました。今回のコード作成にあたっても、しばやんのまめしば雑記をすごく参考にしています。

新しいプロジェクトのテンプレートの中にも「Extensibility」がありテキストエディタ部分を拡張するための「Editor Viewpoint Adornment」もあります。

image

このテンプレートで生成したプロジェクトには次のファイルが含まれています。

  • My Project\AssemblyInfo.vb
  • source.extension.vsixmanifest
  • Adornment.vb
  • AdornmentFactory.vb

source.extension.vsixmanifest

image

絶対忘れてはいけないのは、このvsixmanifestファイルのAuthor項目の設定です。Author項目を設定せずにビルドしたものをインストールするとIDEの[ツール]-[機能拡張マネージャ]で無効化やアンインストールができなくなってしまいますので注意してください。

image

Adornment.vb

テキストエディタの痛化のキモはAdorment.vbに記述されているクラスのNewメソッドとOnSizeChangeイベントプロシージャのコードにあります。この2つのメンバはテンプレートからの初期生成時にすでに作成されています。

今回は画像ファイルの差し替えを考慮してNewメソッドに題にパラメタを追加してそこに表示する画像ファイル名を渡すようにしています。

Public Sub New(ByVal view As IWpfTextView, ByVal imageFilename As String)
    _view = view
    _adornmentLayer = _view.GetAdornmentLayer("ItaBackgroundImage")
    _image = New Image
    _image.Stretch = Stretch.Uniform
    _image.HorizontalAlignment = Windows.HorizontalAlignment.Right
    _image.MinHeight = 300
    _image.Source = New Imaging.BitmapImage(New System.Uri(imageFilename,
                                                           System.UriKind.Absolute))
    _image.Opacity = 0.25
End Sub
Private Sub OnSizeChange() Handles _view.ViewportHeightChanged,
                                   _view.ViewportWidthChanged
    _adornmentLayer.RemoveAllAdornments()
    Canvas.SetTop(_image, 0)
    Canvas.SetLeft(_image, 0)
    _image.Height = _view.ViewportHeight
    _image.Width = _view.ViewportWidth
    _adornmentLayer.AddAdornment(AdornmentPositioningBehavior.ViewportRelative, 
                                 Nothing, 
                                 Nothing, 
                                 _image, 
                                 Nothing)
End Sub

なお、adornmentLayer名としては「"ItaBackgroundImage"」という名前を付けてみました。

OnSizeChangeイベントプロシージャはスクロールしたときに背景画像はスクロールしないようにしてます。

もし、一緒にスクロールさせたい場合は、OnSizeChangeイベントプロシージャの内容をNewプロシージャの最後に付与すれば、OnSizeChagngeイベントプロシージャは不要です。

AdrnmentFactory.vb

AdrnmentFactory.vbにはMEF拡張用の属性とAdornment.vbに書かれたクラスをNewする処理を書きます。

実際のコードではここで画像ファイル名を取得する処理を記述しています。

<Export(GetType(IWpfTextViewCreationListener))>
<ContentType("text")>
<TextViewRole(PredefinedTextViewRoles.Document)>
NotInheritable Class EditorAdornmentFactory 
    Implements IWpfTextViewCreationListener
        
    <Export(GetType(AdornmentLayerDefinition))>
    <Name("ItaBackgroundImage")>
    <Order ()>
    <TextViewRole(PredefinedTextViewRoles.Document)>
    Public _editorAdornmentLayer As AdornmentLayerDefinition

    Public Sub TextViewCreated(ByVal textView As IWpfTextView) 
               Implements IWpfTextViewCreationListener.TextViewCreated
        Dim TempPurpleCornerBox = New ItaBackgroundImage(textView, 
                                                         imageFilename)
    End Sub
End Class

テンプレートから生成されたコードからの変更点はほとんどないのですが、_editorAdornmentLayerのName属性にadornmentLayer名として決めた「"ItaBackgroundImage"」を設定しわすれないようにしましょう。

テスト方法

出来上がったコードをIDEで実行すれば、自動的に別のIDEが「実験的なインスタンス」として立ち上がります。

image

この実験的なインスタンスのIDEで[ファイル]-[新しいプロジェクト]からクラスライブラリテンプレートを選んで作成するとテキストエディタが開いた状態でプロジェクトが生成されるので確認するのが便利です。

ただし、すごく遅いですのでビルドしたものをインストールして確認してしまう方が断然早いので、今回のように簡単なロジックであればインストールして確認する方法をお勧めします。

配布&インストール方法

このプロジェクトをビルドするとbin\releaseフォルダに「ItaBackgroundImage.vsix」ファイルが作成されるので、このファイルを配布します。

インストール方法はこのvsixファイルをダブルクリックするだけです。

image

使い方

Visual Studio 2010 Beta 2のテキストエディタの背景に選択した画像を左寄せで表示します。

画像指定はインストールして最初に起動したときにファイル指定ダイアログが表示されますのでそこで指定してください。

image

別の画像に切り替える機能は実装してませんので、環境変数LOCALAPPDATAのMicrosoft\VisualStudio\10.0\Extensions\HATSUNE, Akira\ItaBackgroundImage\1.1\ItaBackgroundImage.configファイルの中のファイル名を直接書き換えてください。

パスの中にある1.1はバージョン番号になります。バージョンごとにフォルダはわかれますが、以前のバージョンのフォルダの中はバージョンアップにより自動的に削除されます(でもフォルダ自体は残る)。

なお、画像ファイルは含まれていませんので、お好きな画像をご指定ください。

image

Visual Studio Galleryによるバージョンアップ方法

Visual Studio Galleryにバージョンを上げたものを登録しておくと機能拡張マネージャーの更新プログラムからバージョンアップが行えます。

例えば、インストールされているバージョンが1.0だとします。

image

ここで[更新プログラム]をクリックすると次のように表示されます。

image

ここで[更新]ボタンをクリックすればダウンロードとインストールが始まります。

image

image

[インストール]ボタンをクリックすれば旧バージョンはアンインストールされてバージョンアップ版に置き換わります。

image

ダウンロード

Visual Studio Gallery

COPYRIGHT (C) 2008 初音玲 All rights reserved. / Running .NET Framework 4.0.30319.42000