Beispiel #1
0
def run_dialog(dialog, parent=None, *args, **kwargs):
    """Runs a dialog and return the return value of it.
    If dialog is a class it will be instantiated before running the dialog.

    :param dialog: the dialog class
    :param parent: parent of the dialog
    :param args: custom positional arguments
    :param kwargs: custom keyword arguments
    """

    if dialog is None:
        raise TypeError("dialog cannot be None")

    dialog = RunDialogEvent.emit(dialog, parent, *args, **kwargs)
    if not issubclass(dialog, RunnableView):
        raise TypeError("dialog %r must be subclass of RunnableView" % (
            dialog, ))

    # FIXME: Move this into RunnableView
    parent = getattr(parent, 'main_dialog', parent)
    parent = parent or get_current_toplevel()
    if inspect.isclass(dialog):
        dialog_name = dialog.__name__
    else:
        dialog_name = dialog.__class__.__name__

    dialog = get_dialog(parent, dialog, *args, **kwargs)
    orig_dialog = dialog
    toplevel = dialog.get_current_toplevel()
    add_current_toplevel(toplevel)

    if _fullscreen is not None:
        toplevel.set_position(gtk.WIN_POS_CENTER)
    elif parent and isinstance(parent, gtk.Window) and parent.props.visible:
        toplevel.set_transient_for(parent)
        toplevel.set_position(gtk.WIN_POS_CENTER_ON_PARENT)
    else:
        if parent:
            toplevel.set_position(gtk.WIN_POS_CENTER_ON_PARENT)
        else:
            toplevel.set_position(gtk.WIN_POS_CENTER)
        # FIXME: This should not be necessary, but gnome shell hides window
        # decorations for HINT_DIALOG. We should study what dialogs should
        # have HINT_NORMAL (with window decorations) and what can have
        # HINT_DIALOG
        toplevel.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_NORMAL)

    log.info("%s: Opening" % dialog_name)

    if hasattr(parent, 'on_dialog__opened'):
        parent.on_dialog__opened(orig_dialog)

    retval = run_dialog_internal(dialog, parent, toplevel)

    _pop_current_toplevel()

    return retval
Beispiel #2
0
def run_dialog(dialog, parent=None, *args, **kwargs):
    """Runs a dialog and return the return value of it.
    If dialog is a class it will be instantiated before running the dialog.

    :param dialog: the dialog class
    :param parent: parent of the dialog
    :param args: custom positional arguments
    :param kwargs: custom keyword arguments
    """

    if dialog is None:
        raise TypeError("dialog cannot be None")

    dialog = RunDialogEvent.emit(dialog, parent, *args, **kwargs)
    if not issubclass(dialog, RunnableView):
        raise TypeError("dialog %r must be subclass of RunnableView" %
                        (dialog, ))

    # FIXME: Move this into RunnableView
    parent = getattr(parent, 'main_dialog', parent)
    parent = parent or get_current_toplevel()
    if inspect.isclass(dialog):
        dialog_name = dialog.__name__
    else:
        dialog_name = dialog.__class__.__name__

    dialog = get_dialog(parent, dialog, *args, **kwargs)
    orig_dialog = dialog
    toplevel = dialog.get_current_toplevel()
    add_current_toplevel(toplevel)

    if _fullscreen is not None:
        toplevel.set_position(gtk.WIN_POS_CENTER)
    elif parent and isinstance(parent, gtk.Window) and parent.props.visible:
        toplevel.set_transient_for(parent)
        toplevel.set_position(gtk.WIN_POS_CENTER_ON_PARENT)
    else:
        if parent:
            toplevel.set_position(gtk.WIN_POS_CENTER_ON_PARENT)
        else:
            toplevel.set_position(gtk.WIN_POS_CENTER)
        # FIXME: This should not be necessary, but gnome shell hides window
        # decorations for HINT_DIALOG. We should study what dialogs should
        # have HINT_NORMAL (with window decorations) and what can have
        # HINT_DIALOG
        toplevel.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_NORMAL)

    if hasattr(parent, 'on_dialog__opened'):
        parent.on_dialog__opened(orig_dialog)

    log.info("%s: Opening" % dialog_name)

    # FIXME: We should avoid calling dialog.run() here
    # See http://tinyurl.com/lj6ske4
    toplevel.run()

    retval = dialog.retval
    dialog.destroy()

    _pop_current_toplevel()
    return retval
Beispiel #3
0
def run_dialog(dialog, parent=None, *args, **kwargs):
    """Runs a dialog and return the return value of it.
    If dialog is a class it will be instantiated before running the dialog.

    :param dialog: the dialog class
    :param parent: parent of the dialog
    :param args: custom positional arguments
    :param kwargs: custom keyword arguments
    """

    if dialog is None:
        raise TypeError("dialog cannot be None")

    dialog = RunDialogEvent.emit(dialog, parent, *args, **kwargs)
    if not issubclass(dialog, RunnableView):
        raise TypeError("dialog %r must be subclass of RunnableView" %
                        (dialog, ))

    # FIXME: Move this into RunnableView

    #XXX: When create a new Stoq window, even using the parent correctly:
    # The called dialog will be a modal of the latest created window
    # (not necessarily the window that called).
    parent = getattr(parent, 'main_dialog', parent)
    parent = parent or get_current_toplevel()
    if inspect.isclass(dialog):
        dialog_name = dialog.__name__
    else:
        dialog_name = dialog.__class__.__name__

    dialog = get_dialog(parent, dialog, *args, **kwargs)
    orig_dialog = dialog
    toplevel = dialog.get_current_toplevel()
    add_current_toplevel(toplevel)

    if _fullscreen is not None:
        toplevel.set_position(Gtk.WindowPosition.CENTER)
    elif parent and isinstance(parent, Gtk.Window) and parent.props.visible:
        toplevel.set_transient_for(parent)
        toplevel.set_position(Gtk.WindowPosition.CENTER_ON_PARENT)
    else:
        if parent:
            toplevel.set_position(Gtk.WindowPosition.CENTER_ON_PARENT)
        else:
            toplevel.set_position(Gtk.WindowPosition.CENTER)
        # FIXME: This should not be necessary, but gnome shell hides window
        # decorations for HINT_DIALOG. We should study what dialogs should
        # have HINT_NORMAL (with window decorations) and what can have
        # HINT_DIALOG
        toplevel.set_type_hint(Gdk.WindowTypeHint.NORMAL)

    log.info("%s: Opening" % dialog_name)

    if hasattr(parent, 'on_dialog__opened'):
        parent.on_dialog__opened(orig_dialog)

    retval = run_dialog_internal(dialog, parent, toplevel)

    _pop_current_toplevel()

    return retval