Hatena::ブログ(Diary)

ザリガニが見ていた...。 このページをアンテナに追加 RSSフィード

2008-06-15

MinimumMenu 0.1について

ここ最近コツコツと作っていたminuプロジェクト(Cocoaアプリケーション)を、せっかくなので公開することにしました。

使い方

MinimumMenu(日本語環境:ミニマムメニュー)は、メニューバー右側のアイコンのメニュー*1が、文字メニューと重なって隠れてしまう場合に重宝します。

  • マウスカーソルをスクリーンの一番上に移動すると、水色のラインが発光します。
  • それを一回クリックすると、文字メニューが最小になり、アイコンのメニューを表示するスペースが最大になります。
  • もう一度クリックすると、直前のアプリケーションに戻ります。
  • 文字メニューが最小の時、メニューバーには短縮名で Minu(日本語環境:ミニュー)と表示されます。(以下、「Minu」と表記することにします。)

アプリケーションとしての機能は上記の通りで、見ての通りほとんど何もしません。Minuがアクティブになる直前にアプリケーションを記憶して、クリックで戻すことができるだけの機能です。機能がないのでメニューは一つだけです。結果、Minuがアクティブになるとアイコンのメニューを表示するスペースが最大になるのです。サンプルアプリケーションみたいなものです。

しかし、Cocoaアプリケーションとして公開するために必要な必要最小限の機能は、出来るだけ実装するようにしました。今後、自分がちょっとした機能の便利ツールを作りたくなった時の足掛かりになるといいな、という希望を持っています。Minuには機能がほとんど無いので、あとは欲しい機能を追加するだけでいいのです。

再利用またはサンプルになりそうな実装

  • ユーザーデフォルト
    • ユーザーの環境設定を保存できます。また、アプリケーションのデフォルトも設定してあり、その変更も.plistファイルなので容易です。
  • ローカライズ
    • 日本語にローカライズしているので、それを足掛かりにその他の言語環境にも対応し易いと思います。(ローカライズにはiLingualを利用)
  • 透明ウィンドウ
    • 便利ツールを作る時、透明ウィンドウを利用することはありそうなことです。透明ウィンドウを利用すればデスクトップの好みの位置に、好みの形状で何でも表示することができます。minuも透明ウィンドウを利用しているので、それを足掛かりに拡張することが容易です。
  • マウスイベント処理
    • mouseEntered:、mouseExited:、mouseDown:等のマウスイベントを直接処理しています。やはり便利ツールを作る時には必要な処理になりそうです。(ドラッグ&ドロップの実装とか)
  • CocoaBindingの利用
    • CocoaBindingを使えば、オブジェクト間で値を連携するためのコードが激減します。minuでもユーザーデフォルトの処理で利用して、ずいぶん楽をしています。
  • Info.plistの設定
    • アイコンやアプリケーション名、バージョン情報、著作権情報等のアプリケーションの基本的な情報を、ちゃんと表示できるようにInfo.plistやInfoPlist.stringsで設定しています。

minuプロジェクトは2008-05-22の以下の日記から始まっています。(3歩進んで2歩下がる的な公開までの軌跡が続きます。)


開発環境

動作確認

  • Mac OSX 10.5.3(Intel
  • Mac OSX 10.4.10(PPC)

ダウンロード

MinimumMenu 0.1のダウンロードページへ

MinimumMenu 0.2b1のダウンロードページへ

MinimumMenu 0.3のダウンロードページへ
  • アプリケーションメニューが占有する領域を最小にすることを目指す
    • アプリケーションメニューを「Minu」からアイコン表示に変更
    • アプリケーションメニューを非表示にする設定を追加
MinimumMenu 0.3.1のダウンロードページへ
  • 青いラインがメニューバー上部に表示されない場合の対策。
  • 解像度を変更した時、青いラインの長さが不足する対策。
MinimumMenu 0.4.5のダウンロードページへ
  • PreferencesのTracking around displayを追加。「入」にすることで...
    • ディスプレイの左辺・右辺・下辺へのマウスオーバーによってMinimumMenuがアクティブなる。
    • 但し、Dcokが出現するポジションでのマウスオーバーは無効。(意図しないアクティブを避けるため)
  • コーナー四隅の64ピクセルは、反応しないエリアとした。(誤作動防止のため)
  • アプリをアクティブにする方式で切り替えるように変更。(従来はアプリを起動する方式で切り替えていた)
    • ウィンドウなしで起動中のアプリが、新たなウィンドウを勝手に開いてしまう対策。
    • タイミングによっては、終了したはずのアプリが意図せず再起動してしまう対策。
    • ウィンドウの重なり順序も完全に維持される。

f:id:zariganitosh:20141128161945p:image:w299

*1:メニューバーアイテムと呼ばれているようです。