Class: Gtk::TextBufferExample

Inherits:
Box
  • Object
show all
Defined in:
lib/gtk_paradise/examples/gtk3/070_text_buffer_example.rb

Constant Summary collapse

ARRAY_USE_THESE_COLOURS =
#

ARRAY_USE_THESE_COLOURS

#
%w( red gold green steelblue white )
CSS_STRING =
#

CSS_STRING

#
<<-EOF

/* The following variants do not all seem to work that well ... */
textview {
  border: none;
  background-color: white;
  padding: 8px;
  border:  8px solid darkblue;
  border-width: 12px 12px 12px 12px;
  border-style: solid;
  border-color: #000;
  border-radius: 3px;
}

#scrolledwindow1 {
  border: 3px solid darkblue;
}

/* And if you want to style the text as well */
textview text {
  color: darkgreen;
}

.larger_font {
  font-size: 30px;
}

EOF

Instance Method Summary collapse

Methods inherited from Box

#add_space, #left_aligned_text, #text

Constructor Details

#initialize(run_already = true) ⇒ TextBufferExample

#

initialize

#


57
58
59
60
61
62
63
64
# File 'lib/gtk_paradise/examples/gtk3/070_text_buffer_example.rb', line 57

def initialize(
    run_already = true
  )
  super(:horizontal)
  reset
  add_css_rules
  run if run_already
end

Instance Method Details

#add_css_rulesObject

#

add_css_rules

#


159
160
161
162
163
164
165
166
167
# File 'lib/gtk_paradise/examples/gtk3/070_text_buffer_example.rb', line 159

def add_css_rules
  provider = ::Gtk::CssProvider.new
  provider.load(data: CSS_STRING)
  ::Gtk::StyleContext.add_provider_for_screen(
    Gdk::Screen.default,
    provider,
    Gtk::StyleProvider::PRIORITY_APPLICATION
  )
end

#connect_skeletonObject

#

connect_skeleton

#


139
140
141
142
# File 'lib/gtk_paradise/examples/gtk3/070_text_buffer_example.rb', line 139

def connect_skeleton
  add(@grid)
  consider_allowing_the_text_buffer_to_respond_to_certain_events
end

#consider_allowing_the_text_buffer_to_respond_to_certain_eventsObject

#

consider_allowing_the_text_buffer_to_respond_to_certain_events (event tag)

#


172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
# File 'lib/gtk_paradise/examples/gtk3/070_text_buffer_example.rb', line 172

def consider_allowing_the_text_buffer_to_respond_to_certain_events
  @text_buffer.signal_connect(:delete_range) {|widget, event|
    e 'Something was deleted.'
  }
  @text_buffer.signal_connect(:changed) {|widget, event|
    e 'The cursor position is at: '+
       widget.cursor_position.to_s
  }
  @text_buffer.signal_connect('notify::cursor-position') {|widget, event|
    e 'The cursor position was changed. It is now at: '+
       widget.cursor_position.to_s
  }
  # @text_buffer.signal_connect(:insert_text) {|widget, iter| # widget is text-buffer, logically.
  @text_view.signal_connect(:key_press_event) {|widget, event|
    e 'The key that was added was: '+
       Gdk::Keyval.to_name(event.keyval).to_s
    false
  }
end

#create_gridObject

#

create_grid

#


132
133
134
# File 'lib/gtk_paradise/examples/gtk3/070_text_buffer_example.rb', line 132

def create_grid
  @grid = ::Gtk::Grid.new
end

#create_scrolled_windowObject

#

create_scrolled_window

#


147
148
149
150
151
152
153
154
# File 'lib/gtk_paradise/examples/gtk3/070_text_buffer_example.rb', line 147

def create_scrolled_window
  @scrolled_window = ::Gtk::ScrolledWindow.new
  @scrolled_window.set_hexpand(true)
  @scrolled_window.set_vexpand(true)
  @scrolled_window.set_name('scrolledwindow1')
  @scrolled_window.shadow_type = :in
  @scrolled_window.style_context.add_class('larger_font')
end

#create_skeletonObject

#

create_skeleton

#


195
196
197
198
199
# File 'lib/gtk_paradise/examples/gtk3/070_text_buffer_example.rb', line 195

def create_skeleton
  create_grid
  create_scrolled_window
  create_textview
end

#create_textviewObject

#

create_textview

#


75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# File 'lib/gtk_paradise/examples/gtk3/070_text_buffer_example.rb', line 75

def create_textview
  @grid.attach(@scrolled_window, 0, 1, 3, 1)

  @text_view = ::Gtk::TextView.new

  @text_buffer = @text_view.buffer

  @text_view.pixels_above_lines = 2
  @text_view.pixels_below_lines = 2
  @text_view.pixels_inside_wrap = 2

  start_iter = @text_buffer.start_iter # Obtain the start iter.

  @text_buffer.insert(start_iter, 'This is some text ') # Insert some regular text.
  # ======================================================================= #
  # Next, insert some markup text - bold text.
  # ======================================================================= #
  @text_buffer.insert_markup(
    @text_buffer.end_iter,
    "<b>and some bold text</b>",
    -1
  )
  @text_buffer.insert_markup(
    @text_buffer.end_iter,
    "... <i>and italic, too!</i> \\o/\n\n",
    -1
  )

  ARRAY_USE_THESE_COLOURS.each {|entry|
    @text_buffer.insert_markup(
      @text_buffer.end_iter,
      "<span color=\"#{entry}\">This is a test message.</span>\n",
      -1
    )
  }
  iter = return_current_iter
  @text_buffer.insert(iter, "This is more text that "\
    "is just added (appended, actually).\n")
  iter = return_current_iter
  darkblue = @text_buffer.create_tag(nil, { foreground: 'darkblue' })
  @text_buffer.insert(
    iter, 'A hyperlink: <a href="blog.fefe.de">here</a>', tags: [darkblue]
  )

  @scrolled_window.add(@text_view)
end

#resetObject

#

reset

#


69
70
# File 'lib/gtk_paradise/examples/gtk3/070_text_buffer_example.rb', line 69

def reset
end

#return_current_iterObject

#

return_current_iter

#


125
126
127
# File 'lib/gtk_paradise/examples/gtk3/070_text_buffer_example.rb', line 125

def return_current_iter
  @text_buffer.get_iter_at(offset: -1)
end

#runObject

#

run

#


204
205
206
207
# File 'lib/gtk_paradise/examples/gtk3/070_text_buffer_example.rb', line 204

def run
  create_skeleton
  connect_skeleton
end