[SSP技術資料]

カレンダー


構成
home
  +-calendar
      +-skin
          +-simple
             +-descript.txt
             +-icon.txt
             +-surface1.txt
             +-surface2.txt
             +-....
      +-plugin
          +-techside
             +-descript.txt
             +-techside.dll


カレンダースキン
スケジュールセンサ
INSTALL対応
SHIORIに送られるイベント

カレンダースキン

カレンダーの見た目の自由にデザインするためのものです.
月ごとに別々の見た目のカレンダーにすることができます.

基本的には,背景画像(枠など),追加画像,数字の画像などから構成されます.
設定などを書くには,後述のdescript.txtに書き,月ごとに設定を行うためには,surface[month].txtに書くことでデフォルトの設定(descript.txtの設定)をオーバーライドします.最低でもデフォルトの設定さえあれば,カレンダースキンは成立します.

descript.txt

カレンダースキンの設定ファイルです.カレンダースキンの名前などの情報と,デフォルトの画像や座標値などの設定を記述します.

次のようなエントリを記述します.

name,シンプルデザイン

table.left,24
table.top,60
table.right,619
table.bottom,460

day.pos.x,6
day.pos.y,6
day.spacing,-3
day.filename,num
saturday.filename,nums
saturday.spacing,-3
holiday.filename,numh
holiday.spacing,-3

year.pos.x,200
year.pos.y,16
year.spacing,-3
year.filename,num

today.pos.x,0
today.pos.y,0
today.filename,today

current.pos.x,0
current.pos.y,0
current.filename,current

month.pos.x,370
month.pos.y,16
month.filename,month

icon.left,8
icon.top,34
icon.right,68
icon.bottom,74

icon.width,20
icon.height,20

prev.left,32
prev.top,16
prev.right,68
prev.bottom,52

next.left,576
next.top,16
next.right,612
next.bottom,52

background.filename,surface

image0.name,pic0
image0.pos.x,10
image0.pos.y,10
image1.name,pic1
image1.pos.x,10
image1.pos.y,100

table.left,24
table.top,60
table.right,619
table.bottom,460
tableエントリは,カレンダーの日を入れるためのテーブルの位置を指定します.カレンダーのテーブルは,5行,7列に固定され,ここで指定した値を等分します.なお,6行必要な場合あふれた日は先頭行に表示されます.

day.pos.x,6
day.pos.y,6
day.posエントリは,テーブルのセル内で数字を表示する位置を指定します.セルの左上から,数字の左上までのオフセット値で指定します.マイナス値を指定した場合は,右端からの位置になります.

day.spacing,-3
day.filename,num
saturday.filename,nums
saturday.spacing,-3
holiday.filename,numh
holiday.spacing,-3
year.spacing,-3
year.filename,num
これらのエントリは,数字に使用する文字の画像を定義します.
dayはウィークデー用の数字,saturdayは土曜日用,holidayは日曜祝日用(現時点では祝日は未サポート),yearは西暦表示用の数字です.
filenameでは数字画像のファイル名を指定します.ここでnumと指定すると,num0.png〜 num9.pngまでの画像を使用することを意味します.数字画像は省略できず,0〜9まで全てを用意してください.なお,数字画像は左上隅の色が抜き色になります.
spacingでは,2桁以上の数字を表示するときの2桁目の数字を並べるときのオフセット値を指定します.マイナス値を指定すると,1桁目の画像に重なります(イタリックの書体のときなどにマイナス値を指定することで自然な表示にします)

year.pos.x,200
year.pos.y,16
year.posエントリは,西暦を表示する位置をカレンダー内の座標値で指定します.

today.pos.x,0
today.pos.y,0
today.filename,today
current.pos.x,0
current.pos.y,0
current.filename,current
todayエントリは,カレンダーで今日の位置を示すカーソル画像です.posの位置はセルの左上からの相対値です.currentはユーザが指定したアクティブなセルを示します.
filenameは,それぞれの画像のファイル名です.

month.pos.x,370
month.pos.y,16
month.filename,month
monthエントリは,月を表示するための画像です.posでカレンダー内で表示する位置を指定します.filenameは,使用する画像です.この例では,month1.png〜month12.pngの12個の画像を用意します.これも数字ファイル同様,省略不可です.

