예제 #1
0
def closeGame(gmwidg, game):
    if not game.isChanged():
        response = gtk.RESPONSE_OK
    else:
        d = gtk.MessageDialog(type=gtk.MESSAGE_WARNING)
        d.add_button(_("Close _without Saving"), gtk.RESPONSE_OK)
        d.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)
        if game.uri:
            d.add_button(gtk.STOCK_SAVE, gtk.RESPONSE_YES)
        else:
            d.add_button(gtk.STOCK_SAVE_AS, gtk.RESPONSE_YES)

        gmwidg.bringToFront()

        d.set_markup(
            _("<b><big>Save the current game before you close it?</big></b>"))
        d.format_secondary_text(
            _("It is not possible later to continue the game,\nif you don't save it."
              ))
        response = d.run()
        d.destroy()

        if response == gtk.RESPONSE_YES:
            # Test if cancel was pressed in the save-file-dialog
            if saveGame(game) != gtk.RESPONSE_ACCEPT:
                response = gtk.RESPONSE_CANCEL

    if response not in (gtk.RESPONSE_DELETE_EVENT, gtk.RESPONSE_CANCEL):
        if game.status in UNFINISHED_STATES:
            game.end(ABORTED, ABORTED_AGREEMENT)
        game.terminate()
        gamewidget.delGameWidget(gmwidg)

    return response
예제 #2
0
def closeGame (gmwidg, game):
    if not game.isChanged():
        response = gtk.RESPONSE_OK
    else:
        d = gtk.MessageDialog (type = gtk.MESSAGE_WARNING)
        d.add_button(_("Close _without Saving"), gtk.RESPONSE_OK)
        d.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)
        if game.uri:
            d.add_button(gtk.STOCK_SAVE, gtk.RESPONSE_YES)
        else: d.add_button(gtk.STOCK_SAVE_AS, gtk.RESPONSE_YES)

        gmwidg.bringToFront()

        d.set_markup(_("<b><big>Save the current game before you close it?</big></b>"))
        d.format_secondary_text (_(
            "It is not possible later to continue the game,\nif you don't save it."))
        response = d.run()
        d.destroy()

        if response == gtk.RESPONSE_YES:
            # Test if cancel was pressed in the save-file-dialog
            if saveGame(game) != gtk.RESPONSE_ACCEPT:
                response = gtk.RESPONSE_CANCEL

    if response not in (gtk.RESPONSE_DELETE_EVENT, gtk.RESPONSE_CANCEL):
        if game.status in UNFINISHED_STATES:
            game.end(ABORTED, ABORTED_AGREEMENT)
        game.terminate()
        gamewidget.delGameWidget (gmwidg)

    return response
예제 #3
0
def closeGame(gmwidg, game):
    log.debug("ionest.closeGame")
    response = None
    if not game.isChanged():
        response = Gtk.ResponseType.OK
    else:
        markup = "<b><big>" + \
                _("Save the current game before you close it?") + \
                "</big></b>"
        if conf.get("autoSave", False):
            x = saveGamePGN(game)
            if x:
                response = Gtk.ResponseType.OK
            else:
                markup = "<b><big>" + \
                        _("Unable to save to configured file. Save the current game before you close it?") + \
                        "</big></b>"
        if response is None:
            d = Gtk.MessageDialog(type=Gtk.MessageType.WARNING)
            d.add_button(_("Close _without Saving"), Gtk.ResponseType.OK)
            d.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL)
            if game.uri:
                d.add_button(Gtk.STOCK_SAVE, Gtk.ResponseType.YES)
            else:
                d.add_button(Gtk.STOCK_SAVE_AS, Gtk.ResponseType.YES)

            gmwidg.bringToFront()

            d.set_markup(markup)
            d.format_secondary_text(
                _("It is not possible later to continue the game,\nif you don't save it."
                  ))

            response = d.run()
            d.destroy()

        if response == Gtk.ResponseType.YES:
            # Test if cancel was pressed in the save-file-dialog
            if saveGame(game) != Gtk.ResponseType.ACCEPT:
                response = Gtk.ResponseType.CANCEL

    if response not in (Gtk.ResponseType.DELETE_EVENT,
                        Gtk.ResponseType.CANCEL):
        if game.status in UNFINISHED_STATES:
            game.end(ABORTED, ABORTED_AGREEMENT)
        game.terminate()
        gamewidget.delGameWidget(gmwidg)

    return response
