macoslib が便利すぎる
公開日 : 2014-03-13 16:54:25
Xojoがマルチプラットフォームなアプリを作れるとは言っても、作り込みを進めて行くとやっぱり特定のOS向けのソフトウェアになっていってしまう今日この頃。どうせ特定のOS特化していくなら、やっぱりOSネイティブの機能を使いたくなりますよね。昔はこんな本があったんですけどね...今や本家マニュアルの日本語訳すらありません。で、結局有償のプラグインということになるのですが(おや、お金がかかることは構わないのですけども←自分もそういう商売やってんじゃん)、macoslibというプロジェクトがある。これが、本当素敵すぎる。
macoslibは、要するに、XojoからOS Xへアクセスするための様々なライブラリを提供してくれます。尚、紹介するのはごくごく一部の機能です。興味のある方はご自身でお試しください。
ボタンにシステムアイコンをセット
実は... 一番時間がかかってるのがアイコン作成だったり(プログラマあるある的)。macoslibからOSアイコンの取得ができるので、使わない手はないと。
SegmentedControl のOpenイベントに
me.Items( 0 ).Icon = SystemIcons.QuickLookTemplate
で、システムアイコン(クイックルック)を取得してセットしてくれます。Retinaディスプレイの場合、大きなサイズのアイコンが戻ってきてしまうので(あと、色を変更したいというあたり)、実際は以下のような感じで、いい感じに。
me.Items( 0 ).Icon = GetIcon( SystemIcons.QuickLookTemplate.IconTemplateSetColor( &c333333 ) )
Sub GetIcon( P As Picture ) As Picture
Dim SP As Picture
If ScalingFactor > 1 Then
SP = New Picture( P.Width / 2, P.Height / 2, 32 )
SP.Graphics.DrawPicture( P, 0, 0, P.Width / 2, P.Height / 2 , 0, 0, P.Width, P.Height )
SP.Transparent = 1
Else
SP = P
End If
Return SP
End Sub
NSSharingServicePickerを呼ぶと、シェアメニューを呼び出せる
Facebook自動投稿のMTプラグインとか、僕も作ってるけど(他の方が作成しているTwitterポストプラグインとかも)、殆どはData APIからのPostには対応していません。もちろんプラグインの方を変更してもいいんだけど、macoslibからシェア機能を呼び出せる。
Dim picker as New NSSharingServicePicker( New NSURL( Permalink ) )
picker.ShowRelativeToRect( me.bounds, me.View, Cocoa.NSRectEdge.NSMinYEdge )
スムーズなウィンドウのリサイズ
NSWindowプロパティをウィンドウに設定( m_NSWindow As NSWindow )してOpenイベントで自分自身をセットしておき、
m_NSWindow = self
サイズを変更したいタイミング(MAUSでは、設定パネルのパネルをクリックした時)で、
m_NSWindow.SmoothResize( w, h )
とすると、スムーズなアニメーションでリサイズしてくれます。
検索フィールドを表示する
Canvasを配置して、Superを Cocoa.NSSearchField に設定する。
Actionイベントで、me.StringValue とすることで値を取得できる。また、Openイベントで
me.TabStop = true
me.PlaceholderText = App.kLabelSearch
のようにして、タブフォーカス、CueTextのセットができます。
「このアプリケーションで開く」の実装
MAUSではないのですが、AzureのBlobクライアントを作っていて、直接Blobを編集するところを実装したかったのです。
FolderItemをCFURLに変換して、FindAppsForURLを呼ぶと、アプリケーションのリストが返ります。
Dim Apps() As FolderItem
Dim CF As CFURL
if F.Exists Then
CF = new CFURL( F )
Apps = FindAppsForURL( CF )
End If
アプリケーションのアイコンを取得
上の画像の、コンテクストメニューのアイコンをセットしているところ。
Dim Icon As MacIcon
Icon = MacIcon.NewIconFromFolderItem( F )
Dim p As Picture
Icon.Size = 16
p = New Picture( 16, 16, 32 )
Icon.Draw p.Graphics, 0, 0
Dim Mstr As String = App.kMenuOpenWithDefault
mItem = New MenuItem( Mstr )
mItem.Icon = p
冒頭にも書きましたけど、紹介したのはごくごく一部の機能です。興味のある方は是非ご自身でお試しください。