icon.left,8
icon.top,34
icon.right,68
icon.bottom,74
icon.width,20
icon.height,20
iconエントリは,スケジュールを示すアイコンを表示するためのものです.
left,top,right,bottomで,セル内でアイコンを表示するための領域を,セルの左上からの相対値で指定します.
width,heightは,アイコン画像の幅と高さを指定します.これは必ずしもアイコンの画像と同じサイズでなくても構いません.
なお,アイコンに使用する画像の定義は後述の,icon.txt内で行います.

prev.left,32
prev.top,16
prev.right,68
prev.bottom,52
next.left,576
next.top,16
next.right,612
next.bottom,52
prev,nextは,前の月,次の月に移動するためのボタンの位置を定義します.ボタン画像は,背景画像に書き込んでおくか,後述のimageエントリで定義します.

background.filename,surface
カレンダーに使用する背景画像を指定します.カレンダーの表示サイズはこの画像のサイズになります.

image0.name,pic0
image0.pos.x,10
image0.pos.y,10
カレンダーに使用する追加画像を指定します.nameで使用するファイル名,posで貼りこむ位置を指定します.
背景と,月ごとの絵を別に持ってファイルサイズを節約する場合などに使用します.

カレンダーは表示されるときに,背景画像→追加画像(若い順)→年月→日→アイコン→カーソル の順に描画されます.

なお,全てのファイル名は,拡張子を省略できます.また,surface\numのように相対パスを設定することもできます.

surface[month].txt

月ごとに画像や表示位置を代える場合に使用します.surface1.txt〜surface12.txtまでが有効です.
descript.txtの全エントリをオーバーライドできます.

なお,surface1.txtだけを用意した場合は,1月〜12月まで全てsurface1.txtが適用されます.例えば,surface3.txt,surface6.txt,surface9.txt,surface12.txtを用意すると,春夏秋冬のカレンダーを作れます.(1-2は12dが適用される.)

icon.txt

スケジュールをあらわすアイコン画像を定義します.

スケジュールのタイプ別に使用するファイル名を定義します.

type,filename

のような書式です.

イベントのタイプには現時点では次のようなものがあります.

default,認識できないタイプのときに使用される画像
event,汎用イベント
meeting,会議/ミーティング
appointment,アポイントメント
reservation,医者などの予約
duedate,しめきり
party,飲み会/パーティー
date,デート
work,仕事/バイト
go,お出かけ
tv,テレビ番組
recording,録画予約
cd,CD発売日
game,ゲーム発売日
video,ビデオ/DVD発売日
book,本/漫画/雑誌発売日
release,その他発売日

なお,今後タイプは追加される可能性があります.


スケジュールセンサ

スケジュールセンサは予定表などのWebページからスケジュールを読み込んできてオフラインで利用するためのものです.
また,自分の入力したスケジュールを投稿する機能も持ちます.
Web経由でスケジュールを共有するための仕組みです.

スケジュールセンサはDLLで提供され,その仕組みはヘッドラインセンサとほとんど同じです.

descript.txt

スケジュールセンサの定義をします.

name,TECHSIDE Calendar!!!
dllname,techside.dll
post,support

nameはスケジュールセンサの名前です.

dllnameはスケジュールセンサのDLLのファイル名です.

postエントリにsupportと書くとスケジュールの投稿をサポートすることを表します.

関数

スケジュールセンサは以下の関数で構成されます.スケジュールセンサDLLは,全ての関数をエクスポートしてください.

以下,説明がない場合は,引数のhは関数内で必ずGlobalFreeしてください.また,返り値がHGLOBALで引数が*lenとなっているものは,関数内でGlobalAllocしてそのサイズを*lenに格納してください.GlobalAllocはGMEM_FIXEDで確保してください.

extern "C" __declspec(dllexport) BOOL __cdecl load(HGLOBAL h, long len);
DLLのロード時に呼ばれます.hにはスケジュールセンサの絶対パスが与えられます.

extern "C" __declspec(dllexport) BOOL __cdecl unload();
DLLのアンロード時に呼ばれます.

extern "C" __declspec(dllexport) HGLOBAL __cdecl getversion(long *len);
スケジュールセンサのバージョンを返します.
SCHEDULE/1.0
を返してください.

extern "C" __declspec(dllexport) HGLOBAL __cdecl geturl(long *len,long year,long month,long day);
スケジュールをセンスするためのURLを取得します.
year,month,dayに相当するURLを返してください.なお,スケジュールセンサは月単位で取ってくるのでdayは無視して構いません

このとき,

www.ag.wakwak.com[1]/~spec/cgi-bin/calender/webcalen.cgi?year=2001&month=6

