Hash :
9b3919db
Author :
Thomas de Grivel
Date :
2024-12-19T11:42:46
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
#!/usr/bin/env ikc3
defmodule Kmsg do
require Gtk4
require Gtk4.ActionMap
require Gtk4.Application
require Gtk4.ApplicationWindow
require Gtk4.Box
require Gtk4.Button
require Gtk4.Frame
require Gtk4.Label
require Gtk4.ListBox
require Gtk4.Menu
require Gtk4.MenuItem
require Gtk4.Paned
require Gtk4.ScrolledWindow
require Gtk4.SimpleAction
require Gtk4.TextView
require Gtk4.Widget
require Gtk4.Window
require List
def connect = fn (action, void) {
puts("Kmsg.connect")
}
def activate = fn (app, void) {
window = Gtk4.ApplicationWindow.new(app)
Gtk4.Window.set_title(window, "Kmsg")
Gtk4.Window.set_default_size(window, (Uw) 640, (Uw) 480)
paned = Gtk4.Paned.new(:horizontal)
Gtk4.Widget.set_size_request(paned, 200, 200);
scrolled_window1 = Gtk4.ScrolledWindow.new()
list_box1 = Gtk4.ListBox.new()
labels1 = List.map(List.count(20), fn (x) {
label = Gtk4.Label.new("Label")
Gtk4.Widget.set_halign(label, :start)
Gtk4.ListBox.append(list_box1, label)
label
})
Gtk4.ScrolledWindow.set_child(scrolled_window1, list_box1)
Gtk4.Paned.set_start_child(paned, scrolled_window1)
Gtk4.Paned.set_resize_start_child(paned, true)
Gtk4.Paned.set_shrink_start_child(paned, false)
box1 = Gtk4.Box.new(:vertical, 0)
scrolled_window2 = Gtk4.ScrolledWindow.new()
list_box2 = Gtk4.ListBox.new()
Gtk4.Widget.set_vexpand(list_box2, true)
labels2 = List.map(List.count(200), fn (x) {
label = Gtk4.Label.new("<b>thodg</b>: Message <i>with <b>markup</b></i> !")
Gtk4.Label.set_use_markup(label, true)
Gtk4.Widget.set_halign(label, :start)
Gtk4.ListBox.append(list_box2, label)
label
})
Gtk4.Paned.set_resize_end_child(paned, false)
Gtk4.Paned.set_shrink_end_child(paned, false)
Gtk4.ScrolledWindow.set_child(scrolled_window2, list_box2)
Gtk4.Box.append(box1, scrolled_window2)
box2 = Gtk4.Box.new(:horizontal, 0)
Gtk4.Box.append(box1, box2)
Gtk4.Paned.set_end_child(paned, box1)
Gtk4.Window.set_child(window, paned)
text_view = Gtk4.TextView.new()
Gtk4.Widget.set_hexpand(text_view, true)
Gtk4.Box.append(box2, text_view)
button = Gtk4.Button.new_with_label("Send")
Gtk4.Box.append(box2, button)
Gtk4.Paned.set_position(paned, 240);
connect_action = Gtk4.SimpleAction.new("connect", Kmsg.connect, void)
Gtk4.ActionMap.add_action(app, connect_action)
Gtk4.Application.set_accel_for_action(app, "app.connect", "<Control>N");
menu = Gtk4.Menu.new()
file_menu = Gtk4.Menu.new()
item = Gtk4.MenuItem.new("Connect", "app.connect")
Gtk4.Menu.append_item(file_menu, item)
Gtk4.Menu.append_section(menu, "File", file_menu)
Gtk4.Application.set_menubar(app, menu)
Gtk4.Window.present(window)
}
def main = fn () {
puts("Kmsg.main: starting, please wait...")
Gtk4.init()
app = Gtk4.Application.new("Kmsg", "io.kmx.kmsg")
Gtk4.signal_connect(app, "activate", Kmsg.activate, void)
status = Gtk4.Application.run(app)
puts("Kmsg.main: exiting: #{inspect(status)}")
Gtk4.Application.delete(app)
status
}
end
Kmsg.main()