예제 #4
0
파일: ionest.py 프로젝트: jcoffee/pychess
def closeGame (gmwidg, game):
    log.debug("ionest.closeGame")
    response = None
    if not game.isChanged():
        response = Gtk.ResponseType.OK
    else:
        markup = "<b><big>" + \
                _("Save the current game before you close it?") + \
                "</big></b>"
        if conf.get("autoSave", False):
            x = saveGamePGN(game)
            if x:
                response = Gtk.ResponseType.OK
            else:
                markup = "<b><big>" + \
                        _("Unable to save to configured file. Save the current game before you close it?") + \
                        "</big></b>"
        if response is None:
            d = Gtk.MessageDialog (type = Gtk.MessageType.WARNING)
            d.add_button(_("Close _without Saving"), Gtk.ResponseType.OK)
            d.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL)
            if game.uri:
                d.add_button(Gtk.STOCK_SAVE, Gtk.ResponseType.YES)
            else: d.add_button(Gtk.STOCK_SAVE_AS, Gtk.ResponseType.YES)

            gmwidg.bringToFront()

            d.set_markup(markup)
            d.format_secondary_text (_(
                "It is not possible later to continue the game,\nif you don't save it."))

            response = d.run()
            d.destroy()

        if response == Gtk.ResponseType.YES:
            # Test if cancel was pressed in the save-file-dialog
            if saveGame(game) != Gtk.ResponseType.ACCEPT:
                response = Gtk.ResponseType.CANCEL

    if response not in (Gtk.ResponseType.DELETE_EVENT, Gtk.ResponseType.CANCEL):
        if game.status in UNFINISHED_STATES:
            game.end(ABORTED, ABORTED_AGREEMENT)
        game.terminate()
        gamewidget.delGameWidget (gmwidg)

    return response
예제 #5
0
def closeGame(gmwidg, game):
    if not game.isChanged():
        response = Gtk.ResponseType.OK
    else:
        #if conf.get("autoSave", False): # Autosave option from preferences?
        #game.save(None, Savers.database, append=False)
        #response = Gtk.ResponseType.OK
        #else

        d = Gtk.MessageDialog(type=Gtk.MessageType.WARNING)
        d.add_button(_("Close _without Saving"), Gtk.ResponseType.OK)
        d.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL)
        if game.uri:
            d.add_button(Gtk.STOCK_SAVE, Gtk.ResponseType.YES)
        else:
            d.add_button(Gtk.STOCK_SAVE_AS, Gtk.ResponseType.YES)

        gmwidg.bringToFront()

        d.set_markup(
            _("<b><big>Save the current game before you close it?</big></b>"))
        d.format_secondary_text(
            _("It is not possible later to continue the game,\nif you don't save it."
              ))

        response = d.run()
        d.destroy()

        if response == Gtk.ResponseType.YES:
            # Test if cancel was pressed in the save-file-dialog
            if saveGame(game) != Gtk.ResponseType.ACCEPT:
                response = Gtk.ResponseType.CANCEL

    if response not in (Gtk.ResponseType.DELETE_EVENT,
                        Gtk.ResponseType.CANCEL):
        if game.status in UNFINISHED_STATES:
            game.end(ABORTED, ABORTED_AGREEMENT)
        game.terminate()
        gamewidget.delGameWidget(gmwidg)

    return response
