Blame platform-demos/C/samples/radiobutton.js

Packit 1470ea
#!/usr/bin/gjs
Packit 1470ea
Packit 1470ea
imports.gi.versions.Gtk = '3.0';
Packit 1470ea
Packit 1470ea
const Gio = imports.gi.Gio;
Packit 1470ea
const Gtk = imports.gi.Gtk;
Packit 1470ea
Packit 1470ea
class RadioButtonExample {
Packit 1470ea
Packit 1470ea
    // Create the application itself
Packit 1470ea
    constructor() {
Packit 1470ea
        this.application = new Gtk.Application({
Packit 1470ea
            application_id: 'org.example.jsradiobutton',
Packit 1470ea
            flags: Gio.ApplicationFlags.FLAGS_NONE
Packit 1470ea
        });
Packit 1470ea
Packit 1470ea
        // Connect 'activate' and 'startup' signals to the callback functions
Packit 1470ea
        this.application.connect('activate', this._onActivate.bind(this));
Packit 1470ea
        this.application.connect('startup', this._onStartup.bind(this));
Packit 1470ea
    }
Packit 1470ea
Packit 1470ea
    // Callback function for 'activate' signal presents window when active
Packit 1470ea
    _onActivate() {
Packit 1470ea
        this._window.present();
Packit 1470ea
    }
Packit 1470ea
Packit 1470ea
    // Callback function for 'startup' signal builds the UI
Packit 1470ea
    _onStartup() {
Packit 1470ea
        this._buildUI();
Packit 1470ea
    }
Packit 1470ea
Packit 1470ea
    // Build the application's UI
Packit 1470ea
    _buildUI() {
Packit 1470ea
Packit 1470ea
        // Create the application window
Packit 1470ea
        this._window = new Gtk.ApplicationWindow({
Packit 1470ea
            application: this.application,
Packit 1470ea
            window_position: Gtk.WindowPosition.CENTER,
Packit 1470ea
            border_width: 20,
Packit 1470ea
            title: "Travel Planning"});
Packit 1470ea
Packit 1470ea
        // Create a label for the first group of buttons
Packit 1470ea
        this._placeLabel = new Gtk.Label ({label: "Where would you like to travel to?"});
Packit 1470ea
Packit 1470ea
        // Create three radio buttons three different ways
Packit 1470ea
        this._place1 = new Gtk.RadioButton ({label: "The Beach"});
Packit 1470ea
Packit 1470ea
        this._place2 = Gtk.RadioButton.new_from_widget (this._place1);
Packit 1470ea
        this._place2.set_label ("The Moon");
Packit 1470ea
Packit 1470ea
        this._place3 = Gtk.RadioButton.new_with_label_from_widget (this._place1, "Antarctica");
Packit 1470ea
        // this._place3.set_active (true);
Packit 1470ea
Packit 1470ea
        // Create a label for the second group of buttons
Packit 1470ea
        this._thingLabel = new Gtk.Label ({label: "And what would you like to bring?" });
Packit 1470ea
Packit 1470ea
        // Create three more radio buttons
Packit 1470ea
        this._thing1 = new Gtk.RadioButton ({label: "Penguins" });
Packit 1470ea
        this._thing2 = new Gtk.RadioButton ({label: "Sunscreen", group: this._thing1 });
Packit 1470ea
        this._thing3 = new Gtk.RadioButton ({label: "A spacesuit", group: this._thing1 });
Packit 1470ea
Packit 1470ea
        // Create a stock OK button
Packit 1470ea
        this._okButton = new Gtk.Button ({
Packit 1470ea
            label: 'gtk-ok',
Packit 1470ea
            use_stock: 'true',
Packit 1470ea
            halign: Gtk.Align.END });
Packit 1470ea
Packit 1470ea
        // Connect the button to the function which handles clicking it
Packit 1470ea
        this._okButton.connect ('clicked', this._okClicked.bind(this));
Packit 1470ea
Packit 1470ea
        // Create a grid to put the "place" items in
Packit 1470ea
        this._places = new Gtk.Grid ();
Packit 1470ea
Packit 1470ea
        // Attach the "place" items to the grid
Packit 1470ea
        this._places.attach (this._placeLabel, 0, 0, 1, 1);
Packit 1470ea
        this._places.attach (this._place1, 0, 1, 1, 1);
Packit 1470ea
        this._places.attach (this._place2, 0, 2, 1, 1);
Packit 1470ea
        this._places.attach (this._place3, 0, 3, 1, 1);
Packit 1470ea
Packit 1470ea
        // Create a grid to put the "thing" items in
Packit 1470ea
        this._things = new Gtk.Grid ({ margin_top: 50 });
Packit 1470ea
Packit 1470ea
        // Attach the "thing" items to the grid
Packit 1470ea
        this._things.attach (this._thingLabel, 0, 0, 1, 1);
Packit 1470ea
        this._things.attach (this._thing1, 0, 1, 1, 1);
Packit 1470ea
        this._things.attach (this._thing2, 0, 2, 1, 1);
Packit 1470ea
        this._things.attach (this._thing3, 0, 3, 1, 1);
Packit 1470ea
Packit 1470ea
        // Create a grid to put everything in
Packit 1470ea
        this._grid = new Gtk.Grid ({
Packit 1470ea
            halign: Gtk.Align.CENTER,
Packit 1470ea
            valign: Gtk.Align.CENTER,
Packit 1470ea
            margin_left: 40,
Packit 1470ea
            margin_right: 50 });
Packit 1470ea
Packit 1470ea
        // Attach everything to the grid
Packit 1470ea
        this._grid.attach (this._places, 0, 0, 1, 1);
Packit 1470ea
        this._grid.attach (this._things, 0, 1, 1, 1);
Packit 1470ea
        this._grid.attach (this._okButton, 0, 2, 1, 1);
Packit 1470ea
Packit 1470ea
        // Add the grid to the window
Packit 1470ea
        this._window.add (this._grid);
Packit 1470ea
Packit 1470ea
        // Show the window and all child widgets
Packit 1470ea
        this._window.show_all();
Packit 1470ea
    }
Packit 1470ea
Packit 1470ea
    _okClicked() {
Packit 1470ea
Packit 1470ea
        // Create a popup that shows a silly message
Packit 1470ea
        this._travel = new Gtk.MessageDialog ({
Packit 1470ea
            transient_for: this._window,
Packit 1470ea
            modal: true,
Packit 1470ea
            message_type: Gtk.MessageType.OTHER,
Packit 1470ea
            buttons: Gtk.ButtonsType.OK,
Packit 1470ea
            text: this._messageText() });
Packit 1470ea
Packit 1470ea
        // Show the popup
Packit 1470ea
        this._travel.show();
Packit 1470ea
Packit 1470ea
        // Bind the OK button to the function that closes the popup
Packit 1470ea
        this._travel.connect ("response", this._clearTravelPopUp.bind(this));
Packit 1470ea
Packit 1470ea
    }
Packit 1470ea
Packit 1470ea
    _messageText() {
Packit 1470ea
Packit 1470ea
        // Create a silly message for the popup depending on what you selected
Packit 1470ea
        var stringMessage = "";
Packit 1470ea
Packit 1470ea
        if (this._place1.get_active()) {
Packit 1470ea
Packit 1470ea
            if (this._thing1.get_active())
Packit 1470ea
                stringMessage = "Penguins love the beach, too!";
Packit 1470ea
Packit 1470ea
            else if (this._thing2.get_active())
Packit 1470ea
                stringMessage = "Make sure to put on that sunscreen!";
Packit 1470ea
Packit 1470ea
            else stringMessage = "Are you going to the beach in space?";
Packit 1470ea
Packit 1470ea
        }
Packit 1470ea
Packit 1470ea
        else if (this._place2.get_active()) {
Packit 1470ea
Packit 1470ea
            if (this._thing1.get_active())
Packit 1470ea
                stringMessage = "The penguins will take over the moon!";
Packit 1470ea
Packit 1470ea
            else if (this._thing2.get_active())
Packit 1470ea
                stringMessage = "A lack of sunscreen will be the least of your problems!";
Packit 1470ea
Packit 1470ea
            else stringMessage = "You'll probably want a spaceship, too!";
Packit 1470ea
        }
Packit 1470ea
Packit 1470ea
        else if (this._place3.get_active()) {
Packit 1470ea
Packit 1470ea
            if (this._thing1.get_active())
Packit 1470ea
                stringMessage = "The penguins will be happy to be back home!";
Packit 1470ea
Packit 1470ea
            else if (this._thing2.get_active())
Packit 1470ea
                stringMessage = "Antarctic sunbathing may be hazardous to your health!";
Packit 1470ea
Packit 1470ea
            else stringMessage = "Try bringing a parka instead!";
Packit 1470ea
        }
Packit 1470ea
Packit 1470ea
        return stringMessage;
Packit 1470ea
Packit 1470ea
    }
Packit 1470ea
Packit 1470ea
    _clearTravelPopUp() {
Packit 1470ea
        this._travel.destroy();
Packit 1470ea
    }
Packit 1470ea
};
Packit 1470ea
Packit 1470ea
// Run the application
Packit 1470ea
let app = new RadioButtonExample ();
Packit 1470ea
app.application.run (ARGV);