// Vala Sample File

/*
 * Multiline comment
 * NOTE FIXME ALERT
 */
void main() {
    print("Hello World\n");
}

// Example 1
class Sample: Object {
    void greeting() {
        stdout.printf("Hello World\n");
    }

    static void main(string[] args) {
        var sample = new Sample();
        sample.greeting();
    }
}

// Example 2
using GLib;

interface Printable {
    public abstract string print();

    public virtual string pretty_print() {
        return "Please " + print();
    }
}

class NormalPrint: Object, Printable {
    string print() {
        return "don't forget about me";
    }
}

class OverridePrint: Object, Printable {
    string print() {
        return "Mind the gap";
    }

    public override string pretty_print() {
        return "Override";
    }
}

void main(string[] args) {
    var normal = new NormalPrint();
    var overridden = new OverridePrint();

    print(normal.pretty_print());
    print(overridden.pretty_print());
}

// Example 3
using Gtk;

int main(string[] args) {
    Gtk.init(ref args);

    var window = new Window();
    window.title = "Hello, World!";
    window.border_width = 10;
    window.window_position = WindowPosition.CENTER;
    window.set_default_size(350, 70);
    window.destroy.connect(Gtk.main_quit);

    var label = new Label("Hello, World!");

    window.add(label);
    window.show_all();

    Gtk.main();
    return 0;
}