ワープロやドローイングソフトなどの編集ソフトを作る上での一般的な考え方を考える「一般的な編集ソフトの作り方」です。
ここでは、主に、
・メモリ上に、要素をもつ
・イベント発生時の動き
・画面の構成
ということで、現在、「イベント発生時の動き」をやっています。
その機能には、
・印刷
・保存
・読み込み
・カット(切り取り)
・ペースト(貼り込み)
・プロパティ(属性設定・変更)
・表示
・要素の選択
・(要素の)移動
で、今日はプロパティ変更についてやります
■プロパティの変更は2種類にわかれる
プロパティは、図形等の場合、色など、文字の場合フォント、装飾(下線など)などですが、子のプロパティ変更は、
・大きさ、位置がかわるもの
・大きさ、位置はかわらず、中身のみ変わるもの
とあります。後者の「大きさ、位置はかわらず、中身のみ変わる」場合は簡単で、
1.ダイアログや、その他いろいろな操作で、プロパティ変更を受け付ける
2.現在選択されているものの、属性値を1で指定されたものに変える
3.再描画する
ですみます、しかし、大きさが変わる場合、例えば、文字枠の大きさが変わると、中に入っている文字の位置も当然変わりますが、外側の文字を排除しているような場合、外側も変わります。
そのため、ちょっと面倒な処理になります。
■大きさ、位置が変わる場合のプロパティ変更
この場合、親に、プロパティ変更することを通知し、変更後の位置決めを、(変更するものもふくめ、その兄弟の)子どもに対して決定し、設定したら、子供のプロパティに変更した旨をつうちしないといけません。また、変更するプロパティの子供の位置決めも必要です。
そこで
1.ダイアログや、その他いろいろな操作で、プロパティ変更を受け付ける
2.現在選択されているもの(=変更するプロパティ)を決定
3.変更するプロパティの親に対し、
子供(変更するものとその兄弟)の位置決めをする
4.3の値に変更し、親に通知する。
変更できない場合は、位置変更せずに、通知
→変更できない場合、変更処理を取り消し、元に戻る
5.変更する対象の子供に対し、変更後の位置決めをする
→変更できない場合、変更処理を取り消し、元に戻る
6.5の位置に子供の属性を変更する。自分の属性も変更する
7.再描画する
→クリックされたとこををバッファをもって調べている場合、そのバッファにも書き出し
とこんなかんじです。