lib mers_libs/gui

// GUI for xrandr, because arandr doesn't let me change the framerates.
// [ WIP ]

base = gui_init()

set_title("MersRandr")

randr_output = run_command("xrandr")

switch! randr_output {
    Err(string) {
        println(randr_output.noenum())
    }
    [[]/int string string] {
        lines = randr_output.1.regex(".*")
        screen_name = ""
        screen_resolutions = [["" ["" ...]] ...]
        screens = [
            [
                screen_name
                screen_resolutions
            ]
        ...]
        &screen_resolutions.pop()
        &screens.pop()
        for line lines {
            if line.starts_with("Screen ") {
                // ignore
            } else if line.starts_with("   ") {
                // split at spaces (and ignore +*)
                refresh_rates = line.regex("[^ +\\*]+").assume_no_enum()
                resolution = &refresh_rates.remove(0).assume1()
                print("{0} ::".format(resolution))
                for rate refresh_rates {
                    print(" \"{0}\"".format(rate))
                }
                &screen_resolutions.push([resolution refresh_rates])
                println("")
            } else {
                index = line.index_of(" ")
                switch! index {
                    int {
                        if not(screen_name.len().eq(0)) {
                            &screens.push([screen_name screen_resolutions])
                        }
                        screen_resolutions = [ ...]
                        screen_name = line.substring(0 index)
                        println("> \"{0}\"".format(screen_name))
                    }
                    [] {}
                }
            }
        }
        if not(screen_name.len().eq(0)) {
            &screens.push([screen_name screen_resolutions])
        }
        for screen screens {
            println(screen.0)
            gui_screen = base.gui_add(Row: [])
            gui_name = gui_screen.gui_add(Text: screen.0)
            for res screen.1 {
                gui_resolution = gui_screen.gui_add(Button: res.0)
                print("  ")
                println(res.0)
                for rate res.1 {
                    print("    ")
                    println(rate)
                }
            }
        }
    }
}