アルファサード株式会社 代表取締役 野田 純生のブログ


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 に設定する。

MAUSScreenSnapz019

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

冒頭にも書きましたけど、紹介したのはごくごく一部の機能です。興味のある方は是非ご自身でお試しください。

カテゴリ


このブログを書いている人
野田純生の写真
野田 純生 (のだ すみお)

大阪府出身。ウェブアクセシビリティエバンジェリスト。 アルファサード株式会社の代表取締役社長であり、現役のプログラマ。経営理念は「テクノロジーによって顧客とパートナーに寄り添い、ウェブを良くする」。 プロフィール詳細へ