Ejemplo n.º 1
0
def show_gui():
    pycam.Utils.set_application_key("pycam-gtk")
    deps_gtk = GuiCommon.requirements_details_gtk()
    report_gtk = GuiCommon.get_dependency_report(deps_gtk, prefix="\t")
    if GuiCommon.check_dependencies(deps_gtk):
        from pycam.Gui.Project import ProjectGui
        gui_class = ProjectGui
    else:
        full_report = []
        full_report.append("PyCAM dependency problem")
        full_report.append("Error: Failed to load the GTK interface.")
        full_report.append("Details:")
        full_report.append(report_gtk)
        full_report.append("")
        full_report.append("Detailed list of requirements: %s" %
                           GuiCommon.REQUIREMENTS_LINK)
        log.critical(os.linesep.join(full_report))
        return EXIT_CODES["requirements"]

    event_manager = get_event_handler()
    event_manager.set("history", DataHistory())

    with merge_history_and_block_events(event_manager):
        gui = gui_class(event_manager)
        # initialize plugins
        plugin_manager = pycam.Plugins.PluginManager(core=event_manager)
        plugin_manager.import_plugins()
        # some more initialization
        gui.reset_preferences()
        gui.load_preferences()
        gui.load_startup_workspace()

    event_manager.emit_event("notify-initialization-finished")

    # open the GUI
    get_mainloop(use_gtk=True).run()

    # optionally save workspace (based on configuration or dialog response)
    if event_manager.get("save_workspace_on_exit") == QuestionStatus.ASK.value:
        response = gui.get_question_response("Save Workspace?",
                                             True,
                                             allow_memorize=True)
        if response.should_memorize:
            event_manager.set("save_workspace_on_exit",
                              (QuestionStatus.YES if response.is_yes else
                               QuestionStatus.NO).value)
        should_store = response.is_yes
    elif event_manager.get(
            "save_workspace_on_exit") == QuestionStatus.YES.value:
        should_store = True
    else:
        should_store = False
    if should_store:
        gui.save_startup_workspace()

    gui.save_preferences()

    # no error -> return no error code
    return None
Ejemplo n.º 2
0
def show_gui(inputfile=None, task_settings_file=None):
    deps_gtk = GuiCommon.requirements_details_gtk()
    report_gtk = GuiCommon.get_dependency_report(deps_gtk, prefix="\t")
    if GuiCommon.check_dependencies(deps_gtk):
        from pycam.Gui.Project import ProjectGui
        gui_class = ProjectGui
    else:
        full_report = []
        full_report.append("PyCAM dependency problem")
        full_report.append("Error: Failed to load the GTK interface.")
        full_report.append("Details:")
        full_report.append(report_gtk)
        full_report.append("")
        full_report.append("Detailed list of requirements: %s" % \
                GuiCommon.REQUIREMENTS_LINK)
        log.critical(os.linesep.join(full_report))
        return EXIT_CODES["requirements"]

    gui = gui_class()

    # load the given model or the default
    if not inputfile:
        default_model = get_default_model()
        if isinstance(default_model, (basestring, pycam.Utils.URIHandler)):
            gui.load_model_file(filename=default_model, store_filename=False)
        else:
            gui.load_model(default_model)
    else:
        gui.load_model_file(filename=inputfile)

    # load task settings file
    if not task_settings_file is None:
        gui.open_task_settings_file(task_settings_file)

    # tell the GUI to empty the "undo" queue
    gui.finish_startup()

    # open the GUI
    gui.mainloop()
    # no error -> return no error code
    return None
Ejemplo n.º 3
0
def show_gui(inputfile=None, task_settings_file=None):
    deps_gtk = GuiCommon.requirements_details_gtk()
    report_gtk = GuiCommon.get_dependency_report(deps_gtk, prefix="\t")
    if GuiCommon.check_dependencies(deps_gtk):
        from pycam.Gui.Project import ProjectGui
        gui_class = ProjectGui
    else:
        full_report = []
        full_report.append("PyCAM dependency problem")
        full_report.append("Error: Failed to load the GTK interface.")
        full_report.append("Details:")
        full_report.append(report_gtk)
        full_report.append("")
        full_report.append("Detailed list of requirements: %s" % \
                GuiCommon.REQUIREMENTS_LINK)
        log.critical(os.linesep.join(full_report))
        return EXIT_CODES["requirements"]

    gui = gui_class()

    # load the given model or the default
    if not inputfile:
        default_model = get_default_model()
        if isinstance(default_model, (basestring, pycam.Utils.URIHandler)):
            gui.load_model_file(filename=default_model, store_filename=False)
        else:
            gui.load_model(default_model)
    else:
        gui.load_model_file(filename=inputfile)

    # load task settings file
    if not task_settings_file is None:
        gui.open_task_settings_file(task_settings_file)

    # tell the GUI to empty the "undo" queue
    gui.finish_startup()

    # open the GUI
    gui.mainloop()
    # no error -> return no error code
    return None
