懸案のTextEditorですが、複数行のテキストを表示・編集するためのWidgetとしてgtkmmは Gtk::TextView というものを用意しています。
例えば、前回のmain関数をちょっと書き換えて
#include <gtkmm.h>
int
main (int argc, char **argv)
{
Gtk::Main kit (argc, argv);
Gtk::Window win;
win.set_default_size (300, 300);
Gtk::TextView m_textview;
win.add (m_textview);
m_textview.show ();
Gtk::Main::run (win);
return 0;
}
これを実行すると、こんな感じ。
既にテキストエディタっぽいものが出来上がってしまいます(ちなみにTextViewの中身はコピペしてます)。
TextViewは、デフォルトで右クリックでカット、コピー、ペーストのポップアップメニューが出るようになっており、更にそれらのショートカットまで有効になっています。
ただ、このままではあんまり長いテキストを入力すると、縦横にどんどん大きくなってしまうので
Gtk::Window win;
Gtk::ScrolledWindow m_swin;
m_swin.set_policy (
Gtk::POLICY_AUTOMATIC,
Gtk::POLICY_AUTOMATIC
);
m_swin.add (m_textview);
win.add (m_swin);
とすれば、縦横のスクロールバーが自動で出るようになります。
また
void
Gtk::TextView::
set_wrap_mode (Gtk::WrapMode wrap_mode);
enum Gtk::WrapMode {
WRAP_NONE,
WRAP_CHAR,
WRAP_WORD,
WRAP_WORD_CHAR
};
で、一行が長い文書は折り返して表示されるようになります。
テキストエディタの基本はこんな感じで、後はこれにいろいろ機能を付加してゆくことになります。
加える機能としては
1. ファイルの入出力
2. カット、コピー、ペースト(メニューからも出来るように)
3. Undo, Redo
4. テキストの検索・置き換え
といった所でしょうか。これらをメニューに登録し、メニューバーから操作出来るようにします。