예제 #6
0
파일: ionest.py 프로젝트: Krando/pychess
def closeGame (gmwidg, game):
    if not game.isChanged():
        response = Gtk.ResponseType.OK
    else:
        #if conf.get("autoSave", False): # Autosave option from preferences?
            #game.save(None, Savers.database, append=False)
            #response = Gtk.ResponseType.OK
        #else
        
        d = Gtk.MessageDialog (type = Gtk.MessageType.WARNING)
        d.add_button(_("Close _without Saving"), Gtk.ResponseType.OK)
        d.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL)
        if game.uri:
            d.add_button(Gtk.STOCK_SAVE, Gtk.ResponseType.YES)
        else: d.add_button(Gtk.STOCK_SAVE_AS, Gtk.ResponseType.YES)

        gmwidg.bringToFront()

        d.set_markup(_("<b><big>Save the current game before you close it?</big></b>"))
        d.format_secondary_text (_(
            "It is not possible later to continue the game,\nif you don't save it."))
        
        response = d.run()
        d.destroy()

        if response == Gtk.ResponseType.YES:
            # Test if cancel was pressed in the save-file-dialog
            if saveGame(game) != Gtk.ResponseType.ACCEPT:
                response = Gtk.ResponseType.CANCEL

    if response not in (Gtk.ResponseType.DELETE_EVENT, Gtk.ResponseType.CANCEL):
        if game.status in UNFINISHED_STATES:
            game.end(ABORTED, ABORTED_AGREEMENT)
        game.terminate()
        gamewidget.delGameWidget (gmwidg)

    return response
예제 #7
0
def closeAllGames(pairs):
    changedPairs = [(gmwidg, game) for gmwidg, game in pairs
                    if game.isChanged()]
    if len(changedPairs) == 0:
        response = gtk.RESPONSE_OK
    elif len(changedPairs) == 1:
        response = closeGame(*changedPairs[0])
    else:
        widgets = GladeWidgets("saveGamesDialog.glade")
        dialog = widgets["saveGamesDialog"]
        heading = widgets["saveGamesDialogHeading"]
        saveLabel = widgets["saveGamesDialogSaveLabel"]
        treeview = widgets["saveGamesDialogTreeview"]

        heading.set_markup("<big><b>" +
                           ngettext("There is %d game with unsaved moves.",
                                    "There are %d games with unsaved moves.",
                                    len(changedPairs)) % len(changedPairs) +
                           " " + _("Save moves before closing?") +
                           "</b></big>")

        liststore = gtk.ListStore(bool, str)
        treeview.set_model(liststore)
        renderer = gtk.CellRendererToggle()
        renderer.props.activatable = True
        treeview.append_column(gtk.TreeViewColumn("", renderer, active=0))
        treeview.append_column(
            gtk.TreeViewColumn("", gtk.CellRendererText(), text=1))
        for gmwidg, game in changedPairs:
            liststore.append(
                (True,
                 "%s %s %s" % (game.players[0], _("vs."), game.players[1])))

        def callback(cell, path):
            if path:
                liststore[path][0] = not liststore[path][0]
            saves = len(tuple(row for row in liststore if row[0]))
            saveLabel.set_text(
                ngettext("_Save %d document", "_Save %d documents", saves) %
                saves)
            saveLabel.set_use_underline(True)

        renderer.connect("toggled", callback)

        callback(None, None)

        while True:
            response = dialog.run()
            if response == gtk.RESPONSE_YES:
                for i in xrange(len(liststore) - 1, -1, -1):
                    checked, name = liststore[i]
                    if checked:
                        gmwidg, game = changedPairs[i]
                        if saveGame(game) == gtk.RESPONSE_ACCEPT:
                            del pairs[i]
                            liststore.remove(liststore.get_iter((i, )))
                            game.end(ABORTED, ABORTED_AGREEMENT)
                            gamewidget.delGameWidget(gmwidg)
                        else:
                            break
                else:
                    break
            else:
                break
        dialog.destroy()

    if response not in (gtk.RESPONSE_DELETE_EVENT, gtk.RESPONSE_CANCEL):
        for gmwidg, game in pairs:
            game.end(ABORTED, ABORTED_AGREEMENT)
            game.terminate()

    return response
