シンプルカレンダー

macOS Swift

シンプルカレンダー

macOS 10.15.7 / Xcode 11.3.1 / Swift 5.0
月間カレンダーを表示するアプリケーション。キーボード/マウス操作で日付を選択したり、カレンダーを前月・翌月に移動することができる。
[calendar1]
週の始まりは月曜日。月初は前月の月末日、月末は翌月の月初日で埋める。日曜/祝日は赤字、土曜は青字にする。祝日は、祝日マスタファイルに日付を登録し、それを参照する。
カレンダーには青い枠線で囲まれた「選択日」を表示する。最初に開いたときは現在日が「選択日」になる。上下左右の矢印キーまたは、日付のクリックにより移動する。
月移動ボタン( または )のクリックによりカレンダーが前月または翌月に移動する。また、「選択日」をカレンダーの最初の日(左上隅)にして左矢印キーを押したとき、あるいは最後の日(右下隅)にして右矢印キーを押したとき、それぞれ前月/翌月に移動する。
カレンダーの週数は1ヶ月の日数に応じて 5週または 6週になる。4週になる場合は 5週で表示し最終週を空白にする。

ビューの階層

[ビューの階層]

クラス構造図

クラス仕様

AppDelegate: NSObject

UAViewオブジェクトを作成しコンテントビューに貼り付ける。

UAView: NSView

カレンダーを表示する親ビュー
カレンダーアプリケーションの全てのコントロール(日付ビュー、見出し、ボタン等)はプログラムの実行時にオブジェクトを作成し、このビューに貼り付けるという仕組みとする。従って、xibファイルにはコントロールの定義は一切ない。

UAItemView: NSView

一日の日付を表示するビュー
日付分を配列として持つ。日付の属性(曜日、当月か否か、システム日付)によって、文字の色やサイズ、ビューの背景色、枠線の色や太さを変える。

UACalendar: NSObject

1ヶ月分のカレンダーの日付情報を保持するオブジェクト

UACalendarDate: NSObject

一日の日付情報
日付分を配列として持つ。年、月、日、曜日、休日名を持つ。

UADateUtil: NSObject

日付に関するユーティリティ関数を提供する。日付の計算、月末日の取得、和暦変換など。

FlippedView: NSView

ビューの左上を原点にするため、座標系のY軸を反転させる、コンテントビューのクラスとする。

UAItemViewDelegate(protocol)

デリゲートメソッドの宣言
カレンダーの選択日を移動する処理を UAItemViewオブジェクトが、UAViewオブジェクトに依頼する。

holiday.json

休日ファイル