Ejemplo n.º 4
0
def show_gui():
    deps_gtk = GuiCommon.requirements_details_gtk()
    report_gtk = GuiCommon.get_dependency_report(deps_gtk, prefix="\t")
    if GuiCommon.check_dependencies(deps_gtk):
        from pycam.Gui.Project import ProjectGui
        gui_class = ProjectGui
    else:
        full_report = []
        full_report.append("PyCAM dependency problem")
        full_report.append("Error: Failed to load the GTK interface.")
        full_report.append("Details:")
        full_report.append(report_gtk)
        full_report.append("")
        full_report.append("Detailed list of requirements: %s" %
                           GuiCommon.REQUIREMENTS_LINK)
        log.critical(os.linesep.join(full_report))
        return EXIT_CODES["requirements"]

    event_manager = get_event_handler()
    gui = gui_class(event_manager)
    # initialize plugins
    plugin_manager = pycam.Plugins.PluginManager(core=event_manager)
    plugin_manager.import_plugins()
    # some more initialization
    gui.reset_preferences()
    # TODO: preferences are not loaded until the new format is stable
    #   self.load_preferences()

    # tell the GUI to empty the "undo" queue
    gui.clear_undo_states()

    event_manager.emit_event("notify-initialization-finished")

    # open the GUI
    gui.mainloop()
    # no error -> return no error code
    return None
Ejemplo n.º 5
0
def show_gui(workspace_filename=None):
    pycam.Utils.set_application_key("pycam-gtk")
    deps_gtk = GuiCommon.requirements_details_gtk()
    report_gtk = GuiCommon.get_dependency_report(deps_gtk, prefix="\t")
    if GuiCommon.check_dependencies(deps_gtk):
        from pycam.Gui.Project import ProjectGui
        gui_class = ProjectGui
    else:
        full_report = []
        full_report.append("PyCAM dependency problem")
        full_report.append("Error: Failed to load the GTK interface.")
        full_report.append("Details:")
        full_report.append(report_gtk)
        full_report.append("")
        full_report.append("Detailed list of requirements: %s" %
                           GuiCommon.REQUIREMENTS_LINK)
        log.critical(os.linesep.join(full_report))
        return EXIT_CODES["requirements"]

    event_manager = get_event_handler()
    history = DataHistory()
    event_manager.set("history", history)

    with merge_history_and_block_events(event_manager):
        log.debug("Initializing user interface")
        gui = gui_class(event_manager)
        # initialize plugins
        log.debug("Loading all available plugins")
        plugin_manager = pycam.Plugins.PluginManager(core=event_manager)
        plugin_manager.import_plugins()
        # some more initialization
        log.debug("Resetting preferences")
        gui.reset_preferences()
        log.debug("Loading preferences")
        gui.load_preferences()
        has_loaded_custom_workspace = False
        log.debug("Loading workspace")
        if workspace_filename is None:
            gui.load_startup_workspace()
        else:
            if gui.load_workspace_from_file(workspace_filename):
                has_loaded_custom_workspace = True
            else:
                gui.load_startup_workspace()

    log.debug("Finished initialization")
    log.debug("Configured events: %s",
              ", ".join(event_manager.get_events_summary_lines()))
    shutdown_calls = []

    def shutdown_handler():
        # prevent repeated calls
        if shutdown_calls:
            return
        shutdown_calls.append(True)
        # optionally save workspace (based on configuration or dialog response)
        if has_loaded_custom_workspace:
            # A custom workspace file was given via command line - we always want to ask before
            # overwriting it.
            response = gui.get_question_response(
                "Save Workspace to '{}'?".format(workspace_filename), True)
            should_store = response.is_yes
        elif event_manager.get(
                "save_workspace_on_exit") == QuestionStatus.ASK.value:
            response = gui.get_question_response("Save Workspace?",
                                                 True,
                                                 allow_memorize=True)
            if response.should_memorize:
                event_manager.set("save_workspace_on_exit",
                                  (QuestionStatus.YES if response.is_yes else
                                   QuestionStatus.NO).value)
            should_store = response.is_yes
        elif event_manager.get(
                "save_workspace_on_exit") == QuestionStatus.YES.value:
            should_store = True
        else:
            should_store = False
        if should_store:
            gui.save_startup_workspace()

        gui.save_preferences()
        with merge_history_and_block_events(event_manager,
                                            emit_events_after=False):
            plugin_manager.disable_all_plugins()
        # close the GUI
        gui.stop()
        history.cleanup()

    # Register our shutdown handler: it should be run _before_ the GTK main loop stops.
    # Otherwise some references and signals are gone when the teardown actions are exeucted.
    event_manager.register_event("mainloop-stop", shutdown_handler)
    # open the GUI - wait until the window is closed
    gui.run_forever()
    event_manager.unregister_event("mainloop-stop", shutdown_handler)
    # show final statistics
    log.debug("Configured events: %s",
              ", ".join(event_manager.get_events_summary_lines()))
    for event, stats in sorted(event_manager.get_events_summary().items()):
        if len(stats["handlers"]) > 0:
            log.info("Remaining listeners for event '%s': %s", event,
                     ", ".join(str(func) for func in stats["handlers"]))
    # no error -> return no error code
    return None