ということで、テキストエディタの本来の機能であるテキスト編集に関して気をつけることは、、

テキスト編集自体よりも、テキストを編集することによって生じる様々な影響に正しく

そして出来るだけ早く対応できること。

だという気がする。もちろんメモリ操作などテキストを格納する部分は問題がないように

作っている前提なんだけども。

今作っているものは、一つのテキストに複数のビューが結びつくことがあるので

テキストの変更があった場合に結びつく全てのビューも表示を更新しないといけない。

なもんで、さしあたりこんな仮想クラスを作って

 

 

class CTextEditCallback
{
	protected:
		virtual void on_text_line_update_need(bsize_t line) = 0;
};

 

テキスト管理クラスにこのクラスへのポインタ配列を格納する変数を追加。

		std::vector<CTextEditCallback*> m_callback;			///< 通知用コールバック格納

 

ビューの方でこの仮想クラスを継承して純粋仮想の実体も定義。

あとは自身の生成/破棄に合わせて register/unregister で自身をテキスト管理クラスに登録/登録解除。

という構造にした。

 

一文字挿入(削除)してからの流れが少し追いにくくはなるのだけど、

一文字挿入→画面更新

ではなく

一文字挿入→コールバック受信→必要に応じて画面更新

という流れになる。削除も一緒。

 

言葉で書くと簡単なんだけどな 笑

『必要に応じて画面更新』これが意外とネックというかややこしくはある。

まぁまずは丁寧に作って、パフォーマンスに問題があるようなら工夫することにしよう。

 

コメントを追加