macoslib が便利すぎる

| コメント(0) | トラックバック(0)

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

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

トラックバック(0)

トラックバックURL: http://junnama.alfasado.net/cgi/mt/mt-tb.cgi/740

コメントする

Facebook

Twitter

このブログ記事について

このページは、Junnama Nodaが2014年3月13日 16:54に書いたブログ記事です。

ひとつ前のブログ記事は「ブログ投稿ツールで筆は軽くなるか?」です。

次のブログ記事は「静的サイトジェネレータがブームだと聞いて。」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 6.2.6