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

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

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

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

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

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

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

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

 

 

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

 

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

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

 

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

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

という構造にした。

 

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

一文字挿入→画面更新

ではなく

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

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

 

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

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

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

 

…ちょっと忙しかった。

でも続けてるよ :)

とりあえずやっつけだけど、Windows 版も OSX 版と同等になったからお披露目。

OSX 版と同じ制限があります

 

折角だから記念に実行ファイル置いとこ 笑

テキストエディタ + サンプルテキスト』Windows 64bit版。

落とす人はまずいないと思うけど、現状では以下のような状態です。

 

メニュー類は全く動作しないので、ファイルの読み込みはドラッグアンドドロップで行います。

ファイルの保存も編集もできません。眺めることしかできません。エディットできないエディタです。ビューワじゃないか。

スクロールバーも動作しません。画面の移動はカーソルキーもしくはページ移動キーのみ(私の環境だと fn + カーソルキー)。

マウスでの範囲選択はできるけど、それだけです。

検索入力部分に文字列を入れると検索。

現在は検索文字列の先頭が『/』だった場合、正規表現検索が指定されたとみなします。

 

スクリーンショット 2019 04 07 22.09.39

 

これでやっと編集に進める。。焦らずやっていこう。