예제 #8
0
파일: ionest.py 프로젝트: Krando/pychess
def closeAllGames (pairs):
    changedPairs = [(gmwidg, game) for gmwidg, game in pairs if game.isChanged()]
    if len(changedPairs) == 0:
        response = Gtk.ResponseType.OK

    #if conf.get("autoSave", False): # Autosave option from preferences?
        #for gmwidg, game in changedPairs:
            #game.save(None, Savers.database, append=False)
        #response = Gtk.ResponseType.OK
    #else:
    
    elif len(changedPairs) == 1:
        response = closeGame(*changedPairs[0])
    else:
        widgets = GladeWidgets("saveGamesDialog.glade")
        dialog = widgets["saveGamesDialog"]
        heading = widgets["saveGamesDialogHeading"]
        saveLabel = widgets["saveGamesDialogSaveLabel"]
        treeview = widgets["saveGamesDialogTreeview"]

        heading.set_markup("<big><b>" +
                           ngettext("There is %d game with unsaved moves.",
                              "There are %d games with unsaved moves.",
                              len(changedPairs)) % len(changedPairs) +
                           " " + _("Save moves before closing?") +
                           "</b></big>")

        liststore = Gtk.ListStore(bool, str)
        treeview.set_model(liststore)
        renderer = Gtk.CellRendererToggle()
        renderer.props.activatable = True
        treeview.append_column(Gtk.TreeViewColumn("", renderer, active=0))
        treeview.append_column(Gtk.TreeViewColumn("", Gtk.CellRendererText(), text=1))
        for gmwidg, game in changedPairs:
            liststore.append((True, "%s %s %s" %
                             (game.players[0], _("vs."), game.players[1])))

        def callback (cell, path):
            if path:
                liststore[path][0] = not liststore[path][0]
            saves = len(tuple(row for row in liststore if row[0]))
            saveLabel.set_text(ngettext("_Save %d document", "_Save %d documents", saves) % saves)
            saveLabel.set_use_underline(True)
        renderer.connect("toggled", callback)

        callback(None, None)

        while True:
            response = dialog.run()
            if response == Gtk.ResponseType.YES:
                for i in range(len(liststore)-1, -1, -1):
                    checked, name = liststore[i]
                    if checked:
                        gmwidg, game = changedPairs[i]
                        if saveGame(game) == Gtk.ResponseType.ACCEPT:
                            del pairs[i]
                            liststore.remove(liststore.get_iter((i,)))
                            game.end(ABORTED, ABORTED_AGREEMENT)
                            gamewidget.delGameWidget(gmwidg)
                        else:
                            break
                else:
                    break
            else:
                break
        dialog.destroy()

    if response not in (Gtk.ResponseType.DELETE_EVENT, Gtk.ResponseType.CANCEL):
        for gmwidg, game in pairs:
            game.end(ABORTED, ABORTED_AGREEMENT)
            game.terminate()

    return response
