[gtkmm] テキストエディタの準備 | ぽんのブログ

ぽんのブログ

自分用の備忘録ブログです。書いてある内容、とくにソースは、後で自分で要点が分かるよう、かなり簡略化してます(というか、いい加減)。あまり信用しないように(汗

懸案の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. テキストの検索・置き換え

といった所でしょうか。これらをメニューに登録し、メニューバーから操作出来るようにします。