class DialogMultipleApps(SimpleGladeApp):

    def __init__(self, datadir, parent, multiple_items_list, name, remove):
        SimpleGladeApp.__init__(self,
                                path=datadir+"/gnome-app-install.glade",
                                root="dialog_multiple_apps",
                                domain="gnome-app-install")
        self.store = gtk.ListStore(gobject.TYPE_STRING,
                                   gobject.TYPE_PYOBJECT,
                                   gobject.TYPE_INT)
        for elm in multiple_items_list:
            self.store.append((elm.name, elm, 0))
        self.dialog_multiple_apps.set_transient_for(parent)
        # Setup the application list
        self.treeview_apps = AppListView(style=1)
        self.scrolledwindow_multiple_apps.add(self.treeview_apps)
        self.treeview_apps.set_headers_visible(False)
        self.treeview_apps.set_model(self.store)
        self.treeview_apps.show()
        # Create the dialog message text
        if remove == True:
            header = (_("Remove %s and bundled applications?") % name)
            msg = _("%s is part of a software collection. If you remove "
                    "%s, you will remove all bundled applications as well.") %\
                  (name, name)
            label = _("_Remove All")
        else:
            header = (_("Install %s and bundled applications?") % name)
            msg = _("%s is part of a software collection. If you install "
                    "%s, you will install all bundled applications as well.") %\
                  (name, name)
            label = _("_Install All")
        self.label_multiple.set_markup("<b><big>%s</big></b>\n\n%s" %\
                                       (header, msg))
        self.button_multiple_action.set_label(label)

    def run(self):
        return self.dialog_multiple_apps.run()

    def hide(self):
        self.dialog_multiple_apps.hide()
class DialogPendingChanges(SimpleGladeApp):
    def __init__(self, datadir, parent, to_add, to_rm):
        SimpleGladeApp.__init__(self,
                                path=datadir+"/gnome-app-install.glade",
                                root="dialog_pending_changes",
                                domain="gnome-app-install")
        self.add_store = gtk.ListStore(gobject.TYPE_STRING,
                                       gobject.TYPE_PYOBJECT,
                                       gobject.TYPE_INT)
        self.remove_store = gtk.ListStore(gobject.TYPE_STRING,
                                          gobject.TYPE_PYOBJECT,
                                          gobject.TYPE_INT)
        for elm in to_add:
            self.add_store.append([elm.name, elm, 0])
        for elm in to_rm:
            self.remove_store.append([elm.name, elm ,0])
        self.dialog_pending_changes.realize()
        self.dialog_pending_changes.set_transient_for(parent)
        self.button_confirm_changes.grab_default()
        self.dialog_pending_changes.window.set_functions(gtk.gdk.FUNC_MOVE)
        # Setup the app list viewers
        self.treeview_add = AppListView(style=1)
        self.treeview_remove = AppListView(style=1)
        self.scrolledwindow_add.add(self.treeview_add)
        self.scrolledwindow_remove.add(self.treeview_remove)
        self.treeview_add.set_headers_visible(False)
        self.treeview_remove.set_headers_visible(False)
        self.treeview_add.set_model(self.add_store)
        self.treeview_remove.set_model(self.remove_store)
        self.treeview_add.show()
        self.treeview_remove.show()

    def run(self):
        if len(self.add_store) == 0:
            self.vbox_add.hide()
        if len(self.remove_store) == 0:
            self.vbox_remove.hide()
        return self.dialog_pending_changes.run()

    def hide(self):
        self.dialog_pending_changes.hide()
class DialogPendingChanges(SimpleGtkbuilderApp):
    def __init__(self, datadir, parent, to_add, to_rm):
        SimpleGtkbuilderApp.__init__(self, path=datadir+"/gnome-app-install.ui")
        self.add_store = gtk.ListStore(gobject.TYPE_STRING,
                                       gobject.TYPE_PYOBJECT,
                                       gobject.TYPE_INT)
        self.remove_store = gtk.ListStore(gobject.TYPE_STRING,
                                          gobject.TYPE_PYOBJECT,
                                          gobject.TYPE_INT)
        for elm in to_add:
            self.add_store.append([elm.name, elm, 0])
        for elm in to_rm:
            self.remove_store.append([elm.name, elm ,0])
        self.dialog_pending_changes.realize()
        self.dialog_pending_changes.set_transient_for(parent)
        self.button_confirm_changes.grab_default()
        self.dialog_pending_changes.window.set_functions(gtk.gdk.FUNC_MOVE)
        # Setup the app list viewers
        self.treeview_add = AppListView(style=1)
        self.treeview_remove = AppListView(style=1)
        self.scrolledwindow_add.add(self.treeview_add)
        self.scrolledwindow_remove.add(self.treeview_remove)
        self.treeview_add.set_headers_visible(False)
        self.treeview_remove.set_headers_visible(False)
        self.treeview_add.set_model(self.add_store)
        self.treeview_remove.set_model(self.remove_store)
        self.treeview_add.show()
        self.treeview_remove.show()

    def run(self):
        if len(self.add_store) == 0:
            self.vbox_add.hide()
        if len(self.remove_store) == 0:
            self.vbox_remove.hide()
        return self.dialog_pending_changes.run()

    def hide(self):
        self.dialog_pending_changes.hide()
class DialogMultipleApps(SimpleGtkbuilderApp):
    def __init__(self, datadir, parent, multiple_items_list, name, remove):
        SimpleGtkbuilderApp.__init__(self,
                                     path=datadir + "/gnome-app-install.ui")
        self.store = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_PYOBJECT,
                                   gobject.TYPE_INT)
        for elm in multiple_items_list:
            self.store.append((elm.name, elm, 0))
        self.dialog_multiple_apps.set_transient_for(parent)
        # Setup the application list
        self.treeview_apps = AppListView(style=1)
        self.scrolledwindow_multiple_apps.add(self.treeview_apps)
        self.treeview_apps.set_headers_visible(False)
        self.treeview_apps.set_model(self.store)
        self.treeview_apps.show()
        # Create the dialog message text
        if remove == True:
            header = (_("Remove %s and bundled applications?") % name)
            msg = _("%s is part of a software collection. If you remove "
                    "%s, you will remove all bundled applications as well.") %\
                  (name, name)
            label = _("_Remove All")
        else:
            header = (_("Install %s and bundled applications?") % name)
            msg = _("%s is part of a software collection. If you install "
                    "%s, you will install all bundled applications as well.") %\
                  (name, name)
            label = _("_Install All")
        self.label_multiple.set_markup("<b><big>%s</big></b>\n\n%s" %\
                                       (header, msg))
        self.button_multiple_action.set_label(label)

    def run(self):
        return self.dialog_multiple_apps.run()

    def hide(self):
        self.dialog_multiple_apps.hide()