のような文字列を返してください.[1]はバイト値1です.

extern "C" __declspec(dllexport) HGLOBAL __cdecl getschedule(HGLOBAL h, long *len);
スケジュールをセンスします.
hには,指定されたURLから取得したHTMLファイルのファイル名(絶対パス付き)が与えられます.スケジュールセンサはこのファイルを読み込んで,適切なフォーマットでスケジュールを返してください.

スケジュールのフォーマットは,タブ区切りのテキストです.1つのデータの終わりはCR+LFで,複数のデータを返すことができます.

次のような形式でデータを用意してください.

type,year,month,day,starthour,startminute,endhour,endminute,caption,subtitle,script
(注:わかりやすくするためにカンマで書いてますが実際はタブ文字です)

typeにはイベントのタイプを指定します.icon.txtの項で説明しているタイプ文字(meetingなど)を使用します.イベントが特定できない場合はeventを指定します.
starthourなどは使用しない場合は空欄にして返してください.
captionはスケジュールの内容,subtitleには場所などの追加情報,scriptはスケジュール内容の詳細などです.script内はSAKURA Scriptが使用できます.

extern "C" __declspec(dllexport) HGLOBAL __cdecl geturlpost(HGLOBAL h, long *len,long* method);
スケジュール投稿のためのURLと,パラメータを用意します.

hには,getscheduleで説明した形式でスケジュールデータが渡されます.(1つだけです)スケジュールセンサではこのデータを解釈して,適切なURLとパラメータを用意します.次のようなデータを返してください.

www.ag.wakwak.com[1]/~spec/cgi-bin/calender/webcalen.cgi[1]task=write2&pwd=&year=2001&month=6&day=12&title=テスト&color=none&bold=off&url=

[1]はバイト値1です.
3番目にスケジュールデータから作成したパラメータを入れてください.このとき,パラメータ内の文字を%E7みたいな形式に変更する必要はありません.本体側で処理します.

また,methodにはGETで送るかPOSTで送るかを指定します.0のときGET,1のときPOSTが使用されます.(文字列ではなく数値です)


INSTALL対応

カレンダースキン,スケジュールセンサを書庫ファイルからインストールするために,書庫ファイルに設定をします.
基本時には,ゴーストやバルーンのインストールと同じです.

カレンダースキンのINSTALL対応は,install.txtに,次のように書きます.

type,calendar skin
directory,SimplyBrown
これで,home\calendar\skin\SimplyBrownにスキンがインストールされます.

同様にスケジュールセンサもinstall.txtに,

type,calendar plugin
directory,techside
とすることで,home\calendar\plugin\techsideにスケジュールセンサがインストールされます.

これらのtypeはインストールイベントでSHIORIにも同じ物が渡されます.


カレンダー関連のSHIORI/2.xイベント

※イベントはまだ追加される可能性があります

OnSchedule5MinutesToGo
スケジュールの時間の5分前に呼ばれます.
Reference0: イベントのタイプが入ります.(icon.txtの説明を参照)
Reference1: イベントの内容(caption)が入ります.
Reference2: 追加データ(subtitle)が入ります.
Reference3: スクリプト(script)が入ります.

OnScheduleRead
カレンダーアイコンの上にマウスをしばらく置いておくとそのスケジュールを読むときにこのイベントが呼ばれます.
Reference0: イベントのタイプが入ります.(icon.txtの説明を参照)
Reference1: イベントの内容(caption)が入ります.
Reference2: 追加データ(subtitle)が入ります.
Reference3: スクリプト(script)が入ります.

OnSchedulesenseBegin
スケジュールセンサが接続開始するときに呼ばれます.
Reference0: スケジュールセンサの名前が入ります

OnSchedulesenseComplete
スケジュールセンサの処理が完了したときに呼ばれます.
Reference0: スケジュールセンサの名前が入ります
Reference1: スケジュールセンサの返したスケジュールデータの数が入ります

OnSchedulesenseFailure
スケジュールセンサが処理に失敗した場合に呼ばれます.
Reference0: 失敗した理由が入ります.ヘッドラインセンサと同じです.

OnSchedulepostBegin
スケジュールセンサが投稿モードで接続開始するときに呼ばれます.
Reference0: スケジュールセンサの名前が入ります

OnSchedulepostComplete
スケジュールセンサが投稿処理を完了したときに呼ばれます.
Reference0: スケジュールセンサの名前が入ります


戻る