├── .github └── workflows │ ├── create-release.yaml │ └── on-demand-deployment.yaml ├── .gitignore ├── .readthedocs.yaml ├── LICENSE ├── README.rst ├── docs ├── LICENSE ├── Makefile ├── README.rst ├── conf.py ├── developer │ ├── MAP-development-buildbotaccess.rst │ ├── MAP-development-codestructure.rst │ ├── MAP-development-codingstandard.rst │ ├── MAP-development-contribution.rst │ ├── MAP-development-gitbranching.rst │ ├── MAP-development-release.rst │ ├── MAP-development-review.rst │ ├── MAP-development-setup.rst │ ├── appendix.rst │ ├── images │ │ ├── gitflow.png │ │ └── githubrepos.png │ └── index.rst ├── getting_started │ ├── create-workflow.rst │ ├── help.rst │ ├── images │ │ ├── WorkflowFinished.png │ │ ├── configured_MAP_1.png │ │ ├── connected_MAP_1.png │ │ ├── download_plugin.png │ │ ├── error_connection.png │ │ ├── help-system-tooltips.png │ │ ├── help_whatsthis.png │ │ ├── map_client_barebones.png │ │ ├── no_configure_MAP.png │ │ ├── plugin_manager_2.png │ │ ├── search_plugin.png │ │ └── step_with_port_info_displayed_1.png │ ├── install-mapclient.rst │ └── install-plugins.rst ├── index.rst ├── make.bat ├── manual │ ├── MAP-feature-demonstration.rst │ ├── MAP-install-setup.rst │ ├── MAP-plugin-authoring.rst │ ├── MAP-plugin-wizard.rst │ ├── MAP-plugin.rst │ ├── MAP-tutorial-create.rst │ ├── MAP-tutorial-plugin.rst │ ├── glossary.rst │ ├── images │ │ ├── PMRTool_1.png │ │ ├── PMRTool_2.png │ │ ├── advanced_dialog.png │ │ ├── automatic-ve-setup.PNG │ │ ├── blank_MAP_1.png │ │ ├── configured_MAP_1.png │ │ ├── connected_MAP_1.png │ │ ├── cross.png │ │ ├── dependencies_tab.PNG │ │ ├── dependencies_tab_ve.png │ │ ├── error_connection.png │ │ ├── image_antcommartresults.png │ │ ├── image_configureblank.png │ │ ├── image_configurepmr.png │ │ ├── image_owltermscompleter.png │ │ ├── log_information.png │ │ ├── main_annotation_1.png │ │ ├── mapClientBarebones.png │ │ ├── map_client_barebones.png │ │ ├── map_client_gui.png │ │ ├── map_client_gui.svg │ │ ├── modify-ve.PNG │ │ ├── options_advanced_dialog.png │ │ ├── plugin_configure_1.png │ │ ├── plugin_finder_1.png │ │ ├── plugin_finder_2.png │ │ ├── plugin_manager_1.png │ │ ├── plugin_manager_2.png │ │ ├── plugin_wizard_configuration_1.png │ │ ├── plugin_wizard_identify_1.png │ │ ├── plugin_wizard_introduction_1.png │ │ ├── plugin_wizard_misc_1.png │ │ ├── plugin_wizard_output_1.png │ │ ├── plugin_wizard_ports_1.png │ │ ├── plugin_wizard_ports_definition_1.png │ │ ├── plugin_wizard_ports_type_1.png │ │ ├── pmr_tool_1.png │ │ ├── rename_plugin_tool.png │ │ ├── select_workflow_directory_1.png │ │ ├── setup-file.PNG │ │ ├── setup-location.PNG │ │ ├── setup-ve.PNG │ │ ├── step_with_port_info_displayed_1.png │ │ ├── top_annotation_1.png │ │ ├── update_workflow_tool.png │ │ ├── volumeFitting.png │ │ └── zinc_model_icon.png │ ├── index.rst │ └── qt │ │ └── configuredialog.ui └── resources │ ├── Sphinx.Makefile │ └── rtd_theme │ ├── layout.html │ ├── static │ ├── default.css │ └── logo.png │ └── theme.conf ├── res ├── graphics │ ├── logos.svg │ ├── splash.png │ └── splash.qrc ├── macos │ ├── MAP-Client.icns │ ├── create_installer.sh │ └── map-client-dmg-background.png ├── pyinstaller │ ├── create_application.py │ └── hooks │ │ ├── hook-cmlibs.utils.py │ │ ├── hook-cmlibs.widgets.py │ │ ├── hook-cmlibs.zinc.py │ │ ├── hook-kaleido.py │ │ ├── hook-mapclientplugins.generatesdsstep.py │ │ ├── hook-mapclientplugins.py │ │ ├── hook-pmr2.wfctrl.py │ │ └── hook-scipy.special.py └── win │ ├── MAP-Client.ico │ ├── Plugins │ └── x86-unicode │ │ └── EnVar.dll │ ├── create_installer.py │ ├── header.bmp │ ├── hooks │ └── hook-opencmiss.iron.py │ ├── nsis.nsi │ ├── nsis.nsi.template │ └── welcome.bmp └── src ├── LICENSE ├── MANIFEST.in ├── NOTICE ├── README.rst ├── mapclient ├── __init__.py ├── application.py ├── core │ ├── __init__.py │ ├── annotations.py │ ├── checks.py │ ├── exitcodes.py │ ├── importexport.py │ ├── mainapplication.py │ ├── managers │ │ ├── __init__.py │ │ ├── optionsmanager.py │ │ ├── packagemanager.py │ │ ├── pluginmanager.py │ │ ├── undomanager.py │ │ └── workflowmanager.py │ ├── metrics.py │ ├── pluginframework.py │ ├── provenance.py │ ├── utils.py │ └── workflow │ │ ├── __init__.py │ │ ├── workflowdependencygraph.py │ │ ├── workflowerror.py │ │ ├── workflowitems.py │ │ ├── workflowrdf.py │ │ ├── workflowscene.py │ │ ├── workflowsteps.py │ │ └── workflowutils.py ├── exceptions.py ├── mountpoints │ ├── __init__.py │ ├── menuoption.py │ ├── stackedwidget.py │ └── workflowstep.py ├── settings │ ├── __init__.py │ ├── definitions.py │ ├── general.py │ ├── info.py │ └── version.py ├── splash_rc.py ├── splashscreen.py ├── tools │ ├── __init__.py │ ├── annotation │ │ ├── __init__.py │ │ ├── annotation.voc │ │ ├── annotationdialog.py │ │ ├── annotationtool.py │ │ ├── qt │ │ │ └── annotationdialog.ui │ │ └── ui │ │ │ ├── __init__.py │ │ │ └── ui_annotationdialog.py │ ├── mapicon │ │ ├── __init__.py │ │ ├── mapicondialog.py │ │ ├── qt │ │ │ └── mapicondialog.ui │ │ └── ui │ │ │ ├── __init__.py │ │ │ └── ui_mapicondialog.py │ ├── osxapp │ │ ├── __init__.py │ │ ├── mapclient.icns │ │ └── shimbundle.py │ ├── pluginfinder │ │ ├── __init__.py │ │ ├── downloadtodirectorydialog.py │ │ ├── plugindata.py │ │ ├── pluginfinderdialog.py │ │ ├── qt │ │ │ ├── downloadtodirectorydialog.ui │ │ │ └── pluginfinderdialog.ui │ │ └── ui │ │ │ ├── __init__.py │ │ │ ├── ui_downloadtodirectorydialog.py │ │ │ └── ui_pluginfinderdialog.py │ ├── pluginwizard │ │ ├── __init__.py │ │ ├── qt │ │ │ ├── config.ui │ │ │ ├── emptyconfig.ui │ │ │ ├── images │ │ │ │ ├── background.png │ │ │ │ ├── background_v1.png │ │ │ │ ├── banner.png │ │ │ │ ├── banner_v1.png │ │ │ │ ├── banner_v2.png │ │ │ │ ├── banner_v4.png │ │ │ │ ├── cross.png │ │ │ │ ├── data-sink.png │ │ │ │ ├── data-source.png │ │ │ │ ├── default.png │ │ │ │ ├── fitting.png │ │ │ │ ├── icon-background.png │ │ │ │ ├── image-processing.png │ │ │ │ ├── logo.png │ │ │ │ ├── logo_v1.png │ │ │ │ ├── logo_v2.png │ │ │ │ ├── model-viewer.png │ │ │ │ ├── morphometric.png │ │ │ │ ├── registration.png │ │ │ │ ├── segmentation.png │ │ │ │ ├── utility.png │ │ │ │ ├── watermark.png │ │ │ │ └── watermark_v1.png │ │ │ ├── misc.ui │ │ │ ├── name.ui │ │ │ ├── output.ui │ │ │ ├── ports.ui │ │ │ └── resources.qrc │ │ ├── skeleton.py │ │ ├── skeletonstrings.py │ │ ├── ui │ │ │ ├── __init__.py │ │ │ ├── resources_rc.py │ │ │ ├── ui_config.py │ │ │ ├── ui_misc.py │ │ │ ├── ui_name.py │ │ │ ├── ui_output.py │ │ │ └── ui_ports.py │ │ └── wizarddialog.py │ ├── pmr │ │ ├── __init__.py │ │ ├── authoriseapplicationdialog.py │ │ ├── core.py │ │ ├── dialogs │ │ │ ├── __init__.py │ │ │ ├── addhostdialog.py │ │ │ └── register.py │ │ ├── importworkflowdialog.py │ │ ├── jsonclient │ │ │ ├── __init__.py │ │ │ ├── client.py │ │ │ └── credential.py │ │ ├── oauthcheckdialog.py │ │ ├── pmrdvcscommitdialog.py │ │ ├── pmrdvcshelper.py │ │ ├── pmrsearchdialog.py │ │ ├── pmrtool.py │ │ ├── pmrworkflowwidget.py │ │ ├── qt │ │ │ ├── addhostdialog.ui │ │ │ ├── authoriseapplicationdialog.ui │ │ │ ├── images │ │ │ │ ├── tick_blue.png │ │ │ │ ├── tick_green.png │ │ │ │ └── tick_yellow.png │ │ │ ├── importworkflowdialog.ui │ │ │ ├── oauthcheckdialog.ui │ │ │ ├── pmrdvcscommitdialog.ui │ │ │ ├── pmrsearchdialog.ui │ │ │ ├── pmrwidget.ui │ │ │ ├── pmrworkflowwidget.ui │ │ │ ├── registerdialog.ui │ │ │ ├── resources.qrc │ │ │ ├── searchwidget.ui │ │ │ └── settingswidget.ui │ │ ├── settings │ │ │ ├── __init__.py │ │ │ └── general.py │ │ ├── ui │ │ │ ├── __init__.py │ │ │ ├── resources_rc.py │ │ │ ├── ui_addhostdialog.py │ │ │ ├── ui_authoriseapplicationdialog.py │ │ │ ├── ui_importworkflowdialog.py │ │ │ ├── ui_oauthcheckdialog.py │ │ │ ├── ui_pmrdvcscommitdialog.py │ │ │ ├── ui_pmrsearchdialog.py │ │ │ ├── ui_pmrwidget.py │ │ │ ├── ui_pmrworkflowwidget.py │ │ │ ├── ui_registerdialog.py │ │ │ ├── ui_searchwidget.py │ │ │ └── ui_settingswidget.py │ │ └── widgets │ │ │ ├── __init__.py │ │ │ ├── searchwidget.py │ │ │ ├── settingswidget.py │ │ │ └── workspacewidget.py │ ├── renameplugin │ │ ├── __init__.py │ │ ├── qt │ │ │ └── renamedialog.ui │ │ ├── renamedialog.py │ │ └── ui │ │ │ ├── __init__.py │ │ │ └── ui_renamedialog.py │ └── updateworkflow │ │ ├── __init__.py │ │ ├── qt │ │ └── updateworkflowdialog.ui │ │ ├── ui │ │ ├── __init__.py │ │ └── ui_updateworkflowdialog.py │ │ └── updateworkflowdialog.py └── view │ ├── __init__.py │ ├── dialogs │ ├── __init__.py │ ├── about │ │ ├── __init__.py │ │ ├── aboutdialog.py │ │ ├── creditsdialog.py │ │ ├── licensedialog.py │ │ ├── provenancedialog.py │ │ ├── qt │ │ │ ├── aboutdialog.ui │ │ │ ├── creditsdialog.ui │ │ │ ├── licensedialog.ui │ │ │ └── provenancedialog.ui │ │ └── ui │ │ │ ├── __init__.py │ │ │ ├── resources_rc.py │ │ │ ├── ui_aboutdialog.py │ │ │ ├── ui_creditsdialog.py │ │ │ ├── ui_licensedialog.py │ │ │ └── ui_provenancedialog.py │ ├── checkstatus │ │ ├── __init__.py │ │ ├── checkstatusdialog.py │ │ ├── qt │ │ │ └── checkstatusdialog.ui │ │ └── ui │ │ │ ├── __init__.py │ │ │ └── ui_checkstatusdialog.py │ ├── error │ │ ├── __init__.py │ │ └── errordialog.py │ ├── log │ │ ├── __init__.py │ │ ├── loadlogsession.py │ │ ├── logdetails.py │ │ ├── loginformation.py │ │ ├── qt │ │ │ ├── loadlogsession.ui │ │ │ ├── logdetails.ui │ │ │ └── loginformation.ui │ │ └── ui │ │ │ ├── __init__.py │ │ │ ├── ui_loadlogsession.py │ │ │ ├── ui_logdetails.py │ │ │ └── ui_loginformation.py │ ├── reportissue │ │ ├── __init__.py │ │ ├── qt │ │ │ └── reportissuedialog.ui │ │ ├── reportissuedialog.py │ │ ├── ui │ │ │ └── ui_reportissuedialog.py │ │ └── utils.py │ └── selfclosing │ │ ├── __init__.py │ │ └── messagebox.py │ ├── mainwindow.py │ ├── managers │ ├── __init__.py │ ├── options │ │ ├── __init__.py │ │ ├── optionsdialog.py │ │ ├── qt │ │ │ └── optionsdialog.ui │ │ └── ui │ │ │ ├── __init__.py │ │ │ └── ui_optionsdialog.py │ ├── package │ │ ├── __init__.py │ │ ├── packagemanagerdialog.py │ │ ├── qt │ │ │ └── packagemanagerdialog.ui │ │ └── ui │ │ │ ├── __init__.py │ │ │ └── ui_packagemanagerdialog.py │ └── plugins │ │ ├── __init__.py │ │ ├── advanceddialog.py │ │ ├── dependencyinstallation.py │ │ ├── manager.py │ │ ├── plugindownloader.py │ │ ├── pluginerrors.py │ │ ├── pluginmanagerdialog.py │ │ ├── pluginprogress.py │ │ ├── pluginupdater.py │ │ ├── qt │ │ ├── advanceddialog.ui │ │ ├── plugindownloader.ui │ │ ├── pluginerrors.ui │ │ ├── pluginmanagerdialog.ui │ │ └── pluginprogress.ui │ │ └── ui │ │ ├── __init__.py │ │ ├── resources_rc.py │ │ ├── ui_advanceddialog.py │ │ ├── ui_plugindownloader.py │ │ ├── ui_pluginerrors.py │ │ ├── ui_pluginmanagerdialog.py │ │ └── ui_pluginprogress.py │ ├── qt │ ├── images │ │ ├── .directory │ │ ├── about_logo.png │ │ ├── cancel_256.png │ │ ├── clipboard_icon.png │ │ ├── configure_green.png │ │ ├── configure_red.png │ │ ├── cross.jpg │ │ ├── default_step_icon.png │ │ ├── default_step_icon_original.png │ │ ├── default_workflow_step.png │ │ ├── default_workflow_step_v1.png │ │ ├── download_icon.png │ │ ├── downloaded_icon.png │ │ ├── editcopy.png │ │ ├── editcut.png │ │ ├── editdelete.png │ │ ├── editpaste.png │ │ ├── exclamation_mark_red.png │ │ ├── green_tick.png │ │ ├── grid.png │ │ ├── icon-app.png │ │ ├── icon-arrow-right.png │ │ ├── icon-gear.png │ │ ├── icon-port.png │ │ ├── icon.png │ │ ├── loading_icon.png │ │ ├── logo.png │ │ ├── modified_repo.png │ │ ├── redo.png │ │ ├── round_error_logo.png │ │ ├── undo.png │ │ └── yellow_black_exclamation.png │ ├── mainwindow.ui │ ├── progressdialog.ui │ └── resources.qrc │ ├── ui │ ├── __init__.py │ ├── resources_rc.py │ ├── ui_mainwindow.py │ └── ui_progressdialog.py │ ├── utils.py │ └── workflow │ ├── __init__.py │ ├── exportconfigdialog.py │ ├── importconfigdialog.py │ ├── qt │ ├── exportconfigdialog.ui │ ├── importconfigdialog.ui │ ├── workflowdockwidget.ui │ ├── workflowwidget.ui │ └── workstepsdialog.ui │ ├── steptree.py │ ├── ui │ ├── __init__.py │ ├── ui_exportconfigdialog.py │ ├── ui_importconfigdialog.py │ └── ui_workflowwidget.py │ ├── workflowcommands.py │ ├── workflowgraphicsitems.py │ ├── workflowgraphicsscene.py │ ├── workflowgraphicsview.py │ ├── workflowsteptreeview.py │ └── workflowwidget.py ├── requirements.txt ├── setup.py ├── setuputils.py ├── skeletonplugin └── skeletonstep │ ├── __init__.py │ └── step.py └── utils ├── __init__.py ├── createwindowsapplicationinstaller.py └── pysideuicrunner.py /.github/workflows/create-release.yaml: -------------------------------------------------------------------------------- 1 | name: create-release 2 | 3 | on: 4 | push: 5 | tags: 6 | - 'v*' 7 | 8 | jobs: 9 | create_release: 10 | if: github.repository == 'MusculoskeletalAtlasProject/mapclient' 11 | name: create_release 12 | runs-on: ubuntu-20.04 13 | steps: 14 | - name: Determine release properties 15 | shell: bash 16 | id: release_properties 17 | run: | 18 | tag=${GITHUB_REF#refs/tags/} 19 | OIFS=$IFS 20 | IFS='.' read -ra split <<< "$tag" 21 | IFS=$OIFS 22 | count=${#split[@]} 23 | [[ ${#split[@]} -eq 4 ]] && pre_release=true || pre_release=false 24 | [[ ${#split[@]} -eq 4 ]] && body="Pre-release of version $tag." || body="Version $tag." 25 | echo "PRE_RELEASE=$pre_release" 26 | echo "PRE_RELEASE=$pre_release" >> $GITHUB_OUTPUT 27 | echo "BODY=$body" 28 | echo "BODY=$body" >> $GITHUB_OUTPUT 29 | - name: create 30 | uses: softprops/action-gh-release@v1 31 | id: create_release 32 | env: 33 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 34 | with: 35 | draft: false 36 | prerelease: ${{ steps.release_properties.outputs.pre_release }} 37 | body: ${{ steps.release_properties.outputs.body }} 38 | 39 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | 5 | # C extensions 6 | *.so 7 | 8 | # Distribution / packaging 9 | .Python 10 | env/ 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | releases/ 16 | eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | #package/ # We are using this name in the source hopefully doesn't come back to bite us. 23 | package/*.exe 24 | res/macos/*.dmg 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | 29 | # PyInstaller 30 | # Usually these files are written by a python script from a template 31 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 32 | *.manifest 33 | *.spec 34 | 35 | # Installer logs 36 | pip-log.txt 37 | pip-delete-this-directory.txt 38 | 39 | # Unit test / coverage reports 40 | htmlcov/ 41 | .tox/ 42 | .coverage 43 | .cache 44 | nosetests.xml 45 | coverage.xml 46 | 47 | # Translations 48 | *.mo 49 | *.pot 50 | 51 | # Django stuff: 52 | *.log 53 | 54 | # Sphinx documentation 55 | docs/_build/ 56 | 57 | # macOS System files 58 | .DS_Store 59 | 60 | # PyBuilder 61 | target/ 62 | 63 | # Eclipse projects 64 | .project 65 | .pydevproject 66 | .settings/ 67 | 68 | # Intellij projects 69 | .idea/ 70 | 71 | # Internal workflow zip 72 | internal_workflow.zip 73 | internal_workflows.zip 74 | 75 | # Codetogether 76 | .codetogether.ignore 77 | 78 | -------------------------------------------------------------------------------- /.readthedocs.yaml: -------------------------------------------------------------------------------- 1 | # .readthedocs.yaml 2 | # Read the Docs configuration file 3 | # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details 4 | 5 | # Required 6 | version: 2 7 | 8 | # Set the version of Python and other tools you might need 9 | build: 10 | os: ubuntu-22.04 11 | tools: 12 | python: "3.11" 13 | 14 | # Build documentation in the docs/ directory with Sphinx 15 | sphinx: 16 | configuration: docs/conf.py 17 | 18 | # We recommend specifying your dependencies to enable reproducible builds: 19 | # https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html 20 | # python: 21 | # install: 22 | # - requirements: docs/requirements.txt 23 | -------------------------------------------------------------------------------- /README.rst: -------------------------------------------------------------------------------- 1 | ========== 2 | MAP Client 3 | ========== 4 | 5 | .. _MAP Client: https://github.com/MusculoskeletalAtlasProject/mapclient 6 | .. _documentation: https://map-client.readthedocs.org/ 7 | 8 | The `MAP Client`_ is a cross-platform framework for managing workflows. MAP Client is a plugin-based application that can be used to 9 | create workflows from a collection of workflow steps. Each workflow step is simply a plugin for the MAP Client which performs some 10 | basic or even complex task. 11 | 12 | One of the central ideas for the MAP Client is to allow users to easily develop and share their own plugins that can be used in a 13 | workflow. The requirements for developing a workflow step have been kept as low as practicable thus allowing plugin creators to 14 | concentrate on the practical implementation of the step rather than conforming to the plugin API. Additionally the Plugin Wizard tool 15 | greatly simplifies the first stage in creating a workflow step and generates a considerable amount of the skeleton code required. 16 | 17 | Having a plugin based framework makes it possible for groups to share their workflows and workflow steps without requiring a lot of 18 | extraneous software. Also having users create and share their plugins increases the flexibility of the MAP Client and distances users 19 | from relying on an external team of developers. 20 | 21 | The MAP Client is an application written in Python and based on Qt the cross-platform application and UI framework. Further details 22 | are available in the `documentation`_. 23 | 24 | -------------------------------------------------------------------------------- /docs/Makefile: -------------------------------------------------------------------------------- 1 | # Minimal makefile for Sphinx documentation 2 | # 3 | 4 | # You can set these variables from the command line, and also 5 | # from the environment for the first two. 6 | SPHINXOPTS ?= 7 | SPHINXBUILD ?= sphinx-build 8 | SOURCEDIR = . 9 | BUILDDIR = _build 10 | 11 | # Put it first so that "make" without argument is like "make help". 12 | help: 13 | @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 14 | 15 | .PHONY: help Makefile 16 | 17 | # Catch-all target: route all unknown targets to Sphinx using the new 18 | # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). 19 | %: Makefile 20 | @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 21 | -------------------------------------------------------------------------------- /docs/README.rst: -------------------------------------------------------------------------------- 1 | MAP Client Documentation 2 | ======================== 3 | 4 | The documentation for MAP Client is written for Sphinx in reStructuredText. It is easiest to read the documentation in 5 | a Sphinx processed form. Refer to the Sphinx documentation for the details on turning reStructuredText into a processed 6 | form that best suits your requirements. Information on installing Sphinx is available `here `__ and the quick start 7 | instructions are available `here `__ 8 | 9 | A processed form of the documentation is available from `readthedocs `_. The reStructuredText files 10 | in the repository are for making additions or changes and not general consumption. 11 | 12 | Should the user desire to make any changes to the documentation, it is relatively easy to re-generate the html files from 13 | the reStructuredText documentation using Sphinx. This process is described as follows. On the command line, set the current 14 | directory to the location of the :code:`docs` directory on the user's drive (here we assume that you have the MAP Client source code available in the directory :code:`mapclient`):: 15 | 16 | cd \mapclient\docs 17 | 18 | Then, run the following command:: 19 | 20 | make html 21 | 22 | The updated html files can then be found in :code:`\mapclient\docs\_build\html`. :code:`index.html` is the entry to the documentation. 23 | View the documentation by directing your web browser to :code:`/mapclient/docs/_build/html/index.html`. 24 | 25 | If the user encounters any issues with the make command: Windows users should be using cmd.exe rather than any command line 26 | alternatives; macOS and Linux users should ensure that (GNU) make is installed. Otherwise, the problem is likely to be related 27 | to the installation of Sphinx. 28 | -------------------------------------------------------------------------------- /docs/developer/MAP-development-buildbotaccess.rst: -------------------------------------------------------------------------------- 1 | .. _Developer Access to Buildbot for MAP Client: 2 | 3 | ================== 4 | Access to Buildbot 5 | ================== 6 | 7 | This section describes how you can go about getting access to the Buildbot for MAP Client. Access to buildbot is granted to people who wish to test their MAP Client code or manage a MAP Client release. 8 | 9 | For acquiring access to http://autotest.bioeng.auckland.ac.nz/mapclient-buildbot/ follow these instructions: 10 | 11 | #. Write an email, including your preferred username, requesting access to Buildbot to:: 12 | 13 | h.sorby@auckland.ac.nz 14 | 15 | #. When you receive confirmation of your username you will need to provide a 'passwd' entry with your username and password, issue the following command with your details to generate the required output:: 16 | 17 | htpasswd -mn 18 | 19 | #. A final email will be sent out confirming that access has been granted. -------------------------------------------------------------------------------- /docs/developer/MAP-development-codestructure.rst: -------------------------------------------------------------------------------- 1 | .. _Development code structure for MAP Client: 2 | 3 | ============== 4 | Code Structure 5 | ============== 6 | 7 | This section describes the code structure for MAP Client. 8 | 9 | .. contents:: 10 | 11 | Overview 12 | ======== 13 | 14 | The code is structured into five broad sections: 15 | 16 | * Core 17 | * Mount points 18 | * Settings 19 | * Tools 20 | * View 21 | 22 | The *core* section contains the model information, the *view* section provides the user interface for the model. The 23 | *settings* section contains all the settings and options for the application. The *tools* section contains tools that 24 | are useful to MAP Client operations but not required for the core functionality of the program. The *mount points* 25 | section defines the interface for plugins and the plugin framework 26 | 27 | Core 28 | ==== 29 | 30 | The *core* is sub-sectioned into a *managers* package and the *main application*. The *main application* contains all 31 | the managers which hold all the model information. 32 | 33 | View 34 | ==== 35 | 36 | The *view* package provides the user interface to the model information held by the *core* package. 37 | 38 | 39 | .. note:: 40 | 41 | - This shouldn't be a problem. 42 | 43 | .. image:: images/gitflow.png 44 | :width: 600px 45 | :alt: Overview of code structure for MAP Client 46 | :align: center 47 | 48 | -------------------------------------------------------------------------------- /docs/developer/MAP-development-codingstandard.rst: -------------------------------------------------------------------------------- 1 | .. _Development coding standard for MAP Client: 2 | 3 | =============== 4 | Coding Standard 5 | =============== 6 | 7 | This section describes the coding standard for MAP Client. 8 | 9 | .. contents:: 10 | 11 | Overview 12 | ======== 13 | 14 | The coding standard for MAP Client is a list of directives on how code should look when written so that the entire codebase has a similar look and feel irrespective of who has written it. MAP Client code is written for both Python 2 and Python 3 so code must meet the standards for both Pythoon interpreters. 15 | 16 | Style 17 | ===== 18 | 19 | * `PEP8 Style Guide for Python code `_ 20 | * Class member variables should start with an underscore '_' 21 | * Private class methods should start with an underscore '_' 22 | * Indentation is set to 4 spaces (no tabs) 23 | 24 | 25 | -------------------------------------------------------------------------------- /docs/developer/MAP-development-review.rst: -------------------------------------------------------------------------------- 1 | .. _Developer Review for MAP Client: 2 | 3 | ======================== 4 | Final Development Review 5 | ======================== 6 | 7 | This section describes how a reviewer reviews a tranche of work for inclusion in the MusculoskeletalAtlasProject/mapclient-{tests,src,docs} repositories. 8 | 9 | Overview 10 | ======== 11 | 12 | The job of the reviewer is to make sure any submitted code meets the standard required for the project. The things to take particular notice of are: 13 | 14 | * Have appropriate tests been written 15 | * Is the coding standard followed 16 | * Is the documentation satisfactory 17 | * Are the SHA values in the pull requests the ones that were tested 18 | * Are the pull requests against the develop branch 19 | 20 | If you are satisfied with the code in the pull requests, merge and close each open pull request except the pull request to MusculoskeletalAtlasProject/mapclient and then use Buildbot to synchronise the meta repository MusculoskeletalAtlasProject/mapclient. 21 | 22 | Final Review 23 | ============ 24 | 25 | The final review stage is the last opportunity for changes before inclusion into the **prime** repositories so it is important to make sure proper tests have been written and that the coding standard has been followed. The documentation must be accurate and complete it is often the first point of contact for new users and the better the documentation the better the project. 26 | 27 | Another item to take careful note of is the SHA values in the pull requests match those that were actually tested by Buildbot. Perhaps in the future there will be a script that will make this check for us but for now it is the responsibility of the reviewer. 28 | 29 | When you are satisfied merge and close the three open pull requests attached to the submodule repositories and close the open pull request to MusculoskeletalAtlasProject/mapclient without merging. 30 | 31 | Synchronise Submodules 32 | ====================== 33 | 34 | Go to the Buildbot homepage and choose the builders link at the top of the page. Select the sync builder and authenticate yourself with Buildbot. Fill in the required values and force the build. The synchronisation script will not run as intended if the pull requests referenced have not been merged and closed beforehand. 35 | 36 | -------------------------------------------------------------------------------- /docs/developer/appendix.rst: -------------------------------------------------------------------------------- 1 | .. _appendix: 2 | 3 | ========================================== 4 | Appendix A - Generating html documentation 5 | ========================================== 6 | 7 | This appendix covers how to generate html files from the ReStructured text documentation source files. The documentation is generated using the Sphinx documentation tool. Sphinx is a tool that makes it easy to create intelligent and beautiful documentation. 8 | 9 | Generating the documentation is very easy. First you need to download and install Sphinx if you don't already have it. Then you use the command line to run the sphinx build tool, which will generate the documentation in the target format. 10 | 11 | There are two ways of generating the documentation. You can either use the supplied Makefile in the resources directory or you can use 'sphinx-build' directly. The Makefile is setup to use specific locations, but these location can be overridden when invoking the make command. The 'sphinx-build' application requires the source directory, the build directory, the configuration directory and the documentation target format to be supplied on the command line. 12 | 13 | The commands for these two methods of generating the documentation are given here:: 14 | 15 | # Method 1. 16 | make -f docs/resources/Sphinx.Makefile html 17 | 18 | # Method 2. 19 | sphinx-build -t html docs build 20 | 21 | Note: 22 | 23 | - This assumes your current working directory is the parent of the 'docs' directory 24 | - If a directory 'build' doesn't exist in the current directory it will be created 25 | 26 | That's it! Now you can use your favourite webbrowser to read the documentation. The 'index.html' file for method 1. is located in 'build/html' and for method 2. it is available in 'build'. -------------------------------------------------------------------------------- /docs/developer/images/gitflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/developer/images/gitflow.png -------------------------------------------------------------------------------- /docs/developer/images/githubrepos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/developer/images/githubrepos.png -------------------------------------------------------------------------------- /docs/developer/index.rst: -------------------------------------------------------------------------------- 1 | .. Developer Documentation for MAP Client 2 | 3 | ================================== 4 | MAP Client Developer Documentation 5 | ================================== 6 | 7 | This section of documentation is intended for developers. It covers a range of topics from getting setup through to how code reviews are done. MAP Client uses Git for source code management (SCM), Buildbot for continuous integration testing and Github to host the software on the web. The way in which these elements are brought together and how a developer is expected to use them forms the development process which is defined here. 8 | 9 | The repository at https://github.com/MusculoskeletalAtlasProject/mapclient is the definitive repository for the software and used for creating software releases. We will refer to this repository as the **prime** repository. The developer documentation describes the Git branching model in use on the **prime** repository and the process to follow for getting new code added to this repository. We also make use of Buildbot to automate some of the process to make development easier for new developers and reviewers. 10 | 11 | Contents: 12 | 13 | .. toctree:: 14 | :maxdepth: 2 15 | :titlesonly: 16 | 17 | MAP-development-setup 18 | MAP-development-gitbranching 19 | MAP-development-codestructure 20 | MAP-development-contribution 21 | MAP-development-review 22 | MAP-development-codingstandard 23 | MAP-development-release 24 | MAP-development-buildbotaccess 25 | 26 | appendix 27 | -------------------------------------------------------------------------------- /docs/getting_started/help.rst: -------------------------------------------------------------------------------- 1 | =========== 2 | Help System 3 | =========== 4 | 5 | ABI Mapping tool has a range of built-in and web-based help options. 6 | 7 | 8 | What's this 9 | ----------- 10 | 11 | Every plugin has a link to their online documentation at configure dialog. Clicking the question mark and then click anywhere on config dialog will see it. 12 | 13 | .. figure:: images/help_whatsthis.png 14 | :align: center 15 | :width: 40% 16 | 17 | Link to online documentation. 18 | 19 | Tooltips 20 | -------- 21 | 22 | When hovering the mouse cursor over a button or setting, after a few instants a tooltip appears. 23 | 24 | .. figure:: images/help-system-tooltips.png 25 | :align: center 26 | :width: 70% 27 | 28 | Tooltip of the Fitted coordinates in the Data Embedder. 29 | 30 | GitHub Issues 31 | ------------- 32 | 33 | If you have any question or feedback can put an issue on the `GitHub repository `_. 34 | 35 | Contact the author 36 | ------------------ 37 | 38 | Hugh Sorby -------------------------------------------------------------------------------- /docs/getting_started/images/WorkflowFinished.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/getting_started/images/WorkflowFinished.png -------------------------------------------------------------------------------- /docs/getting_started/images/configured_MAP_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/getting_started/images/configured_MAP_1.png -------------------------------------------------------------------------------- /docs/getting_started/images/connected_MAP_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/getting_started/images/connected_MAP_1.png -------------------------------------------------------------------------------- /docs/getting_started/images/download_plugin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/getting_started/images/download_plugin.png -------------------------------------------------------------------------------- /docs/getting_started/images/error_connection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/getting_started/images/error_connection.png -------------------------------------------------------------------------------- /docs/getting_started/images/help-system-tooltips.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/getting_started/images/help-system-tooltips.png -------------------------------------------------------------------------------- /docs/getting_started/images/help_whatsthis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/getting_started/images/help_whatsthis.png -------------------------------------------------------------------------------- /docs/getting_started/images/map_client_barebones.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/getting_started/images/map_client_barebones.png -------------------------------------------------------------------------------- /docs/getting_started/images/no_configure_MAP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/getting_started/images/no_configure_MAP.png -------------------------------------------------------------------------------- /docs/getting_started/images/plugin_manager_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/getting_started/images/plugin_manager_2.png -------------------------------------------------------------------------------- /docs/getting_started/images/search_plugin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/getting_started/images/search_plugin.png -------------------------------------------------------------------------------- /docs/getting_started/images/step_with_port_info_displayed_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/getting_started/images/step_with_port_info_displayed_1.png -------------------------------------------------------------------------------- /docs/make.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | pushd %~dp0 4 | 5 | REM Command file for Sphinx documentation 6 | 7 | if "%SPHINXBUILD%" == "" ( 8 | set SPHINXBUILD=sphinx-build 9 | ) 10 | set SOURCEDIR=. 11 | set BUILDDIR=_build 12 | 13 | if "%1" == "" goto help 14 | 15 | %SPHINXBUILD% >NUL 2>NUL 16 | if errorlevel 9009 ( 17 | echo. 18 | echo.The 'sphinx-build' command was not found. Make sure you have Sphinx 19 | echo.installed, then set the SPHINXBUILD environment variable to point 20 | echo.to the full path of the 'sphinx-build' executable. Alternatively you 21 | echo.may add the Sphinx directory to PATH. 22 | echo. 23 | echo.If you don't have Sphinx installed, grab it from 24 | echo.https://www.sphinx-doc.org/ 25 | exit /b 1 26 | ) 27 | 28 | %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% 29 | goto end 30 | 31 | :help 32 | %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% 33 | 34 | :end 35 | popd 36 | -------------------------------------------------------------------------------- /docs/manual/MAP-plugin-authoring.rst: -------------------------------------------------------------------------------- 1 | .. _MAP-plugin-authoring: 2 | 3 | ==================== 4 | MAP Plugin Authoring 5 | ==================== 6 | 7 | The plugin lies at the heart of the MAP framework and the Plugin Creator Wizard creates skeleton plugins conforming to the MAP framework plugin interface. 8 | The Plugin Creator Wizard assists with the initial plugin creation allowing the plugin developer to concentrate on implementing the plugins task. 9 | For basic familiarity with MAP Client please read the feature demonstration document :doc:`MAP-feature-demonstration`. 10 | 11 | For more detailed information on the plugin interface read the :doc:`MAP-plugin` document, this document defines the plugin interface that the new plugin must adhere to. 12 | 13 | Provenance Tracking 14 | =================== 15 | 16 | The steps for adding a skeleton plugin to a git repository is 17 | 18 | #. Create a repository on GitHub, add Python based .gitignores file 19 | #. Change into the directory where skeleton plugin was created 20 | #. Link the repository and make the first commit with the following commands:: 21 | 22 | git init . 23 | git remote add origin 24 | git pull -u origin master 25 | git add . 26 | git commit -m "Initial commit of skeleton step." 27 | git push -u origin master 28 | 29 | #. [Optional] If using PyCharm add the following lines to the *.gitignore* file:: 30 | 31 | # PyCharm project files 32 | .idea/ 33 | 34 | #. [Optional] If using eclipse add the following lines to the *.gitignore* file:: 35 | 36 | # Eclipse PyDev 37 | .project 38 | .pydevproject 39 | -------------------------------------------------------------------------------- /docs/manual/glossary.rst: -------------------------------------------------------------------------------- 1 | 2 | .. _glossary: 3 | 4 | ======== 5 | Glossary 6 | ======== 7 | 8 | .. glossary:: 9 | 10 | Python 11 | The Python interpreter 12 | 13 | Mercurial 14 | Distributed version control system. -------------------------------------------------------------------------------- /docs/manual/images/PMRTool_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/PMRTool_1.png -------------------------------------------------------------------------------- /docs/manual/images/PMRTool_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/PMRTool_2.png -------------------------------------------------------------------------------- /docs/manual/images/advanced_dialog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/advanced_dialog.png -------------------------------------------------------------------------------- /docs/manual/images/automatic-ve-setup.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/automatic-ve-setup.PNG -------------------------------------------------------------------------------- /docs/manual/images/blank_MAP_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/blank_MAP_1.png -------------------------------------------------------------------------------- /docs/manual/images/configured_MAP_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/configured_MAP_1.png -------------------------------------------------------------------------------- /docs/manual/images/connected_MAP_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/connected_MAP_1.png -------------------------------------------------------------------------------- /docs/manual/images/cross.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/cross.png -------------------------------------------------------------------------------- /docs/manual/images/dependencies_tab.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/dependencies_tab.PNG -------------------------------------------------------------------------------- /docs/manual/images/dependencies_tab_ve.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/dependencies_tab_ve.png -------------------------------------------------------------------------------- /docs/manual/images/error_connection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/error_connection.png -------------------------------------------------------------------------------- /docs/manual/images/image_antcommartresults.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/image_antcommartresults.png -------------------------------------------------------------------------------- /docs/manual/images/image_configureblank.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/image_configureblank.png -------------------------------------------------------------------------------- /docs/manual/images/image_configurepmr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/image_configurepmr.png -------------------------------------------------------------------------------- /docs/manual/images/image_owltermscompleter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/image_owltermscompleter.png -------------------------------------------------------------------------------- /docs/manual/images/log_information.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/log_information.png -------------------------------------------------------------------------------- /docs/manual/images/main_annotation_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/main_annotation_1.png -------------------------------------------------------------------------------- /docs/manual/images/mapClientBarebones.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/mapClientBarebones.png -------------------------------------------------------------------------------- /docs/manual/images/map_client_barebones.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/map_client_barebones.png -------------------------------------------------------------------------------- /docs/manual/images/map_client_gui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/map_client_gui.png -------------------------------------------------------------------------------- /docs/manual/images/modify-ve.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/modify-ve.PNG -------------------------------------------------------------------------------- /docs/manual/images/options_advanced_dialog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/options_advanced_dialog.png -------------------------------------------------------------------------------- /docs/manual/images/plugin_configure_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/plugin_configure_1.png -------------------------------------------------------------------------------- /docs/manual/images/plugin_finder_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/plugin_finder_1.png -------------------------------------------------------------------------------- /docs/manual/images/plugin_finder_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/plugin_finder_2.png -------------------------------------------------------------------------------- /docs/manual/images/plugin_manager_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/plugin_manager_1.png -------------------------------------------------------------------------------- /docs/manual/images/plugin_manager_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/plugin_manager_2.png -------------------------------------------------------------------------------- /docs/manual/images/plugin_wizard_configuration_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/plugin_wizard_configuration_1.png -------------------------------------------------------------------------------- /docs/manual/images/plugin_wizard_identify_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/plugin_wizard_identify_1.png -------------------------------------------------------------------------------- /docs/manual/images/plugin_wizard_introduction_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/plugin_wizard_introduction_1.png -------------------------------------------------------------------------------- /docs/manual/images/plugin_wizard_misc_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/plugin_wizard_misc_1.png -------------------------------------------------------------------------------- /docs/manual/images/plugin_wizard_output_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/plugin_wizard_output_1.png -------------------------------------------------------------------------------- /docs/manual/images/plugin_wizard_ports_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/plugin_wizard_ports_1.png -------------------------------------------------------------------------------- /docs/manual/images/plugin_wizard_ports_definition_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/plugin_wizard_ports_definition_1.png -------------------------------------------------------------------------------- /docs/manual/images/plugin_wizard_ports_type_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/plugin_wizard_ports_type_1.png -------------------------------------------------------------------------------- /docs/manual/images/pmr_tool_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/pmr_tool_1.png -------------------------------------------------------------------------------- /docs/manual/images/rename_plugin_tool.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/rename_plugin_tool.png -------------------------------------------------------------------------------- /docs/manual/images/select_workflow_directory_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/select_workflow_directory_1.png -------------------------------------------------------------------------------- /docs/manual/images/setup-file.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/setup-file.PNG -------------------------------------------------------------------------------- /docs/manual/images/setup-location.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/setup-location.PNG -------------------------------------------------------------------------------- /docs/manual/images/setup-ve.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/setup-ve.PNG -------------------------------------------------------------------------------- /docs/manual/images/step_with_port_info_displayed_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/step_with_port_info_displayed_1.png -------------------------------------------------------------------------------- /docs/manual/images/top_annotation_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/top_annotation_1.png -------------------------------------------------------------------------------- /docs/manual/images/update_workflow_tool.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/update_workflow_tool.png -------------------------------------------------------------------------------- /docs/manual/images/volumeFitting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/volumeFitting.png -------------------------------------------------------------------------------- /docs/manual/images/zinc_model_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/manual/images/zinc_model_icon.png -------------------------------------------------------------------------------- /docs/manual/index.rst: -------------------------------------------------------------------------------- 1 | .. _musculoskeletal client manual: 2 | 3 | ================= 4 | MAP Client Manual 5 | ================= 6 | 7 | This is the MAP Client manual for MAP Client version |version|. 8 | 9 | If you are intending on running workflows from existing plugins or you are creating your own plugins see :doc:`MAP-install-setup` on how to setup MAP Client to meet your needs. 10 | The :doc:`MAP-feature-demonstration` runs through a brief overview of the MAP Client application and some of the tools available. 11 | The remainder of the documentation covers the creation and authoring of MAP Client plugins. 12 | 13 | Table of Contents 14 | ================= 15 | 16 | .. toctree:: 17 | :maxdepth: 2 18 | 19 | MAP-install-setup 20 | MAP-feature-demonstration 21 | MAP-plugin 22 | MAP-plugin-wizard 23 | MAP-plugin-authoring 24 | MAP-tutorial-create 25 | MAP-tutorial-plugin 26 | 27 | glossary 28 | -------------------------------------------------------------------------------- /docs/resources/rtd_theme/layout.html: -------------------------------------------------------------------------------- 1 | {% extends "!basic/layout.html" %} 2 | 3 | 4 | {% block rootrellink %} 5 |
  • home
  • 6 |
  • search
  • 7 | {% endblock %} 8 | 9 | 10 | {% block relbar1 %} 11 | 12 |
    13 | py4sci 15 |
    16 | {{ super() }} 17 | {% endblock %} 18 | 19 | {# put the sidebar before the body #} 20 | {% block sidebar1 %}{{ sidebar() }}{% endblock %} 21 | {% block sidebar2 %}{% endblock %} 22 | 23 | -------------------------------------------------------------------------------- /docs/resources/rtd_theme/static/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/docs/resources/rtd_theme/static/logo.png -------------------------------------------------------------------------------- /docs/resources/rtd_theme/theme.conf: -------------------------------------------------------------------------------- 1 | [theme] 2 | inherit = basic 3 | stylesheet = default.css 4 | 5 | [options] 6 | analytics_id = 7 | sticky_navigation = False 8 | 9 | -------------------------------------------------------------------------------- /res/graphics/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/res/graphics/splash.png -------------------------------------------------------------------------------- /res/graphics/splash.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | splash.png 4 | 5 | 6 | -------------------------------------------------------------------------------- /res/macos/MAP-Client.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/res/macos/MAP-Client.icns -------------------------------------------------------------------------------- /res/macos/create_installer.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | version=$1 3 | variant=$2 4 | 5 | src_dir="../pyinstaller/dist/" 6 | 7 | app_name=MAP-Client$variant 8 | app_name_with_version=MAP-Client$variant-$version 9 | dmg_name=$app_name_with_version.dmg 10 | test -d $src_dir/$app_name && rm -rf $src_dir/$app_name 11 | test -f $dmg_name && rm $dmg_name 12 | # --volicon "application_icon.icns" \ 13 | create-dmg \ 14 | --volname "$app_name_with_version" \ 15 | --volicon "MAP-Client.icns" \ 16 | --background "map-client-dmg-background.png" \ 17 | --window-pos 200 120 \ 18 | --window-size 800 400 \ 19 | --icon-size 100 \ 20 | --icon "$app_name.app" 200 190 \ 21 | --hide-extension "$app_name.app" \ 22 | --app-drop-link 600 185 \ 23 | "$dmg_name" \ 24 | "$src_dir" 25 | 26 | -------------------------------------------------------------------------------- /res/macos/map-client-dmg-background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/res/macos/map-client-dmg-background.png -------------------------------------------------------------------------------- /res/pyinstaller/hooks/hook-cmlibs.utils.py: -------------------------------------------------------------------------------- 1 | 2 | from PyInstaller.utils.hooks import collect_submodules 3 | 4 | hiddenimports = collect_submodules('cmlibs.utils') 5 | -------------------------------------------------------------------------------- /res/pyinstaller/hooks/hook-cmlibs.widgets.py: -------------------------------------------------------------------------------- 1 | 2 | from PyInstaller.utils.hooks import collect_submodules 3 | 4 | hiddenimports = collect_submodules('cmlibs.widgets') 5 | -------------------------------------------------------------------------------- /res/pyinstaller/hooks/hook-cmlibs.zinc.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/res/pyinstaller/hooks/hook-cmlibs.zinc.py -------------------------------------------------------------------------------- /res/pyinstaller/hooks/hook-kaleido.py: -------------------------------------------------------------------------------- 1 | from PyInstaller.utils.hooks import collect_data_files, collect_submodules 2 | 3 | datas = collect_data_files('kaleido') 4 | hiddenimports = collect_submodules('kaleido.scopes') 5 | module_collection_mode = { 6 | 'kaleido.scopes': 'py', 7 | } 8 | -------------------------------------------------------------------------------- /res/pyinstaller/hooks/hook-mapclientplugins.generatesdsstep.py: -------------------------------------------------------------------------------- 1 | import logging 2 | from PyInstaller.utils.hooks import collect_data_files 3 | 4 | logger = logging.getLogger(__name__) 5 | 6 | logger.info('Loading resources for mapclientplugins.generatesdsstep.') 7 | datas = collect_data_files('mapclientplugins.generatesdsstep.resources') 8 | -------------------------------------------------------------------------------- /res/pyinstaller/hooks/hook-mapclientplugins.py: -------------------------------------------------------------------------------- 1 | from PyInstaller.utils.hooks import collect_submodules 2 | 3 | 4 | # I don't think this will work if the plugin is zipped in an archive. 5 | hiddenimports = collect_submodules('mapclientplugins') 6 | -------------------------------------------------------------------------------- /res/pyinstaller/hooks/hook-pmr2.wfctrl.py: -------------------------------------------------------------------------------- 1 | from PyInstaller.utils.hooks import collect_data_files, copy_metadata 2 | 3 | datas = collect_data_files("pmr2.wfctrl") 4 | datas.extend(copy_metadata("pmr2.wfctrl")) 5 | -------------------------------------------------------------------------------- /res/pyinstaller/hooks/hook-scipy.special.py: -------------------------------------------------------------------------------- 1 | from PyInstaller.utils.hooks import check_requirement 2 | 3 | if check_requirement("scipy >= 1.13.0"): 4 | hiddenimports = ['scipy.special._cdflib'] 5 | -------------------------------------------------------------------------------- /res/win/MAP-Client.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/res/win/MAP-Client.ico -------------------------------------------------------------------------------- /res/win/Plugins/x86-unicode/EnVar.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/res/win/Plugins/x86-unicode/EnVar.dll -------------------------------------------------------------------------------- /res/win/create_installer.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | import os 3 | import sys 4 | import subprocess 5 | import tempfile 6 | 7 | 8 | class ReplaceOnlyDict(dict): 9 | 10 | def __missing__(self, key): 11 | return '{' + key + '}' 12 | 13 | 14 | def run_build(pyi_config, spec_file, **kwargs): 15 | import PyInstaller.building.build_main 16 | PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs) 17 | 18 | 19 | def run_command(cmd): 20 | p = subprocess.Popen(cmd, stdout=subprocess.PIPE, universal_newlines=True) 21 | for stdout_line in iter(p.stdout.readline, ''): 22 | yield stdout_line 23 | 24 | return_code = p.wait() 25 | yield 'command returned with value: %s' % return_code 26 | 27 | 28 | def run_makensis(repo_root_dir, app_version, variant): 29 | if not os.path.exists(os.path.join(repo_root_dir, 'package')): 30 | os.mkdir(os.path.join(repo_root_dir, 'package')) 31 | 32 | nsis_exe = os.path.join(os.environ['PROGRAMFILES(X86)'], 'NSIS', 'BIN', 'makensis.exe') 33 | if os.path.exists(nsis_exe): 34 | # Create NSIS script from template 35 | with tempfile.NamedTemporaryFile(delete=False) as outputfile: 36 | with open(os.path.join(repo_root_dir, 'res', 'win', 'nsis.nsi.template')) as f: 37 | contents = f.read() 38 | 39 | match_keys = ReplaceOnlyDict(map_client_version=app_version, 40 | app_variant=variant, 41 | dist_dir=os.path.join(repo_root_dir, 'res', 'pyinstaller', 'dist', 'MAP-Client' + variant), 42 | win_res_dir=os.path.join(repo_root_dir, 'res', 'win'), 43 | package_dir=os.path.join(repo_root_dir, 'package')) 44 | formatted_contents = contents.format_map(match_keys) 45 | outputfile.write(formatted_contents.encode()) 46 | outputfile.flush() 47 | # os.chdir(os.path.join(repo_root_dir, 'res', 'win')) 48 | for line in run_command([nsis_exe, outputfile.name]): 49 | print(line.strip()) 50 | 51 | if os.path.isfile(outputfile.name): 52 | os.remove(outputfile.name) 53 | 54 | 55 | if __name__ == '__main__': 56 | ''' 57 | Create a Windows application installer with NSIS and pyinstaller. 58 | ''' 59 | parser = argparse.ArgumentParser(prog="create_installer") 60 | parser.add_argument("version", help="MAP Client version") 61 | parser.add_argument("variant", default='', nargs='?', help="MAP Client variant") 62 | args = parser.parse_args() 63 | 64 | here = os.path.realpath(os.path.dirname(__file__)) 65 | 66 | root_dir = os.path.realpath(os.path.join(here, '..', '..')) 67 | 68 | src_dir = os.path.join(root_dir, 'src') 69 | sys.path.append(src_dir) 70 | 71 | app_variant = '' 72 | if args.variant: 73 | app_variant = f"-{args.variant}" 74 | run_makensis(root_dir, args.version, app_variant) 75 | -------------------------------------------------------------------------------- /res/win/header.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/res/win/header.bmp -------------------------------------------------------------------------------- /res/win/hooks/hook-opencmiss.iron.py: -------------------------------------------------------------------------------- 1 | #----------------------------------------------------------------------------- 2 | # Copyright (c) 2013-2017, PyInstaller Development Team. 3 | # 4 | # Distributed under the terms of the GNU General Public License with exception 5 | # for distributing bootloader. 6 | # 7 | # The full license is in the file COPYING.txt, distributed with this software. 8 | #----------------------------------------------------------------------------- 9 | # If numpy is built with MKL support it depends on a set of libraries loaded 10 | # at runtime. Since PyInstaller's static analysis can't find them they must be 11 | # included manually. 12 | # 13 | # See 14 | # https://github.com/pyinstaller/pyinstaller/issues/1881 15 | # https://github.com/pyinstaller/pyinstaller/issues/1969 16 | # for more information 17 | import os 18 | import os.path 19 | import re 20 | from PyInstaller.utils.hooks import get_package_paths 21 | from PyInstaller import log as logging 22 | from PyInstaller import compat 23 | from setuputils import which 24 | import opencmiss.iron 25 | 26 | binaries = [] 27 | 28 | # print('========================IRON==========================') 29 | binaries = [] 30 | 31 | iron_dlls = [] 32 | iron_dll = which('iron.dll') 33 | iron_dlls += iron_dll 34 | iron_c_dll = which('iron_c.dll') 35 | iron_dlls += iron_c_dll 36 | 37 | additional_dlls = [] 38 | msmpi_dll = which('msmpi.dll') 39 | additional_dlls += msmpi_dll 40 | 41 | 42 | binaries += [(dll, '') for dll in iron_dlls] 43 | binaries += [(dll, '') for dll in additional_dlls] 44 | -------------------------------------------------------------------------------- /res/win/welcome.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/res/win/welcome.bmp -------------------------------------------------------------------------------- /src/MANIFEST.in: -------------------------------------------------------------------------------- 1 | include *.rst 2 | include mapclient/tools/pluginwizard/qt/images/default.png mapclient/tools/pluginwizard/qt/images/utility.png mapclient/tools/pluginwizard/qt/images/data-sink.png mapclient/tools/pluginwizard/qt/images/model-viewer.png mapclient/tools/pluginwizard/qt/images/segmentation.png mapclient/tools/pluginwizard/qt/images/fitting.png mapclient/tools/pluginwizard/qt/images/image-processing.png mapclient/tools/pluginwizard/qt/images/morphometric.png mapclient/tools/pluginwizard/qt/images/default.png mapclient/tools/pluginwizard/qt/images/registration.png mapclient/tools/pluginwizard/qt/images/data-source.png 3 | -------------------------------------------------------------------------------- /src/NOTICE: -------------------------------------------------------------------------------- 1 | This file is part of MAP Client. 2 | 3 | MAP Client is free software: you can redistribute it and/or modify 4 | it under the terms of the GNU General Public License as published by 5 | the Free Software Foundation, either version 3 of the License, or 6 | (at your option) any later version. 7 | 8 | MAP Client is distributed in the hope that it will be useful, 9 | but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | GNU General Public License for more details. 12 | 13 | You should have received a copy of the GNU General Public License 14 | along with MAP Client. If not, see . 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/README.rst: -------------------------------------------------------------------------------- 1 | ========== 2 | MAP Client 3 | ========== 4 | 5 | MAP Client is an application for running workflows built from MAP Client plugins. 6 | Documentation for installing and using MAP Client and MAP Client plugins can be found `here `__. 7 | 8 | -------------------------------------------------------------------------------- /src/mapclient/__init__.py: -------------------------------------------------------------------------------- 1 | from .settings.version import __version__ 2 | 3 | version = __version__ 4 | -------------------------------------------------------------------------------- /src/mapclient/core/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | MAP Client, a program to generate detailed musculoskeletal models for OpenSim. 3 | Copyright (C) 2012 University of Auckland 4 | 5 | This file is part of MAP Client. (http://launchpad.net/mapclient) 6 | 7 | MAP Client is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | MAP Client is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with MAP Client. If not, see .. 19 | """ 20 | -------------------------------------------------------------------------------- /src/mapclient/core/annotations.py: -------------------------------------------------------------------------------- 1 | ANNOTATION_BASE = 'http://physiomeproject.org/workflow/1.0/rdf-schema#' 2 | 3 | PORT_ANNOTATION = f'{ANNOTATION_BASE}port' 4 | 5 | PROVIDES_ANNOTATION = f'{ANNOTATION_BASE}provides' 6 | PROVIDES_LIST_OF_ANNOTATION = f'{ANNOTATION_BASE}provides-list-of' 7 | PROVIDES_ANNOTATIONS = [PROVIDES_ANNOTATION, PROVIDES_LIST_OF_ANNOTATION] 8 | 9 | USES_ANNOTATION = f'{ANNOTATION_BASE}uses' 10 | USES_LIST_OF_ANNOTATION = f'{ANNOTATION_BASE}uses-list-of' 11 | USES_ANNOTATIONS = [USES_ANNOTATION, USES_LIST_OF_ANNOTATION] 12 | -------------------------------------------------------------------------------- /src/mapclient/core/exitcodes.py: -------------------------------------------------------------------------------- 1 | 2 | APP_SUCCESS = 0 3 | INVALID_WORKFLOW_LOCATION_GIVEN = 3 4 | HEADLESS_MODE_WITH_NO_WORKFLOW = 5 5 | CONFIGURATION_MODE_WITH_NO_DEFINITIONS = 6 6 | CONFIGURATION_MODE_NO_FILE = 7 7 | LOG_FILE_LOCK_FAILED = 8 8 | USER_SPECIFIED_DIRECTORY = 9 9 | PID_FILE_LOCK_FAILED = 10 10 | CONFIGURATION_MODE_NOT_IMPLEMENTED = 11 11 | -------------------------------------------------------------------------------- /src/mapclient/core/importexport.py: -------------------------------------------------------------------------------- 1 | import os 2 | from tempfile import TemporaryDirectory 3 | from zipfile import is_zipfile, ZipFile 4 | 5 | from PySide6 import QtCore 6 | 7 | from mapclient.settings.info import DEFAULT_WORKFLOW_PROJECT_FILENAME 8 | 9 | 10 | def import_settings(source_location): 11 | """ 12 | Get the project information from the source location whether it is a 13 | Zip file or directory. 14 | 15 | :param source_location: A Zip file or directory. 16 | :return: A QtCore.QSettings object. 17 | """ 18 | if is_zipfile(source_location): 19 | # Get project information for the imported workflow. 20 | with ZipFile(source_location) as archive: 21 | with TemporaryDirectory() as temp_dir: 22 | archive.extract(DEFAULT_WORKFLOW_PROJECT_FILENAME, temp_dir) 23 | import_proj = QtCore.QSettings(os.path.join(temp_dir, DEFAULT_WORKFLOW_PROJECT_FILENAME), QtCore.QSettings.Format.IniFormat) 24 | else: 25 | import_proj = QtCore.QSettings(source_location, QtCore.QSettings.Format.IniFormat) 26 | 27 | return import_proj 28 | -------------------------------------------------------------------------------- /src/mapclient/core/managers/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/core/managers/__init__.py -------------------------------------------------------------------------------- /src/mapclient/core/managers/packagemanager.py: -------------------------------------------------------------------------------- 1 | import sys 2 | 3 | 4 | """ 5 | Class for managing external packages. 6 | 7 | Adding package directories to the Python search path. 8 | """ 9 | class PackageManager(object): 10 | 11 | def __init__(self): 12 | self._directories = [] 13 | self._modified = False 14 | 15 | def directories(self): 16 | return self._directories 17 | 18 | def set_directories(self, directories): 19 | if self._directories != directories: 20 | self._modified = True 21 | self._directories = directories 22 | 23 | def is_modified(self): 24 | return self._modified 25 | 26 | def load(self): 27 | modified = False 28 | for directory in self._directories: 29 | if directory not in sys.path: 30 | sys.path.append(directory) 31 | modified = True 32 | 33 | self._modified = False 34 | return modified 35 | 36 | def read_settings(self, settings): 37 | self._directories = [] 38 | settings.beginGroup('Packages') 39 | directory_count = settings.beginReadArray('directories') 40 | for i in range(directory_count): 41 | settings.setArrayIndex(i) 42 | self._directories.append(settings.value('directory')) 43 | settings.endArray() 44 | settings.endGroup() 45 | 46 | def write_settings(self, settings): 47 | settings.beginGroup('Packages') 48 | settings.beginWriteArray('directories') 49 | directory_index = 0 50 | for directory in self._directories: 51 | settings.setArrayIndex(directory_index) 52 | settings.setValue('directory', directory) 53 | directory_index += 1 54 | settings.endArray() 55 | settings.endGroup() 56 | -------------------------------------------------------------------------------- /src/mapclient/core/managers/undomanager.py: -------------------------------------------------------------------------------- 1 | """ 2 | MAP Client, a program to generate detailed musculoskeletal models for OpenSim. 3 | Copyright (C) 2012 University of Auckland 4 | 5 | This file is part of MAP Client. (http://launchpad.net/mapclient) 6 | 7 | MAP Client is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | MAP Client is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with MAP Client. If not, see .. 19 | """ 20 | 21 | 22 | class UndoManager(object): 23 | """ 24 | This class is the undo redo manager for multiple undo stacks. It is a 25 | singleton class. 26 | 27 | Don't inherit from this class. 28 | """ 29 | _instance = None 30 | _stack = None 31 | 32 | def __new__(cls, *args, **kwargs): 33 | if not cls._instance: 34 | cls._instance = super(UndoManager, cls).__new__( 35 | cls, *args, **kwargs) 36 | return cls._instance 37 | 38 | def setCurrentStack(self, stack): 39 | self._stack = stack 40 | 41 | def currentStack(self): 42 | return self._stack 43 | 44 | def undo(self): 45 | self._stack.undo() 46 | 47 | def redo(self): 48 | self._stack.redo() 49 | 50 | -------------------------------------------------------------------------------- /src/mapclient/core/workflow/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/core/workflow/__init__.py -------------------------------------------------------------------------------- /src/mapclient/core/workflow/workflowerror.py: -------------------------------------------------------------------------------- 1 | """ 2 | MAP Client, a program to generate detailed musculoskeletal models for OpenSim. 3 | Copyright (C) 2012 University of Auckland 4 | 5 | This file is part of MAP Client. (http://launchpad.net/mapclient) 6 | 7 | MAP Client is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | MAP Client is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with MAP Client. If not, see .. 19 | """ 20 | 21 | 22 | class WorkflowError(Exception): 23 | pass 24 | 25 | -------------------------------------------------------------------------------- /src/mapclient/core/workflow/workflowrdf.py: -------------------------------------------------------------------------------- 1 | """ 2 | MAP Client, a program to generate detailed musculoskeletal models for OpenSim. 3 | Copyright (C) 2012 University of Auckland 4 | 5 | This file is part of MAP Client. (http://launchpad.net/mapclient) 6 | 7 | MAP Client is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | MAP Client is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with MAP Client. If not, see .. 19 | """ 20 | from rdflib.term import URIRef 21 | from rdflib.graph import Graph 22 | from rdflib.namespace import RDFS 23 | 24 | from mapclient.settings.info import DEFAULT_WORKFLOW_PROJECT_FILENAME 25 | 26 | 27 | def serializeWorkflowAnnotation(): 28 | g = Graph() 29 | 30 | workflow = URIRef(DEFAULT_WORKFLOW_PROJECT_FILENAME) 31 | 32 | # g.add((workflow, RDF.type, URIRef("http://physiomeproject.org/workflow/1.0/rdf-schema#workflowproject"))) 33 | g.add((workflow, RDFS.subClassOf, URIRef("http://physiomeproject.org/workflow/1.0/rdf-schema#workflowproject"))) 34 | 35 | return g.serialize(format='xml') 36 | -------------------------------------------------------------------------------- /src/mapclient/core/workflow/workflowsteps.py: -------------------------------------------------------------------------------- 1 | """ 2 | Created on Aug 18, 2015 3 | 4 | @author: hsorby 5 | """ 6 | from PySide6 import QtCore, QtGui 7 | 8 | from mapclient.mountpoints.workflowstep import WorkflowStepMountPoint 9 | 10 | 11 | def addStep(model, step): 12 | category = step.getCategory() 13 | items = model.findItems(category) 14 | 15 | if not items: 16 | rootItem = model.invisibleRootItem() 17 | parentItem = QtGui.QStandardItem() 18 | parentItem.setText(category) 19 | font = parentItem.font() 20 | font.setPointSize(12) 21 | font.setWeight(QtGui.QFont.Bold) 22 | parentItem.setFont(font) 23 | rootItem.appendRow(parentItem) 24 | else: 25 | parentItem = items[0] 26 | 27 | item = QtGui.QStandardItem() 28 | item.setData(step) 29 | icon = step.getIcon() 30 | if icon: 31 | item.setIcon(QtGui.QIcon(QtGui.QPixmap.fromImage(icon))) 32 | else: 33 | item.setIcon(QtGui.QIcon(QtGui.QPixmap.fromImage(QtGui.QImage(':/workflow/images/default_step_icon.png')))) 34 | 35 | item.setData(step.getName(), QtCore.Qt.DisplayRole) 36 | parentItem.appendRow(item) 37 | 38 | 39 | class WorkflowStepsFilter(QtCore.QSortFilterProxyModel): 40 | 41 | def __init__(self, parent=None): 42 | super(WorkflowStepsFilter, self).__init__(parent) 43 | 44 | def filterAcceptsRow(self, source_row, source_parent): 45 | status = super(WorkflowStepsFilter, self).filterAcceptsRow(source_row, source_parent) 46 | if source_parent.isValid() and status: 47 | return True 48 | elif not source_parent.isValid(): 49 | index = self.sourceModel().index(source_row, 0, source_parent) 50 | row = 0 51 | index_child = self.sourceModel().index(row, 0, index) 52 | while index_child.isValid(): 53 | if super(WorkflowStepsFilter, self).filterAcceptsRow(row, index_child): 54 | return True 55 | # At this point the filter always accepts the the filter for the given row 56 | # So this code is never used. Which to me seems a little odd, however it results 57 | # in an effect that is satisfactory. 58 | row += 1 59 | index_child = index_child.sibling(row, 0) 60 | 61 | return status 62 | 63 | 64 | class WorkflowSteps(QtGui.QStandardItemModel): 65 | 66 | def __init__(self, manager, parent=None): 67 | super(WorkflowSteps, self).__init__(parent) 68 | self._manager = manager 69 | 70 | def reload(self): 71 | self.clear() 72 | self.setColumnCount(1) 73 | for step in WorkflowStepMountPoint.getPlugins(''): 74 | addStep(self, step) 75 | -------------------------------------------------------------------------------- /src/mapclient/core/workflow/workflowutils.py: -------------------------------------------------------------------------------- 1 | from PySide6 import QtCore 2 | 3 | 4 | def convert_to_parameterised_position(bounding_rect, raw_position, offset): 5 | return QtCore.QPointF(raw_position.x() / (bounding_rect.width() - offset.x()), raw_position.y() / (bounding_rect.height() - offset.y())) 6 | 7 | 8 | def revert_parameterised_position(bounding_rect, parameterised_position, offset): 9 | return QtCore.QPointF((bounding_rect.width() - offset.x()) * parameterised_position.x(), (bounding_rect.height() - offset.y()) * parameterised_position.y()) 10 | -------------------------------------------------------------------------------- /src/mapclient/exceptions.py: -------------------------------------------------------------------------------- 1 | 2 | """ 3 | MAP Client, a program to generate detailed musculoskeletal models for OpenSim. 4 | Copyright (C) 2012 University of Auckland 5 | 6 | This file is part of MAP Client. (http://launchpad.net/mapclient) 7 | 8 | MAP Client is free software: you can redistribute it and/or modify 9 | it under the terms of the GNU General Public License as published by 10 | the Free Software Foundation, either version 3 of the License, or 11 | (at your option) any later version. 12 | 13 | MAP Client is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | GNU General Public License for more details. 17 | 18 | You should have received a copy of the GNU General Public License 19 | along with MAP Client. If not, see .. 20 | """ 21 | class ClientRuntimeError(RuntimeError): 22 | """ 23 | Generic error for indicating errors that should be notified to the 24 | user running the client. 25 | """ 26 | 27 | def __init__(self, title='Error', description=''): 28 | super(ClientRuntimeError, self).__init__(description) 29 | self.title = title 30 | self.description = description 31 | 32 | def __str__(self): 33 | return '%s: %s' % (self.title, self.description) 34 | -------------------------------------------------------------------------------- /src/mapclient/mountpoints/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | MAP Client, a program to generate detailed musculoskeletal models for OpenSim. 3 | Copyright (C) 2012 University of Auckland 4 | 5 | This file is part of MAP Client. (http://launchpad.net/mapclient) 6 | 7 | MAP Client is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | MAP Client is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with MAP Client. If not, see .. 19 | """ 20 | -------------------------------------------------------------------------------- /src/mapclient/mountpoints/menuoption.py: -------------------------------------------------------------------------------- 1 | 2 | """ 3 | MAP Client, a program to generate detailed musculoskeletal models for OpenSim. 4 | Copyright (C) 2012 University of Auckland 5 | 6 | This file is part of MAP Client. (http://launchpad.net/mapclient) 7 | 8 | MAP Client is free software: you can redistribute it and/or modify 9 | it under the terms of the GNU General Public License as published by 10 | the Free Software Foundation, either version 3 of the License, or 11 | (at your option) any later version. 12 | 13 | MAP Client is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | GNU General Public License for more details. 17 | 18 | You should have received a copy of the GNU General Public License 19 | along with MAP Client. If not, see .. 20 | """ 21 | from PySide6.QtCore import QObject 22 | 23 | from mapclient.core.pluginframework import MetaQObjectPluginMountPoint 24 | 25 | """ 26 | Plugins can inherit this mount point in order to add to the menu of the GUI. 27 | 28 | A plugin that registers this mount point must have attributes 29 | * parent 30 | * menuLabel 31 | * menuName 32 | * actionLabel 33 | 34 | A plugin that registers this mount point could have attributes 35 | * subMenuLabel 36 | * subMenuName 37 | * shortcut 38 | * statustip 39 | 40 | It must implement 41 | * def execute(self): 42 | 43 | And it must call 44 | * QObject.__init__(self) 45 | in it's __init__ function 46 | """ 47 | MenuOptionMountPoint = MetaQObjectPluginMountPoint('MenuOptionMountPoint', (QObject,), {'subMenuLabel': None, 'subMenuName': None, 'shortcut': None, 'statustip': ''}) 48 | 49 | -------------------------------------------------------------------------------- /src/mapclient/mountpoints/stackedwidget.py: -------------------------------------------------------------------------------- 1 | """ 2 | MAP Client, a program to generate detailed musculoskeletal models for OpenSim. 3 | Copyright (C) 2012 University of Auckland 4 | 5 | This file is part of MAP Client. (http://launchpad.net/mapclient) 6 | 7 | MAP Client is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | MAP Client is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with MAP Client. If not, see .. 19 | """ 20 | 21 | from mapclient.core.pluginframework import MetaPluginMountPoint 22 | """ 23 | Plugins can inherit this mount point to extend 24 | 25 | A plugin that registers this mount point must have attributes 26 | * name 27 | 28 | A plugin that registers this mount point could have attributes 29 | * None 30 | 31 | It must implement 32 | * setWidgetIndex 33 | 34 | """ 35 | StackedWidgetMountPoint = MetaPluginMountPoint('StackedWidgetMountPoint', (object,), {}) 36 | 37 | -------------------------------------------------------------------------------- /src/mapclient/settings/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | MAP Client, a program to generate detailed musculoskeletal models for OpenSim. 3 | Copyright (C) 2012 University of Auckland 4 | 5 | This file is part of MAP Client. (http://launchpad.net/mapclient) 6 | 7 | MAP Client is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | MAP Client is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with MAP Client. If not, see .. 19 | """ 20 | -------------------------------------------------------------------------------- /src/mapclient/settings/info.py: -------------------------------------------------------------------------------- 1 | """ 2 | MAP Client, a program to generate detailed musculoskeletal models for OpenSim. 3 | Copyright (C) 2012 University of Auckland 4 | 5 | This file is part of MAP Client. (http://launchpad.net/mapclient) 6 | 7 | MAP Client is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | MAP Client is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with MAP Client. If not, see .. 19 | """ 20 | from PySide6 import QtCore 21 | 22 | from mapclient.settings import version 23 | 24 | 25 | VERSION_STRING = version.__version__ 26 | 27 | GPL_VERSION = '3' 28 | 29 | APPLICATION_NAME = 'MAPClient' 30 | ORGANISATION_NAME = 'MusculoSkeletal' 31 | ORGANISATION_DOMAIN = 'musculoskeletal.org' 32 | APPLICATION_ENVIRONMENT_CONFIG_DIR_VARIABLE = 'MAP_CLIENT_USE_CONFIG_DIR' 33 | 34 | # Contributors list 35 | HS = {'name': 'Hugh Sorby', 'email': 'h.sorby@auckland.ac.nz'} 36 | TY = {'name': 'Tommy Yu', 'email': 'tommy.yu@auckland.ac.nz'} 37 | JT = {'name': 'Justin Treadwell', 'email': 'justintreadwell@gmail.com'} 38 | JR = {'name': 'Jonathan Ritchie', 'email': 'jrit927@aucklanduni.ac.nz'} 39 | 40 | CREDITS = { 41 | 'programming': [HS, TY, JR], 42 | 'artwork': [JT], 43 | 'documentation': [HS, JR] 44 | } 45 | 46 | ABOUT = { 47 | 'name': APPLICATION_NAME, 48 | 'version': VERSION_STRING, 49 | 'license': 'GNU GPL v.' + GPL_VERSION, 50 | 'description': 'Create and manage detailed musculoskeletal models for OpenSim.' 51 | } 52 | 53 | # Application 54 | _BASE_WORKFLOW_FILENAME = 'map-client-workflow' 55 | DEFAULT_WORKFLOW_PROJECT_FILENAME = f'{_BASE_WORKFLOW_FILENAME}.proj' 56 | DEFAULT_WORKFLOW_ANNOTATION_FILENAME = f'.{_BASE_WORKFLOW_FILENAME}.rdf' 57 | DEFAULT_WORKFLOW_REQUIREMENTS_FILENAME = f'.{_BASE_WORKFLOW_FILENAME}.req' 58 | DEFAULT_WORKFLOW_PROJECT_IDENTIFIER = _BASE_WORKFLOW_FILENAME 59 | 60 | 61 | def set_applications_settings(app): 62 | 63 | app.setOrganizationDomain(ORGANISATION_DOMAIN) 64 | app.setOrganizationName(ORGANISATION_NAME) 65 | app.setApplicationName(APPLICATION_NAME) 66 | app.setApplicationVersion(ABOUT['version']) 67 | QtCore.QSettings.setDefaultFormat(QtCore.QSettings.Format.IniFormat) 68 | -------------------------------------------------------------------------------- /src/mapclient/settings/version.py: -------------------------------------------------------------------------------- 1 | __version__ = '0.24.0' 2 | -------------------------------------------------------------------------------- /src/mapclient/splashscreen.py: -------------------------------------------------------------------------------- 1 | import mapclient.splash_rc 2 | 3 | from PySide6 import QtCore, QtGui, QtWidgets 4 | 5 | from mapclient.settings.version import __version__ as version 6 | 7 | 8 | class SplashScreen(QtWidgets.QSplashScreen): 9 | def __init__(self): 10 | super(SplashScreen, self).__init__() 11 | self._message = '' 12 | pixmap = QtGui.QPixmap(":/mapclient/splash.png") 13 | self.setPixmap(pixmap) 14 | # self._font = QtGui.QFont() 15 | # self._font.setPixelSize(24) 16 | self._progress_bar = QtWidgets.QProgressBar() 17 | self._progress_bar.setRange(0, 100) 18 | self._progress_bar.setGeometry(0, 0, pixmap.width() - int(6 * self.devicePixelRatioF()), 8) 19 | self._pixmap_height = pixmap.height() 20 | # self.setFont(self._font) 21 | 22 | def drawContents(self, painter): 23 | vertical_offset = int(3 * self.devicePixelRatioF()) 24 | self._progress_bar.render(painter, QtCore.QPoint(vertical_offset, self._pixmap_height - 8 - vertical_offset)) 25 | super(SplashScreen, self).drawContents(painter) 26 | font = QtGui.QFont() 27 | font.setFamily('Arial') 28 | pen = QtGui.QPen() 29 | colour = QtGui.QColor("black") 30 | colour.setRgb(44, 45, 43) 31 | pen.setColor(colour) 32 | painter.setPen(pen) 33 | font.setPointSize(24) 34 | painter.setFont(font) 35 | painter.drawText(550, 320, 120, 40, QtCore.Qt.AlignmentFlag.AlignHCenter, f"v{version}") 36 | font.setPointSize(18) 37 | painter.setFont(font) 38 | painter.drawText(8, 330, 500, 30, QtCore.Qt.AlignmentFlag.AlignLeft, self._message) 39 | 40 | def showMessage(self, message, progress=0, alignment=QtCore.Qt.AlignmentFlag.AlignLeft, color=QtCore.Qt.GlobalColor.black): 41 | self._progress_bar.setValue(progress) 42 | self._message = message 43 | super(SplashScreen, self).showMessage(' ', QtCore.Qt.AlignmentFlag.AlignLeft | QtCore.Qt.AlignmentFlag.AlignBottom) 44 | -------------------------------------------------------------------------------- /src/mapclient/tools/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | MAP Client, a program to generate detailed musculoskeletal models for OpenSim. 3 | Copyright (C) 2012 University of Auckland 4 | 5 | This file is part of MAP Client. (http://launchpad.net/mapclient) 6 | 7 | MAP Client is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | MAP Client is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with MAP Client. If not, see .. 19 | """ 20 | -------------------------------------------------------------------------------- /src/mapclient/tools/annotation/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | MAP Client, a program to generate detailed musculoskeletal models for OpenSim. 3 | Copyright (C) 2012 University of Auckland 4 | 5 | This file is part of MAP Client. (http://launchpad.net/mapclient) 6 | 7 | MAP Client is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | MAP Client is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with MAP Client. If not, see .. 19 | """ 20 | -------------------------------------------------------------------------------- /src/mapclient/tools/annotation/annotation.voc: -------------------------------------------------------------------------------- 1 | # Annotation vocabulary file for the MAP Client 2 | namespace: http://physiomeproject.org/workflow 3 | version: 1.0 4 | 5 | [terms] 6 | port 7 | provides 8 | uses 9 | images 10 | pointcloud 11 | knee 12 | description 13 | step 14 | version 15 | name 16 | -------------------------------------------------------------------------------- /src/mapclient/tools/annotation/ui/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/annotation/ui/__init__.py -------------------------------------------------------------------------------- /src/mapclient/tools/mapicon/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/mapicon/__init__.py -------------------------------------------------------------------------------- /src/mapclient/tools/mapicon/mapicondialog.py: -------------------------------------------------------------------------------- 1 | """ 2 | Created on Jun 24, 2015 3 | 4 | @author: hsorby 5 | """ 6 | from PySide6 import QtCore, QtWidgets, QtGui 7 | 8 | from mapclient.tools.mapicon.ui_mapicondialog import Ui_MAPIconDialog 9 | import os.path 10 | 11 | 12 | class MAPIconDialog(QtWidgets.QDialog): 13 | 14 | def __init__(self, location, parent=None): 15 | super(MAPIconDialog, self).__init__(parent) 16 | self._ui = Ui_MAPIconDialog() 17 | self._ui.setupUi(self) 18 | 19 | self._location = location 20 | 21 | self._makeConnections() 22 | 23 | def createIcon(self): 24 | if self._ui.lineEditCombinedIcon.text(): 25 | self._ui.labelIconPicture.pixmap().save(self._ui.lineEditCombinedIcon.text()) 26 | 27 | def _constructImage(self, icon, background): 28 | icon_image = QtGui.QImage(icon) 29 | background_image = QtGui.QImage(background) 30 | painter = QtGui.QPainter(background_image) 31 | 32 | painter.drawImage(QtCore.QPoint(0, 0), icon_image) 33 | painter.end() 34 | 35 | return background_image 36 | 37 | def _displayIcon(self): 38 | icon_files = self._getIconFiles() 39 | if all(icon_files): 40 | image = self._constructImage(icon_files[0], icon_files[1]) 41 | self._ui.labelIconPicture.setPixmap(QtGui.QPixmap.fromImage(image).scaled(64, 64, QtCore.Qt.KeepAspectRatio, QtCore.Qt.FastTransformation)) 42 | 43 | def _getIconFiles(self): 44 | return [self._ui.lineEditStepIcon.text(), 45 | self._ui.lineEditBackgroundIcon.text()] 46 | 47 | def _makeConnections(self): 48 | self._ui.pushButtonStepIcon.clicked.connect(self._fileChooser) 49 | self._ui.pushButtonBackgroundIcon.clicked.connect(self._fileChooser) 50 | self._ui.pushButtonCombinedIcon.clicked.connect(self._fileChooser) 51 | 52 | self._ui.lineEditStepIcon.textChanged.connect(self._displayIcon) 53 | self._ui.lineEditBackgroundIcon.textChanged.connect(self._displayIcon) 54 | 55 | def _fileChooser(self): 56 | sender = self.sender() 57 | if sender == self._ui.pushButtonCombinedIcon: 58 | icon, _ = QtWidgets.QFileDialog.getSaveFileName(self, caption='Choose Icon File', dir=self._location) 59 | else: 60 | icon, _ = QtWidgets.QFileDialog.getOpenFileName(self, caption='Choose Icon File', dir=self._location, options=QtGui.QFileDialog.ReadOnly) 61 | 62 | if len(icon) > 0: 63 | self._location = os.path.dirname(icon) 64 | if sender == self._ui.pushButtonStepIcon: 65 | self._ui.lineEditStepIcon.setText(icon) 66 | elif sender == self._ui.pushButtonBackgroundIcon: 67 | self._ui.lineEditBackgroundIcon.setText(icon) 68 | elif sender == self._ui.pushButtonCombinedIcon: 69 | self._ui.lineEditCombinedIcon.setText(icon) 70 | -------------------------------------------------------------------------------- /src/mapclient/tools/mapicon/ui/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/mapicon/ui/__init__.py -------------------------------------------------------------------------------- /src/mapclient/tools/osxapp/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/osxapp/__init__.py -------------------------------------------------------------------------------- /src/mapclient/tools/osxapp/mapclient.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/osxapp/mapclient.icns -------------------------------------------------------------------------------- /src/mapclient/tools/pluginfinder/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/pluginfinder/__init__.py -------------------------------------------------------------------------------- /src/mapclient/tools/pluginfinder/qt/pluginfinderdialog.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | PluginFinderDialog 4 | 5 | 6 | 7 | 0 8 | 0 9 | 900 10 | 550 11 | 12 | 13 | 14 | Plugin Finder Tool 15 | 16 | 17 | 18 | 19 | 20 | Qt::Horizontal 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | Filter 31 | 32 | 33 | 34 | 35 | 36 | 37 | QAbstractItemView::NoEditTriggers 38 | 39 | 40 | true 41 | 42 | 43 | QAbstractItemView::NoSelection 44 | 45 | 46 | 47 | 64 48 | 64 49 | 50 | 51 | 52 | 0 53 | 54 | 55 | false 56 | 57 | 58 | false 59 | 60 | 61 | true 62 | 63 | 64 | false 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | PluginTreeView 80 | QTreeView 81 |
    mapclient.tools.pluginfinder.plugindata.h
    82 |
    83 |
    84 | 85 | 86 |
    87 | -------------------------------------------------------------------------------- /src/mapclient/tools/pluginfinder/ui/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/pluginfinder/ui/__init__.py -------------------------------------------------------------------------------- /src/mapclient/tools/pluginwizard/__init__.py: -------------------------------------------------------------------------------- 1 | 2 | import mapclient.tools.pluginwizard.ui.resources_rc 3 | -------------------------------------------------------------------------------- /src/mapclient/tools/pluginwizard/qt/config.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Config 4 | 5 | 6 | 7 | 0 8 | 0 9 | 400 10 | 300 11 | 12 | 13 | 14 | Form 15 | 16 | 17 | 18 | 19 | 20 | Add 21 | 22 | 23 | 24 | 25 | 26 | 27 | QAbstractItemView::MultiSelection 28 | 29 | 30 | QAbstractItemView::SelectRows 31 | 32 | 33 | 34 | Label 35 | 36 | 37 | 38 | 39 | Default Value 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | Remove 48 | 49 | 50 | 51 | 52 | 53 | 54 | Define 'Identifier' configuration value 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /src/mapclient/tools/pluginwizard/qt/emptyconfig.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Dialog 4 | 5 | 6 | 7 | 0 8 | 0 9 | 418 10 | 303 11 | 12 | 13 | 14 | ConfigureDialog 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | TextLabel 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | Qt::Horizontal 40 | 41 | 42 | QDialogButtonBox::Cancel|QDialogButtonBox::Ok 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | buttonBox 52 | accepted() 53 | Dialog 54 | accept() 55 | 56 | 57 | 248 58 | 254 59 | 60 | 61 | 157 62 | 274 63 | 64 | 65 | 66 | 67 | buttonBox 68 | rejected() 69 | Dialog 70 | reject() 71 | 72 | 73 | 316 74 | 260 75 | 76 | 77 | 286 78 | 274 79 | 80 | 81 | 82 | 83 | 84 | -------------------------------------------------------------------------------- /src/mapclient/tools/pluginwizard/qt/images/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/pluginwizard/qt/images/background.png -------------------------------------------------------------------------------- /src/mapclient/tools/pluginwizard/qt/images/background_v1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/pluginwizard/qt/images/background_v1.png -------------------------------------------------------------------------------- /src/mapclient/tools/pluginwizard/qt/images/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/pluginwizard/qt/images/banner.png -------------------------------------------------------------------------------- /src/mapclient/tools/pluginwizard/qt/images/banner_v1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/pluginwizard/qt/images/banner_v1.png -------------------------------------------------------------------------------- /src/mapclient/tools/pluginwizard/qt/images/banner_v2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/pluginwizard/qt/images/banner_v2.png -------------------------------------------------------------------------------- /src/mapclient/tools/pluginwizard/qt/images/banner_v4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/pluginwizard/qt/images/banner_v4.png -------------------------------------------------------------------------------- /src/mapclient/tools/pluginwizard/qt/images/cross.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/pluginwizard/qt/images/cross.png -------------------------------------------------------------------------------- /src/mapclient/tools/pluginwizard/qt/images/data-sink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/pluginwizard/qt/images/data-sink.png -------------------------------------------------------------------------------- /src/mapclient/tools/pluginwizard/qt/images/data-source.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/pluginwizard/qt/images/data-source.png -------------------------------------------------------------------------------- /src/mapclient/tools/pluginwizard/qt/images/default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/pluginwizard/qt/images/default.png -------------------------------------------------------------------------------- /src/mapclient/tools/pluginwizard/qt/images/fitting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/pluginwizard/qt/images/fitting.png -------------------------------------------------------------------------------- /src/mapclient/tools/pluginwizard/qt/images/icon-background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/pluginwizard/qt/images/icon-background.png -------------------------------------------------------------------------------- /src/mapclient/tools/pluginwizard/qt/images/image-processing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/pluginwizard/qt/images/image-processing.png -------------------------------------------------------------------------------- /src/mapclient/tools/pluginwizard/qt/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/pluginwizard/qt/images/logo.png -------------------------------------------------------------------------------- /src/mapclient/tools/pluginwizard/qt/images/logo_v1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/pluginwizard/qt/images/logo_v1.png -------------------------------------------------------------------------------- /src/mapclient/tools/pluginwizard/qt/images/logo_v2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/pluginwizard/qt/images/logo_v2.png -------------------------------------------------------------------------------- /src/mapclient/tools/pluginwizard/qt/images/model-viewer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/pluginwizard/qt/images/model-viewer.png -------------------------------------------------------------------------------- /src/mapclient/tools/pluginwizard/qt/images/morphometric.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/pluginwizard/qt/images/morphometric.png -------------------------------------------------------------------------------- /src/mapclient/tools/pluginwizard/qt/images/registration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/pluginwizard/qt/images/registration.png -------------------------------------------------------------------------------- /src/mapclient/tools/pluginwizard/qt/images/segmentation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/pluginwizard/qt/images/segmentation.png -------------------------------------------------------------------------------- /src/mapclient/tools/pluginwizard/qt/images/utility.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/pluginwizard/qt/images/utility.png -------------------------------------------------------------------------------- /src/mapclient/tools/pluginwizard/qt/images/watermark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/pluginwizard/qt/images/watermark.png -------------------------------------------------------------------------------- /src/mapclient/tools/pluginwizard/qt/images/watermark_v1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/pluginwizard/qt/images/watermark_v1.png -------------------------------------------------------------------------------- /src/mapclient/tools/pluginwizard/qt/misc.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Misc 4 | 5 | 6 | 7 | 0 8 | 0 9 | 400 10 | 300 11 | 12 | 13 | 14 | Form 15 | 16 | 17 | 18 | 19 | 20 | Author name(s): 21 | 22 | 23 | authorNameLineEdit 24 | 25 | 26 | 27 | 28 | 29 | 30 | Xxxx Yyyyy 31 | 32 | 33 | 34 | 35 | 36 | 37 | Category: 38 | 39 | 40 | categoryLineEdit 41 | 42 | 43 | 44 | 45 | 46 | 47 | General 48 | 49 | 50 | 51 | 52 | 53 | 54 | Plugin Location: 55 | 56 | 57 | pluginLocationEdit 58 | 59 | 60 | 61 | 62 | 63 | 64 | eg. https://github.com.../archive/master.zip 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /src/mapclient/tools/pluginwizard/qt/output.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Output 4 | 5 | 6 | 7 | 0 8 | 0 9 | 400 10 | 300 11 | 12 | 13 | 14 | Form 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | Output directory: 23 | 24 | 25 | 26 | 27 | 28 | 29 | directory must exist and be writable 30 | 31 | 32 | 33 | 34 | 35 | 36 | ... 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | Qt::Vertical 46 | 47 | 48 | 49 | 20 50 | 252 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /src/mapclient/tools/pluginwizard/qt/ports.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Ports 4 | 5 | 6 | 7 | 0 8 | 0 9 | 400 10 | 300 11 | 12 | 13 | 14 | Form 15 | 16 | 17 | 18 | 19 | 20 | Add 21 | 22 | 23 | 24 | 25 | 26 | 27 | QAbstractItemView::MultiSelection 28 | 29 | 30 | QAbstractItemView::SelectRows 31 | 32 | 33 | 34 | 35 | 36 | 37 | Remove 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /src/mapclient/tools/pluginwizard/qt/resources.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | images/background.png 4 | images/banner.png 5 | images/logo.png 6 | images/watermark.png 7 | images/cross.png 8 | 9 | 10 | images/icon-background.png 11 | images/default.png 12 | images/data-source.png 13 | images/fitting.png 14 | images/image-processing.png 15 | images/utility.png 16 | images/segmentation.png 17 | images/morphometric.png 18 | images/registration.png 19 | images/model-viewer.png 20 | images/data-sink.png 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/mapclient/tools/pluginwizard/ui/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/pluginwizard/ui/__init__.py -------------------------------------------------------------------------------- /src/mapclient/tools/pluginwizard/ui/ui_output.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | ################################################################################ 4 | ## Form generated from reading UI file 'output.ui' 5 | ## 6 | ## Created by: Qt User Interface Compiler version 6.7.0 7 | ## 8 | ## WARNING! All changes made in this file will be lost when recompiling UI file! 9 | ################################################################################ 10 | 11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, 12 | QMetaObject, QObject, QPoint, QRect, 13 | QSize, QTime, QUrl, Qt) 14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, 15 | QFont, QFontDatabase, QGradient, QIcon, 16 | QImage, QKeySequence, QLinearGradient, QPainter, 17 | QPalette, QPixmap, QRadialGradient, QTransform) 18 | from PySide6.QtWidgets import (QApplication, QHBoxLayout, QLabel, QLineEdit, 19 | QPushButton, QSizePolicy, QSpacerItem, QVBoxLayout, 20 | QWidget) 21 | from . import resources_rc 22 | 23 | class Ui_Output(object): 24 | def setupUi(self, Output): 25 | if not Output.objectName(): 26 | Output.setObjectName(u"Output") 27 | Output.resize(400, 300) 28 | self.verticalLayout = QVBoxLayout(Output) 29 | self.verticalLayout.setObjectName(u"verticalLayout") 30 | self.horizontalLayout = QHBoxLayout() 31 | self.horizontalLayout.setObjectName(u"horizontalLayout") 32 | self.directoryLabel = QLabel(Output) 33 | self.directoryLabel.setObjectName(u"directoryLabel") 34 | 35 | self.horizontalLayout.addWidget(self.directoryLabel) 36 | 37 | self.directoryLineEdit = QLineEdit(Output) 38 | self.directoryLineEdit.setObjectName(u"directoryLineEdit") 39 | 40 | self.horizontalLayout.addWidget(self.directoryLineEdit) 41 | 42 | self.directoryButton = QPushButton(Output) 43 | self.directoryButton.setObjectName(u"directoryButton") 44 | 45 | self.horizontalLayout.addWidget(self.directoryButton) 46 | 47 | 48 | self.verticalLayout.addLayout(self.horizontalLayout) 49 | 50 | self.verticalSpacer = QSpacerItem(20, 252, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding) 51 | 52 | self.verticalLayout.addItem(self.verticalSpacer) 53 | 54 | 55 | self.retranslateUi(Output) 56 | 57 | QMetaObject.connectSlotsByName(Output) 58 | # setupUi 59 | 60 | def retranslateUi(self, Output): 61 | Output.setWindowTitle(QCoreApplication.translate("Output", u"Form", None)) 62 | self.directoryLabel.setText(QCoreApplication.translate("Output", u"Output directory: ", None)) 63 | #if QT_CONFIG(tooltip) 64 | self.directoryLineEdit.setToolTip(QCoreApplication.translate("Output", u"directory must exist and be writable", None)) 65 | #endif // QT_CONFIG(tooltip) 66 | self.directoryButton.setText(QCoreApplication.translate("Output", u"...", None)) 67 | # retranslateUi 68 | 69 | -------------------------------------------------------------------------------- /src/mapclient/tools/pluginwizard/ui/ui_ports.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | ################################################################################ 4 | ## Form generated from reading UI file 'ports.ui' 5 | ## 6 | ## Created by: Qt User Interface Compiler version 6.7.0 7 | ## 8 | ## WARNING! All changes made in this file will be lost when recompiling UI file! 9 | ################################################################################ 10 | 11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, 12 | QMetaObject, QObject, QPoint, QRect, 13 | QSize, QTime, QUrl, Qt) 14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, 15 | QFont, QFontDatabase, QGradient, QIcon, 16 | QImage, QKeySequence, QLinearGradient, QPainter, 17 | QPalette, QPixmap, QRadialGradient, QTransform) 18 | from PySide6.QtWidgets import (QAbstractItemView, QApplication, QGridLayout, QHeaderView, 19 | QPushButton, QSizePolicy, QTableWidget, QTableWidgetItem, 20 | QWidget) 21 | 22 | class Ui_Ports(object): 23 | def setupUi(self, Ports): 24 | if not Ports.objectName(): 25 | Ports.setObjectName(u"Ports") 26 | Ports.resize(400, 300) 27 | self.gridLayout = QGridLayout(Ports) 28 | self.gridLayout.setObjectName(u"gridLayout") 29 | self.addButton = QPushButton(Ports) 30 | self.addButton.setObjectName(u"addButton") 31 | 32 | self.gridLayout.addWidget(self.addButton, 0, 1, 1, 1) 33 | 34 | self.portTableWidget = QTableWidget(Ports) 35 | self.portTableWidget.setObjectName(u"portTableWidget") 36 | self.portTableWidget.setSelectionMode(QAbstractItemView.MultiSelection) 37 | self.portTableWidget.setSelectionBehavior(QAbstractItemView.SelectRows) 38 | 39 | self.gridLayout.addWidget(self.portTableWidget, 0, 0, 3, 1) 40 | 41 | self.removeButton = QPushButton(Ports) 42 | self.removeButton.setObjectName(u"removeButton") 43 | 44 | self.gridLayout.addWidget(self.removeButton, 1, 1, 1, 1) 45 | 46 | 47 | self.retranslateUi(Ports) 48 | 49 | QMetaObject.connectSlotsByName(Ports) 50 | # setupUi 51 | 52 | def retranslateUi(self, Ports): 53 | Ports.setWindowTitle(QCoreApplication.translate("Ports", u"Form", None)) 54 | self.addButton.setText(QCoreApplication.translate("Ports", u"Add", None)) 55 | self.removeButton.setText(QCoreApplication.translate("Ports", u"Remove", None)) 56 | # retranslateUi 57 | 58 | -------------------------------------------------------------------------------- /src/mapclient/tools/pmr/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | MAP Client, a program to generate detailed musculoskeletal models for OpenSim. 3 | Copyright (C) 2012 University of Auckland 4 | 5 | This file is part of MAP Client. (http://launchpad.net/mapclient) 6 | 7 | MAP Client is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | MAP Client is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with MAP Client. If not, see .. 19 | """ 20 | import mapclient.tools.pmr.ui.resources_rc 21 | -------------------------------------------------------------------------------- /src/mapclient/tools/pmr/dialogs/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | MAP Client, a program to generate detailed musculoskeletal models for OpenSim. 3 | Copyright (C) 2012 University of Auckland 4 | 5 | This file is part of MAP Client. (http://launchpad.net/mapclient) 6 | 7 | MAP Client is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | MAP Client is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with MAP Client. If not, see .. 19 | """ 20 | -------------------------------------------------------------------------------- /src/mapclient/tools/pmr/dialogs/addhostdialog.py: -------------------------------------------------------------------------------- 1 | """ 2 | MAP Client, a program to generate detailed musculoskeletal models for OpenSim. 3 | Copyright (C) 2012 University of Auckland 4 | 5 | This file is part of MAP Client. (http://launchpad.net/mapclient) 6 | 7 | MAP Client is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | MAP Client is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with MAP Client. If not, see .. 19 | """ 20 | from PySide6 import QtWidgets 21 | 22 | from mapclient.tools.pmr.ui.ui_addhostdialog import Ui_AddHostDialog 23 | 24 | 25 | class AddHostDialog(QtWidgets.QDialog): 26 | 27 | def __init__(self, parent=None): 28 | super(AddHostDialog, self).__init__(parent) 29 | self._ui = Ui_AddHostDialog() 30 | self._ui.setupUi(self) 31 | 32 | def getHost(self): 33 | return self._ui.urlLineEdit.text() 34 | -------------------------------------------------------------------------------- /src/mapclient/tools/pmr/jsonclient/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/pmr/jsonclient/__init__.py -------------------------------------------------------------------------------- /src/mapclient/tools/pmr/oauthcheckdialog.py: -------------------------------------------------------------------------------- 1 | """ 2 | MAP Client, a program to generate detailed musculoskeletal models for OpenSim. 3 | Copyright (C) 2012 University of Auckland 4 | 5 | This file is part of MAP Client. (http://launchpad.net/mapclient) 6 | 7 | MAP Client is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | MAP Client is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with MAP Client. If not, see .. 19 | """ 20 | import logging 21 | from PySide6 import QtWidgets 22 | 23 | from mapclient.tools.pmr.ui_oauthcheckdialog import Ui_OAuthCheckDialog 24 | 25 | logger = logging.getLogger(__name__) 26 | 27 | 28 | class OAuthCheckDialog(QtWidgets.QDialog): 29 | """ 30 | Dialog that other UI elements can spawn to check for existence of 31 | token credentials and acquire one from user if it is unavailable. 32 | """ 33 | 34 | def __init__(self, parent=None): 35 | QtWidgets.QDialog.__init__(self, parent) 36 | self._ui = Ui_OAuthCheckDialog() 37 | self._ui.setupUi(self) 38 | self._makeConnections() 39 | 40 | def _makeConnections(self): 41 | self._ui.continueButton.clicked.connect(self.event_register) 42 | 43 | def token(self): 44 | return self._ui.tokenLineEdit.text() 45 | 46 | -------------------------------------------------------------------------------- /src/mapclient/tools/pmr/pmrdvcshelper.py: -------------------------------------------------------------------------------- 1 | """ 2 | MAP Client, a program to generate detailed musculoskeletal models for OpenSim. 3 | Copyright (C) 2012 University of Auckland 4 | 5 | This file is part of MAP Client. (http://launchpad.net/mapclient) 6 | 7 | MAP Client is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | MAP Client is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with MAP Client. If not, see .. 19 | """ 20 | import os 21 | 22 | from subprocess import Popen, PIPE 23 | 24 | from mapclient.core.utils import which 25 | 26 | 27 | def isHgRepository(location): 28 | return os.path.exists(os.path.join(location, '.hg')) 29 | 30 | 31 | def isGitRepository(location): 32 | return os.path.exists(os.path.join(location, '.git')) 33 | 34 | 35 | def repositoryIsUpToDate(location): 36 | result = True 37 | if isGitRepository(location): 38 | dvcs_cmd = which('git') 39 | if len(dvcs_cmd) > 0: 40 | process = Popen([dvcs_cmd[0], "status", location], stdout=PIPE, stderr=PIPE) 41 | outputs = process.communicate() 42 | stdout = outputs[0] 43 | stderr = outputs[1] 44 | if len(stdout) > 0 or len(stderr) > 0: 45 | result = False 46 | 47 | return result 48 | -------------------------------------------------------------------------------- /src/mapclient/tools/pmr/qt/addhostdialog.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | AddHostDialog 4 | 5 | 6 | 7 | 0 8 | 0 9 | 360 10 | 104 11 | 12 | 13 | 14 | Add Host 15 | 16 | 17 | 18 | 19 | 20 | PMR Web Address 21 | 22 | 23 | 24 | 25 | 26 | url: 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | Qt::Horizontal 40 | 41 | 42 | QDialogButtonBox::Cancel|QDialogButtonBox::Ok 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | buttonBox 52 | accepted() 53 | AddHostDialog 54 | accept() 55 | 56 | 57 | 248 58 | 254 59 | 60 | 61 | 157 62 | 274 63 | 64 | 65 | 66 | 67 | buttonBox 68 | rejected() 69 | AddHostDialog 70 | reject() 71 | 72 | 73 | 316 74 | 260 75 | 76 | 77 | 286 78 | 274 79 | 80 | 81 | 82 | 83 | 84 | -------------------------------------------------------------------------------- /src/mapclient/tools/pmr/qt/authoriseapplicationdialog.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | AuthoriseApplicationDialog 4 | 5 | 6 | 7 | 0 8 | 0 9 | 482 10 | 300 11 | 12 | 13 | 14 | Authorise Application 15 | 16 | 17 | 18 | 19 | 20 | Authorise Application 21 | 22 | 23 | 24 | 25 | 26 | Paste authorisation token here: 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | Qt::Vertical 37 | 38 | 39 | 40 | 20 41 | 122 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | Qt::Horizontal 53 | 54 | 55 | QDialogButtonBox::Cancel|QDialogButtonBox::Ok 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | buttonBox 65 | rejected() 66 | AuthoriseApplicationDialog 67 | reject() 68 | 69 | 70 | 336 71 | 287 72 | 73 | 74 | 286 75 | 274 76 | 77 | 78 | 79 | 80 | buttonBox 81 | accepted() 82 | AuthoriseApplicationDialog 83 | accept() 84 | 85 | 86 | 317 87 | 267 88 | 89 | 90 | 193 91 | 254 92 | 93 | 94 | 95 | 96 | 97 | -------------------------------------------------------------------------------- /src/mapclient/tools/pmr/qt/images/tick_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/pmr/qt/images/tick_blue.png -------------------------------------------------------------------------------- /src/mapclient/tools/pmr/qt/images/tick_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/pmr/qt/images/tick_green.png -------------------------------------------------------------------------------- /src/mapclient/tools/pmr/qt/images/tick_yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/pmr/qt/images/tick_yellow.png -------------------------------------------------------------------------------- /src/mapclient/tools/pmr/qt/importworkflowdialog.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | ImportWorkflowDialog 4 | 5 | 6 | 7 | 0 8 | 0 9 | 541 10 | 523 11 | 12 | 13 | 14 | Import Workflow 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | Destination: 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 2 31 | 0 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | ... 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | Qt::Horizontal 49 | 50 | 51 | QDialogButtonBox::Cancel|QDialogButtonBox::Ok 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | buttonBoxImport 61 | accepted() 62 | ImportWorkflowDialog 63 | accept() 64 | 65 | 66 | 260 67 | 376 68 | 69 | 70 | 157 71 | 274 72 | 73 | 74 | 75 | 76 | buttonBoxImport 77 | rejected() 78 | ImportWorkflowDialog 79 | reject() 80 | 81 | 82 | 328 83 | 376 84 | 85 | 86 | 286 87 | 274 88 | 89 | 90 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /src/mapclient/tools/pmr/qt/oauthcheckdialog.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | OAuthCheckDialog 4 | 5 | 6 | 7 | 0 8 | 0 9 | 400 10 | 300 11 | 12 | 13 | 14 | Access Credentials Required 15 | 16 | 17 | 18 | 19 | 20 | Authorise Application 21 | 22 | 23 | 24 | 25 | 26 | MAP Client requires your permission to access PMR. 27 | 28 | 29 | 30 | 31 | 32 | 33 | Continue 34 | 35 | 36 | true 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | Qt::Horizontal 47 | 48 | 49 | QDialogButtonBox::Cancel|QDialogButtonBox::Ok 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | buttonBox 59 | accepted() 60 | OAuthCheckDialog 61 | accept() 62 | 63 | 64 | 248 65 | 254 66 | 67 | 68 | 157 69 | 274 70 | 71 | 72 | 73 | 74 | buttonBox 75 | rejected() 76 | OAuthCheckDialog 77 | reject() 78 | 79 | 80 | 316 81 | 260 82 | 83 | 84 | 286 85 | 274 86 | 87 | 88 | 89 | 90 | 91 | -------------------------------------------------------------------------------- /src/mapclient/tools/pmr/qt/pmrdvcscommitdialog.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | PMRDVCSCommitDialog 4 | 5 | 6 | 7 | 0 8 | 0 9 | 400 10 | 300 11 | 12 | 13 | 14 | PMR Workspace Commit 15 | 16 | 17 | 18 | 19 | 20 | PMR Workspace Commit 21 | 22 | 23 | 24 | QFormLayout::AllNonFixedFieldsGrow 25 | 26 | 27 | 28 | 29 | commen&t: 30 | 31 | 32 | commentTextEdit 33 | 34 | 35 | 36 | 37 | 38 | 39 | Lazy commit message from MAP Client. 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | Qt::Horizontal 50 | 51 | 52 | QDialogButtonBox::Cancel|QDialogButtonBox::Ok|QDialogButtonBox::Save|QDialogButtonBox::SaveAll 53 | 54 | 55 | 56 | 57 | 58 | 59 | commentTextEdit 60 | buttonBox 61 | 62 | 63 | 64 | 65 | buttonBox 66 | rejected() 67 | PMRDVCSCommitDialog 68 | reject() 69 | 70 | 71 | 294 72 | 291 73 | 74 | 75 | 286 76 | 274 77 | 78 | 79 | 80 | 81 | 82 | -------------------------------------------------------------------------------- /src/mapclient/tools/pmr/qt/resources.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | images/tick_yellow.png 4 | images/tick_blue.png 5 | images/tick_green.png 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/mapclient/tools/pmr/qt/searchwidget.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | SearchWidget 4 | 5 | 6 | 7 | 0 8 | 0 9 | 466 10 | 480 11 | 12 | 13 | 14 | Search 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | Search 26 | 27 | 28 | true 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | Search results: 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | Result target: 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /src/mapclient/tools/pmr/qt/settingswidget.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | SettingsWidget 4 | 5 | 6 | 7 | 0 8 | 0 9 | 498 10 | 476 11 | 12 | 13 | 14 | Settings 15 | 16 | 17 | 18 | 19 | 20 | Host list: 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | Qt::ActionsContextMenu 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | Add 39 | 40 | 41 | 42 | 43 | 44 | 45 | Remove 46 | 47 | 48 | 49 | 50 | 51 | 52 | Qt::Vertical 53 | 54 | 55 | 56 | 20 57 | 40 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | Add Host 70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /src/mapclient/tools/pmr/settings/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | MAP Client, a program to generate detailed musculoskeletal models for OpenSim. 3 | Copyright (C) 2012 University of Auckland 4 | 5 | This file is part of MAP Client. (http://launchpad.net/mapclient) 6 | 7 | MAP Client is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | MAP Client is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with MAP Client. If not, see .. 19 | """ 20 | -------------------------------------------------------------------------------- /src/mapclient/tools/pmr/ui/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/pmr/ui/__init__.py -------------------------------------------------------------------------------- /src/mapclient/tools/pmr/ui/ui_addhostdialog.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | ################################################################################ 4 | ## Form generated from reading UI file 'addhostdialog.ui' 5 | ## 6 | ## Created by: Qt User Interface Compiler version 6.7.0 7 | ## 8 | ## WARNING! All changes made in this file will be lost when recompiling UI file! 9 | ################################################################################ 10 | 11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, 12 | QMetaObject, QObject, QPoint, QRect, 13 | QSize, QTime, QUrl, Qt) 14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, 15 | QFont, QFontDatabase, QGradient, QIcon, 16 | QImage, QKeySequence, QLinearGradient, QPainter, 17 | QPalette, QPixmap, QRadialGradient, QTransform) 18 | from PySide6.QtWidgets import (QAbstractButton, QApplication, QDialog, QDialogButtonBox, 19 | QGroupBox, QHBoxLayout, QLabel, QLineEdit, 20 | QSizePolicy, QVBoxLayout, QWidget) 21 | 22 | class Ui_AddHostDialog(object): 23 | def setupUi(self, AddHostDialog): 24 | if not AddHostDialog.objectName(): 25 | AddHostDialog.setObjectName(u"AddHostDialog") 26 | AddHostDialog.resize(360, 104) 27 | self.verticalLayout = QVBoxLayout(AddHostDialog) 28 | self.verticalLayout.setObjectName(u"verticalLayout") 29 | self.groupBox = QGroupBox(AddHostDialog) 30 | self.groupBox.setObjectName(u"groupBox") 31 | self.horizontalLayout = QHBoxLayout(self.groupBox) 32 | self.horizontalLayout.setObjectName(u"horizontalLayout") 33 | self.label = QLabel(self.groupBox) 34 | self.label.setObjectName(u"label") 35 | 36 | self.horizontalLayout.addWidget(self.label) 37 | 38 | self.urlLineEdit = QLineEdit(self.groupBox) 39 | self.urlLineEdit.setObjectName(u"urlLineEdit") 40 | 41 | self.horizontalLayout.addWidget(self.urlLineEdit) 42 | 43 | 44 | self.verticalLayout.addWidget(self.groupBox) 45 | 46 | self.buttonBox = QDialogButtonBox(AddHostDialog) 47 | self.buttonBox.setObjectName(u"buttonBox") 48 | self.buttonBox.setOrientation(Qt.Horizontal) 49 | self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel|QDialogButtonBox.Ok) 50 | 51 | self.verticalLayout.addWidget(self.buttonBox) 52 | 53 | 54 | self.retranslateUi(AddHostDialog) 55 | self.buttonBox.accepted.connect(AddHostDialog.accept) 56 | self.buttonBox.rejected.connect(AddHostDialog.reject) 57 | 58 | QMetaObject.connectSlotsByName(AddHostDialog) 59 | # setupUi 60 | 61 | def retranslateUi(self, AddHostDialog): 62 | AddHostDialog.setWindowTitle(QCoreApplication.translate("AddHostDialog", u"Add Host", None)) 63 | self.groupBox.setTitle(QCoreApplication.translate("AddHostDialog", u"PMR Web Address", None)) 64 | self.label.setText(QCoreApplication.translate("AddHostDialog", u"url: ", None)) 65 | # retranslateUi 66 | 67 | -------------------------------------------------------------------------------- /src/mapclient/tools/pmr/widgets/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | MAP Client, a program to generate detailed musculoskeletal models for OpenSim. 3 | Copyright (C) 2012 University of Auckland 4 | 5 | This file is part of MAP Client. (http://launchpad.net/mapclient) 6 | 7 | MAP Client is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | MAP Client is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with MAP Client. If not, see .. 19 | """ 20 | -------------------------------------------------------------------------------- /src/mapclient/tools/renameplugin/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/renameplugin/__init__.py -------------------------------------------------------------------------------- /src/mapclient/tools/renameplugin/ui/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/renameplugin/ui/__init__.py -------------------------------------------------------------------------------- /src/mapclient/tools/updateworkflow/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/updateworkflow/__init__.py -------------------------------------------------------------------------------- /src/mapclient/tools/updateworkflow/ui/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/tools/updateworkflow/ui/__init__.py -------------------------------------------------------------------------------- /src/mapclient/view/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | MAP Client, a program to generate detailed musculoskeletal models for OpenSim. 3 | Copyright (C) 2012 University of Auckland 4 | 5 | This file is part of MAP Client. (http://launchpad.net/mapclient) 6 | 7 | MAP Client is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | MAP Client is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with MAP Client. If not, see .. 19 | """ 20 | -------------------------------------------------------------------------------- /src/mapclient/view/dialogs/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/dialogs/__init__.py -------------------------------------------------------------------------------- /src/mapclient/view/dialogs/about/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/dialogs/about/__init__.py -------------------------------------------------------------------------------- /src/mapclient/view/dialogs/about/aboutdialog.py: -------------------------------------------------------------------------------- 1 | """ 2 | MAP Client, a program to generate detailed musculoskeletal models for OpenSim. 3 | Copyright (C) 2012 University of Auckland 4 | 5 | This file is part of MAP Client. (http://launchpad.net/mapclient) 6 | 7 | MAP Client is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | MAP Client is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with MAP Client. If not, see .. 19 | """ 20 | from PySide6 import QtCore, QtWidgets 21 | 22 | from mapclient.settings import info 23 | from mapclient.view.dialogs.about.ui.ui_aboutdialog import Ui_AboutDialog 24 | 25 | 26 | class AboutDialog(QtWidgets.QDialog): 27 | """ 28 | About dialog to display program about information. 29 | """ 30 | 31 | def __init__(self, parent=None): 32 | QtWidgets.QDialog.__init__(self, parent) 33 | self._ui = Ui_AboutDialog() 34 | self._ui.setupUi(self) 35 | text = self._ui.aboutTextLabel.text() 36 | self._ui.aboutTextLabel.setText(text.replace('##version##', info.VERSION_STRING)) 37 | self._make_connections() 38 | 39 | def _make_connections(self): 40 | self._ui.btn_Credits.clicked.connect(self._show_credits_dialog) 41 | self._ui.btn_License.clicked.connect(self._show_license_dialog) 42 | self._ui.btn_Provenance.clicked.connect(self._show_provenance_dialog) 43 | 44 | def _show_credits_dialog(self): 45 | from mapclient.view.dialogs.about.creditsdialog import CreditsDialog 46 | dlg = CreditsDialog(self) 47 | dlg.setModal(True) 48 | dlg.exec_() 49 | 50 | def _show_license_dialog(self): 51 | from mapclient.view.dialogs.about.licensedialog import LicenseDialog 52 | dlg = LicenseDialog(self) 53 | dlg.setModal(True) 54 | dlg.exec_() 55 | 56 | def _show_provenance_dialog(self): 57 | from mapclient.view.dialogs.about.provenancedialog import ProvenanceDialog 58 | 59 | QtWidgets.QApplication.setOverrideCursor(QtCore.Qt.WaitCursor) 60 | dlg = ProvenanceDialog(self) 61 | QtWidgets.QApplication.restoreOverrideCursor() 62 | 63 | dlg.setModal(True) 64 | dlg.exec_() 65 | -------------------------------------------------------------------------------- /src/mapclient/view/dialogs/about/creditsdialog.py: -------------------------------------------------------------------------------- 1 | """ 2 | MAP Client, a program to generate detailed musculoskeletal models for OpenSim. 3 | Copyright (C) 2012 University of Auckland 4 | 5 | This file is part of MAP Client. (http://launchpad.net/mapclient) 6 | 7 | MAP Client is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | MAP Client is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with MAP Client. If not, see .. 19 | """ 20 | from PySide6.QtCore import Qt 21 | from PySide6.QtWidgets import QDialog, QTabWidget, QWidget, QVBoxLayout, QLabel 22 | 23 | from mapclient.view.dialogs.about.ui.ui_creditsdialog import Ui_CreditsDialog 24 | from mapclient.settings import info 25 | 26 | 27 | class CreditsDialog(QDialog): 28 | """ 29 | Dialog to display the credits. 30 | """ 31 | 32 | def __init__(self, parent=None): 33 | QDialog.__init__(self, parent) 34 | self._ui = Ui_CreditsDialog() 35 | self._ui.setupUi(self) 36 | 37 | creditsTab = QTabWidget() 38 | creditSections = list(info.CREDITS.keys()) 39 | for creditSection in creditSections: 40 | creditTab = QWidget() 41 | creditsTab.addTab(creditTab, creditSection) 42 | vbox = QVBoxLayout(creditTab) 43 | creditList = "" 44 | for person in info.CREDITS[creditSection]: 45 | creditList += ("\n%s [%s]" % (person['name'], person['email'])) 46 | creditLabel = QLabel() 47 | creditLabel.setMargin(15) 48 | creditLabel.setStyleSheet("QLabel { background-color : white; color: black}") 49 | creditLabel.setText(creditList) 50 | creditLabel.setAlignment(Qt.AlignTop | Qt.AlignLeft) 51 | vbox.addWidget(creditLabel) 52 | 53 | vbox = QVBoxLayout() 54 | vbox.setContentsMargins(0, 0, 0, 0) 55 | vbox.addWidget(creditsTab) 56 | self._ui.frame_CreditsTab.setLayout(vbox) 57 | 58 | -------------------------------------------------------------------------------- /src/mapclient/view/dialogs/about/licensedialog.py: -------------------------------------------------------------------------------- 1 | """ 2 | MAP Client, a program to generate detailed musculoskeletal models for OpenSim. 3 | Copyright (C) 2012 University of Auckland 4 | 5 | This file is part of MAP Client. (http://launchpad.net/mapclient) 6 | 7 | MAP Client is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | MAP Client is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with MAP Client. If not, see .. 19 | """ 20 | 21 | from PySide6.QtWidgets import QDialog 22 | from mapclient.view.dialogs.about.ui.ui_licensedialog import Ui_LicenseDialog 23 | 24 | 25 | class LicenseDialog(QDialog): 26 | """ 27 | Dialog for displaying the license. 28 | """ 29 | 30 | def __init__(self, parent=None): 31 | QDialog.__init__(self, parent) 32 | self._ui = Ui_LicenseDialog() 33 | self._ui.setupUi(self) 34 | 35 | -------------------------------------------------------------------------------- /src/mapclient/view/dialogs/about/provenancedialog.py: -------------------------------------------------------------------------------- 1 | """ 2 | MAP Client, a program to generate detailed musculoskeletal models for OpenSim. 3 | Copyright (C) 2012 University of Auckland 4 | 5 | This file is part of MAP Client. (http://launchpad.net/mapclient) 6 | 7 | MAP Client is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | MAP Client is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with MAP Client. If not, see .. 19 | """ 20 | from PySide6.QtWidgets import QDialog, QTableWidgetItem 21 | 22 | from mapclient.view.dialogs.about.ui.ui_provenancedialog import Ui_ProvenanceDialog 23 | from mapclient.core.provenance import reproducibility_info 24 | 25 | 26 | class ProvenanceDialog(QDialog): 27 | """ 28 | Dialog to display the provenance information. 29 | """ 30 | 31 | def __init__(self, parent=None): 32 | QDialog.__init__(self, parent) 33 | self._ui = Ui_ProvenanceDialog() 34 | self._ui.setupUi(self) 35 | 36 | info = reproducibility_info() 37 | self._headers = ["Package", "Version", "Location"] 38 | for key in info.keys(): 39 | if key == 'mapclient': 40 | table = self._ui.tableWidgetMAPClient 41 | content = {'mapclient': info[key]} 42 | elif key == 'plugins': 43 | table = self._ui.tableWidgetPlugin 44 | content = info[key] 45 | elif key == 'packages': 46 | table = self._ui.tableWidgetPackage 47 | content = info[key] 48 | else: 49 | continue 50 | 51 | self._add_table_content(table, content) 52 | 53 | def _add_table_content(self, table, content): 54 | table.setColumnCount(len(self._headers)) 55 | table.setRowCount(len(content)) 56 | table.verticalHeader().setVisible(False) 57 | 58 | table.setHorizontalHeaderLabels(self._headers) 59 | 60 | for row, i in enumerate(content): 61 | item_1 = QTableWidgetItem(i) 62 | item_2 = QTableWidgetItem(content[i]["version"]) 63 | item_3 = QTableWidgetItem(content[i]["location"]) 64 | table.setItem(row, 0, item_1) 65 | table.setItem(row, 1, item_2) 66 | table.setItem(row, 2, item_3) 67 | 68 | table.resizeColumnsToContents() 69 | -------------------------------------------------------------------------------- /src/mapclient/view/dialogs/about/qt/creditsdialog.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | CreditsDialog 4 | 5 | 6 | 7 | 0 8 | 0 9 | 475 10 | 356 11 | 12 | 13 | 14 | MAP Client Credits 15 | 16 | 17 | 18 | 0 19 | 20 | 21 | 0 22 | 23 | 24 | 0 25 | 26 | 27 | 0 28 | 29 | 30 | 31 | 32 | 33 | 0 34 | 1 35 | 36 | 37 | 38 | QFrame::StyledPanel 39 | 40 | 41 | QFrame::Plain 42 | 43 | 44 | 45 | 46 | 47 | 48 | QFrame::StyledPanel 49 | 50 | 51 | QFrame::Raised 52 | 53 | 54 | 55 | 56 | 57 | Qt::Horizontal 58 | 59 | 60 | 61 | 40 62 | 20 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | &Close 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | btn_Close 83 | clicked() 84 | CreditsDialog 85 | close() 86 | 87 | 88 | 433 89 | 333 90 | 91 | 92 | 237 93 | 177 94 | 95 | 96 | 97 | 98 | 99 | -------------------------------------------------------------------------------- /src/mapclient/view/dialogs/about/ui/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/dialogs/about/ui/__init__.py -------------------------------------------------------------------------------- /src/mapclient/view/dialogs/checkstatus/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/dialogs/checkstatus/__init__.py -------------------------------------------------------------------------------- /src/mapclient/view/dialogs/checkstatus/checkstatusdialog.py: -------------------------------------------------------------------------------- 1 | """ 2 | Created on Jul 1, 2015 3 | 4 | @author: hsorby 5 | """ 6 | from PySide6 import QtCore, QtWidgets 7 | 8 | from mapclient.view.dialogs.checkstatus.ui.ui_checkstatusdialog import Ui_CheckStatusDialog 9 | from mapclient.core.checks import WizardToolChecks, VCSChecks 10 | from mapclient.view.utils import SyntaxHighlighter 11 | from mapclient.settings.definitions import WIZARD_TOOL_STRING, \ 12 | VIRTUAL_ENVIRONMENT_STRING, PMR_TOOL_STRING 13 | 14 | 15 | class CheckStatusDialog(QtWidgets.QDialog): 16 | 17 | def __init__(self, options, parent=None): 18 | super(CheckStatusDialog, self).__init__(parent) 19 | self._ui = Ui_CheckStatusDialog() 20 | self._ui.setupUi(self) 21 | self._ui.labelCheckTitle.setText('') 22 | 23 | self._highlighter = SyntaxHighlighter(self._ui.plainTextEditScreen.document()) 24 | 25 | self._options = options 26 | self._wizard_tool = False 27 | self._venv = False 28 | self._vcs = False 29 | 30 | def showEvent(self, *args, **kwargs): 31 | print("running checks again.") 32 | QtCore.QTimer.singleShot(0, self._run_checks) 33 | return QtWidgets.QDialog.showEvent(self, *args, **kwargs) 34 | 35 | def checked_ok(self, tool): 36 | if tool == WIZARD_TOOL_STRING: 37 | return self._wizard_tool 38 | elif tool == VIRTUAL_ENVIRONMENT_STRING: 39 | return self._venv 40 | elif tool == PMR_TOOL_STRING: 41 | return self._vcs 42 | 43 | return False 44 | 45 | def _run_checks(self): 46 | options = self._options 47 | checks_wizard = WizardToolChecks(options) 48 | self._wizard_tool = self._handle_check(checks_wizard, WIZARD_TOOL_STRING) 49 | checks_vcs = VCSChecks(options) 50 | self._vcs = self._handle_check(checks_vcs, PMR_TOOL_STRING) 51 | self._ui.labelCheckTitle.setText('All Checks Complete') 52 | 53 | def _handle_check(self, check, title): 54 | output = '' # self._ui.plainTextEditScreen.document().toPlainText() 55 | result = check.doCheck() 56 | self._ui.labelCheckTitle.setText(title) 57 | if result: 58 | output += 'Success: {0}\n'.format(title) 59 | else: 60 | output += 'Failure: {0}\n'.format(title) 61 | output += check.report() + '\n' 62 | self._ui.plainTextEditScreen.appendPlainText(output) # labelCheckOutput.setText(output) 63 | 64 | return result 65 | 66 | -------------------------------------------------------------------------------- /src/mapclient/view/dialogs/checkstatus/ui/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/dialogs/checkstatus/ui/__init__.py -------------------------------------------------------------------------------- /src/mapclient/view/dialogs/error/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/dialogs/error/__init__.py -------------------------------------------------------------------------------- /src/mapclient/view/dialogs/error/errordialog.py: -------------------------------------------------------------------------------- 1 | from urllib.parse import quote_plus 2 | 3 | from PySide6 import QtWidgets 4 | 5 | from mapclient.view.dialogs.reportissue.utils import create_github_issue 6 | 7 | 8 | class ErrorDialog(QtWidgets.QDialog): 9 | def __init__(self, title, text, parent=None): 10 | super().__init__(parent=parent) 11 | self._text = text 12 | 13 | critical_icon = QtWidgets.QMessageBox.standardIcon(QtWidgets.QMessageBox.Icon.Critical) 14 | layout = QtWidgets.QVBoxLayout() 15 | 16 | # Create and add the icon. 17 | critical_icon_label = QtWidgets.QLabel() 18 | critical_icon_label.setPixmap(critical_icon) 19 | layout.addWidget(critical_icon_label) 20 | 21 | # Create text. 22 | label = QtWidgets.QLabel(text) 23 | label.setWordWrap(True) 24 | layout.addWidget(label) 25 | 26 | # Create buttons. 27 | button_layout = QtWidgets.QHBoxLayout() 28 | github_issue_button = QtWidgets.QPushButton("Submit GitHub Issue") 29 | spacer = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding) 30 | ok_button = QtWidgets.QPushButton("OK") 31 | button_layout.addWidget(github_issue_button) 32 | button_layout.addSpacerItem(spacer) 33 | button_layout.addWidget(ok_button) 34 | layout.addLayout(button_layout) 35 | ok_button.clicked.connect(self.accept) 36 | github_issue_button.clicked.connect(self._create_github_issue) 37 | 38 | self.setWindowTitle(title) 39 | self.setWindowIcon(critical_icon) 40 | self.setLayout(layout) 41 | 42 | def _create_github_issue(self): 43 | text = "\n\n```\n" + self._text + "```" 44 | create_github_issue(quote_plus(text)) 45 | -------------------------------------------------------------------------------- /src/mapclient/view/dialogs/log/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/dialogs/log/__init__.py -------------------------------------------------------------------------------- /src/mapclient/view/dialogs/log/loadlogsession.py: -------------------------------------------------------------------------------- 1 | """ 2 | MAP Client, a program to generate detailed musculoskeletal models for OpenSim. 3 | Copyright (C) 2012 University of Auckland 4 | 5 | This file is part of MAP Client. (http://launchpad.net/mapclient) 6 | 7 | MAP Client is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | MAP Client is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with MAP Client. If not, see .. 19 | """ 20 | from PySide6.QtWidgets import QDialog, QFileDialog, QMessageBox 21 | 22 | from mapclient.view.dialogs.log.ui.ui_loadlogsession import Ui_LoadWindow 23 | from mapclient.settings.general import get_log_directory 24 | 25 | 26 | class LoadLogSession(QDialog): 27 | """ 28 | Load a log record from a previous session. 29 | """ 30 | 31 | def __init__(self, parent=None): 32 | QDialog.__init__(self, parent) 33 | self._ui = Ui_LoadWindow() 34 | self._ui.setupUi(self) 35 | self._makeConnections() 36 | 37 | def _makeConnections(self): 38 | self._ui.searchButton.clicked.connect(self.findLogSession) 39 | self._ui.loadButton.clicked.connect(self.validateSelection) 40 | 41 | def findLogSession(self): 42 | previousSession = QFileDialog.getOpenFileName(self, dir=get_log_directory(), \ 43 | filter='Log Files (logging_record.log.* logging_record.log)', caption='Select Previous Session', options=QFileDialog.DontResolveSymlinks | QFileDialog.ReadOnly) 44 | if len(previousSession) > 0 and len(self._ui.lineEdit.text()) == 0: 45 | self._ui.lineEdit.insert(previousSession[0]) 46 | else: 47 | self._ui.lineEdit.clear() 48 | self._ui.lineEdit.insert(previousSession[0]) 49 | 50 | def validateSelection(self): 51 | if len(self._ui.lineEdit.text()) == 0: 52 | QMessageBox.warning(self, 'Error', '\n No file selected!\t', QMessageBox.Ok) 53 | else: 54 | self.accept() 55 | 56 | def getLogSession(self): 57 | """ 58 | Returns the chosen log file. 59 | """ 60 | return self._ui.lineEdit.text() 61 | 62 | -------------------------------------------------------------------------------- /src/mapclient/view/dialogs/log/logdetails.py: -------------------------------------------------------------------------------- 1 | """ 2 | MAP Client, a program to generate detailed musculoskeletal models for OpenSim. 3 | Copyright (C) 2012 University of Auckland 4 | 5 | This file is part of MAP Client. (http://launchpad.net/mapclient) 6 | 7 | MAP Client is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | MAP Client is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with MAP Client. If not, see .. 19 | """ 20 | from PySide6.QtWidgets import QDialog, QTableWidgetItem, QLabel 21 | 22 | from mapclient.view.dialogs.log.ui.ui_logdetails import Ui_LogDetails 23 | 24 | 25 | class LogDetails(QDialog): 26 | """ 27 | Load details dialog to present the user with more detailed information about an individual recorded log. 28 | """ 29 | 30 | def __init__(self, parent=None): 31 | QDialog.__init__(self, parent) 32 | self._ui = Ui_LogDetails() 33 | self._ui.setupUi(self) 34 | 35 | def fillTable(self, log_details): 36 | self._ui.detailedTable.setRowCount(5) 37 | self._ui.detailedTable.setColumnCount(1) 38 | 39 | for row, information in enumerate(log_details): 40 | if row == 4: 41 | label = QLabel(information) 42 | self._ui.detailedTable.setCellWidget(row, 0, label) 43 | else: 44 | self._ui.detailedTable.setItem(row, 0, QTableWidgetItem(information)) 45 | 46 | self._ui.detailedTable.resizeColumnsToContents() 47 | self._ui.detailedTable.resizeRowsToContents() 48 | -------------------------------------------------------------------------------- /src/mapclient/view/dialogs/log/ui/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/dialogs/log/ui/__init__.py -------------------------------------------------------------------------------- /src/mapclient/view/dialogs/reportissue/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/dialogs/reportissue/__init__.py -------------------------------------------------------------------------------- /src/mapclient/view/dialogs/reportissue/reportissuedialog.py: -------------------------------------------------------------------------------- 1 | from PySide6 import QtWidgets 2 | 3 | from mapclient.core.utils import is_mapping_tools 4 | from mapclient.view.dialogs.reportissue.utils import create_github_issue, create_wrike_ticket 5 | from mapclient.view.dialogs.reportissue.ui.ui_reportissuedialog import Ui_ReportIssueDialog 6 | 7 | 8 | class ReportIssueDialog(QtWidgets.QDialog): 9 | """ 10 | Dialog with instructions on how and where to report issues in the MAP-Client. 11 | """ 12 | 13 | def __init__(self, parent=None): 14 | QtWidgets.QDialog.__init__(self, parent) 15 | self._ui = Ui_ReportIssueDialog() 16 | self._ui.setupUi(self) 17 | self._make_connections() 18 | self._check_variant() 19 | 20 | def _make_connections(self): 21 | self._ui.github_issue_button.clicked.connect(_create_github_issue) 22 | self._ui.wrike_ticket_button.clicked.connect(create_wrike_ticket) 23 | 24 | def _check_variant(self): 25 | if not is_mapping_tools(): 26 | self._ui.wrike_description.hide() 27 | self._ui.wrike_ticket_button.hide() 28 | 29 | 30 | def _create_github_issue(): 31 | create_github_issue() 32 | -------------------------------------------------------------------------------- /src/mapclient/view/dialogs/reportissue/utils.py: -------------------------------------------------------------------------------- 1 | import webbrowser 2 | 3 | 4 | def create_github_issue(text=""): 5 | """ 6 | Open the url for creating a new GitHub issue in the MAP-Client repository and auto-fill the issue description with the text supplied. 7 | """ 8 | url = "https://github.com/MusculoskeletalAtlasProject/mapclient/issues/new" 9 | url += "?body=" + text 10 | webbrowser.open(url) 11 | 12 | 13 | def create_wrike_ticket(): 14 | url = "https://www.wrike.com/form/eyJhY2NvdW50SWQiOjMyMDM1ODgsInRhc2tGb3JtSWQiOjU5NTQxOH0JNDg2ODkwNzc5NjU5NAlmODVjYjQ4MTAyYTU2MjdjMmY5ZWQwZGMyMjc5OTEzZTljZGFiZWRjYmY2MmIyZDRjZmVmZmMxNmYwNGU2MzEy" 15 | webbrowser.open(url) 16 | -------------------------------------------------------------------------------- /src/mapclient/view/dialogs/selfclosing/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/dialogs/selfclosing/__init__.py -------------------------------------------------------------------------------- /src/mapclient/view/dialogs/selfclosing/messagebox.py: -------------------------------------------------------------------------------- 1 | 2 | from PySide6 import QtWidgets, QtCore 3 | 4 | 5 | class MessageBox(QtWidgets.QMessageBox): 6 | def __init__(self, icon, title, text, buttons, parent=None, close_after=None): 7 | """ 8 | An extension of the QtWidgets.QMessageBox class that automatically closes itself after a set number of seconds. This class allows the user 9 | to pass an additional argument (close_after) to specify how long the MessageBox should be displayed for before it closes. 10 | The close_after parameter is specified in units of seconds. If the close_after argument is set to zero, the MessageBox 11 | will not be displayed. 12 | 13 | Parameters 14 | ---------- 15 | icon: PySide6.QtWidgets.QMessageBox.Icon 16 | title: str 17 | text: str 18 | buttons: PySide6.QtWidgets.QMessageBox.StandardButtons 19 | parent: PySide6.QtWidgets.QWidget, optional 20 | close_after: float, optional 21 | """ 22 | super().__init__(icon, title, text, buttons, parent=parent) 23 | self._close_after = close_after * 1000 24 | QtCore.QTimer.singleShot(self._close_after, self.accept) 25 | 26 | def exec_(self): 27 | # Only display the MessageBox if the close timer is greater than 0. 28 | if self._close_after > 0: 29 | super().exec() 30 | -------------------------------------------------------------------------------- /src/mapclient/view/managers/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/managers/__init__.py -------------------------------------------------------------------------------- /src/mapclient/view/managers/options/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/managers/options/__init__.py -------------------------------------------------------------------------------- /src/mapclient/view/managers/options/ui/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/managers/options/ui/__init__.py -------------------------------------------------------------------------------- /src/mapclient/view/managers/package/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/managers/package/__init__.py -------------------------------------------------------------------------------- /src/mapclient/view/managers/package/ui/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/managers/package/ui/__init__.py -------------------------------------------------------------------------------- /src/mapclient/view/managers/plugins/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/managers/plugins/__init__.py -------------------------------------------------------------------------------- /src/mapclient/view/managers/plugins/manager.py: -------------------------------------------------------------------------------- 1 | """ 2 | Created on May 19, 2015 3 | 4 | @author: hsorby 5 | """ 6 | -------------------------------------------------------------------------------- /src/mapclient/view/managers/plugins/plugindownloader.py: -------------------------------------------------------------------------------- 1 | """ 2 | MAP Client, a program to generate detailed musculoskeletal models for OpenSim. 3 | Copyright (C) 2012 University of Auckland 4 | 5 | This file is part of MAP Client. (http://launchpad.net/mapclient) 6 | 7 | MAP Client is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | MAP Client is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with MAP Client. If not, see .. 19 | """ 20 | from PySide6.QtWidgets import QDialog 21 | 22 | from mapclient.view.managers.plugins.ui.ui_plugindownloader import Ui_pluginDownloader 23 | 24 | 25 | class PluginDownloader(QDialog): 26 | """ 27 | Dialog showing the plugins required to run the desired workflow from PMR. 28 | """ 29 | 30 | def __init__(self, parent=None): 31 | QDialog.__init__(self, parent) 32 | self._ui = Ui_pluginDownloader() 33 | self._ui.setupUi(self) 34 | self._downloadPlugins = True 35 | self._downloadDependencies = True 36 | 37 | def fillPluginTable(self, plugin_information): 38 | if not plugin_information: 39 | self._ui.pluginDownload.setEnabled(False) 40 | self._ui.requiredPlugins.setEnabled(False) 41 | self._downloadPlugins = False 42 | for plugin in plugin_information: 43 | self._ui.requiredPlugins.addItem(plugin) 44 | item = self._ui.requiredPlugins.item(self._ui.requiredPlugins.count() - 1) 45 | plugin_author = plugin_information[plugin]['author'] if plugin_information[plugin]['author'] else '' 46 | plugin_version = plugin_information[plugin]['version'] if plugin_information[plugin]['version'] else '' 47 | plugin_location = plugin_information[plugin]['location'] if plugin_information[plugin]['location'] else '' 48 | item.setToolTip('Author: ' + plugin_author + ', Version: ' + \ 49 | plugin_version + ', Location: ' + plugin_location) 50 | 51 | def fillDependenciesTable(self, dependency_information): 52 | if not dependency_information: 53 | self._ui.dependencyDownload.setEnabled(False) 54 | self._ui.requiredDependencies.setEnabled(False) 55 | self._downloadDependencies = False 56 | for dependency in dependency_information: 57 | self._ui.requiredDependencies.addItem(dependency) 58 | 59 | def downloadDependencies(self): 60 | return self._ui.dependencyDownload.isChecked() 61 | 62 | def installMissingPlugins(self): 63 | return self._ui.pluginDownload.isChecked() 64 | -------------------------------------------------------------------------------- /src/mapclient/view/managers/plugins/qt/pluginerrors.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | PluginErrors 4 | 5 | 6 | 7 | 0 8 | 0 9 | 351 10 | 319 11 | 12 | 13 | 14 | Plugin Errors 15 | 16 | 17 | 18 | :/mapclient/images/icon-app.png:/mapclient/images/icon-app.png 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | true 28 | 29 | 30 | 31 | 32 | 33 | 34 | QAbstractItemView::NoEditTriggers 35 | 36 | 37 | QAbstractItemView::ExtendedSelection 38 | 39 | 40 | Qt::ElideMiddle 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | Don't show me this again 50 | 51 | 52 | 53 | 54 | 55 | 56 | Qt::Horizontal 57 | 58 | 59 | 60 | 288 61 | 20 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | Ignore 70 | 71 | 72 | 73 | 74 | 75 | 76 | OK 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | pushButton 90 | clicked() 91 | PluginErrors 92 | close() 93 | 94 | 95 | 602 96 | 228 97 | 98 | 99 | 324 100 | 124 101 | 102 | 103 | 104 | 105 | 106 | -------------------------------------------------------------------------------- /src/mapclient/view/managers/plugins/qt/pluginprogress.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | DownloadProgress 4 | 5 | 6 | 7 | 0 8 | 0 9 | 300 10 | 108 11 | 12 | 13 | 14 | 15 | 300 16 | 90 17 | 18 | 19 | 20 | 21 | 300 22 | 108 23 | 24 | 25 | 26 | Loading Plugins 27 | 28 | 29 | 30 | :/mapclient/images/icon-app.png:/mapclient/images/icon-app.png 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 0 44 | 45 | 46 | false 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | Qt::Horizontal 56 | 57 | 58 | 59 | 40 60 | 20 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | Cancel 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /src/mapclient/view/managers/plugins/ui/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/managers/plugins/ui/__init__.py -------------------------------------------------------------------------------- /src/mapclient/view/qt/images/.directory: -------------------------------------------------------------------------------- 1 | [Dolphin] 2 | PreviewsShown=true 3 | Timestamp=2015,2,23,14,13,57 4 | Version=3 5 | -------------------------------------------------------------------------------- /src/mapclient/view/qt/images/about_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/qt/images/about_logo.png -------------------------------------------------------------------------------- /src/mapclient/view/qt/images/cancel_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/qt/images/cancel_256.png -------------------------------------------------------------------------------- /src/mapclient/view/qt/images/clipboard_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/qt/images/clipboard_icon.png -------------------------------------------------------------------------------- /src/mapclient/view/qt/images/configure_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/qt/images/configure_green.png -------------------------------------------------------------------------------- /src/mapclient/view/qt/images/configure_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/qt/images/configure_red.png -------------------------------------------------------------------------------- /src/mapclient/view/qt/images/cross.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/qt/images/cross.jpg -------------------------------------------------------------------------------- /src/mapclient/view/qt/images/default_step_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/qt/images/default_step_icon.png -------------------------------------------------------------------------------- /src/mapclient/view/qt/images/default_step_icon_original.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/qt/images/default_step_icon_original.png -------------------------------------------------------------------------------- /src/mapclient/view/qt/images/default_workflow_step.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/qt/images/default_workflow_step.png -------------------------------------------------------------------------------- /src/mapclient/view/qt/images/default_workflow_step_v1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/qt/images/default_workflow_step_v1.png -------------------------------------------------------------------------------- /src/mapclient/view/qt/images/download_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/qt/images/download_icon.png -------------------------------------------------------------------------------- /src/mapclient/view/qt/images/downloaded_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/qt/images/downloaded_icon.png -------------------------------------------------------------------------------- /src/mapclient/view/qt/images/editcopy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/qt/images/editcopy.png -------------------------------------------------------------------------------- /src/mapclient/view/qt/images/editcut.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/qt/images/editcut.png -------------------------------------------------------------------------------- /src/mapclient/view/qt/images/editdelete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/qt/images/editdelete.png -------------------------------------------------------------------------------- /src/mapclient/view/qt/images/editpaste.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/qt/images/editpaste.png -------------------------------------------------------------------------------- /src/mapclient/view/qt/images/exclamation_mark_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/qt/images/exclamation_mark_red.png -------------------------------------------------------------------------------- /src/mapclient/view/qt/images/green_tick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/qt/images/green_tick.png -------------------------------------------------------------------------------- /src/mapclient/view/qt/images/grid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/qt/images/grid.png -------------------------------------------------------------------------------- /src/mapclient/view/qt/images/icon-app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/qt/images/icon-app.png -------------------------------------------------------------------------------- /src/mapclient/view/qt/images/icon-arrow-right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/qt/images/icon-arrow-right.png -------------------------------------------------------------------------------- /src/mapclient/view/qt/images/icon-gear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/qt/images/icon-gear.png -------------------------------------------------------------------------------- /src/mapclient/view/qt/images/icon-port.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/qt/images/icon-port.png -------------------------------------------------------------------------------- /src/mapclient/view/qt/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/qt/images/icon.png -------------------------------------------------------------------------------- /src/mapclient/view/qt/images/loading_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/qt/images/loading_icon.png -------------------------------------------------------------------------------- /src/mapclient/view/qt/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/qt/images/logo.png -------------------------------------------------------------------------------- /src/mapclient/view/qt/images/modified_repo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/qt/images/modified_repo.png -------------------------------------------------------------------------------- /src/mapclient/view/qt/images/redo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/qt/images/redo.png -------------------------------------------------------------------------------- /src/mapclient/view/qt/images/round_error_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/qt/images/round_error_logo.png -------------------------------------------------------------------------------- /src/mapclient/view/qt/images/undo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/qt/images/undo.png -------------------------------------------------------------------------------- /src/mapclient/view/qt/images/yellow_black_exclamation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/qt/images/yellow_black_exclamation.png -------------------------------------------------------------------------------- /src/mapclient/view/qt/mainwindow.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 800 10 | 600 11 | 12 | 13 | 14 | MAP Client 15 | 16 | 17 | 18 | :/mapclient/images/icon-app.png:/mapclient/images/icon-app.png 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | &About 34 | 35 | 36 | 37 | 38 | &Quit 39 | 40 | 41 | Quit the application 42 | 43 | 44 | Ctrl+Q 45 | 46 | 47 | 48 | 49 | Plugin &Manager 50 | 51 | 52 | 53 | 54 | &PMR 55 | 56 | 57 | 58 | 59 | &Annotation 60 | 61 | 62 | 63 | 64 | Plugin Wi&zard 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /src/mapclient/view/qt/progressdialog.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | ProgressDialog 4 | 5 | 6 | 7 | 0 8 | 0 9 | 300 10 | 108 11 | 12 | 13 | 14 | 15 | 0 16 | 0 17 | 18 | 19 | 20 | 21 | 16777215 22 | 16777215 23 | 24 | 25 | 26 | Progress 27 | 28 | 29 | 30 | :/mapclient/images/icon-app.png:/mapclient/images/icon-app.png 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 0 44 | 45 | 46 | false 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | Qt::Horizontal 56 | 57 | 58 | 59 | 40 60 | 20 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | Cancel 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /src/mapclient/view/qt/resources.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | images/icon.png 4 | images/round_error_logo.png 5 | images/about_logo.png 6 | images/cross.jpg 7 | images/icon-app.png 8 | images/logo.png 9 | images/icon-arrow-right.png 10 | images/green_tick.png 11 | images/download_icon.png 12 | images/downloaded_icon.png 13 | images/loading_icon.png 14 | 15 | 16 | images/cancel_256.png 17 | images/clipboard_icon.png 18 | images/configure_red.png 19 | images/yellow_black_exclamation.png 20 | images/default_step_icon.png 21 | images/default_workflow_step.png 22 | images/configure_green.png 23 | images/icon-port.png 24 | images/grid.png 25 | images/modified_repo.png 26 | 27 | 28 | -------------------------------------------------------------------------------- /src/mapclient/view/ui/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/ui/__init__.py -------------------------------------------------------------------------------- /src/mapclient/view/ui/ui_progressdialog.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | ################################################################################ 4 | ## Form generated from reading UI file 'progressdialog.ui' 5 | ## 6 | ## Created by: Qt User Interface Compiler version 6.7.0 7 | ## 8 | ## WARNING! All changes made in this file will be lost when recompiling UI file! 9 | ################################################################################ 10 | 11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, 12 | QMetaObject, QObject, QPoint, QRect, 13 | QSize, QTime, QUrl, Qt) 14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, 15 | QFont, QFontDatabase, QGradient, QIcon, 16 | QImage, QKeySequence, QLinearGradient, QPainter, 17 | QPalette, QPixmap, QRadialGradient, QTransform) 18 | from PySide6.QtWidgets import (QApplication, QHBoxLayout, QLabel, QProgressBar, 19 | QPushButton, QSizePolicy, QSpacerItem, QVBoxLayout, 20 | QWidget) 21 | import resources_rc 22 | 23 | class Ui_ProgressDialog(object): 24 | def setupUi(self, ProgressDialog): 25 | if not ProgressDialog.objectName(): 26 | ProgressDialog.setObjectName(u"ProgressDialog") 27 | ProgressDialog.resize(300, 108) 28 | ProgressDialog.setMinimumSize(QSize(0, 0)) 29 | ProgressDialog.setMaximumSize(QSize(16777215, 16777215)) 30 | icon = QIcon() 31 | icon.addFile(u":/mapclient/images/icon-app.png", QSize(), QIcon.Normal, QIcon.Off) 32 | ProgressDialog.setWindowIcon(icon) 33 | self.verticalLayout = QVBoxLayout(ProgressDialog) 34 | self.verticalLayout.setObjectName(u"verticalLayout") 35 | self.label = QLabel(ProgressDialog) 36 | self.label.setObjectName(u"label") 37 | 38 | self.verticalLayout.addWidget(self.label) 39 | 40 | self.progressBar = QProgressBar(ProgressDialog) 41 | self.progressBar.setObjectName(u"progressBar") 42 | self.progressBar.setValue(0) 43 | self.progressBar.setTextVisible(False) 44 | 45 | self.verticalLayout.addWidget(self.progressBar) 46 | 47 | self.horizontalLayout = QHBoxLayout() 48 | self.horizontalLayout.setObjectName(u"horizontalLayout") 49 | self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) 50 | 51 | self.horizontalLayout.addItem(self.horizontalSpacer) 52 | 53 | self.cancelDownload = QPushButton(ProgressDialog) 54 | self.cancelDownload.setObjectName(u"cancelDownload") 55 | 56 | self.horizontalLayout.addWidget(self.cancelDownload) 57 | 58 | 59 | self.verticalLayout.addLayout(self.horizontalLayout) 60 | 61 | 62 | self.retranslateUi(ProgressDialog) 63 | 64 | QMetaObject.connectSlotsByName(ProgressDialog) 65 | # setupUi 66 | 67 | def retranslateUi(self, ProgressDialog): 68 | ProgressDialog.setWindowTitle(QCoreApplication.translate("ProgressDialog", u"Progress", None)) 69 | self.label.setText("") 70 | self.cancelDownload.setText(QCoreApplication.translate("ProgressDialog", u"Cancel", None)) 71 | # retranslateUi 72 | 73 | -------------------------------------------------------------------------------- /src/mapclient/view/workflow/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/workflow/__init__.py -------------------------------------------------------------------------------- /src/mapclient/view/workflow/qt/workflowdockwidget.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | DockWidget 4 | 5 | 6 | 7 | 0 8 | 0 9 | 883 10 | 505 11 | 12 | 13 | 14 | Wor&kflow Manager 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | Filter 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | Qt::Horizontal 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | StepTree 50 | QWidget 51 |
    mapclient.widgets.steptree
    52 | 1 53 |
    54 |
    55 | 56 | 57 |
    58 | -------------------------------------------------------------------------------- /src/mapclient/view/workflow/ui/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/mapclient/view/workflow/ui/__init__.py -------------------------------------------------------------------------------- /src/requirements.txt: -------------------------------------------------------------------------------- 1 | https://github.com/PMR2/pmr2.wfctrl/archive/v0.3.0.zip 2 | -------------------------------------------------------------------------------- /src/setup.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import codecs 4 | import os 5 | import re 6 | 7 | from setuptools import setup 8 | from setuptools import find_packages 9 | 10 | here = os.path.abspath(os.path.dirname(__file__)) 11 | 12 | 13 | def read(*parts): 14 | with codecs.open(os.path.join(here, *parts), 'r') as fp: 15 | return fp.read() 16 | 17 | 18 | def find_version(*file_paths): 19 | version_file = read(*file_paths) 20 | version_match = re.search(r"^__version__ = ['\"]([^'\"]*)['\"]", 21 | version_file, re.M) 22 | if version_match: 23 | return version_match.group(1) 24 | raise RuntimeError("Unable to find version string.") 25 | 26 | 27 | with open('README.rst') as f: 28 | readme = f.read() 29 | 30 | # Define the list of requirements 31 | package_dependencies = [ 32 | 'PySide6 >= 6.5, != 6.7.0', 33 | 'rdflib', 34 | 'virtualenv', 35 | 'requests', 36 | 'python-dateutil', 37 | 'dulwich != 0.22.0', 38 | 'pmr2.wfctrl >= 0.6.0', 39 | 'pmr2.client >= 0.2', 40 | 'packaging', 41 | 'filelock', 42 | 'psutil >= 6.0', 43 | 'PyGithub', 44 | 'numpy', 45 | ] 46 | 47 | extras_require = { 48 | 'dev': [ 49 | 'PyInstaller', 50 | ] 51 | } 52 | 53 | packages = find_packages(exclude=['tests', 'tests.*', 'mapclientplugins', 'mapclientplugins.*', 'utils', 'utils.*']) 54 | packages.append('mapclient.tools.pluginwizard.qt.images') 55 | 56 | setup( 57 | name='mapclient', 58 | version=find_version("mapclient", "settings", "version.py"), 59 | description='A framework for managing and sharing workflows.', 60 | long_description=readme, 61 | long_description_content_type='text/x-rst', 62 | author='MAP Client Developers', 63 | author_email='mapclient-devs@physiomeproject.org', 64 | url='https://github.com/MusculoskeletalAtlasProject/mapclient', 65 | # namespace_packages=['mapclientplugins', ], 66 | packages=packages, 67 | package_data={'mapclient.tools.annotation': ['annotation.voc'], 'mapclient.tools.osxapp': ['mapclient.icns'], 68 | 'mapclient.tools.pluginwizard.qt.images': 69 | ['data-sink.png', 'data-source.png', 'default.png', 'fitting.png', 'image-processing.png', 70 | 'model-viewer.png', 'morphometric.png', 'registration.png', 'segmentation.png', 'utility.png']}, 71 | # py_modules=['mapclient.mapclient'], 72 | include_package_data=True, 73 | entry_points={ 74 | 'gui_scripts': ['mapclient=mapclient.application:main'], 75 | 'console_scripts': ['mapclient_console=mapclient.application:main'], 76 | }, 77 | install_requires=package_dependencies, 78 | extras_require=extras_require, 79 | ) 80 | -------------------------------------------------------------------------------- /src/setuputils.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | 4 | def which(name, flags=os.X_OK): 5 | """Search PATH for executable files with the given name. 6 | 7 | On newer versions of MS-Windows, the PATHEXT environment variable will be 8 | set to the list of file extensions for files considered executable. This 9 | will normally include things like ".EXE". This fuction will also find files 10 | with the given name ending with any of these extensions. 11 | 12 | On MS-Windows the only flag that has any meaning is os.F_OK. Any other 13 | flags will be ignored. 14 | 15 | @type name: C{str} 16 | @param name: The name for which to search. 17 | 18 | @type flags: C{int} 19 | @param flags: Arguments to L{os.access}. 20 | 21 | @rtype: C{list} 22 | @param: A list of the full paths to files found, in the 23 | order in which they were found. 24 | """ 25 | result = [] 26 | exts = filter(None, os.environ.get('PATHEXT', '').split(os.pathsep)) 27 | path = os.environ.get('PATH', None) 28 | if path is None: 29 | return result 30 | 31 | for p in os.environ.get('PATH', '').split(os.pathsep): 32 | p = os.path.join(p, name) 33 | if os.access(p, flags): 34 | result.append(p) 35 | for e in exts: 36 | pext = p + e 37 | if os.access(pext, flags): 38 | result.append(pext) 39 | return result 40 | 41 | -------------------------------------------------------------------------------- /src/skeletonplugin/skeletonstep/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | MAP Client, a program to generate detailed musculoskeletal models for OpenSim. 3 | Copyright (C) 2012 University of Auckland 4 | 5 | This file is part of MAP Client. (http://launchpad.net/mapclient) 6 | 7 | MAP Client is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | MAP Client is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with MAP Client. If not, see .. 19 | """ 20 | __version__ = '0.1.0' 21 | __author__ = 'Xxxx Yyyyy' 22 | __stepname__ = 'Skeleton' 23 | __location__ = '' 24 | 25 | from mapclientplugins.skeletonstep import step 26 | -------------------------------------------------------------------------------- /src/skeletonplugin/skeletonstep/step.py: -------------------------------------------------------------------------------- 1 | """ 2 | MAP Client, a program to generate detailed musculoskeletal models for OpenSim. 3 | Copyright (C) 2012 University of Auckland 4 | 5 | This file is part of MAP Client. (http://launchpad.net/mapclient) 6 | 7 | MAP Client is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | MAP Client is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with MAP Client. If not, see .. 19 | """ 20 | 21 | from mapclient.mountpoints.workflowstep import WorkflowStepMountPoint 22 | 23 | class SkeletonStep(WorkflowStepMountPoint): 24 | """ 25 | Skeleton step which is intended to be used as a starting point 26 | for new steps. 27 | """ 28 | 29 | def __init__(self, location): 30 | super(SkeletonStep, self).__init__('Skeleton', location) 31 | 32 | def configure(self): 33 | pass 34 | 35 | def getIdentifier(self): 36 | return 'skeleton' 37 | 38 | def setIdentifier(self, identifier): 39 | pass 40 | 41 | def serialize(self): 42 | pass 43 | 44 | def deserialize(self, string): 45 | pass 46 | 47 | -------------------------------------------------------------------------------- /src/utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MusculoskeletalAtlasProject/mapclient/b167e440c43894ff16826a2078d19209aa47d836/src/utils/__init__.py -------------------------------------------------------------------------------- /src/utils/createwindowsapplicationinstaller.py: -------------------------------------------------------------------------------- 1 | import os 2 | import subprocess 3 | import tempfile 4 | 5 | from mapclient.settings import version as app_version 6 | 7 | 8 | class ReplaceOnlyDict(dict): 9 | 10 | def __missing__(self, key): 11 | return '{' + key + '}' 12 | 13 | 14 | def run_build(pyi_config, spec_file, **kwargs): 15 | import PyInstaller.building.build_main 16 | PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs) 17 | 18 | 19 | def run_command(cmd): 20 | p = subprocess.Popen(cmd, stdout=subprocess.PIPE, universal_newlines=True) 21 | for stdout_line in iter(p.stdout.readline, ''): 22 | yield stdout_line 23 | 24 | return_code = p.wait() 25 | yield 'command returned with value: %s' % return_code 26 | 27 | 28 | def run_makensis(repo_root_dir): 29 | if not os.path.exists(os.path.join(repo_root_dir, 'package')): 30 | os.mkdir(os.path.join(repo_root_dir, 'package')) 31 | 32 | nsis_exe = os.path.join(os.environ['PROGRAMFILES(X86)'], 'NSIS', 'BIN', 'makensis.exe') 33 | if os.path.exists(nsis_exe): 34 | # Create NSIS script from template 35 | with tempfile.NamedTemporaryFile(delete=False) as outputfile: 36 | with open(os.path.join(repo_root_dir, 'res', 'win', 'nsis.nsi.template')) as f: 37 | contents = f.read() 38 | 39 | match_keys = ReplaceOnlyDict(map_client_version=app_version.__version__, 40 | dist_dir=os.path.join(repo_root_dir, 'dist'), 41 | win_res_dir=os.path.join(repo_root_dir, 'res', 'win'), 42 | package_dir=os.path.join(repo_root_dir, 'package')) 43 | formatted_contents = contents.format_map(match_keys) 44 | outputfile.write(formatted_contents.encode()) 45 | outputfile.flush() 46 | # os.chdir(os.path.join(repo_root_dir, 'res', 'win')) 47 | for line in run_command([nsis_exe, outputfile.name]): 48 | print(line.strip()) 49 | 50 | if os.path.isfile(outputfile.name): 51 | os.remove(outputfile.name) 52 | 53 | 54 | if __name__ == '__main__': 55 | ''' 56 | Create a Windows application installer with NSIS and pyinsatller. 57 | ''' 58 | abs_script_directory = os.path.realpath(os.path.dirname(__file__)) 59 | 60 | src_root_dir = os.path.realpath(os.path.join(abs_script_directory, '..')) 61 | repo_root_dir = os.path.realpath(os.path.join(src_root_dir, '..')) 62 | 63 | os.environ['MAPCLIENT_REPOROOT'] = repo_root_dir 64 | options = { 65 | 'noconfirm': True, 66 | 'distpath': repo_root_dir, 67 | 'workpath': repo_root_dir, 68 | 'clean_build': True, 69 | } 70 | 71 | run_build(None, os.path.join(repo_root_dir, 'res', 'win', 'mapclient_pyinstaller.spec'), noconfirm=options['noconfirm'], 72 | distpath=options['distpath'], workpath=options['workpath'], clean_build=options['clean_build']) 73 | 74 | run_makensis(repo_root_dir) 75 | -------------------------------------------------------------------------------- /src/utils/pysideuicrunner.py: -------------------------------------------------------------------------------- 1 | import sys 2 | 3 | import os 4 | from pysideuic import compileUi 5 | 6 | 7 | if __name__ == '__main__': 8 | ''' 9 | A '.ui' file is expected to be passed in as the first argument to this script. The file should be described 10 | relative to the src directory of the repository. The generated file will be output to a 'ui' directory at the same 11 | level as the input file and prefixed with 'ui_'. 12 | 13 | Script has been used with the following arguments: 14 | - mapclient/view/managers/options/qt/optionsdialog.ui 15 | ''' 16 | if len(sys.argv) > 1: 17 | ui_file = sys.argv[1] 18 | else: 19 | print('Error: must supply filename through the command line.') 20 | sys.exit(-1) 21 | 22 | file_basename = os.path.basename(ui_file) 23 | file_root_name = os.path.splitext(file_basename)[0] 24 | abs_script_directory = os.path.realpath(os.path.dirname(__file__)) 25 | 26 | src_root_dir = os.path.realpath(os.path.join(abs_script_directory, '..')) 27 | os.chdir(src_root_dir) 28 | abs_path_to_file = os.path.join(src_root_dir, ui_file) 29 | 30 | ui_file_directory = os.path.dirname(ui_file) 31 | ui_file_parent_directory = os.path.dirname(ui_file_directory) 32 | 33 | ui_file_output_directory = os.path.join(ui_file_parent_directory, 'ui') 34 | 35 | if not os.path.exists(os.path.join(src_root_dir, ui_file_output_directory)): 36 | print('Error: output directory "%s" does not exist.' % (os.path.join(src_root_dir, ui_file_output_directory))) 37 | sys.exit(-2) 38 | 39 | abs_path_to_ui_file = os.path.join(src_root_dir, ui_file_output_directory, 'ui_' + file_root_name + '.py') 40 | 41 | with open(ui_file, 'r') as f: 42 | with open(abs_path_to_ui_file, 'w') as g: 43 | print('Compiling ui file "%s" and saving in "%s".' % (abs_path_to_file, abs_path_to_ui_file)) 44 | compileUi(f, g, from_imports=True) 45 | --------------------------------------------------------------------------------