Vala
Siehe auch
Die 2006 erschienene, objektorientierte Programmiersprache Vala kann zum Bau von Anwendungen verwendet werden, die direkt auf den GNOME Runtime Libraries laufen (im speziellen GLib und GObject). Der Vala-Compiler übersetzt alle Vala-Konstrukte und -Typen nach C und compiliert den entstandenen C-Code. Vala-Programme sind daher funktional C ebenbürtig, schnell und durch die modernen Programmierkonzepte einfacher zu schreiben und zu warten. Mit Vala lassen sich Programme entwickeln, die unter der Kommandozeile und unter GNOME laufen (wobei Vala nicht an GNOME gebunden ist - es lässt sich zur plattformunabhängigen Entwicklung verwenden, solange man die GLib nutzt).
Der E-Mail-Client Geary, die Fotoverwaltung Shotwell und der Zeitmanagement-Timer Pomodoro sind prominente Beispiele für in Vala geschriebene Programme (die ersten beiden Programme sind von Yorba entwickelt worden).
Mehr zu Vala findet sich im GNOME-Wiki unter Projects/Vala.
Installation:
yum -y install vala glib2-devel gtk3-devel
- Links:
Dokumentation: https://valadoc.org/
Hello World
1void main () {
2 print ("Hello World.\n");
3}
Compilierung:
valac helloworld.vala
Start und Test der eigenen GNOME-Applikation:
./helloworld
Einfache TUI-Anwendung
Hier ein Beispiel für eine TUI-Anwendung in Vala, die auf ncurses
basiert.
1using Curses;
2
3int main (string[] args) {
4
5 /* Initialize Curses */
6 initscr ();
7
8 /* Initialize color mode and define a color pair */
9 start_color ();
10 init_pair (1, Color.GREEN, Color.RED);
11
12 /* Create a window (height/lines, width/columns, y, x) */
13 var win = new Window (LINES - 8, COLS - 8, 4, 4);
14 win.bkgdset (COLOR_PAIR (1) | Attribute.BOLD); // set background
15 win.addstr ("Hello world!"); // write string
16 win.clrtobot (); // clear to bottom (does not move cursor)
17 win.getch (); // read a character
18
19 /* Reset the terminal mode */
20 endwin ();
21
22 return 0;
23}
yum -y install ncurses-devel
valac --pkg curses -X -lncurses mytui.vala
./mytui
Einfache GUI-Anwendung mit Gtk (direkt)
Ein Beispiel für eine einfache GNOME-/GTK+-Anwendung:
1using Gtk;
2
3int main (string[] args) {
4
5 Gtk.init (ref args);
6
7 var window = new Window();
8 window.title = "Window Title";
9 window.border_width = 10;
10 window.window_position = WindowPosition.CENTER;
11 window.set_default_size(350, 70);
12 window.destroy.connect(Gtk.main_quit);
13
14 var button = new Button.with_label ("Click me!");
15 button.clicked.connect (() => {
16 button.label = "Thank you";
17 });
18
19 window.add (button);
20 window.show_all();
21
22 Gtk.main();
23 return 0;
24}
Compilierung:
valac --pkg gtk+-3.0 mygui.vala
Start und Test der eigenen GNOME-Applikation:
./mygui
Einfache GUI-Anwendung mit Gtk und XML-Definition
Folgende Gtk-Definition (XML-Datei) ist mit Glade erzeugt und definiert ein Applikationsfenster mit einem „Click Me!“-Button. Die XML-Datei lässt sich mit Glade jederzeit wieder visualisieren und nachbearbeiten.
1<?xml version="1.0" encoding="UTF-8"?>
2<interface>
3 <!-- interface-requires gtk+ 3.0 -->
4 <object class="GtkWindow" id="window1">
5 <property name="can_focus">False</property>
6 <property name="border_width">10</property>
7 <property name="title" translatable="yes">My first GUI program</property>
8 <property name="window_position">center-always</property>
9 <property name="default_width">400</property>
10 <property name="default_height">100</property>
11 <signal name="destroy" handler="on_window1_destroy" swapped="no"/>
12 <child>
13 <object class="GtkButton" id="button1">
14 <property name="label" translatable="yes">Click me!</property>
15 <property name="use_action_appearance">False</property>
16 <property name="visible">True</property>
17 <property name="can_focus">False</property>
18 <property name="receives_default">False</property>
19 <property name="use_action_appearance">False</property>
20 <signal name="clicked" handler="on_button1_clicked" swapped="no"/>
21 </object>
22 </child>
23 </object>
24</interface>
So wird die XML-Definition in einem Vala-Programm dynamisch geladen:
1using Gtk;
2
3int i;
4
5public void on_button1_clicked (Button button) {
6i += 1;
7 button.label = "Hello, World!\nClick count = %i".printf(i);
8}
9
10public void on_window1_destroy (Window window) {
11 Gtk.main_quit ();
12}
13
14int main (string[] args) {
15 Gtk.init (ref args);
16 i = 0;
17 try {
18 var builder = new Builder ();
19 builder.add_from_file ("glade.glade");
20 builder.connect_signals (null);
21 var window = builder.get_object ("window1") as Window;
22 window.show_all ();
23 } catch (Error e) {
24 stderr.printf ("Could not load UI: %s\n", e.message);
25 return 1;
26 }
27 Gtk.main ();
28 return 0;
29}
Compilierung und Aufruf:
valac -X -rdynamic --pkg gtk+-3.0 glade.vala
./glade
Der „Click Me!“-Button ändert bei jedem Klick sein Label und gibt dabei aus, wie oft er angeklickt wurde.
Built on 2024-11-18