예제 #9
0
    def closeGame(self, gmwidg):
        log.debug("ionest.closeGame")
        response = None
        if not gmwidg.gamemodel.isChanged():
            response = Gtk.ResponseType.OK
        else:
            markup = "<b><big>" + _(
                "Save the current game before you close it?") + "</big></b>"
            if conf.get("autoSave", False):
                x = self.saveGamePGN(gmwidg.gamemodel)
                if x:
                    response = Gtk.ResponseType.OK
                else:
                    markup = "<b><big>" + _(
                        "Unable to save to configured file. \
                                            Save the current game before you close it?"
                    ) + "</big></b>"

            if response is None:
                d = Gtk.MessageDialog(type=Gtk.MessageType.WARNING)
                d.add_button(_("Close _without Saving"), Gtk.ResponseType.OK)
                d.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL)
                if gmwidg.gamemodel.uri:
                    d.add_button(Gtk.STOCK_SAVE, Gtk.ResponseType.YES)
                else:
                    d.add_button(Gtk.STOCK_SAVE_AS, Gtk.ResponseType.YES)

                gmwidg.bringToFront()

                d.set_markup(markup)
                d.format_secondary_text(
                    _("It is not possible later to continue the game,\nif you don't save it."
                      ))

                response = d.run()
                d.destroy()

            if response == Gtk.ResponseType.YES:
                # Test if cancel was pressed in the save-file-dialog
                if self.saveGame(gmwidg.gamemodel) != Gtk.ResponseType.ACCEPT:
                    response = Gtk.ResponseType.CANCEL

        if response not in (Gtk.ResponseType.DELETE_EVENT,
                            Gtk.ResponseType.CANCEL):
            if gmwidg.gamemodel.status in UNFINISHED_STATES:
                gmwidg.gamemodel.end(ABORTED, ABORTED_AGREEMENT)

            gmwidg.disconnect(self.gmwidg_cids[gmwidg])
            del self.gmwidg_cids[gmwidg]

            for cid in self.notify_cids[gmwidg]:
                conf.notify_remove(cid)
            del self.notify_cids[gmwidg]

            if gmwidg.board in self.board_cids:
                gmwidg.board.disconnect(self.board_cids[gmwidg.board])
                del self.board_cids[gmwidg.board]

            gamewidget.delGameWidget(gmwidg)
            self.gamewidgets.remove(gmwidg)
            gmwidg.gamemodel.terminate()

            if len(self.gamewidgets) == 0:
                for widget in MENU_ITEMS:
                    gamewidget.getWidgets()[widget].set_property(
                        'sensitive', False)

        return response
예제 #10
0
    def closeAllGames(self, gamewidgets):
        log.debug("ionest.closeAllGames")
        response = None
        changedPairs = [(gmwidg, gmwidg.gamemodel) for gmwidg in gamewidgets
                        if gmwidg.gamemodel.isChanged()]
        if len(changedPairs) == 0:
            response = Gtk.ResponseType.OK

        elif len(changedPairs) == 1:
            response = self.closeGame(changedPairs[0][0])
        else:
            markup = "<big><b>" + ngettext("There is %d game with unsaved moves.",
                                           "There are %d games with unsaved moves.",
                                           len(changedPairs)) % len(changedPairs) + " " + \
                _("Save moves before closing?") + "</b></big>"

            for gmwidg, game in changedPairs:
                if not gmwidg.gamemodel.isChanged():
                    response = Gtk.ResponseType.OK
                else:
                    if conf.get("autoSave", False):
                        x = self.saveGamePGN(game)
                        if x:
                            response = Gtk.ResponseType.OK
                        else:
                            response = None
                            markup = "<b><big>" + _(
                                "Unable to save to configured file. \
                                                    Save the games before closing?"
                            ) + "</big></b>"
                            break

            if response is None:
                widgets = GladeWidgets("saveGamesDialog.glade")
                dialog = widgets["saveGamesDialog"]
                heading = widgets["saveGamesDialogHeading"]
                saveLabel = widgets["saveGamesDialogSaveLabel"]
                treeview = widgets["saveGamesDialogTreeview"]

                heading.set_markup(markup)

                liststore = Gtk.ListStore(bool, str)
                treeview.set_model(liststore)
                renderer = Gtk.CellRendererToggle()
                renderer.props.activatable = True
                treeview.append_column(
                    Gtk.TreeViewColumn("", renderer, active=0))
                treeview.append_column(
                    Gtk.TreeViewColumn("", Gtk.CellRendererText(), text=1))
                for gmwidg, game in changedPairs:
                    liststore.append(
                        (True, "%s %s %s" %
                         (game.players[0], _("vs."), game.players[1])))

                def callback(cell, path):
                    if path:
                        liststore[path][0] = not liststore[path][0]
                    saves = len(tuple(row for row in liststore if row[0]))
                    saveLabel.set_text(
                        ngettext("_Save %d document", "_Save %d documents",
                                 saves) % saves)
                    saveLabel.set_use_underline(True)

                renderer.connect("toggled", callback)

                callback(None, None)

                while True:
                    response = dialog.run()
                    if response == Gtk.ResponseType.YES:
                        for i in range(len(liststore) - 1, -1, -1):
                            checked, name = liststore[i]
                            if checked:
                                cgmwidg, cgame = changedPairs[i]
                                if self.saveGame(
                                        cgame) == Gtk.ResponseType.ACCEPT:
                                    liststore.remove(liststore.get_iter((i, )))
                                    del changedPairs[i]
                                    if cgame.status in UNFINISHED_STATES:
                                        cgame.end(ABORTED, ABORTED_AGREEMENT)
                                    cgame.terminate()
                                    gamewidget.delGameWidget(cgmwidg)
                                else:
                                    break
                        else:
                            break
                    else:
                        break
                dialog.destroy()

        if response not in (Gtk.ResponseType.DELETE_EVENT,
                            Gtk.ResponseType.CANCEL):
            pairs = [(gmwidg, gmwidg.gamemodel) for gmwidg in gamewidgets]
            for gmwidg, game in pairs:
                if game.status in UNFINISHED_STATES:
                    game.end(ABORTED, ABORTED_AGREEMENT)
                game.terminate()
                if gmwidg.notebookKey in gamewidget.key2gmwidg:
                    gamewidget.delGameWidget(gmwidg)

        return response
