#+TITLE: App chooer and scale buttons
#+DATE: 2014-02-07 12:00:00 UTC
#+DESCRIPTION: Load a glade file displaying some scale buttons get value on change, displays some app selector widgets and open the applications.
#+FILETAGS: GTK-3:python:widgets
#+CATEGORY: python
#+SLUG: 07-app-chooser-scale-button
#+THUBNAIL:../../../images/gtk/tut07-appchooser-scale.png
#+BEGIN_COMMENT
.. title: App chooer and scale buttons
.. slug: 07-app-chooser-scale-button
.. date: 2014-02-07 12:00:00 UTC
.. tags: GTK-3, python, widgets
.. category: python
.. description: Load a glade file displaying some scale buttons get value on change, displays some app selector widgets and open the applications.
.. type: text
#+END_COMMENT

#+CAPTION: App chooser & scale widgets
[[../../../images/gtk/tut07-appchooser-scale.png]]

        
This example program  demonstrates the use of appchooser buttons when selecting an application from the drop down launch the application loading a test text file, this could be a video or mp3 or any file type.

you can change the application list by modify the content type value in glade this then shows all registered apps for that content type.

#+BEGIN_SRC python
#!/usr/bin/env python
from gi.repository import Gtk, GLib, Gio


class application_gui:
    """Tutorial 04 text input, spin input, drop down options"""
    count = 0

    def __init__(self):
        #load in our glade interface
        xml = Gtk.Builder()
        xml.add_from_file('tut07.glade')

        #grab our widget using get_object this is the name of the widget from glade, window1 is the default name
        self.window = xml.get_object('window1')
        self.text = xml.get_object('entry1')

        #load our widgets from the glade file
        self.widgets = {}
        self.widgets['scale1'] = xml.get_object('scalebutton1')
        self.widgets['scale2'] = xml.get_object('scalebutton2')
        self.widgets['appchooseraudio'] = xml.get_object('appchooserbutton1')
        self.widgets['appchoosertext'] = xml.get_object('appchooserbutton2')

        self.widgets['appchooseraudio'].connect('changed', self.app_chooser)
        self.widgets['appchoosertext'].connect('changed', self.app_chooser)
        self.widgets['scale1'].connect('value-changed', self.scale)
        self.widgets['scale2'].connect('value-changed', self.scale)

        #connect to events, in this instance just quit our application
        self.window.connect('delete_event', Gtk.main_quit)
        self.window.connect('destroy', lambda quit: Gtk.main_quit())

        #show the window else there is nothing to see :)
        self.window.show()

    def app_chooser(self, widget):
        list_view_model = widget.get_model()
        active_iter_index = widget.get_active()
        row_iter = list_view_model.get_iter(active_iter_index)
        app_info = list_view_model.get_value(row_iter, 0)
        
        gio_file = Gio.File.new_for_path('/tmp/tut07-appchooser-test.txt')
        app_info.launch((gio_file,), None)
        self.text.set_text(widget.get_name() + ' ' + app_info.get_name())

    def scale(self, widget, value):
        self.text.set_text(widget.get_name() + ' ' + str(value))


application = application_gui()
Gtk.main()
#+END_SRC

