Hatena::Groupruby

RubyCocoaでなにかつくる

2008-05-06

日記アプリ途中経過2

| 00:35

f:id:asagi29:20080506235334p:image

日記アプリ途中経過 - RubyCocoaでなにかつくる - はてな?Rubyグループの続きです。

リッチテキストエディタぽくなりました。

ソースコードは以下の通りです。

require 'osx/cocoa'
include OSX

class Murmurous < NSObject
	ib_outlet :window, :calendar, :textField
	
  def initialize
    #出力先ホームディレクトリ
    @homeDir = File.expand_path("~" + OSX.NSUserName.to_s) + "/murmurous/"
  end
	
  #初回起動時の挙動
  def awakeFromNib
    today = NSDate.date.description

    #カレンダーに現在日付をセット
    @calendar.setDateValue(NSDate.dateWithString(today))

    #今日付のファイルがあったら、その内容を@textField(NSTextView)にセット
    todayFile = getFilePath(today)

    if File.exist?(todayFile) then
      @textField.readRTFDFromFile(todayFile)
    end
  end
	
  #カレンダーで日付選択時のファイル読み込み
  ib_action :read do |sender|
    selectedDateFile = getFilePath(sender.dateValue.description)

    #該当日付のファイルがあったら、その内容をセット
    if File.exist?(selectedDateFile) then
      @textField.readRTFDFromFile(selectedDateFile)
    else
      #空の文字列をセット
      @textField.setString(NSString.init.string)
    end
  end

  #保存
  ib_action :save do |sender|
    editedDateFile = getFilePath(@calendar.dateValue.description)
    
    #入力内容が空っぽでない時
    unless @textField.string == NSString.init.string
      #出力先ファイルの存在確認
      unless File.exist?(editedDateFile) then
        #出力先ホームディレクトリ作成
        #TODO サブディレクトリまで一気に作成できるはずなので要検討
        unless File.exist?(@homeDir) then
          Dir.mkdir(@homeDir)
        end

        #出力先西暦ディレクトリ作成
        unless File.exist?(File.dirname(editedDateFile)) then
          Dir.mkdir(File.dirname(editedDateFile))
        end
      end

      #出力
      @textField.
      RTFFromRange(NSMakeRange(0, @textField.string.length)).
      writeToFile_atomically(editedDateFile, true)
    else
      #出力先ファイルの存在確認
      if File.exist?(editedDateFile) then
        File.delete(editedDateFile)
      end
    end
  end
end

#日付文字列から出力先ファイルパスを取得
#dateString(NSDate.description)のフォーマット -> YYYY-MM-DD HH:MM:SS ±HHMM
def getFilePath(dateString)
  @homeDir + dateString.to_s[0..3] + "/" + dateString.to_s[0..9] + ".rtf"
end

参考元

ゲスト



トラックバック - http://ruby.g.hatena.ne.jp/asagi29/20080506