예제 #11
0
파일: ionest.py 프로젝트: jcoffee/pychess
def closeAllGames (pairs):
    log.debug("ionest.closeAllGames")
    response = None
    changedPairs = [(gmwidg, game) for gmwidg, game in pairs if game.isChanged()]
    if len(changedPairs) == 0:
        response = Gtk.ResponseType.OK

    elif len(changedPairs) == 1:
        response = closeGame(*changedPairs[0])
    else:
        markup = "<big><b>" + \
                ngettext("There is %d game with unsaved moves.",
                "There are %d games with unsaved moves.",
                len(changedPairs)) % len(changedPairs) + \
                " " + _("Save moves before closing?") + \
                "</b></big>"

        if conf.get("autoSave", False):
            for gmwidg, game in changedPairs:
                x = saveGamePGN(game)
                if x:
                    response = Gtk.ResponseType.OK
                else:
                    response = None
                    markup = "<b><big>" + \
                            _("Unable to save to configured file. Save the games before closing?") + \
                            "</big></b>"
                    break
                    res
        if response is None:
            widgets = GladeWidgets("saveGamesDialog.glade")
            dialog = widgets["saveGamesDialog"]
            heading = widgets["saveGamesDialogHeading"]
            saveLabel = widgets["saveGamesDialogSaveLabel"]
            treeview = widgets["saveGamesDialogTreeview"]

            heading.set_markup(markup)

            liststore = Gtk.ListStore(bool, str)
            treeview.set_model(liststore)
            renderer = Gtk.CellRendererToggle()
            renderer.props.activatable = True
            treeview.append_column(Gtk.TreeViewColumn("", renderer, active=0))
            treeview.append_column(Gtk.TreeViewColumn("", Gtk.CellRendererText(), text=1))
            for gmwidg, game in changedPairs:
                liststore.append((True, "%s %s %s" %
                                 (game.players[0], _("vs."), game.players[1])))

            def callback (cell, path):
                if path:
                    liststore[path][0] = not liststore[path][0]
                saves = len(tuple(row for row in liststore if row[0]))
                saveLabel.set_text(ngettext("_Save %d document", "_Save %d documents", saves) % saves)
                saveLabel.set_use_underline(True)
            renderer.connect("toggled", callback)

            callback(None, None)

            while True:
                response = dialog.run()
                if response == Gtk.ResponseType.YES:
                    for i in range(len(liststore)-1, -1, -1):
                        checked, name = liststore[i]
                        if checked:
                            gmwidg, game = changedPairs[i]
                            if saveGame(game) == Gtk.ResponseType.ACCEPT:
                                liststore.remove(liststore.get_iter((i,)))
                                del changedPairs[i]
                                if game.status in UNFINISHED_STATES:
                                    game.end(ABORTED, ABORTED_AGREEMENT)
                                game.terminate()
                                gamewidget.delGameWidget(gmwidg)
                            else:
                                break
                    else:
                        break
                else:
                    break
            dialog.destroy()

    if response not in (Gtk.ResponseType.DELETE_EVENT, Gtk.ResponseType.CANCEL):
        pairs = [(gmwidg, game) for gmwidg, game in pairs]
        for gmwidg, game in pairs:
            if game.status in UNFINISHED_STATES:
                game.end(ABORTED, ABORTED_AGREEMENT)
            game.terminate()
            if gmwidg.notebookKey in gamewidget.key2gmwidg:
                gamewidget.delGameWidget(gmwidg)

    return response
