DHJJ [Hatsune's Journal Japan] blog

Hatsune's Journal Japan blog

目次

Blog 利用状況

ニュース

最新ツイート

運営サイト

Hatsune's Journal Japan
DHJJ

著作など

資格など

OCP
MCP

書庫

日記カテゴリ

わんくま同盟

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する処理を書きます。

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




NotInheritable Class EditorAdornmentFactory 
    Implements IWpfTextViewCreationListener
        
    
    
    
    
    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.0\ItaBackgroundImage.configファイルの中のファイル名を直接書き換えてください。

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

image

投稿日時 : 2009年11月8日 16:44

Feedback

# Visual Studio Galleryに登録してみた 2009/11/14 12:42 DHJJ [Hatsune's Journal Japan] blog

Visual Studio Galleryに登録してみた

# 痛IDE 1.4公開 2010/04/22 1:09 DHJJ [Hatsune's Journal Japan] blog

痛IDE 1.4公開

# xpmMKnngMnGgqLsS 2011/10/21 22:06 http://www.epotenzmittel.com/

I do`t see a feedback or the other coordinates from the blog administration!...

# JMPLzhXsTOYD 2011/10/22 22:29 http://www.discountwatchstore.com/Invicta-Watches_

Not bad post, but a lot of extra !!...

# sznvNZcdRj 2011/10/22 22:48 http://www.discountwatchstore.com/Invicta-Watches_

Yeah? I read and I understand that I do not understand anything what it is about:D

# sJsjKLPsGAELMnK 2011/11/02 5:30 http://www.pharmaciecambier.com/

Yeah !... life is like riding a bicycle. You will not fall unless you stop pedaling!!...

# trVbMcvgBa 2011/11/02 6:24 http://optclinic.com/

Received the letter. I agree to exchange the articles.

# hzAGNxSjjhiQXWjxKi 2011/11/08 16:37 http://www.noteletrackpaydayloansnofax.com/

Good! Wish everybody wrote so:D

# xBGgGIcXJjYfwccXqH 2011/11/16 3:00 http://circalighting.com/category.aspx?cid=1

Totally agree with you, about a week ago wrote about the same in my blog..!

# ZlCkFcFbFFgQUKiWeb 2011/11/16 3:40 http://catalinabiosolutions.com/

Left on my site a link to this post. I think many people will be interested in it..!

# rzVrDPXhvJ 2011/11/16 4:01 http://www.laurenslinens.com/coldorbed.html

Current blog, fresh information, I read it from time to time!!...

# ZseyGmNrSeIvHICt 2011/11/16 4:44 http://www.hooksandlattice.com/outdoor-artificial-

Can be also this issue because the truth can be achieved only in a dispute :D

# nike free run 2 2012/11/19 14:12 http://www.nikeschuhedamenherren.com/nike-free-run

Won't connect with others which might be cozy to get along with. Make friends who will strain consumers to pry your self moving up.
nike free run 2 http://www.nikeschuhedamenherren.com/nike-free-run-2-laufschuhe-für-männer-himmelblau-weiss-p-1207.html/

# destockchine femme 2013/01/09 4:59 http://www.destockchinefr.fr/

Please don't it's the perfect time who definitely are secure to be with. It's the perfect time who'll catalyst one lever tumbler your body increase.
destockchine femme http://www.destockchinefr.fr/

# maillot de foot pas cher 2013 2013/01/12 15:40 http://www.maillotdefootpascher1314.com/

Une fois que nous avons réalisé que OBrian White ne serait pas là pour nous en ce moment. Zakuani venu sur début à la 86e minute pour une ovation bruyante des 39, Gomez a attaché pour Santos Laguna quand il a pris une balle courte de Marc Crosas et a déjoué le gardien Michael Sounders Gspurning au coin arrière droit . Une chose que je vais dire au sujet propriétaires américains? Tout le monde va doivent être préparés , Jespère que tout ira bien dans la chirurgie et il sera de retour le plus t?t possible. Montréal était 2-1-2 au Stade olympique , Nous navons pas joué deux matchs daffilée avec une équipe pleine puissance , mon défenseur Jan Gunnar Solli ischio-jambiers et le milieu de terrain Teemu Tainio ACL. New York directeur général Erik Soler dit .
maillot de foot pas cher 2013 http://www.maillotdefootpascher1314.com/

# PaUoLuQkioUHIG 2014/08/07 6:51 http://crorkz.com/

PwCK5b Thanks for the article post. Awesome.

# WzyiKomtmD 2014/08/28 0:19 http://crorkz.com/

dHrsBH magnificent points altogether, you simply gained a new reader. What would you suggest in regards to your post that you made a few days ago? Any positive?

タイトル  
名前  
Url
コメント