예제 #12
0
    def closeGame(self, gmwidg):
        log.debug("ionest.closeGame")
        response = None
        if not gmwidg.gamemodel.isChanged():
            response = Gtk.ResponseType.OK
        else:
            markup = "<b><big>" + _("Save the current game before you close it?") + "</big></b>"
            if conf.get("autoSave", False):
                x = self.saveGamePGN(gmwidg.gamemodel)
                if x:
                    response = Gtk.ResponseType.OK
                else:
                    markup = "<b><big>" + _("Unable to save to configured file. \
                                            Save the current game before you close it?") + "</big></b>"
            if response is None:
                d = Gtk.MessageDialog(type=Gtk.MessageType.WARNING)
                d.add_button(_("Close _without Saving"), Gtk.ResponseType.OK)
                d.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL)
                if gmwidg.gamemodel.uri:
                    d.add_button(Gtk.STOCK_SAVE, Gtk.ResponseType.YES)
                else:
                    d.add_button(Gtk.STOCK_SAVE_AS, Gtk.ResponseType.YES)

                gmwidg.bringToFront()

                d.set_markup(markup)
                d.format_secondary_text(_(
                    "It is not possible later to continue the game,\nif you don't save it."))

                response = d.run()
                d.destroy()

            if response == Gtk.ResponseType.YES:
                # Test if cancel was pressed in the save-file-dialog
                if self.saveGame(gmwidg.gamemodel) != Gtk.ResponseType.ACCEPT:
                    response = Gtk.ResponseType.CANCEL

        if response not in (Gtk.ResponseType.DELETE_EVENT,
                            Gtk.ResponseType.CANCEL):
            if gmwidg.gamemodel.status in UNFINISHED_STATES:
                gmwidg.gamemodel.end(ABORTED, ABORTED_AGREEMENT)

            gmwidg.disconnect(self.gmwidg_cids[gmwidg])
            del self.gmwidg_cids[gmwidg]

            for cid in self.notify_cids[gmwidg]:
                conf.notify_remove(cid)
            del self.notify_cids[gmwidg]

            if gmwidg.board in self.board_cids:
                gmwidg.board.disconnect(self.board_cids[gmwidg.board])
                del self.board_cids[gmwidg.board]

            gamewidget.delGameWidget(gmwidg)
            self.gamewidgets.remove(gmwidg)
            gmwidg.gamemodel.terminate()

            if len(self.gamewidgets) == 0:
                for widget in MENU_ITEMS:
                    gamewidget.getWidgets()[widget].set_property('sensitive', False)

        return response